使用R语言rms包ols模型的calibrate函数时出现错误
解决rms包calibrate()函数的"invalid argument type"错误
我之前也碰到过一模一样的问题,核心原因其实很明确:rms包的calibrate()函数是专为rms系列模型(比如lrm())设计的,如果你传入base R的lm()模型对象,就会触发参数不兼容的错误。看你的示例代码,应该是用lm()拟合的模型对吧?
下面是修正后的完整可复现代码,一步步帮你解决问题:
步骤1:加载依赖包与数据
library(rms) library(MASS) data(whiteside) w.Before <- whiteside[whiteside$Insul == "Before", ]
步骤2:用rms包的lrm()拟合模型
别再用base的lm()了,改用lrm()——这是rms实现的线性回归模型,和calibrate()完美兼容:
# 以Gas为因变量、Temp为自变量拟合模型 fit <- lrm(Gas ~ Temp, data = w.Before)
步骤3:调用calibrate()生成校准图
现在再调用calibrate()就不会报错了,参数B是自助法重复次数,可根据你的计算资源调整:
# 生成校准数据,B=200是常用的自助次数 cal_plot_data <- calibrate(fit, B = 200) # 绘制校准图 plot(cal_plot_data)
为什么原来的代码会报错?
当你把lm()模型传给calibrate()时,函数内部会尝试处理fail参数,但lm模型没有rms模型对应的属性,导致!fail的逻辑判断中fail不是布尔值,从而抛出"invalid argument type"错误。而lrm()模型会自动设置好calibrate()需要的元数据,从根源避免了这个问题。
如果你的模型是广义线性模型,rms包也有对应的增强版模型(比如glrm()),同样可以直接用calibrate()。
内容的提问来源于stack exchange,提问作者Ross Marriott
相关产品推荐
相关产品推荐

