This dMrs package is designed to fit survival data to the corresponding manuscript.
req_packs = c("sqldf","relsurv","ggplot2","data.table","dMrs")
for(pack in req_packs){
chk_pack = tryCatch(find.package(pack),
warning = function(ww){NULL},
error = function(ee){NULL})
if( !is.null(chk_pack) ){
library(pack,character.only = TRUE)
next
}
stop(sprintf("Install %s",pack))
}
Loading required package: gsubfn
Loading required package: proto
Loading required package: RSQLite
Loading required package: survival
The code below will load relsurv
’s working dataset
rdata
and import Slovenia’s latest ratetable from HMD.
time cens age sex year agegr
1 2657 1 68 female 1982-06-24 62-70
2 1097 1 63 female 1982-08-31 62-70
3 3764 1 60 male 1982-08-07 54-61
# Slovenia population death tables
female_fn = "./slovenia_female.txt"
male_fn = "./slovenia_male.txt"
slotab = transrate.hmd(female = female_fn,male = male_fn)
dimnames(slotab)
$age
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
[13] "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23"
[25] "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35"
[37] "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47"
[49] "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59"
[61] "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70" "71"
[73] "72" "73" "74" "75" "76" "77" "78" "79" "80" "81" "82" "83"
[85] "84" "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95"
[97] "96" "97" "98" "99" "100" "101" "102" "103" "104" "105" "106" "107"
[109] "108" "109" "110"
$year
[1] "1983" "1984" "1985" "1986" "1987" "1988" "1989" "1990" "1991" "1992"
[11] "1993" "1994" "1995" "1996" "1997" "1998" "1999" "2000" "2001" "2002"
[21] "2003" "2004" "2005" "2006" "2007" "2008" "2009" "2010" "2011" "2012"
[31] "2013" "2014" "2015" "2016" "2017" "2018" "2019"
$sex
[1] "male" "female"
Rate table with dimension(s): age year sex
, , sex = male
year
age 1983 1984 1985
0 3.890717e-05 4.168568e-05 4.315943e-05
1 2.985959e-06 3.643855e-06 2.821509e-06
2 9.036621e-07 9.310505e-07 9.584391e-07
, , sex = female
year
age 1983 1984 1985
0 3.452286e-05 3.297061e-05 2.701924e-05
1 4.164802e-06 1.807623e-06 8.488862e-07
2 2.492640e-06 7.941114e-07 1.013217e-06
[1] 1040 6
rdata$datediag_yr = as.Date(rdata$year)
rdata$datediag_yr = as.character(rdata$datediag_yr)
rdata$datediag_yr = sapply(rdata$datediag_yr,
function(xx) strsplit(xx,"-")[[1]][1])
rdata$datediag_yr = rdata$datediag_yr
table(rdata$datediag_yr)
1982 1983 1984 1985 1986
168 237 243 220 172
[1] "1983" "1984" "1985" "1986" "1987" "1988" "1989" "1990" "1991" "1992"
[11] "1993" "1994" "1995" "1996" "1997" "1998" "1999" "2000" "2001" "2002"
[21] "2003" "2004" "2005" "2006" "2007" "2008" "2009" "2010" "2011" "2012"
[31] "2013" "2014" "2015" "2016" "2017" "2018" "2019"
[1] 872 7
test = rs.surv(Surv(time,cens) ~ 1,
ratetable = slotab,data = rdata,
rmap = list(age = age*365.241))
str(test)
List of 14
$ n : int 872
$ time : num [1:804] 9 15 19 23 26 29 30 33 37 40 ...
$ n.risk : num [1:804] 872 871 870 869 868 867 866 865 864 862 ...
$ n.event : num [1:804] 1 1 1 1 1 1 1 1 2 1 ...
$ n.censor : num [1:804] 0 0 0 0 0 0 0 0 0 0 ...
$ std.err : num [1:804] 0.00115 0.00162 0.00199 0.0023 0.00258 ...
$ surv : num [1:804] 1 0.999 0.998 0.998 0.997 ...
$ lower : num [1:804] 0.997 0.996 0.995 0.993 0.992 ...
$ upper : num [1:804] 1 1 1 1 1 ...
$ conf.type: chr "log"
$ conf.int : num 0.95
$ method : int 1
$ call : language rs.surv(formula = Surv(time, cens) ~ 1, data = rdata, ratetable = slotab, rmap = list(age = age * 365.241))
$ type : chr "right"
- attr(*, "class")= chr [1:2] "survfit" "rs.surv"
COMP = data.frame(Time = test$time / 365.241,
SurvEst = test$surv,
SurvLow = test$lower,
SurvHigh = test$upper)
plot(COMP$Time,COMP$SurvEst,
xlab = "Time (yrs)",type = "l",
ylab = "Net Survival",main = "relsurv method",
ylim = c(min(COMP$SurvLow),1))
lines(COMP$Time,COMP$SurvLow,lty = 2)
lines(COMP$Time,COMP$SurvHigh,lty = 2)
Prep wDAT, working dataset’s initial fields.
wDAT = rdata[,c("datediag_yr","time","cens","age","sex")]
wDAT$delta = wDAT$cens
wDAT$datediag_yr = as.integer(wDAT$datediag_yr)
# time in years
wDAT$time = wDAT$time / 365.241
wDAT$age = as.integer(wDAT$age)
wDAT[1:5,]
datediag_yr time cens age sex delta
123 1983 11.4225949 1 56 male 1
124 1983 6.3492324 1 76 male 1
125 1983 0.8295892 1 61 male 1
126 1983 12.8791675 1 52 male 1
127 1983 10.4478960 1 82 male 1
Prep rDAT, the reference data.frame.
mm = fread(file = male_fn,data.table = FALSE)
ff = fread(file = female_fn,data.table = FALSE)
rDAT = rbind(data.frame(sex = "male",mm,stringsAsFactors = FALSE),
data.frame(sex = "female",ff,stringsAsFactors = FALSE))
rDAT[1:5,]
sex Year Age mx qx ax lx dx Lx Tx ex
1 male 1983 0 0.01429 0.01411 0.12 100000 1411 98759 6677791 66.78
2 male 1983 1 0.00109 0.00109 0.50 98589 107 98535 6579032 66.73
3 male 1983 2 0.00033 0.00033 0.50 98482 32 98465 6480497 65.80
4 male 1983 3 0.00070 0.00070 0.50 98449 69 98415 6382031 64.83
5 male 1983 4 0.00051 0.00051 0.50 98380 50 98355 6283617 63.87
rDAT = rDAT[,c("Year","Age","sex","qx")]
# table(rDAT$Age)
rDAT$Age = ifelse(rDAT$Age == "110+",110,rDAT$Age)
rDAT$Age = as.integer(rDAT$Age)
rDAT[1:5,]
Year Age sex qx
1 1983 0 male 0.01411
2 1983 1 male 0.00109
3 1983 2 male 0.00033
4 1983 3 male 0.00070
5 1983 4 male 0.00051
Perform matching to calculate log density and log cdf.
.872 out of 872 done
log_dens_t2 log_cdf_t2
1 -3.547065 -1.3748526
2 -2.641917 -0.6638762
3 -3.698327 -3.8746426
4 -3.812026 -1.4622169
5 -3.416823 -0.1247204
6 -3.290098 -0.8723565
datediag_yr time cens age sex delta log_dens_t2 log_cdf_t2
123 1983 11.4225949 1 56 male 1 -3.547065 -1.3748526
124 1983 6.3492324 1 76 male 1 -2.641917 -0.6638762
125 1983 0.8295892 1 61 male 1 -3.698327 -3.8746426
Prep dMrs
inputs.
len1 = 10
len2 = 15
A_range = c(0.4,4)
L_range = quantile(wDAT$time,c(0.5,1))
K_range = c(0.1,2)
T_range = c(0.1,20)
# Less fine grid for alpha/lambda
A_ugrid = log(seq(A_range[1],A_range[2],length.out = len1))
L_ugrid = log(seq(L_range[1],L_range[2],length.out = len1))
# Finer grid for kappa/theta
K_ugrid = log(seq(K_range[1],K_range[2],length.out = len2))
T_ugrid = log(seq(T_range[1],T_range[2],length.out = len2))
param_grid = list(A = A_ugrid,
L = L_ugrid,K = K_ugrid,T = T_ugrid)
param_grid
$A
[1] -0.9162907 -0.2231436 0.1823216 0.4700036 0.6931472 0.8754687
[7] 1.0296194 1.1631508 1.2809338 1.3862944
$L
[1] 2.060987 2.152588 2.236497 2.313908 2.385754 2.452783 2.515599 2.574702
[9] 2.630506 2.683359
$K
[1] -2.30258509 -1.44513486 -0.99039870 -0.67896255 -0.44183275 -0.25029454
[7] -0.08961216 0.04879016 0.17034537 0.27871340 0.37647757 0.46552935
[13] 0.54729530 0.62287798 0.69314718
$T
[1] -2.3025851 0.4196497 1.0793809 1.4734545 1.7553918 1.9750726
[7] 2.1550790 2.3075726 2.4398595 2.5566734 2.6612580 2.7559329
[13] 2.8424146 2.9220088 2.9957323
Run data fit with dMrs
’s main function.
res = run_analyses(DATA = wDAT,
param_grid = param_grid,
vec_time = seq(0,100,0.5),
ncores = 1,
verb = TRUE,
PLOT = TRUE)
####
Sat Mar 22 07:18:44 2025: Try copula = Independent, dist = Weibull, ...
Sat Mar 22 07:18:44 2025: Assume independence ...
Sat Mar 22 07:18:44 2025: Grid search for initial parameters ...
Sat Mar 22 07:18:44 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 1
#THETA grid points = 1
Num grid points = 110
110 out of 110 done
Sat Mar 22 07:18:45 2025: End GRID
Sat Mar 22 07:18:45 2025: NR optimization w/ 1 profile point(s) ...
#---# Copula=Independent, Dist=weibull, Prof. point=1 out of 1
iPARS = (0, 2.68336, 0, -inf)
iter=5; LL=-1524.82; diff.LL=0.0142913; diff.PARS=0.0385319; nGRAD=0.0378659; meth=0; reach=0; PARS = (-0.364617, 4.11379, 0, -inf)
iter=10; LL=-1524.81; diff.LL=2.27374e-13; diff.PARS=6.62323e-12; nGRAD=3.05054e-07; meth=0; reach=5; PARS = (-0.364951, 4.11519, 0, -inf)
No more update
####
Num Iter = 14
Params = (-0.364951, 4.11519, 0, -inf)
LL = -1524.81
GRAD = (-1.18234e-06, -2.27374e-07, 0, 0)
Convergence Indicators:
NormGrad = 1.20401e-06
NormIHessGrad = 7.21501e-09
Var = (0.00686627, 0.0566411, 0, 0)
Sat Mar 22 07:18:45 2025: Get covariance ...
02.683359413789010-Inf-1589.91334418337-0.36495050417084.115191847211570-Inf-1524.811.20400748481859e-06FALSE
c("alpha1", "lambda1", "kappa1", "theta")c(0.69423101156719, 61.2639664565374, 1, 0)c(0.0575260437845105, 14.5804554567041, 0, 0)c(0.581482037576475, 32.6867988832069, 1, 0)c(0.806979985557905, 89.841134029868, 1, 0)c(0.590161564242663, 38.4259191554175, 1, 0)c(0.816652128201682, 97.6755707731349, 1, 0)
####
Sat Mar 22 07:18:45 2025: Try copula = Independent, dist = Exp-Weibull, ...
Sat Mar 22 07:18:45 2025: Assume independence ...
Sat Mar 22 07:18:45 2025: Grid search for initial parameters ...
Sat Mar 22 07:18:45 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 16
#THETA grid points = 1
Num grid points = 1760
... 1760 out of 1760 done
Sat Mar 22 07:18:45 2025: End GRID
Sat Mar 22 07:18:45 2025: NR optimization w/ 1 profile point(s) ...
#---# Copula=Independent, Dist=expweibull, Prof. point=1 out of 1
iPARS = (-0.916291, 2.68336, 0.693147, -inf)
No more update
####
Num Iter = 1
Params = (-0.916291, 2.68336, 0.693147, -inf)
LL = -1531.8
GRAD = (31.6921, 31.5899, 83.6041, 0)
Convergence Indicators:
NormGrad = 94.8259
NormIHessGrad = 0.316201
Var = (-0.0103416, -0.0377196, -0.0164523, 0)
Sat Mar 22 07:18:45 2025: No converged solutions! ...
####
Sat Mar 22 07:18:45 2025: Try copula = Clayton, dist = Weibull, ...
Sat Mar 22 07:18:45 2025: Assume dependence: ...
Sat Mar 22 07:18:45 2025: theta = MLE ...
Sat Mar 22 07:18:45 2025: Grid search for initial parameters ...
Sat Mar 22 07:18:45 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 1
#THETA grid points = 16
Num grid points = 1760
... 1760 out of 1760 done
Sat Mar 22 07:18:46 2025: End GRID
Sat Mar 22 07:18:46 2025: NR optimization w/ 1 profile point(s) ...
#---# Copula=Clayton, Dist=weibull, Prof. point=1 out of 1
iPARS = (0, 2.68336, 0, 0.41965)
iter=5; LL=-1525.17; diff.LL=0.233356; diff.PARS=0.95717; nGRAD=0.804172; meth=0; reach=0; PARS = (-0.362994, 4.10715, 0, -4.2269)
iter=10; LL=-1524.83; diff.LL=0.0014019; diff.PARS=0.0677835; nGRAD=0.028504; meth=0; reach=0; PARS = (-0.364653, 4.11301, 0, -6.03426)
iter=15; LL=-1524.82; diff.LL=0.000189503; diff.PARS=0.0138843; nGRAD=0.0182257; meth=0; reach=0; PARS = (-0.364839, 4.11386, 0, -6.41294)
iter=20; LL=-1524.82; diff.LL=0.000834955; diff.PARS=0.0892889; nGRAD=0.018853; meth=0; reach=0; PARS = (-0.364881, 4.11448, 0, -6.82646)
iter=25; LL=-1524.82; diff.LL=0.000290977; diff.PARS=0.0423673; nGRAD=0.0114016; meth=0; reach=0; PARS = (-0.364747, 4.11413, 0, -7.12106)
iter=30; LL=-1524.82; diff.LL=0.000290615; diff.PARS=0.0503968; nGRAD=0.0130991; meth=0; reach=0; PARS = (-0.364938, 4.11469, 0, -7.28006)
iter=35; LL=-1524.81; diff.LL=8.64693e-06; diff.PARS=0.00223018; nGRAD=0.0159636; meth=0; reach=1; PARS = (-0.364882, 4.11483, 0, -7.65433)
iter=40; LL=-1524.81; diff.LL=7.65586e-06; diff.PARS=0.00209933; nGRAD=0.00381238; meth=0; reach=1; PARS = (-0.364887, 4.11473, 0, -7.71737)
iter=45; LL=-1524.81; diff.LL=2.65642e-05; diff.PARS=0.00730097; nGRAD=0.00813958; meth=0; reach=0; PARS = (-0.364769, 4.11439, 0, -7.81518)
iter=50; LL=-1524.81; diff.LL=3.98524e-05; diff.PARS=0.0125517; nGRAD=0.00394193; meth=0; reach=0; PARS = (-0.364919, 4.11487, 0, -7.85972)
iter=55; LL=-1524.81; diff.LL=1.56537e-05; diff.PARS=0.00164498; nGRAD=0.0247852; meth=0; reach=1; PARS = (-0.364504, 4.11357, 0, -7.97989)
iter=60; LL=-1524.81; diff.LL=2.8224e-05; diff.PARS=0.0102841; nGRAD=0.00529869; meth=0; reach=0; PARS = (-0.364883, 4.11483, 0, -8.05981)
iter=65; LL=-1524.81; diff.LL=7.84174e-05; diff.PARS=0.0318346; nGRAD=0.00927572; meth=0; reach=0; PARS = (-0.364982, 4.11519, 0, -8.10808)
iter=70; LL=-1524.81; diff.LL=5.86835e-06; diff.PARS=0.00244917; nGRAD=0.00271871; meth=0; reach=2; PARS = (-0.364885, 4.11481, 0, -8.1352)
iter=75; LL=-1524.81; diff.LL=9.10569e-05; diff.PARS=0.0455383; nGRAD=0.0223242; meth=0; reach=0; PARS = (-0.365212, 4.11604, 0, -8.21097)
iter=80; LL=-1524.81; diff.LL=1.45111e-05; diff.PARS=0.00943657; nGRAD=0.00342286; meth=0; reach=0; PARS = (-0.36492, 4.11496, 0, -8.58583)
iter=85; LL=-1524.81; diff.LL=9.04297e-06; diff.PARS=0.0060557; nGRAD=0.00451498; meth=0; reach=0; PARS = (-0.364941, 4.11509, 0, -8.59767)
iter=90; LL=-1524.81; diff.LL=5.38822e-05; diff.PARS=0.0447334; nGRAD=0.0349745; meth=0; reach=0; PARS = (-0.365163, 4.11609, 0, -8.64807)
iter=95; LL=-1524.81; diff.LL=1.54866e-06; diff.PARS=0.00105039; nGRAD=0.00798328; meth=0; reach=2; PARS = (-0.364876, 4.11478, 0, -8.68612)
iter=100; LL=-1524.81; diff.LL=1.71485e-06; diff.PARS=0.00124459; nGRAD=0.00138718; meth=0; reach=4; PARS = (-0.364916, 4.11498, 0, -8.69718)
iter=105; LL=-1524.81; diff.LL=5.44619e-06; diff.PARS=0.00408193; nGRAD=0.00133929; meth=0; reach=2; PARS = (-0.36492, 4.115, 0, -8.7217)
iter=110; LL=-1524.81; diff.LL=6.38264e-07; diff.PARS=0.000441659; nGRAD=0.00225744; meth=0; reach=7; PARS = (-0.364947, 4.1151, 0, -8.72638)
iter=115; LL=-1524.81; diff.LL=7.00424e-06; diff.PARS=0.00541221; nGRAD=0.00351999; meth=0; reach=0; PARS = (-0.36497, 4.11516, 0, -8.7364)
iter=120; LL=-1524.81; diff.LL=1.56103e-06; diff.PARS=0.00120649; nGRAD=0.00214321; meth=0; reach=5; PARS = (-0.364927, 4.11504, 0, -8.74966)
iter=125; LL=-1524.81; diff.LL=5.61715e-06; diff.PARS=0.00451461; nGRAD=0.00430436; meth=0; reach=2; PARS = (-0.364854, 4.11478, 0, -8.77794)
iter=130; LL=-1524.81; diff.LL=3.39617e-06; diff.PARS=0.00272035; nGRAD=0.00253897; meth=0; reach=4; PARS = (-0.364926, 4.11504, 0, -8.80434)
iter=135; LL=-1524.81; diff.LL=8.51199e-05; diff.PARS=0.08292; nGRAD=0.0206622; meth=0; reach=0; PARS = (-0.364582, 4.11389, 0, -8.89487)
iter=140; LL=-1524.81; diff.LL=1.47454e-08; diff.PARS=1.38588e-05; nGRAD=0.00317088; meth=0; reach=2; PARS = (-0.364917, 4.11503, 0, -8.94657)
iter=145; LL=-1524.81; diff.LL=3.08442e-06; diff.PARS=0.00293849; nGRAD=0.00168014; meth=0; reach=1; PARS = (-0.364919, 4.11503, 0, -8.96757)
iter=150; LL=-1524.81; diff.LL=1.37945e-06; diff.PARS=0.00132082; nGRAD=0.00108888; meth=0; reach=6; PARS = (-0.364924, 4.11503, 0, -8.96986)
iter=155; LL=-1524.81; diff.LL=4.06321e-08; diff.PARS=3.92815e-05; nGRAD=0.00289312; meth=0; reach=11; PARS = (-0.364923, 4.11505, 0, -8.97614)
iter=160; LL=-1524.81; diff.LL=2.51836e-06; diff.PARS=0.00242641; nGRAD=0.00136607; meth=0; reach=2; PARS = (-0.364913, 4.115, 0, -8.98795)
iter=165; LL=-1524.81; diff.LL=1.1717e-06; diff.PARS=0.00062223; nGRAD=0.00583775; meth=0; reach=2; PARS = (-0.365014, 4.11532, 0, -9.00423)
iter=170; LL=-1524.81; diff.LL=7.11486e-07; diff.PARS=0.000722478; nGRAD=0.00151391; meth=0; reach=7; PARS = (-0.364938, 4.11509, 0, -9.01232)
iter=175; LL=-1524.81; diff.LL=6.73501e-08; diff.PARS=6.83239e-05; nGRAD=0.00125183; meth=0; reach=12; PARS = (-0.364925, 4.11504, 0, -9.02043)
Optimization criteria met
####
Num Iter = 178
Params = (-0.364926, 4.11505, 0, -9.02546)
LL = -1524.81
GRAD = (-0.000517457, -8.52197e-05, 0, -0.000980572)
Convergence Indicators:
NormGrad = 0.001112
NormIHessGrad = 0.00134964
Var = (0.00679209, 0.0553299, 0, 1.37823)
Sat Mar 22 07:18:49 2025: Get covariance ...
02.6833594137890100.419649743100121-1567.33915264465-0.3649260520085194.11504644276680-9.02546235522217-1524.8110.0011120004635448FALSE
c("alpha1", "lambda1", "kappa1", "theta")c(0.69424798722409, 61.2550590511141, 1, 0.000120307167658827)c(0.0572158610097444, 14.4086059003788, 0, 0.000141238508120364)c(0.582106960300542, 33.0147104189403, 1, -0.000156515221487254)c(0.806389014147639, 89.4954076832878, 1, 0.000397129556804908)c(0.590695379361215, 38.6295530198729, 1, 1.20502427627685e-05)c(0.815954017256611, 97.1324275335304, 1, 0.00120112224085714)
####
Sat Mar 22 07:18:49 2025: Try copula = Clayton, dist = Exp-Weibull, ...
Sat Mar 22 07:18:49 2025: Assume dependence: ...
Sat Mar 22 07:18:49 2025: theta = MLE ...
Sat Mar 22 07:18:49 2025: Grid search for initial parameters ...
Sat Mar 22 07:18:49 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 16
#THETA grid points = 16
Num grid points = 28160
.......... 5000.......... 10000 out of 28160 done
.......... 15000.......... 20000 out of 28160 done
.......... 25000...... 28160 out of 28160 done
Sat Mar 22 07:18:57 2025: End GRID
Sat Mar 22 07:18:57 2025: NR optimization w/ 2 profile point(s) ...
#---# Copula=Clayton, Dist=expweibull, Prof. point=1 out of 2
iPARS = (-0.916291, 2.68336, 0.693147, -2.30259)
No more update
####
Num Iter = 1
Params = (-0.916291, 2.68336, 0.693147, -2.30259)
LL = -1530.67
GRAD = (30.6387, 27.1626, 74.4244, 0.846512)
Convergence Indicators:
NormGrad = 84.9485
NormIHessGrad = 1.05686
Var = (-0.0124412, -0.0586044, -0.0204214, -1.45715)
#---# Copula=Clayton, Dist=expweibull, Prof. point=2 out of 2
iPARS = (-0.223144, 2.68336, 0.278713, 0)
No more update
####
Num Iter = 1
Params = (-0.223144, 2.68336, 0.278713, 0)
LL = -1550.64
GRAD = (-52.2677, 44.7771, 2.73584, -2.50489)
Convergence Indicators:
NormGrad = 68.925
NormIHessGrad = 1.17749
Var = (-0.0105215, -0.00903437, -0.015051, 0.187011)
Sat Mar 22 07:18:58 2025: No converged solutions! ...
####
Sat Mar 22 07:18:58 2025: Try copula = Gumbel, dist = Weibull, ...
Sat Mar 22 07:18:58 2025: Assume dependence: ...
Sat Mar 22 07:18:58 2025: theta = MLE ...
Sat Mar 22 07:18:58 2025: Grid search for initial parameters ...
Sat Mar 22 07:18:58 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 1
#THETA grid points = 16
Num grid points = 1760
... 1760 out of 1760 done
Sat Mar 22 07:18:58 2025: End GRID
Sat Mar 22 07:18:58 2025: NR optimization w/ 1 profile point(s) ...
#---# Copula=Gumbel, Dist=weibull, Prof. point=1 out of 1
iPARS = (0, 2.68336, 0, 0)
iter=5; LL=-1525.41; diff.LL=0.444019; diff.PARS=1; nGRAD=0.375437; meth=0; reach=0; PARS = (-0.357865, 4.08924, 0, -4.40813)
iter=10; LL=-1524.84; diff.LL=0.00141428; diff.PARS=0.0558812; nGRAD=0.0350472; meth=0; reach=0; PARS = (-0.364474, 4.11273, 0, -6.24722)
iter=15; LL=-1524.82; diff.LL=0.000708864; diff.PARS=0.116743; nGRAD=0.0288871; meth=0; reach=0; PARS = (-0.364709, 4.11445, 0, -7.70475)
iter=20; LL=-1524.82; diff.LL=8.62891e-06; diff.PARS=0.00157192; nGRAD=0.0157446; meth=0; reach=2; PARS = (-0.364788, 4.11462, 0, -7.74245)
iter=25; LL=-1524.81; diff.LL=7.97181e-05; diff.PARS=0.01777; nGRAD=0.00655421; meth=0; reach=0; PARS = (-0.364869, 4.11484, 0, -7.95171)
iter=30; LL=-1524.81; diff.LL=0.00103469; diff.PARS=0.379006; nGRAD=0.0259302; meth=0; reach=0; PARS = (-0.364473, 4.11352, 0, -8.61682)
iter=35; LL=-1524.81; diff.LL=2.54646e-05; diff.PARS=0.0119697; nGRAD=0.00366808; meth=0; reach=0; PARS = (-0.364941, 4.11513, 0, -8.7115)
iter=40; LL=-1524.81; diff.LL=2.11058e-05; diff.PARS=0.0102827; nGRAD=0.00270159; meth=0; reach=0; PARS = (-0.364906, 4.115, 0, -8.73225)
iter=45; LL=-1524.81; diff.LL=2.99556e-05; diff.PARS=0.0154; nGRAD=0.00213657; meth=0; reach=0; PARS = (-0.364916, 4.11503, 0, -8.78563)
iter=50; LL=-1524.81; diff.LL=3.29644e-06; diff.PARS=0.00176719; nGRAD=0.00257685; meth=0; reach=2; PARS = (-0.36493, 4.11509, 0, -8.82149)
iter=55; LL=-1524.81; diff.LL=3.10109e-05; diff.PARS=0.0169431; nGRAD=0.00268026; meth=0; reach=0; PARS = (-0.36493, 4.11509, 0, -8.8465)
iter=60; LL=-1524.81; diff.LL=1.86735e-05; diff.PARS=0.0129221; nGRAD=0.00269816; meth=0; reach=0; PARS = (-0.36494, 4.11514, 0, -9.1464)
iter=65; LL=-1524.81; diff.LL=1.11309e-05; diff.PARS=0.00832736; nGRAD=0.00142632; meth=0; reach=0; PARS = (-0.364923, 4.11506, 0, -9.20601)
iter=70; LL=-1524.81; diff.LL=9.88828e-06; diff.PARS=0.00798686; nGRAD=0.00126887; meth=0; reach=0; PARS = (-0.36493, 4.11509, 0, -9.23933)
iter=75; LL=-1524.81; diff.LL=3.00459e-05; diff.PARS=0.0259241; nGRAD=0.00240972; meth=0; reach=0; PARS = (-0.364907, 4.11503, 0, -9.30926)
iter=80; LL=-1524.81; diff.LL=2.00248e-06; diff.PARS=0.00180796; nGRAD=0.00208774; meth=0; reach=1; PARS = (-0.364932, 4.11511, 0, -9.33943)
iter=85; LL=-1524.81; diff.LL=3.54459e-06; diff.PARS=0.00329927; nGRAD=0.00137856; meth=0; reach=2; PARS = (-0.364929, 4.1151, 0, -9.37302)
iter=90; LL=-1524.81; diff.LL=2.61673e-07; diff.PARS=0.000248396; nGRAD=0.00128663; meth=0; reach=4; PARS = (-0.364937, 4.11513, 0, -9.39591)
iter=95; LL=-1524.81; diff.LL=1.95186e-05; diff.PARS=0.0192507; nGRAD=0.00246229; meth=0; reach=0; PARS = (-0.364969, 4.11523, 0, -9.43039)
iter=100; LL=-1524.81; diff.LL=1.13904e-05; diff.PARS=0.0118894; nGRAD=0.00202989; meth=0; reach=0; PARS = (-0.364907, 4.11503, 0, -9.48858)
iter=105; LL=-1524.81; diff.LL=9.55886e-06; diff.PARS=0.0103023; nGRAD=0.00181012; meth=0; reach=0; PARS = (-0.364942, 4.11515, 0, -9.52129)
iter=110; LL=-1524.81; diff.LL=1.09776e-06; diff.PARS=0.00119046; nGRAD=0.00121236; meth=0; reach=4; PARS = (-0.364945, 4.11515, 0, -9.53792)
iter=115; LL=-1524.81; diff.LL=1.19919e-06; diff.PARS=0.00135018; nGRAD=0.00176916; meth=0; reach=3; PARS = (-0.364957, 4.1152, 0, -9.5655)
iter=120; LL=-1524.81; diff.LL=3.05603e-06; diff.PARS=0.00346618; nGRAD=0.000947819; meth=0; reach=8; PARS = (-0.364936, 4.11512, 0, -9.57133)
iter=125; LL=-1524.81; diff.LL=1.70661e-06; diff.PARS=0.00197633; nGRAD=0.000978901; meth=0; reach=1; PARS = (-0.364938, 4.11513, 0, -9.59249)
iter=130; LL=-1524.81; diff.LL=1.16761e-05; diff.PARS=0.0146799; nGRAD=0.000831749; meth=0; reach=0; PARS = (-0.364938, 4.11513, 0, -9.67963)
iter=135; LL=-1524.81; diff.LL=1.41904e-06; diff.PARS=0.00180022; nGRAD=0.00123578; meth=0; reach=5; PARS = (-0.36494, 4.11515, 0, -9.68919)
iter=140; LL=-1524.81; diff.LL=3.38537e-09; diff.PARS=4.33578e-06; nGRAD=0.00175262; meth=0; reach=1; PARS = (-0.36495, 4.11518, 0, -9.70446)
iter=145; LL=-1524.81; diff.LL=8.48947e-06; diff.PARS=0.0117674; nGRAD=0.00174313; meth=0; reach=0; PARS = (-0.364961, 4.11522, 0, -9.78748)
iter=150; LL=-1524.81; diff.LL=4.73052e-06; diff.PARS=0.0068919; nGRAD=0.000917812; meth=0; reach=0; PARS = (-0.364943, 4.11515, 0, -9.82226)
iter=155; LL=-1524.81; diff.LL=4.56234e-05; diff.PARS=0.0783402; nGRAD=0.0116916; meth=0; reach=0; PARS = (-0.364804, 4.11461, 0, -9.97164)
iter=160; LL=-1524.81; diff.LL=5.17397e-06; diff.PARS=0.00904655; nGRAD=0.00163183; meth=0; reach=0; PARS = (-0.36494, 4.11516, 0, -10.0061)
iter=165; LL=-1524.81; diff.LL=4.34918e-06; diff.PARS=0.0077611; nGRAD=0.000939268; meth=0; reach=0; PARS = (-0.364931, 4.11511, 0, -10.0274)
iter=170; LL=-1524.81; diff.LL=3.39295e-06; diff.PARS=0.00606478; nGRAD=0.000590271; meth=0; reach=0; PARS = (-0.364937, 4.11513, 0, -10.0507)
iter=175; LL=-1524.81; diff.LL=4.00366e-06; diff.PARS=0.0074547; nGRAD=0.000863739; meth=0; reach=0; PARS = (-0.364951, 4.11518, 0, -10.0656)
iter=180; LL=-1524.81; diff.LL=3.36712e-07; diff.PARS=0.000652645; nGRAD=0.000814971; meth=0; reach=1; PARS = (-0.364941, 4.11515, 0, -10.1008)
iter=185; LL=-1524.81; diff.LL=1.70003e-08; diff.PARS=3.50468e-05; nGRAD=0.00055913; meth=0; reach=1; PARS = (-0.364939, 4.11514, 0, -10.1672)
iter=190; LL=-1524.81; diff.LL=8.4592e-07; diff.PARS=0.00177835; nGRAD=0.000675394; meth=0; reach=2; PARS = (-0.364946, 4.11517, 0, -10.181)
iter=195; LL=-1524.81; diff.LL=7.00924e-07; diff.PARS=0.00148166; nGRAD=0.00072548; meth=0; reach=7; PARS = (-0.364947, 4.11517, 0, -10.185)
iter=200; LL=-1524.81; diff.LL=9.0321e-08; diff.PARS=0.000191298; nGRAD=0.000855151; meth=0; reach=12; PARS = (-0.364945, 4.11517, 0, -10.1919)
####
Num Iter = 201
Params = (-0.364945, 4.11517, 0, -10.1919)
LL = -1524.81
GRAD = (-0.000545515, -0.000458522, 0, -0.00047271)
Convergence Indicators:
NormGrad = 0.000855151
NormIHessGrad = 0.00746616
Var = (0.00683391, 0.0559384, 0, 15.8525)
Sat Mar 22 07:19:03 2025: Get covariance ...
02.6833594137890100-1565.92618810742-0.36494488243964.115166390088510-10.191920509471-1524.810.000855151069362377FALSE
c("alpha1", "lambda1", "kappa1", "theta")c(0.694234914358298, 61.2624068720554, 1, 1.0000374718524)c(0.0573906572640301, 14.4893503561323, 0, 0.000149195039020658)c(0.581751293071717, 32.8638020146535, 1, 0.999745054949248)c(0.806718535644879, 89.6610117294574, 1, 1.00032988875555)c(0.590391038853449, 38.5366446286816, 1, 1.00000001529772)c(0.816343888366012, 97.3899656267417, 1, 1.0917875151197)
####
Sat Mar 22 07:19:03 2025: Try copula = Gumbel, dist = Exp-Weibull, ...
Sat Mar 22 07:19:03 2025: Assume dependence: ...
Sat Mar 22 07:19:03 2025: theta = MLE ...
Sat Mar 22 07:19:03 2025: Grid search for initial parameters ...
Sat Mar 22 07:19:03 2025: Start GRID
#ALPHA grid points = 11
#LAMBDA grid points = 10
#KAPPA grid points = 16
#THETA grid points = 16
Num grid points = 28160
.......... 5000.......... 10000 out of 28160 done
.......... 15000.......... 20000 out of 28160 done
.......... 25000...... 28160 out of 28160 done
Sat Mar 22 07:19:13 2025: End GRID
Sat Mar 22 07:19:13 2025: NR optimization w/ 2 profile point(s) ...
#---# Copula=Gumbel, Dist=expweibull, Prof. point=1 out of 2
iPARS = (-0.916291, 2.68336, 0.693147, -2.30259)
No more update
####
Num Iter = 1
Params = (-0.916291, 2.68336, 0.693147, -2.30259)
LL = -1531.56
GRAD = (32.9268, 27.5153, 76.4866, -0.0741572)
Convergence Indicators:
NormGrad = 87.701
NormIHessGrad = 3.75999
Var = (-0.0122108, -0.0231552, -0.019186, 2.69044)
#---# Copula=Gumbel, Dist=expweibull, Prof. point=2 out of 2
iPARS = (-0.223144, 2.68336, 0.376478, 0)
No more update
####
Num Iter = 1
Params = (-0.223144, 2.68336, 0.376478, 0)
LL = -1549.28
GRAD = (-50.5325, 26.4988, -13.5553, -4.95901)
Convergence Indicators:
NormGrad = 58.8563
NormIHessGrad = 1.07062
Var = (-0.0156799, -0.0157895, -0.0253651, 0.124703)
Sat Mar 22 07:19:13 2025: No converged solutions! ...
Check dMrs
output
IDX COPULA DIST alpha1 lambda1 kappa1 theta LL NP
1 1 Independent weibull 0.6942310 61.26397 1 0.0000000000 -1524.810 2
2 2 Clayton weibull 0.6942480 61.25506 1 0.0001203072 -1524.811 3
3 3 Gumbel weibull 0.6942349 61.26241 1 1.0000374719 -1524.810 3
BIC POST
1 -3063.162 0.99771395
2 -3069.934 0.00114188
3 -3069.932 0.00114417
[1] 1
PARS EST SE lowCI highCI
1 log_alpha1 -0.3649505 0.08286297 -0.5273589 -0.2025421
2 log_lambda1 4.1151918 0.23799398 3.6487322 4.5816515
3 unc_kappa1 0.0000000 0.00000000 0.0000000 0.0000000
4 log_theta -Inf 0.00000000 -Inf -Inf
PARS EST SE lowCI highCI lowCI_2 highCI_2
1 alpha1 0.694231 0.05752604 0.581482 0.80698 0.5901616 0.8166521
2 lambda1 61.263966 14.58045546 32.686799 89.84113 38.4259192 97.6755708
3 kappa1 1.000000 0.00000000 1.000000 1.00000 1.0000000 1.0000000
4 theta 0.000000 0.00000000 0.000000 0.00000 0.0000000 0.0000000
[1] -1524.81
log_alpha1 log_lambda1 unc_kappa1 log_theta
-1.182343e-06 -2.273737e-07 0.000000e+00 0.000000e+00
log_alpha1 log_lambda1 unc_kappa1 log_theta
log_alpha1 -390.5097 -107.6660 0 0
log_lambda1 -107.6660 -47.3392 0 0
unc_kappa1 0.0000 0.0000 0 0
log_theta 0.0000 0.0000 0 0
log_alpha1 log_lambda1 unc_kappa1 log_theta
log_alpha1 0.006866272 -0.01561632 0 0
log_lambda1 -0.015616316 0.05664114 0 0
unc_kappa1 0.000000000 0.00000000 0 0
log_theta 0.000000000 0.00000000 0 0
time log_F1 F1 log_surv surv SE low_surv high_surv
1 0.0 -Inf 0.00000000 0.0000 1.0000000 0.000000000 1.0000000 1.0000000
2 0.5 -3.355798 0.03488153 -0.0355 0.9651227 0.006074835 0.9532161 0.9770294
3 1.0 -2.885480 0.05582800 -0.0574 0.9442163 0.007933657 0.9286663 0.9597663
AA log_low_surv log_high_surv low_surv2 high_surv2
1 0.0000000 0.00000000 0.00000000 1.0000000 1.0000000
2 0.3474782 -0.05025002 -0.02507959 0.9509916 0.9752323
3 0.2866894 -0.07645740 -0.04309276 0.9263924 0.9578225
Compare dMrs
vs relsurv
tmp_pred = res[[idx]]$PRED
out = sqldf("
select
COMP.*,
'Pohar-Perme' as Method
from
COMP
union
select
DMRS.time as Time,
DMRS.surv as SurvEst,
DMRS.low_surv2 as SurvLow,
DMRS.high_surv2 as SurvHigh,
'dMrs' as Method
from
tmp_pred as DMRS
")
my_themes = theme(text = element_text(size = 28),
legend.position = "bottom",
plot.title = element_text(hjust = 0.5),
panel.background = element_blank(),
panel.grid.major = element_line(colour = "grey50",
linewidth = 0.5,linetype = "dotted"),
panel.border = element_rect(colour = "black",
fill = NA,linewidth = 1),
legend.key.width = unit(1.5, "cm"),
legend.key.size = unit(0.5, "inch"),
legend.text = element_text(size = 20))
ggplot(data = out,
mapping = aes(x = Time,y = SurvEst,group = Method,fill = Method)) +
geom_line(linewidth = 1.25,alpha = 1,
aes(color = Method),show.legend = FALSE) +
geom_ribbon(mapping = aes(ymin = SurvLow,
ymax = SurvHigh),alpha = 0.5) +
ylim(c(0.4,1)) + xlim(0,20) +
xlab("Time (yrs)") + ylab("Net Survival") +
my_themes
R version 4.4.3 (2025-02-28)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.2 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
time zone: Etc/UTC
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dMrs_1.0.0 data.table_1.17.0 ggplot2_3.5.1 relsurv_2.3-2
[5] survival_3.8-3 sqldf_0.4-11 RSQLite_2.3.9 gsubfn_0.7
[9] proto_1.0.0
loaded via a namespace (and not attached):
[1] gtable_0.3.6 pspline_1.0-21 xfun_0.51
[4] bslib_0.9.0 caTools_1.18.3 lattice_0.22-6
[7] numDeriv_2016.8-1.1 vctrs_0.6.5 tools_4.4.3
[10] bitops_1.0-9 generics_0.1.3 stats4_4.4.3
[13] tibble_3.2.1 chron_2.3-62 blob_1.2.4
[16] pkgconfig_2.0.3 Matrix_1.7-3 KernSmooth_2.23-26
[19] lifecycle_1.0.4 farver_2.1.2 compiler_4.4.3
[22] gplots_3.2.0 munsell_0.5.1 htmltools_0.5.8.1
[25] sys_3.4.3 buildtools_1.0.0 sass_0.4.9
[28] yaml_2.3.10 gmp_0.7-5 pillar_1.10.1
[31] jquerylib_0.1.4 cachem_1.1.0 viridis_0.6.5
[34] gtools_3.9.5 tidyselect_1.2.1 digest_0.6.37
[37] mvtnorm_1.3-3 dplyr_1.1.4 labeling_0.4.3
[40] maketools_1.3.2 splines_4.4.3 pcaPP_2.0-5
[43] gsl_2.1-8 fastmap_1.2.0 grid_4.4.3
[46] copula_1.1-6 colorspace_2.1-1 cli_3.6.4
[49] magrittr_2.0.3 withr_3.0.2 Rmpfr_1.0-0
[52] scales_1.3.0 bit64_4.6.0-1 rmarkdown_2.29
[55] bit_4.6.0 gridExtra_2.3 memoise_2.0.1
[58] evaluate_1.0.3 knitr_1.50 tcltk_4.4.3
[61] ADGofTest_0.3 stabledist_0.7-2 viridisLite_0.4.2
[64] rlang_1.1.5 Rcpp_1.0.14 glue_1.8.0
[67] DBI_1.2.3 jsonlite_1.9.1 R6_2.6.1