我有一个大的数据集(~60k行/观测,~200列/变量),并使用一些变量使用lme4运行了一系列广义线性混合模型(glmm)。使用的许多变量都有丢失的数据(我已经使用估算或其他方法(在适当情况下仍然有相当多的方法)来解释丢失的数据),因此很明显,由于列表删除,许多行被排除在原始数据框架之外。
我现在需要做一些描述性的统计工作(主要是由于许多变量是序数/标称的频率)。
是否有一种简单的方法来对原始数据框架进行子集,根据这些数据框架在给定的glmms中包含观测结果?
很容易调用模型中使用的数据:
glmm1 <- glmer(y~ var1 + var2 + var5 + etc + (1|var_level),data = df1) df1_glmm1 1_子集<-glmm1 1@frame
但是,这只返回模型中使用的变量。我还想对模型中没有包含的变量(例如var3和var4)进行描述性总结。
我可以编写一个长而脏的子集,它将NAs排除在模型变量之外,但是数字必须有一个基本函数或包,它允许我快速方便地用glmm子集df1。
(如果已经回答了这一点,很抱歉,但我的搜索尝试只是促使我在lm调用中使用子集功能)
发布于 2019-06-19 17:06:15
我不知道如何使用build in功能来完成这个任务,但是选择模型变量中包含NA的行是非常常见的任务。可能有更简单的解决方案,但这是一个:让我们从定义dataframe和公式对象开始。注意,第一个和最后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)给出了包含在上面定义的公式中的所有变量。我们使用lapply在所有选定的testDf列上运行is.na。结果列表由表示缺失值存在的逻辑向量组成。它可以使用Reduce函数和逻辑OR进行聚合。聚合是一个逻辑向量,指向至少一个模型变量中包含NA的所有行。因此,要选择余数,它需要被否定。这是在下一行中完成的。
testDf[!Reduce("|", lapply(testDf[all.vars(form)], is.na)), ]通过查看行号,我们可以看到第一行和最后10行已经被删除。
https://stackoverflow.com/questions/56672361
复制相似问题