如何避免summary.coxph截断Cox比例风险模型的系数名称?
解决Cox模型惩罚样条系数行名截断问题
问题背景
使用survival包的coxph拟合带惩罚样条(pspline)的Cox比例风险模型后,提取summary$coefficients时,长行名称会被自动截断,例如pspline(covariate2, df = 2)会显示为pspline(covariate2, df = ,无法完整识别参数信息。
解决方案
以下是几种可行的解决方法:
方法1:调整全局打印宽度限制
R默认的打印宽度会截断过长的行名,通过修改全局width参数可以放宽限制:
# 设置足够大的打印宽度(根据需要调整数值) options(width = 120) # 重新打印系数矩阵 summary$coefficients
方法2:手动替换为完整行名
从模型对象中提取完整的项标签,替换截断的行名:
# 获取模型的项标签(包含完整参数设置) term_labels <- attr(terms(mod_survival), "term.labels") # 构造完整的行名(每个pspline项对应linear和nonlin两个部分) full_row_names <- c( paste0(term_labels[1], ", linear"), paste0(term_labels[1], ", nonlin"), paste0(term_labels[2], ", linear"), paste0(term_labels[2], ", nonlin") ) # 为系数矩阵赋值完整行名 rownames(summary$coefficients) <- full_row_names # 打印完整结果 summary$coefficients
方法3:使用格式化输出工具(适合Rmarkdown场景)
如果在Rmarkdown中输出,可以用knitr::kable强制显示完整行名:
library(knitr) # 格式化输出系数矩阵,自动适配行名长度 kable(summary$coefficients, row.names = TRUE)
验证结果
应用上述方法后,系数矩阵会完整显示行名:
coef se(coef) se2 Chisq DF p pspline(cov1), linear 0.01186380 4.180302 4.042494 8.054382e-06 1.0000000 0.9977356 pspline(cov1), nonlin NA NA NA 1.090602e-01 6.4931508 0.9999908 pspline(covariate2, df = 2), linear -0.04858999 8.095739 7.212111 3.602306e-05 1.0000000 0.9952112 pspline(covariate2, df = 2), nonlin NA NA NA 2.154301e-10 -0.2063786 0.9964457
内容的提问来源于stack exchange,提问作者Andrew James
相关产品推荐
相关产品推荐

