使用drop.test函数构建仅截距rfit模型报错求助
解决rfit仅截距模型构建与drop.test报错问题
问题根源
你之前的写法错误在于:
- 使用全1列
INT加intercept=F时,模型实际拟合的是totaltriglevel = β*INT(无截距),这种参数化方式与全模型f1(带截距+多个变量)的参数空间不兼容,导致drop.test无法进行模型比较。 - 直接用
~1时可能因对rfit语法理解偏差导致操作失误,rfit默认支持~1构建仅截距模型。
正确解决方案
方法1:使用公式~1构建仅截距模型
rfit支持通过~1直接指定仅截距模型,无需额外构造全1列:
# 拟合仅截距的秩回归模型 r4 <- rfit(totaltriglevel ~ 1, data = table9.11) # 全模型保持不变 f1 <- rfit(totaltriglevel ~ sex + obese + chylomicrons + VLDL + LDL + HDL + Age, data = table9.11) # 执行模型比较检验 drop.test(f1, r4)
方法2:手动构造设计矩阵(适用于特殊版本兼容)
若方法1因版本问题仍报错,可直接传入全1设计矩阵拟合:
# 构造仅含截距的设计矩阵(全1列) intercept_mat <- matrix(1, nrow = nrow(table9.11), ncol = 1) # 拟合仅截距模型(intercept设为FALSE,因为设计矩阵已包含全1列) r4 <- rfit(x = intercept_mat, y = table9.11$totaltriglevel, intercept = FALSE) # 全模型与检验代码不变 f1 <- rfit(totaltriglevel ~ sex + obese + chylomicrons + VLDL + LDL + HDL + Age, data = table9.11) drop.test(f1, r4)
关键说明
- rfit的
intercept参数默认值为TRUE,当公式为~1时,模型会自动拟合截距,这与lm的行为一致,是构建仅截距模型的标准方式。 drop.test要求两个模型的响应变量一致,且简化模型是全模型的嵌套子集,上述两种方法都能保证模型嵌套关系正确,避免报错。
内容的提问来源于stack exchange,提问作者Jonah Douglass
相关产品推荐
相关产品推荐

