如何在缺少数据的回归模型上使用anova()?

时间:2019-09-25 13:57:15

标签: r regression lm anova

我正在尝试对具有200-400个观测值的回归模型(LMER)进行方差分析,因此我不想基于任何缺失的数据删除观测值。

这是我面临的,简化且可复制的问题:


dats <- data.frame(y = c(5, 3, 7, 4, 8, 4, 7, 3, 6, 3),
                   x = c(1, 2, 1, 2, 1, 1, 2, 1, 2, 1),
                   z = c(NA, 5, 6, 7, 8, 5, 4, 3, 2, 2))

fit1 <- lm(y ~ x, data = dats, na.action = "na.omit")
fit2 <- lm(y ~ x + z, data = dats, na.action = "na.omit")

anova(fit1, fit2)

还有我遇到的错误:

Error in anova.lmlist(object, ...) : models were not all fitted to the same size of dataset

主要是,我需要运行这些方差分析才能知道LMERs的边际R ^ 2的变化是否具有统计学意义。有什么方法可以运行这些回归和方差分析而不会丢失缺少数据的观测值?

1 个答案:

答案 0 :(得分:0)

免责声明:我更像是一个贝叶斯人,并不真正喜欢NHST的世界观。

就像@denis,我很确定答案是“否”。通过比较平方和误差,将ANOVA设计为可以在相同的数据上使用。

显而易见的选择是排除相同的行:

d2 <- na.omit(dats[,c('x','y','z')])

f1 <- lm(y ~ x, data=d2)
f2 <- lm(y ~ x + z, data=d2)

anova(f1, f2)

显然会丢弃数据,或者您可能会估算丢失的数据:

i <- na.action(d2)
d3 <- dats
d3$z[i] <- predict(lm(z ~ x*y, dats), dats[i,])

f1 <- lm(y ~ x, data = d2)
f2 <- lm(y ~ x + z, data = d2)

anova(f1, f2)

但这会低估方差。