将嵌套模型与R中的NA进行比较

问题描述 投票:1回答:1

我正在尝试使用R中的anova()函数比较嵌套回归模型,但是由于缺少案例,一级和二级模型的观察次数不同,因此遇到了问题。这是一个简单的示例:

# Create dataframe with multiple predictors with different number of NAs
dep <- c(45,46,45,48,49)
basevar <- c(10,12,10,16,17)
pred1 <- c(NA,20,NA,19,21)

dat <- data.frame(dep,basevar,pred1)

# Define level 1 of the nested models
basemodel <- lm(dep ~ basevar, data = dat)
# Add level 2
model1 <- lm(dep ~ basevar + pred1, data = dat)
# Compare the models (uh oh!)
anova(basemodel, model1)

我已经看到2条针对类似问题的建议,但都存在问题。建议1:估算丢失的数据。问题在于,我的数据中丢失的案例由于是异常值而被删除,因此不会“随机丢失”,并且估算可能会使数据过拟合。

建议2:制作一个单独的数据框,该数据框仅包含变量的完整案例以及缺少的案例,并将其用于回归。如果要创建多个嵌套模型,这些嵌套模型共享相同的1级变量,但2级变量的缺失案例数量不同,这也将引起问题。这是一个例子:

# Create a new predictor variable with a different number of NAs from pred1
pred2 <- c(23,21,NA,10,11)
dat <- cbind(dat,pred2)

# Create dataframe containing only completed cases of pred1
nonadat1 <- subset(dat, subset = !is.na(pred1))
# Do the same for pred2
nonadat2 <- subset(dat, subset = !is.na(pred2))


# Define level 1 of the nested models within dataframe of pred1 complete cases
basemodel1 <- lm(dep ~ basevar, data = nonadat1)
# Check values of the model
summary(basemodel1)
# Add level 2
model1 <- lm(dep ~ basevar + pred1, data = nonadat1)
# Compare the models (yay it runs!)
anova(basemodel1, model1)


# Define level 1 of the nested models within dataframe of pred2 complete cases
basemodel2 <- lm(dep ~ basevar, data = nonadat2)
# Values are different from those in basemodel1
summary(basemodel2)
# Add level 2
model2 <- lm(dep ~ basevar + pred2, data = nonadat2)
# Compare the models
anova(basemodel2, model2)

如您所见,创建单个数据框会在嵌套模型的1级上产生差异,这会导致解释问题。

有人知道我如何在避免这些问题的同时比较这些嵌套模型?

r linear-regression missing-data anova
1个回答
0
投票

这行得通吗?有关更多信息,请参见here。它不能完全解决模型适合于不同数据集这一事实,但是可以进行比较。

A<-logLik(basemodel)
B<-logLik(model1)
(teststat <- -2 * (as.numeric(A)-as.numeric(B)))
(p.val <- pchisq(teststat, df = 1, lower.tail = FALSE))
© www.soinside.com 2019 - 2024. All rights reserved.