r - R:如何基于回归模型(glmm)对数据框进行子集化
问题描述
我有一个大型数据集(~60k 行/观察,~200 列/变量),并使用 lme4 使用一些变量运行了一系列广义线性混合模型(glmm)。使用的许多变量都有缺失数据(我已经在适当的情况下使用插补或其他方法计算了大部分缺失数据,但仍然有很多),因此很明显,由于列表删除,许多行被排除在原始数据框中。
我现在需要做一些描述性的统计工作(主要是由于许多变量是序数/名义的频率)。
有没有一种简单的方法可以根据我给定的 glmms 中包含的观察结果对原始数据框进行子集化?
调用模型中使用的数据很容易:
glmm1 <- glmer(y~ var1 + var2 + var5 + etc + (1|var_level), data = df1) df1_glmm1_subset<-glmm1@frame
但是,这只返回模型中使用的变量。我也想对该模型中未包含的变量(例如 var3 和 var4)进行描述性总结。
我可以编写一个从模型变量中排除 NA 的又长又脏的子集,但我认为必须有一个基本函数或包允许我通过 glmm 快速轻松地对 df1 进行子集。
(抱歉,如果这个问题已经得到解答,但我的搜索尝试只是让我了解如何在 lm 调用中使用子集功能)
解决方案
我不知道如何使用内置功能来做到这一点,但是在模型变量中选择包含 NA 的行是很常见的任务。可能还有更简单的解决方案,但这是一个:让我们从定义数据框和公式对象开始。请注意,第一个和最后 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
运行。结果列表由指示缺失值存在的逻辑向量组成。它可以使用函数和逻辑 OR 进行聚合。聚合是一个逻辑向量,指向至少一个模型变量中包含 NA 的所有行。因此,要选择余数,它需要被否定。这是在以下行中完成的。is.na
testDf
Reduce
testDf[!Reduce("|", lapply(testDf[all.vars(form)], is.na)), ]
查看行号,我们看到前 10 行和最后 10 行已被删除。
推荐阅读
- python - 使用 tf.Dataset 加载和预处理数据的问题
- node.js - 在 Node.js 中编写脚本时如何使用“cd”移动到另一个文件夹?
- r - 根据 R 中的组创建 ggplot2 图例?
- python - 在opencv(python)中检测这两个对象之间碰撞的最佳方法是什么?
- java - Spring Boot 中的接口注解
- typescript - Nativebase React Native 为什么我不能在输入中传递数字
- react-native - 我在 Google Play 上发布的 Expo App 仍然安装旧版本
- c++ - 在检查它是否是素数之前检查数字是否是偶数(当然> 2)会提高性能吗?
- mysql - C - 替代使用 snprintf 来准备 MySQL 语句?
- wso2 - 在 wso2 API-Management 中,如何只将网关与另一个 vm 分开?