Описательная и логическая статистика для нескольких вмененных и рейковых наборов данных - PullRequest
0 голосов
/ 18 апреля 2020

У меня достаточно большой набор данных (n ~ 6400), с несколькими пропусками (<1%) по большинству переменных, некоторыми пропусками (1-4%) по нескольким переменным и одной переменной с пропуском около 10%. Выборка является репрезентативной для некоторых важных демографических данных (например, данные, регион), но также значительно отличается в других. </p>

Цель анализа - представить оба варианта: а) распространенность некоторых ключевых переменных (т.е. описательная статистика) и b) предикторы, влияющие на некоторые ключевые переменные (например, статистику логического вывода с использованием glm / lm).

Мой текущий рабочий процесс выглядит следующим образом a) импорт данных b) очистка данных c) многократное вменение с использованием пакета мышей d) грабли с использованием пакета обследования, на основе совместного и предельного распределения, взятого из данных национальной переписи.

Пример воспроизведения (мой набор данных намного более сложный, хотя):

set.seed(123)
library(mice)
library(mitools)
library(survey)
nhanes

# Multiple Imputation
imp <- mice(nhanes)

# lm fit with imputed dataset (to compare results)
fit <-with(imp, lm(bmi~chl+hyp+age))

#Creating an ImputationList
mi_list <- imputationList(lapply(1:imp$m, function(n) mice::complete(imp, action = n)))

Снятие вмененного набора данных, вдохновленного этим ответом Снятие множественного вмененного набора данных

des <- svydesign(id=~1,data=mi_list)
imp.rake <- des #copy design structure


#Creating marginal distribution for variable chl with made up frequencies to be used for raking
chl.dist <- data.frame(chl = c("113","118","131","184","186","187","199","204","206","218","229","238","284"),
                          Freq = 1324 * c(0.12, 0.1,    0.08,   0.07,   0.05,   0.07,   0.1,    0.07,   0.08,   0.09,   0.05,   0.06,   0.06)
)

# apply rake function to each imputation
imp.rake$designs <- 
  lapply( 
    des$designs , 
    rake,
    sample.margins = list(~chl),
    population.margins = list(chl.dist)
  )

# Trim Weights to 1/100 and 100 (not necessary in this particular example)
imp.rake$designs <- 
  lapply( 
    imp.rake$designs, 
    trimWeights,
    lower=0.01,upper=100,trim=TRUE)

Наконец, я сравниваю подгонку обеих моделей

summary(pool(fit)) #raw
fit2 <-with(imp.rake, svyglm(bmi~chl+hyp+age))
summary(MIcombine(fit2))

Вопросы

  1. Является ли этот общий рабочий процесс для создания вмененного и взвешенного набора данных правильным?
  2. Чтобы сообщить о Если исходить из исходных необработанных данных, а также из нескольких вмененных и взвешенных данных, было бы неплохо иметь объединенную или усредненную версию последних, которая позволила бы мне применять одну и ту же сводную статистику к обоим. Например, сейчас я использую пакет compareGroups для сводной статистики, но я не могу использовать это для объекта svyimputationlist. Или было бы более разумно просто набирать (не вменять) и преобразовывать svydesign в фрейм данных (как в Как преобразовать "svyrep.design" 'в data.frame? ) для описательной статистики?
  3. Как мне получить p-значения из моего glm? Я видел этот урок здесь https://francish.netlify.com/post/multiple-imputation-in-r-with-regression-output/, но, похоже, он работает только для lm.
...