R:如何基于回归模型(glmm)子集数据框

时间:2019-06-19 16:40:24

标签: r regression subset mixed-models

我有一个大数据集(〜60k行/观察值,〜200列/变量),并且使用lme4并使用一些变量运行了一系列广义线性混合模型(glmm)。使用的许多变量都有丢失的数据(我在适当的情况下使用插补或其他方法解决了很多丢失的数据,但是仍然有很多剩余),因此显然由于列表删除而从原始数据帧中排除了许多行。 / p>

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

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

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

  

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

但是,这仅返回模型中使用的变量。我也想对该模型中未包含的变量(例如var3和var4)执行描述性摘要。

我可以编写一个冗长且肮脏的子集,该子集将模型变量中的NA排除在外,但必须有一个基本函数或程序包,该函数或程序包可以让我通过glmm轻松快速地对df1进行子集化。

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

1 个答案:

答案 0 :(得分:1)

我不知道如何使用内置功能来做到这一点,但是在modelvariables中选择包含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)给出上面定义的公式中包含的所有变量。我们使用lapplyis.na的所有选定列上运行testDf。结果列表由指示缺失值存在的逻辑向量组成。可以使用Reduce函数和逻辑OR进行汇总。聚集是一个逻辑向量,指向至少一个模型变量中包含NA的所有行。因此,要选择其余部分,需要将其取反。这是在下一行中完成的。

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

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