我正在计算具有两个预测变量(var1 和 var2)的 cox 模型。 var1 是数值变量,无需任何修改即可进入 cox 回归。另一方面,var2 在转换为惩罚样条后进入 cox 回归。请参阅以下代码:
library(splines)
fit <- coxph(Surv(time2event, Mortality)~ var1 + pspline(var2,2), data = data)
summary(fit)
汇总函数的输出如下:
coef se(coef) se2 Chisq DF p
var1 0.05215 0.005283 0.005266 97.42 1.00 5.6e-23
pspline(var2, 2), linea 0.43643 0.065597 0.065597 44.26 1.00 2.9e-11
pspline(var2, 2), nonli 2.90 1.07 9.7e-02
exp(coef) exp(-coef) lower .95 upper .95
var1 1.054 0.949191 1.0427 1.064
ps(var2)3 3.179 0.314526 0.7537 13.413
ps(var2)4 10.098 0.099031 1.0029 101.670
ps(var2)5 29.274 0.034160 2.2205 385.929
ps(var2)6 61.328 0.016306 4.8178 780.665
ps(var2)7 101.100 0.009891 8.0312 1272.687
ps(var2)8 136.941 0.007302 9.7441 1924.514
ps(var2)9 182.140 0.005490 8.0620 4115.002
有人可以解释如何解释输出吗?是否可以提取在惩罚样条中选择的结的位置?
谢谢!
对此类效应的解释并不是这里的主题(评论中提出了交叉验证的链接),尽管我可以说各个基函数不是太有用。您宁愿检查非线性参数的联合测试(打印输出中的第 2-3 行),然后使用
predict
等方法为您重建实际样条线。
直接获取结似乎是不可能的,尽管未导出但仍记录在案的一些代码
survival:::psplineinverse
似乎表明在某一时刻这是样条线对象的一个属性。 (通过版本控制的魔力,我们可以看到该属性在提交 f5a8c35b 中添加,并在提交 0ce58fc6 中再次删除,两者都可以追溯到十多年前)
接下来最好的事情是查看源代码的相关部分:
pspline_knots <- function(x, df=4, nterm=2*df, degree=3,
Boundary.knots=range(x), ...) {
if (df == 0) nterm <- 15 else nterm <- round(nterm)
dx <- (Boundary.knots[2] - Boundary.knots[1])/nterm
knots <- c(Boundary.knots[1] + dx * ((-degree):(nterm - 1)),
Boundary.knots[2] + dx * (0:degree))
return(knots)
}
请注意,这并没有实现原始函数的所有输入验证。