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

使用R语言censored包进行生存预测时出现特征未找到错误的求助

使用R语言censored包进行生存预测时出现特征未找到错误的求助

你好!我来帮你分析这个问题的原因和解决方案。

问题根源

你遇到的object 'CO-APPLICANT' not found错误,核心原因是列名中的特殊字符(连字符-)在R公式解析时被误当作数学运算符,或者训练数据与预测数据的列名不匹配。

具体来说:

  • 当你用Surv(DURATION, DEFAULT) ~ .拟合模型时,R会自动把数据中的列名代入公式,但CO-APPLICANT里的-会被R解析成减法操作(即CO - APPLICANT),而不是一个单独的变量名。这会导致模型要么拟合时就出错,要么实际没有包含这个特征,但预测时你的applicant数据里却有这个列,从而引发找不到对象的错误。
  • 即使你移除CO-APPLICANT后仍报错,大概率是还有其他列名存在类似的解析问题,或者训练数据和预测数据的列名没有完全对齐。

解决方案

这里提供两种可行的解决办法,你可以根据自己的情况选择:

方案1:重命名列名(推荐)

把包含特殊字符的列名改成R友好的格式(比如用下划线_替代连字符),从根源避免公式解析问题:

# 先修改训练数据的列名
names(train)[names(train) == "CO-APPLICANT"] <- "CO_APPLICANT"

# 再修改预测数据的列名
applicant$CO_APPLICANT <- applicant$`CO-APPLICANT`
applicant$`CO-APPLICANT` <- NULL

# 重新拟合模型
cph_fit <- proportional_hazards() %>%
  fit(Surv(DURATION, DEFAULT) ~ . , data = train)

# 执行预测
predict(cph_fit, applicant, type = "survival", time = 1:30)

方案2:显式在公式中用反引号包裹特殊列名

如果你需要保留原列名,就在拟合模型时显式写出所有变量,并用反引号``包裹带特殊字符的列名,确保R将其识别为单个变量:

# 显式定义公式,用反引号处理特殊列名
cph_fit <- proportional_hazards() %>%
  fit(
    Surv(DURATION, DEFAULT) ~ PURPOSE + SEX + RESIDENCE + PROPERTY + CHK_ACCT + 
      HISTORY + AMOUNT + SAV_ACCT + EMPLOYMENT + INSTALL_RATE + `CO-APPLICANT` + 
      GUARANTOR + PRESENT_RESIDENT + AGE + OTHER_INSTALL + NUM_CREDITS + 
      JOB + NUM_DEPENDENTS + TELEPHONE + FOREIGN,
    data = train
  )

# 预测时保持列名一致即可
predict(cph_fit, applicant, type = "survival", time = 1:30)

额外检查项

如果移除CO-APPLICANT后仍报错,建议你:

  • 仔细核对train和applicant的所有预测列名,确保拼写、大小写、特殊字符完全一致;
  • 检查train数据中是否还有其他带运算符类特殊字符(如+、*、/)的列名,同样按上述方法处理。

备注:内容来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:03:09