R: Как установить подкадр данных на основе регрессионной модели (glmm) - PullRequest
0 голосов
/ 19 июня 2019

У меня большой набор данных (~ 60 тыс. Строк / наблюдений, ~ 200 столбцов / переменных), и я запустил серию обобщенных линейных смешанных моделей (glmm), используя lme4, используя некоторые из переменных.Многие из использованных переменных содержали пропущенные данные (я учел большую часть пропущенных данных, используя вменение или другие методы, где это уместно, но все еще довольно много осталось), поэтому очевидно, что многие строки были исключены из исходного фрейма данных из-за удаления по списку.

Теперь мне нужно выполнить некоторую описательную статистическую работу (в основном частоты из-за того, что многие переменные являются порядковыми / номинальными).

Существует ли простой способ установить исходный фрейм данных на основе данных наблюденийбыли включены в мои данные glmms?

Достаточно просто вызвать данные, используемые в модели:

glmm1 <- glmer (y ~ var1 + var2 + var5 + и т. д.+ (1 | var_level), data = df1) df1_glmm1_subset <-glmm1 @ frame </p>

Однако это возвращает только переменные, используемые в модели.Я хотел бы также провести описательное резюме по переменным, не включенным в эту модель (например, var3 и var4).

Я мог бы написать длинное и грязное подмножество, которое исключает NA из переменных модели, но рисунок там имеетбыть базовой функцией или пакетом, который позволяет мне быстро и легко подменять df1 на glmm.

(извиняюсь, если на этот вопрос был дан ответ, но мои попытки поиска просто подталкивают меня к тому, как использовать функцию подмножества в lmзвоните)

1 Ответ

1 голос
/ 19 июня 2019

Я не знаю, как это сделать, используя встроенную функциональность, но выбор строк, содержащих 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 для запуска is.na во всех выбранных столбцах testDf. Результирующий список состоит из логических векторов, указывающих на наличие пропущенных значений. Он может быть агрегирован с использованием функции Reduce и логического ИЛИ. Агрегация - это логический вектор, указывающий на все строки, содержащие NA, по крайней мере, в одной из переменных модели. Следовательно, чтобы выбрать остаток, его нужно отменить. Это сделано в следующей строке.

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

Взглянув на круглые числа, мы видим, что первый и последний 10 рядов были удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...