Описательная статистика по подгруппе после вменения с использованием MICE

Я хочу создать описательную статистику для разных подгрупп после многократного вменения с помощью MICE.

У меня есть набор данных, который включает лекарство и возраст, который я рассчитал.

id <- c(1,2,3,4,5,6,7,8,9,10)  
age <- c(60, 80, 70, NA, 49, 30, NA, 59, 79, NA)
 medication <- c("yes", "no") 
 dat <- data.frame(id, age, medication)
 imp_1 <- mice(dat, maxit = 0)
 meth <- imp_1$method
 pred <- imp_1$predictorMatrix
 imp <- mice(dat, method = meth, predictorMatrix = pred, maxit = 10, m = 5, seed = 2018)

Поэтому я вменял НС по возрасту, используя информацию об идентификаторе и использовании лекарств (конечно, это не касается качества вменения, а просто для создания примера).

Я хочу подсчитать, сколько у меня людей, принимающих тиазидные диуретики, в группе людей старше 75 и младше 75 лет. Я попробовал два кода:

 subgroup <- with(imp, expr= table(age>75), subset=(medication=="yes"))
 withPool_MI(subgroup)

 subgroup1 <- with(imp, expr= table(age>75, medication==1))
 withPool_MI(subgroup1)

Однако оба кода, к сожалению, не работают. Итак, я хочу следующее:

          0    1
age>75
age<75

Я хочу, чтобы эта таблица была заполнена, чтобы указать количество пользователей и непотребителей лекарства в обеих возрастных категориях. Кто-нибудь может мне помочь?

(Я впервые создал воспроизводимый пример, поэтому, если он неверен или не работает, дайте мне знать!)


person Community    schedule 20.10.2018    source источник
comment
Добро пожаловать на SO. Пример хорош, но немного информации отсутствует. Во-первых, требуется library(mice), что несложно, потому что это довольно распространенная библиотека. Однако withPool_MI, из какого он пакета? Всегда лучше вставить последний пример в только что начатый сеанс R или использовать reprex (легко в Google).   -  person Dieter Menne    schedule 20.10.2018
comment
Спасибо за советы. Я сделаю это в следующий раз! (А withPool_MI есть от miceadds)   -  person    schedule 22.10.2018


Ответы (2)


вам нужно использовать complete() функцию mice. для описательной статистики я использую dplyr и tidyr (оба в пакете tidyverse).

library(tidyverse)
library(mice)

complete(imp, 1) %>% 
  # generate age groups
  mutate(Age_Group = case_when(age >= 75 ~ "age > 75",
                               TRUE ~ "age <= 75")) %>% 
  # aggregate groups
  count(medication, Age_Group) %>% 
  # make the clean table
  spread(medication, n)

вывод:

# A tibble: 2 x 3
  Age_Group    no   yes
  <chr>     <int> <int>
1 age <= 75     3     3
2 age > 75      2     2
person Stephan    schedule 20.10.2018
comment
Спасибо, это сработало! Однако, если у меня есть пять наборов данных, я получаю 5 разных таблиц, верно? Потому что в одном наборе данных возраст может быть условно исчислен как 76, а в другом - как 74. Могу ли я тогда просто взять среднее значение и объединить таблицы? - person ; 22.10.2018
comment
Для этого вам нужно определить set.seed(). посмотрите его документацию или stackoverflow.com/a/27292162/8598377. Надеюсь это ответит на твой вопрос? - person Stephan; 22.10.2018

Я имею дело с той же проблемой, но если вы используете полную функцию, вы не будете генерировать описания для всех наборов данных, верно? Потому что, если я вменю 5 раз, все 5 будут разными. Есть ли способ объединить эти результаты?

person Liesje65    schedule 20.10.2018
comment
Добро пожаловать в stackoverflow. Мы не дискуссионный форум, а форум вопросов и ответов. Если вы публикуете ответ (как вы это сделали здесь), убедитесь, что вы отвечаете на вопрос. - person Simon.S.A.; 21.10.2018