求助:使用flexsurvreg拟合模型时遇下标越界错误
问题分析与解决
错误原因
你的Surv对象Y第一列的列名是空字符串(""),而flexsurvreg函数内部会尝试通过列名"time"索引时间数据,找不到对应列名时就会抛出subscript out of bounds错误。
解决方法
方法1:修改现有Surv对象的列名
直接给Y的列名赋值,将第一列命名为"time":
colnames(Y) <- c("time", "status")
之后重新运行拟合代码即可:
flexsurvreg(Y ~ 1, dist = "lnorm")
方法2:重新创建规范的Surv对象
如果是从原始数据生成Surv对象,确保明确指定时间和状态列,避免列名缺失:
# 假设原始时间序列为time_vec,状态序列为status_vec Y <- Surv(time = time_vec, event = status_vec, type = "right")
验证结果
修改列名后运行代码,会得到正常的对数正态分布模型拟合结果,示例输出如下:
Call: flexsurvreg(formula = Y ~ 1, dist = "lnorm") Estimates: meanlog sdlog 4.0488897 1.1104447 se( 0.1010239) 0.0715711 N = 120, Events: 106, Censored: 14 Total time at risk: 15504.77 Log-likelihood = -390.0996, df = 2 AIC = 784.1992
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

