@@ -238,3 +238,70 @@ test_that("reverse_km_event_first() and reverse_km_cen_first() work as expected"
238238 extract_prodlim(mod , new_times )
239239 )
240240})
241+
242+
243+
244+ test_that(" brierScore() works on logical events #438" , {
245+ set.seed(739 )
246+ simjdat <- SimJointData(
247+ design = list (
248+ SimGroup(75 , " Arm-A" , " Study-X" ),
249+ SimGroup(75 , " Arm-B" , " Study-X" )
250+ ),
251+ survival = SimSurvivalExponential(
252+ lambda = 1 / 100 ,
253+ time_max = 2000
254+ ),
255+ longitudinal = SimLongitudinalRandomSlope(
256+ times = c(0 , 1 , 100 , 200 , 250 , 300 , 350 ),
257+ intercept = 30 ,
258+ sigma = 3 ,
259+ slope_mu = c(1 , 3 ),
260+ slope_sigma = 0.2 ,
261+ link_dsld = 0
262+ ),
263+ .silent = TRUE
264+ )
265+ dat_os <- simjdat @ survival
266+ dat_lm <- simjdat @ longitudinal
267+
268+ jm <- JointModel(
269+ survival = SurvivalExponential(
270+ lambda = prior_lognormal(log(1 / 100 ), 1 / 100 )
271+ )
272+ )
273+
274+ jdat <- DataJoint(
275+ subject = DataSubject(
276+ data = dat_os ,
277+ subject = " subject" ,
278+ arm = " arm" ,
279+ study = " study"
280+ ),
281+ survival = DataSurvival(
282+ data = dat_os ,
283+ formula = Surv(time , event ) ~ cov_cat + cov_cont
284+ )
285+ )
286+
287+ mp <- sampleStanModel(
288+ jm ,
289+ data = jdat ,
290+ iter_sampling = 100 ,
291+ iter_warmup = 150 ,
292+ chains = 2 ,
293+ refresh = 0 ,
294+ parallel_chains = 1
295+ )
296+
297+ t_grid <- c(1 , 30 , 45 , 60 , 425 , 750 )
298+ sq <- SurvivalQuantities(
299+ mp ,
300+ grid = GridFixed(times = t_grid ),
301+ type = " surv"
302+ )
303+ expected <- brierScore(sq )
304+ sq @ data @ survival @ data $ event <- as.logical(sq @ data @ survival @ data $ event )
305+ actual <- brierScore(sq )
306+ expect_equal(actual , expected )
307+ })
0 commit comments