基于MICE插补数据,在R中实现仅交互项回归模型及LR卡方检验
针对MICE插补数据拟合纯交互项模型及LR卡方检验的方案
先给你理清R公式的关键细节:你之前用的~A*B其实是R的语法糖,等价于~A+B+A:B,所以两种写法结果完全一致,都会包含主效应和交互项。如果想要仅保留A和B的纯交互项(不含任何主效应),得用:表示纯交互,同时显式去掉默认的截距项,公式写成Y ~ 0 + A:B或者Y ~ A:B - 1都可以。
接下来针对MICE插补后的数据集,一步步实现你要的LR卡方检验:
1. 拟合仅含截距项的基准模型
用with()函数对每个插补后的子集拟合仅截距模型,之后用pool()合并插补结果:
# 仅截距模型 fit_null <- with(data = imp, lm(Y ~ 1)) # 合并插补结果 pooled_null <- pool(fit_null)
2. 拟合仅含纯交互项的目标模型
同样用with()拟合纯交互模型(必须去掉截距,否则R会自动加入截距,模型就不是纯交互项了):
# 仅纯交互项模型(去掉截距) fit_interaction_only <- with(data = imp, lm(Y ~ 0 + A:B)) # 合并插补结果 pooled_interaction <- pool(fit_interaction_only)
你可以用summary(pooled_interaction)查看合并后的系数,确认输出里只有A和B各水平组合的交互项,没有单独的A或B主效应项。
3. 执行LR卡方检验(比较两个嵌套模型)
对于MICE的多插补模型,不能直接用普通的anova()函数,得用mice包自带的pool.compare()函数来比较两个嵌套模型(仅截距模型 vs 纯交互项模型):
# 执行似然比检验 lr_result <- pool.compare(fit_interaction_only, fit_null, method = "likelihood") # 查看检验结果 print(lr_result)
输出结果里会包含LR卡方值、自由度和对应的p值,这就是你需要的检验统计量。
额外提醒
- 如果你不小心写成
Y ~ A:B(没去掉截距),R会自动加入截距项,此时模型其实是Y ~ 1 + A:B,这和你要的纯交互项模型不一样,一定要注意去掉截距。 pool.compare()的method="likelihood"参数指定用似然比检验,这正是你需要的LR卡方检验方法。
内容的提问来源于stack exchange,提问作者ksroogl
相关产品推荐
相关产品推荐

