Тесты ANOVA (правдоподобия) для моделей GLM (logisti c) выполняются на нескольких вмененных наборах данных в R - PullRequest
0 голосов
/ 11 марта 2020

Я использую mice, чтобы подготовить набор множественных наборов данных вменения, и на каждом из них запущены две вложенные обобщенные линейные модели. Теперь я хочу сравнить модели с использованием ANOVA (критерий Вальда или отношения правдоподобия). Я пробовал несколько подходов, которые дают совершенно разные ответы (медиан p = 0,018, mice::pool.compare = 0,194, miceadds :: micombine.chisquare = 0.147, and miceadds :: MIwaldtest` = 0.803), и я хотел проверьте, правильно ли я использовал каждый метод.

Я пришел к выводу, что последний (MIwaldtest) не должен использоваться для многократного вменения GLM ?? А также наткнулся на следующую очень полезную статью https://rdcu.be/b2NlV, в которой подробно рассматриваются подходы.


 dat <- tibble::rownames_to_column(mice::boys, "id")

 imp      <- mice::mice(dat, maxit = 2, m = 50, print = FALSE, seed = 1234)
#> Warning: Number of logged events: 1
 imp_list <- mitml::mids2mitml.list(imp)

 ## Fit individual models
 fit1 <- with(imp, glm(gen > levels(gen)[1] ~ hgt + hc + reg, family = binomial))
 fit0 <- with(imp, glm(gen > levels(gen)[1] ~ hgt + hc, family = binomial))  

 ## Calcuate LRT for each imputation 
 reg_lrt <- lapply(fit1$analyses, function(x) 
   drop1(x, "reg", test = "LRT")
 )

 ## Distribution of p values from individual LRT
 round(summary(sapply(reg_lrt, "[[", 2, 5)), 3)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   0.000   0.002   0.018   0.049   0.058   0.328

 ## Pool using Meng and Rubin (1992) method mice::pool.compare. 
 round(mice::pool.compare(fit1, fit0, method = 'likelihood')$pvalue, 3)
#> [1] 0.194

 ## Pool using miceadds::micombine.chisquare
 miceadds::micombine.chisquare(sapply(reg_lrt, "[[", 2, 4), 4)
#> Combination of Chi Square Statistics for Multiply Imputed Data
#> Using 50 Imputed Data Sets
#> F(4, 342.72)=1.711     p=0.14702

 ## Pool using miceadds::MIwaldtest
 qhat <- mitools::MIextract(fit1$analyses, fun = coef)
 u   <- mitools::MIextract(fit1$analyses, fun = vcov)
 pars <- names(qhat[[1]])
 des <- miceadds::create.designMatrices.waldtest( pars=pars, k=1)
 Cdes <- des$Cdes
 rdes <- des$rde
 Cdes[1, grepl("reg", pars)] <- 1  

 summary(miceadds::MIwaldtest( qhat, u, Cdes, rdes ))
#> Loading required namespace: CDM
#> Wald Test
#>        F df1      df2   pval
#> 1 0.0625   1 228.0297 0.8028
#> 
#> Linear Hypotheses
#>         est     se      t       df Pr(>|t|)   lo 95  hi 95    fmi
#> par1 0.4284 1.7132 0.2501 228.0297   0.8028 -2.9473 3.8041 0.4586

Создано в 2020-03-11 пакетом Представить (v0.3.0)

...