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

R语言中Hosmer Lemeshow拟合优度测试报错问题求助

解决Hosmer-Lemeshow拟合优度测试的"variable lengths differ"报错

嘿,这个报错我太熟悉了,核心问题就是你传入的响应变量和拟合值长度不匹配,咱们一步步拆解原因和解决办法:

报错根源

从你的GLM输出里能看到(14 observations deleted due to missingness)——模型拟合时自动剔除了14个含缺失值的观测。但你调用hoslem.test的时候,用的是model3$BC.result,这是原始数据集里的响应变量,包含了那14个被删掉的观测;而fitted(model3)是模型拟合后生成的拟合值,只保留了有效观测的部分。两者长度不一样,R自然就报错说"variable lengths differ"了。

另外,你可能还搞混了hoslem.test的参数顺序:第一个参数需要是模型实际使用的响应变量(即剔除缺失后的数据),而不是原始数据里的完整列。

修正后的代码

你可以用下面两种方式来修复:

方式1:从模型对象中提取响应变量

# 从模型中获取经过缺失值过滤的响应变量
y <- model.response(model.frame(model3))
# 获取拟合值
y_hat <- fitted(model3)
# 执行Hosmer-Lemeshow测试,指定10组
hl <- hoslem.test(y, y_hat, g = 10)
# 查看结果
print(hl)

方式2:更简洁的写法

直接从模型对象里提取$y(这是模型拟合时使用的响应变量):

hl <- hoslem.test(model3$y, fitted(model3), g = 10)

额外小提示

  • 如果你不想后续再遇到这种问题,可以先手动处理缺失值:Data_clean <- na.omit(Data2),再用清理后的数据集拟合模型,这样所有变量的长度都会保持一致。
  • g参数(分组数)要合理,一般选10组是常规操作,但如果你的有效观测数太少,可能需要适当减少分组数,避免出现某组样本量为0的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:27