【问题标题】:"initial value in 'vmmin' is not finite" error in flexsurvspline callflexsurvspline 调用中的“'vmmin' 中的初始值不是有限的”错误
【发布时间】:2021-04-06 03:55:29
【问题描述】:

当我从 flexsurv 包中的附加数据集上运行 flexsurvspline 时,对于任何 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

提前致谢!

【问题讨论】:

    标签: r spline survival-analysis


    【解决方案1】:

    如果您使用调试器,您可以看到函数内部发生了什么。通过指定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
    

    【讨论】:

    • 感谢您的解释!将 33.3% 节调整为 0.693148 使我的 AIC 值低于 1 节样条。指定自定义内部结值有什么缺点吗?
    • 并非如此。随着您增加模型的灵活性,您必须更加小心过度拟合。
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2020-01-29
    • 2015-09-03
    相关资源
    最近更新 更多