当我从flexsurv包在所附的数据集上运行flexsurfspling时,对于任何k>1:
flexsurvspline(Surv(time,dead)~1,data=input_df,k=2)
Error in optim(method = "BFGS", par = c(gamma0 = 0, gamma1 = 0, gamma2 = 0, :
initial value in 'vmmin' is not finite
通过阅读其他有类似问题的帖子,我发现这可能是inits参数的问题,我可能必须为这个特定的数据集生成自己的inits函数。但我还没有找到任何关于如何为样条曲线拟合或该参数中包含什么的指导。这就是导致错误的原因,我是对的吗?如果是,应该如何确定inits函数?
input_df.xlsx
提前感谢!
如果使用调试器,您可以看到函数内部发生了什么。通过指定debugonce(flexsurvspline)
,然后运行该函数,您可以逐步了解每个步骤中发生了什么。(注意:大写Q
可以让您退出调试浏览器(。当我这样做的时候,我发现因为超过30%的数据是在第一次(2(,这也是左边界,所以函数将结设置为:
Browse[2]> knots
33.33333% 66.66667%
0.6931472 0.6931472 1.0986123 2.5649494
请注意,前两个结的值相同,这基本上破坏了函数。可以通过直接在对数时间刻度上指定内部结值来解决此问题。
flexsurvspline(Surv(time,dead)~1,data=input_df, knots=c(1.8,2.3))
# Call:
# flexsurvspline(formula = Surv(time, dead) ~ 1, data = input_df,
# knots = c(1.8, 2.3))
#
# Estimates:
# est L95% U95% se
# gamma0 -3.475 -3.783 -3.167 0.157
# gamma1 3.021 2.785 3.257 0.120
# gamma2 4.294 3.341 5.248 0.487
# gamma3 -7.908 -10.305 -5.510 1.223
#
# N = 428, Events: 428, Censored: 0
# Total time at risk: 1401
# Log-likelihood = -725.7712, df = 4
# AIC = 1459.542