使用rms包lrm函数拟合带offset的仅截距模型报错求助
解决rms包lrm函数拟合带offset的仅截距模型报错问题
我尝试用rms包的lrm()函数拟合带offset项的仅截距模型,但两次尝试都报错,而glm()能成功拟合等效模型。以下是复现代码及报错信息:
### 生成数据 # 安装并加载rms包 # install.packages("rms") library(rms) set.seed(1) # 生成事件概率 p.true <- runif(1000, 0.2 , 0.8) # 生成二分类结局变量 state1.bin <- rbinom(1000, 1, p.true) # 构建数据集,包含结局变量和事件概率的logit转换值 data.raw.temp <- data.frame( "state1.bin" = state1.bin, "p.true.logit1" = log(p.true/(1-p.true)) ) ### 拟合带offset的仅截距模型 # glm成功拟合 glm(state1.bin ~ offset(p.true.logit1), data = data.raw.temp, family = binomial(link = "logit")) # lrm尝试1:公式中用offset() lrm(state1.bin ~ offset(p.true.logit1), data = data.raw.temp) # lrm尝试2:使用函数的offset参数 lrm(state1.bin ~ 1, offset = p.true.logit1, data = data.raw.temp)
glm的拟合结果(符合预期):
Call: glm(formula = state1.bin ~ offset(p.true.logit1), family = binomial(link = "logit"), data = data.raw.temp) Coefficients: (Intercept) -0.02642 Degrees of Freedom: 999 Total (i.e. Null); 999 Residual Null Deviance: 1270 Residual Deviance: 1270 AIC: 1272
两次lrm尝试的报错:
- 尝试1报错:
Error in lrm(state1.bin ~ offset(p.true.logit1), data = data.raw.temp) : object 'nact' not found
- 尝试2报错:
Error in fitter(X, Y, offset = offs, penalty.matrix = penalty.matrix, : formal argument "offset" matched by multiple actual arguments
解决方案
lrm()函数的内部机制要求模型至少有一个显式的自变量,才能正确初始化计算流程。针对仅截距+offset的场景,你可以给数据集添加一列无信息的虚拟变量(比如全1的列),再将这个变量加入公式,就能顺利拟合模型了。
步骤如下:
- 添加全1的虚拟变量到数据集:
data.raw.temp$dummy <- 1
- 拟合模型:
lrm_fit <- lrm(state1.bin ~ dummy + offset(p.true.logit1), data = data.raw.temp)
验证结果
拟合后的模型关键输出如下,其中dummy的系数与glm的截距系数几乎一致,符合预期:
Logistic Regression Model lrm(formula = state1.bin ~ dummy + offset(p.true.logit1), data = data.raw.temp) Coefficients: Coef S.E. Wald Z Pr(>|Z|) dummy -0.0264 0.0713 -0.370 0.7116
你也可以用~ 0 + dummy + offset(p.true.logit1)作为公式,此时dummy的系数直接对应截距项,结果完全相同。
内容的提问来源于stack exchange,提问作者AP30
相关产品推荐
相关产品推荐

