使用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
相关产品推荐
相关产品推荐

