Как извлечь AIC и логарифм правдоподобия из объединенной GLM?

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

Вот как я пришел к данным:

data.imputed <- mice(data, m=5, maxit = 50, method = 'pmm', seed = 500)

И вот что я использовал для создания модели:

model.imputed1 <- with(data = data.imputed, expr = glm(dv ~ iv1 + iv2 + iv3, family=binomial))

model.imputed <- pool(model.imputed1)

Однако когда я бегу

AIC(model.imputed)

or

logLik(model.imputed)

если на то пошло, я получаю сообщение

Ошибка в UseMethod ("logLik"): не применимый метод для 'logLik', примененный к объекту класса "c ('mipo', 'data.frame')"

Похоже, это как-то связано с тем, как мыши хранят свои вмененные файлы. Есть ли способ извлечь эти две метрики (AIC и logLik) из этой модели? Как я могу преобразовать его в модель, из которой можно извлечь эти две метрики?

Спасибо!

TT


person Tea Tree    schedule 13.08.2018    source источник


Ответы (1)


Глядя на структуру результата pool, кажется, что mice::pool не хранит эту информацию.

str(pool(model.imputed1))
#Classes ‘mipo’ and 'data.frame':   0 obs. of  3 variables:
#  $ call  : language pool(object = model.imputed1)
#$ m     : int 40
#$ pooled:'data.frame': 3 obs. of  9 variables:
#  ..$ estimate: num  0.0722 -0.2533 -0.8663
#..$ ubar    : num  0.000422 0.000318 0.029756
#..$ b       : num  2.53e-06 3.41e-05 3.95e-04
#..$ t       : num  0.000425 0.000353 0.030162
#..$ dfcom   : int  10060 10060 10060
#..$ df      : num  9902 2765 9487
#..$ riv     : num  0.00615 0.10989 0.01362
#..$ lambda  : num  0.00611 0.09901 0.01343
#..$ fmi     : num  0.00631 0.09966 0.01364

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

Сначала получите все завершенные наборы данных в длинном формате.

L_df <- mice::complete(data.imputed,"long",include = F) 

Затем создайте несколько пустых векторов и получите количество вменений (в вашем случае m = 5).

AIC1<-c()
logLik1 <- c()
m <- max(L_df$.imp)

Затем оцените модель для каждого набора данных и сохраните AIC и LL в только что созданных пустых векторах.

for(i in 1:m){
  model.imputed1 <- glm(dv ~ iv1 + iv2 + iv3, family=binomial, data = L_df[which(L_df$.imp == m),])
  AIC1[i] <- AIC(model.imputed1)
  logLik1[i] <- logLik(model.imputed1)
}

Результатом этого цикла должно быть 5 значений для AIC, сохраненных в AIC1, и 5 значений LL, сохраненных в logLik1. Вы можете использовать эти значения для отчета о среднем AIC и его отклонении между наборами данных или для отчета о более надежных показателях, таких как медиана и диапазон (поскольку у вас есть только 5 значений).

person Niek    schedule 14.08.2018