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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:51