R:如何根据回归模型(glmm)对数据框进行子集化

R: How to subset a dataframe based on a regression model (glmm)

我有一个大数据集 (~60k rows/observations, ~200 columns/variables) 并且有 运行 一系列广义线性混合模型 (glmm) 使用 lme4 使用一些变量。许多使用的变量都有缺失数据(我已经在适当的情况下使用插补或其他方法计算了大部分缺失数据,但仍然有很多),因此很明显,由于列表删除,许多行被排除在原始数据框中。

我现在需要做一些描述性统计工作(主要是频率,因为许多变量是 ordinal/nominal)。

是否有一种简单的方法可以根据我给定的 glmms 中包含的观察结果对原始数据框进行子集化?

调用模型中使用的数据很容易:

glmm1 <- glmer(y~ var1 + var2 + var5 + etc + (1|var_level), data = df1) df1_glmm1_subset<-glmm1@frame

然而,这只是 returns 模型中使用的变量。我也想对该模型中未包含的变量(例如 var3 和 var4)进行描述性总结。

我可以写一个长而肮脏的子集,从模型变量中排除 NA,但我认为必须有一个基本函数或包,允许我通过 glmm 快速轻松地对 df1 进行子集化。

(很抱歉,如果有人回答了这个问题,但我的搜索尝试只是促使我了解如何在 lm 调用中使用子集功能)

我不知道如何使用内置功能执行此操作,但是 select在模型变量中包含 NA 的行是很常见的任务。可能有更简单的解决方案,但这是一个: 让我们从定义数据框和公式对象开始。请注意,前 10 个和最后 10 个观察值包含模型变量中的缺失。此外,我将公式放入公式对象中,因此我们既可以将其用于变量提取,也可以用于 运行 模型本身。

testDf <- data.frame(y = rnorm(100), x1 = c(rnorm(90), rep(NA, 10)),
           x2 = c(rep(NA, 10), runif(90)), x3 = rnorm(100, 3), 
           var_level = rbinom(100, size = 3, prob = 0.5))

form <- y ~ x1 + x2 + (1|var_level)

现在注意:all.vars(form) 给出了上面定义的公式中包含的所有变量。我们在 testDf 的所有 selected 列上使用 lapply 到 运行 is.na。结果列表由指示缺失值存在的逻辑向量组成。它可以使用 Reduce 函数和逻辑 OR 进行聚合。聚合是一个逻辑向量,指向至少一个模型变量中包含 NA 的所有行。因此,对于 select 余数,它需要被取反。这是在以下行中完成的。

testDf[!Reduce("|", lapply(testDf[all.vars(form)], is.na)), ]

查看行号,我们发现前 10 行和最后 10 行已被删除。