Ошибка у мышей при попытке вменять многоуровневые данные - PullRequest
0 голосов
/ 06 июня 2018

Я боролся с проблемой в mice, пытаясь приписать многоуровневые данные отсутствующим данным на обоих уровнях.Это заняло у меня некоторое время, но мне, наконец, удалось воссоздать ошибку, которая возникает, когда mice пытается создать зарегистрированные события в функции sampler.У меня есть одна переменная, которая указывает тестовую версию, но относится только к первому измерению (после этого это константа).Эта переменная, кажется, вызывает ошибку.

При использовании "2lonly.pmm" в качестве метода вменения для переменной mice возвращает ошибку: Error in get("state", parent.frame(frame)) : object 'state' not found Использование любого другого метода не приводит к ошибке.Обычно mice создает зарегистрированное событие, сообщающее, что переменная (или некоторый уровень в случае фактора) удаляется из процесса вменения.Но почему-то он не создает зарегистрированное событие, когда метод "2lonly.pmm".Приветствуется любая помощь в решении этой проблемы

Это набор данных со страницы справки mice.impute.2lonly.pmm:

G <- 250            # number of groups
n <- 20             # number of persons
beta <- .3          # regression coefficient
rho <- .30          # residual intraclass correlation
rho.miss <- .10     # correlation with missing response
missrate <- .50     # missing proportion
y1 <- rep( rnorm( G , sd = sqrt( rho ) ) , each=n ) + rnorm(G*n , sd = sqrt( 1 - rho )) 
w <- rep( round( rnorm(G ) , 2 ) , each=n )
v <- rep( round( runif( G , 0 , 3 ) ) , each=n )
x <-  rnorm( G*n ) 
y <- y1 + beta  * x + .2 * w + .1 * v
dfr0 <- dfr <- data.frame( "group" = rep(1:G , each=n ) , "x" = x , "y" = y , "w" = w , "v" = v )
dfr[ rho.miss * x + rnorm( G*n , sd = sqrt( 1 - rho.miss ) ) < qnorm( missrate ) , "y" ] <- NA
dfr[ rep( rnorm(G) , each=n ) < qnorm( missrate ) , "w" ] <- NA
dfr[ rep( rnorm(G) , each=n ) < qnorm( missrate ) , "v" ] <- NA

Это воссоздание типа переменных, которые создают ошибку

dfr$test <- rep(1:20,length(unique(dfr$group)))
dfr$version[dfr$test == 1]<- sample(0:2,length(unique(dfr$group)),replace = T)
dfr$version[dfr$test > 1]<- 3 # test

И процесс вменения

# empty mice imputation
imp0 <- mice(dfr  , maxit=0 )
predM <- imp0$predictorMatrix # Predictor matrix
impM <- imp0$method # Method

#...
# multilevel imputation
predM[c("y","v"),"group"] <- -2 # indicate grouping variable
impM[c("y","w","v")] <- c("2l.pan" , "pmm" , "2lonly.pmm" )


# y ... imputation using 2l.pan
# w ... imputation at level 2 using pmm
# v ... imputation at level 2 using 2lonly.pmm

imp <- mice(dfr, m = 1, pred = predM , 
            method= impM, maxit = 1)

Я использую mice версия 3.0.0 и R 3.5.0

1 Ответ

0 голосов
/ 11 июня 2018

Я спросил дизайнеров пакета на GitHub , и, видимо, это ошибка в мышах v3.0.0.В этой версии ее можно решить, изменив метод на регрессию гребня: ls.meth = "ridge", что имеет недостаток, заключающийся в небольшом смещении в результатах.

Разработчики исправили эту ошибку в обновлении (v3.0.9)который можно установить с помощью

devtools::install_github(repo = "stefvanbuuren/mice")

Надеюсь, это поможет людям, столкнувшимся с той же проблемой.

...