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

R语言survival包concordance函数报x and y are not the same length错误如何解决

报错原因与解决方法

核心报错原因

该报错本质是concordance()函数从测试集提取的生存响应变量(y)和模型输出的风险预测值(x)长度不匹配,常见触发场景有3种:

  • 测试集test中存在模型自变量的缺失值:你用到的BMI_c、BMI_c_2、smoke、Hgb这几个变量只要有任意一个在测试集某行是NA,这行就会被自动从预测结果中剔除,但生存响应变量还是默认取了测试集全量数据,二者长度就会不一致
  • lspline()函数的适配问题:lspline是第三方包的样条生成函数,在传入新数据集做预测时,可能没有正确识别测试集的Hgb变量生成对应样条项,导致预测矩阵行数和测试集行数不匹配
  • 数据集拆分逻辑错误:如果代码里的N和全量数据集mor_survey_com3的实际行数不一致,或者trainsize大于等于全量数据集行数,会导致test数据集行数为0,也会触发长度不匹配报错

解决步骤

可按顺序排查解决:

  1. 先清理测试集的缺失值,使用无缺失的测试集子集计算C指数
# 筛选出模型所需变量无缺失的测试集行
test_no_na <- na.omit(test[, c("permth_exm", "other_Death", "BMI_c", "BMI_c_2", "smoke", "Hgb")])
# 传入无缺失数据集计算
concordance(object = fit_test_w, newdata = test_no_na)
  1. 如果上述操作仍报错,可手动对齐预测值和响应变量的长度后计算,避免函数内部自动处理的适配问题
# 生成测试集风险预测值,含缺失的行自动被剔除
pred_risk <- predict(fit_test_w, newdata = test, type = "risk")
# 提取对应行的生存响应变量
test_surv <- Surv(test$permth_exm, test$other_Death)[as.integer(names(pred_risk)), ]
# 手动传入对齐后的变量计算C指数
concordance(test_surv ~ pred_risk)
  1. 提前校验数据集拆分逻辑
# 确保N和全量数据集行数一致
N <- nrow(mor_survey_com3)
# 确保训练集大小小于全量数据集行数
stopifnot(trainsize < N)

内容的提问来源于stack exchange,提问作者Tao Xueting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:05