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

使用rms包lrm()拟合模型后调用validate()遇对象未找到错误的求助

解决rms::validate()中"object not found"错误的方案

首先看你的代码里有个明显的笔误:你定义了DT2数据框,但拟合模型时用的是DT,这会导致模型拟合先出问题,得先把这个修正过来。

接下来是validate()报错的核心原因:group参数需要的是实际的分组向量,而不是直接写变量名。validate()函数的执行环境无法直接识别你写的internal_model_rating_number变量名(尤其是当模型是通过data参数指定数据框拟合时),所以得明确传入这个变量的具体取值。

修正后的完整代码

library(data.table)
library(rms)
DT2 <- data.table(internal_model_rating_number = c(5,5,5,5,6,6,5,5,5,5), ratio = c(2.0665194,1.2264998,1.0333628,0.6936382,-0.1883890, -0.2349949,-0.5062086,-0.5204016,-0.4401635,-0.5824366))
# 修正数据框名称为DT2
lrm.model <- lrm(internal_model_rating_number ~ ratio, x = T, y = T, data = DT2, maxit = 1000)
# 明确从DT2中提取group变量
validate(lrm.model, group = DT2$internal_model_rating_number, B = 200, bw = T)

另一种写法:用with()简化

如果你不想重复写数据框名称,可以用with()让函数在数据框的环境里查找变量:

with(DT2, validate(lrm.model, group = internal_model_rating_number, B = 200, bw = T))

补充说明

你提到实际数据中目标变量部分类别频次极低,使用group参数进行分层重抽样是非常合理的选择——这样能确保每个重抽样样本都包含各个类别的观测,避免因小类别被随机排除导致的评估偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:42:48