You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

flexsurvspline中offset函数报错求助(R 4.4.0 flexsurv 2.3)

问题与解决方案

问题背景

在Windows环境(RStudio 2024.04.0、R 4.4.0)下,使用flexsurv 2.3版本的flexsurvspline函数时,尝试通过offset()固定回归系数权重为1,代码在旧版本flexsurv中可正常运行,但升级后抛出错误:

Error in model.matrix.default(forms[[i]], m) :
model frame and formula mismatch in model.matrix()

问题代码如下:

library(survival)
rfs  <- pmax(rotterdam$recur, rotterdam$death)
rfstime <- with(rotterdam, ifelse(recur==1, rtime, dtime))
fit1 <- flexsurvspline(Surv(rfstime, rfs) ~ age + meno + size + er,  k=2, data = rotterdam)
# 计算每个患者的线性预测值
predf <- model.matrix(fit1) %*% fit1$res[-(1:4),"est"]

# 预测5年基线生存率
y5_Flex_1 <- summary(fit1,type="survival",t=5)
y5_Flex <- y5_Flex_1[[1]]$est
y5_Flex

# 收缩因子
vanH <- 0.9589255
heuristic_lp_flex = vanH*predf

# 通过offset固定收缩后的线性预测值,计算收缩模型的5年基线生存率
fit1_shrunk <- flexsurvspline(Surv(rfstime,rfs)~offset(heuristic_lp_flex),k=2,data=rotterdam)

解决方法

flexsurv 2.3版本调整了模型矩阵的构建逻辑,要求公式中所有变量(包括offset()内的变量)必须存在于data参数指定的数据框中,旧版本允许直接引用全局环境中的向量,新版本不再支持。

修改步骤:

  1. 将heuristic_lp_flex向量添加到rotterdam数据框中;
  2. 在公式中引用数据框内的列名,而非全局环境中的向量。

修改后的代码:

library(survival)
library(flexsurv)

rfs  <- pmax(rotterdam$recur, rotterdam$death)
rfstime <- with(rotterdam, ifelse(recur==1, rtime, dtime))
fit1 <- flexsurvspline(Surv(rfstime, rfs) ~ age + meno + size + er,  k=2, data = rotterdam)
# 计算每个患者的线性预测值
predf <- model.matrix(fit1) %*% fit1$res[-(1:4),"est"]

# 预测5年基线生存率
y5_Flex_1 <- summary(fit1,type="survival",t=5)
y5_Flex <- y5_Flex_1[[1]]$est
y5_Flex

# 收缩因子
vanH <- 0.9589255
heuristic_lp_flex = vanH*predf

# 关键修改:将offset变量加入数据集
rotterdam$heuristic_lp_flex <- heuristic_lp_flex

# 重新拟合收缩模型
fit1_shrunk <- flexsurvspline(Surv(rfstime,rfs)~offset(heuristic_lp_flex),k=2,data=rotterdam)

验证逻辑

通过将heuristic_lp_flex整合到rotterdam数据框,确保公式中的变量与模型框架完全匹配,符合flexsurv 2.3版本对变量来源的要求,从而解决模型矩阵构建时的匹配错误。

内容的提问来源于stack exchange,提问作者Laura Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:57:17