8 votos

Diagnosticar por qué MICE está bloqueando R al intentar imputar datos multinivel

Nunca he tenido problemas con la R antes de estrellarse.

Estoy usando el mice paquete (ratones 2.13) para realizar múltiples imputaciones. El código funciona bien en algunos subconjuntos de los datos, pero cuando lo corro en otros subconjuntos de R se bloquea (no inmediatamente - después de algún tiempo). Desde la salida en la I justo antes de que se estrelle, creo que es el uso de la 2l.pan método de imputación (de la pan paquete) he de ejecutar la actualización.paquetes() ya.

¿Cómo puedo diagnosticar este problema ?

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: Rgui.exe
  Application Version:  2.151.59607.0
  Application Timestamp:    4fe47a63
  Fault Module Name:    R.dll
  Fault Module Version: 2.151.59607.0
  Fault Module Timestamp:   4fe47a4e
  Exception Code:   c0000005
  Exception Offset: 0000000000032ec8
  OS Version:   6.1.7601.2.1.0.256.4
  Locale ID:    2057
  Additional Information 1: 7782
  Additional Information 2: 77823beb5887f451c3dd7ae4fe931995
  Additional Information 3: 4491
  Additional Information 4: 4491b41bf90894717964f5eef2cccd84

Actualización

He conseguido crear un reproducible ejemplo, con los datos:

require(foreign)
require(mice)
require(pan)

dt.fail <- read.csv("http://goo.gl/pg8um")
dt.fail$X <- NULL

dt.fail$out <- as.factor(dt.fail$out )
dt.fail$grp<- as.factor(dt.fail$grp)
dt.fail$v1<- as.factor(dt.fail$v1)
dt.fail$v2<- as.factor(dt.fail$v2)
dt.fail$v3 <- as.factor(dt.fail$v3)
dt.fail$v7<- as.factor(dt.fail$v7)
dt.fail$v8 <- as.factor(dt.fail$v8)
dt.fail$v9 <- as.factor(dt.fail$v9)
dt.fail$v11 <- as.factor(dt.fail$v11)
dt.fail$v12 <- as.factor(dt.fail$v12)


PredMatrix <- quickpred(dt.fail)
PredMatrix['CTP',] <- c(1,-2,0,0,0,0,0,0,0,0,1,0,1,1,0,2)



impute = mice(
data=dt.fail, 
    m = 1, 
    maxit = 1,
    imputationMethod = c(
    "logreg",   # out
    "",      # grp   ----> cluster grouping factor
    "pmm",  # v1
    "polyreg",  # v2
    "logreg",   # v3
    "pmm",  # v4
    "logreg",   # v5
    "logreg",   # v6
    "polyreg",  # v7 ----> auxilliary
    "polyreg",  # v8 ----> auxilliary
    "polyreg",  # v9 ----> auxilliary
    "polyreg",  # v10 ----> auxilliary
    "",     # v11 ----> complete
    "",     # v12 ----> complete
    "2l.pan",   # CTP ----> multilevel imputation
    ""),        # const ----> needed for multilevel impuitation

predictorMatrix = PredMatrix, seed = 101
)

Y para completar, aquí es el predictor de la matriz que estaba usando:

    .     out grp v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 CTP const
out     0   0  0  0  0  0  1  1  0  0  0   0   0   0   0     0
grp     0   0  0  0  0  0  0  0  0  0  0   0   0   1   0     0
v1      0   0  0  0  0  0  0  0  0  0  0   0   1   1   0     0
v2      0   0  0  0  0  1  1  1  0  1  0   0   1   1   1     0
v3      0   0  0  0  0  1  1  1  0  1  1   0   1   1   1     0
v4      0   0  0  1  1  0  1  1  0  1  1   0   1   1   1     0
v5      1   1  0  0  0  0  0  1  0  1  0   0   1   0   0     0
v6      1   1  0  1  0  1  1  0  0  1  0   0   1   0   0     0
v7      0   0  0  0  0  0  1  1  0  1  0   0   0   1   0     0
v8      0   0  0  0  0  0  1  1  0  0  0   0   1   1   0     0
v9      0   0  0  0  1  1  1  1  0  1  0   0   1   1   1     0
v10     0   0  0  0  0  0  1  1  0  1  0   0   1   1   0     0
v11     0   0  0  0  0  0  0  0  0  0  0   0   0   0   0     0
v12     0   0  0  0  0  0  0  0  0  0  0   0   0   0   0     0
CTP     1  -2  0  0  0  0  0  0  0  0  1   0   1   1   0     2
const   0   0  0  0  0  0  0  0  0  0  0   0   0   0   0     0

5voto

Stef van Buuren Puntos 1130

De vez en cuando tiene problemas con el 2l métodos para datos de gran tamaño, pero nunca he visto a R a sí mismo accidente. Mi conjetura sería que ellos están relacionados con la escasez de datos (grupos pequeños). Cómo muchos predictores ¿tiene usted en relación a que el tamaño del clúster?

Algunas sugerencias:

En sus datos, usted tiene varias covariables que tienen incompletos los datos, pero que no están imputados. Por favor, compruebe si mice elimina antes de la imputación, estableciendo maxit = 0 e inspecciona imp$log. Si desea utilizar estos como predictores, usted debe especificar un método de imputación para ellos.

El mice paquete no hace uso de ningún propios fortran o C código, pero pan de mayo (no sé). Si usted está realmente decidido a encontrar la fuente del problema, le sugiero que consulte el libro de Matloff, que contiene el capítulo sobre las avanzadas técnicas de depuración.

La obvia otra vía es la de tratar de simplificar el modelo. Quitar superfluo predictores, utilice un archivo plano (por ejemplo pmm) con el clúster de asignación como un factor fijo, y comprobar si la intra-clase correlaciones observadas y imputar los datos son similares.

El término de intersección se agrega automáticamente por los ratones.imputar.2l.pan', por lo que no necesita eso.

Espero que esto ayude.

4voto

Bruce ONeel Puntos 391

He encontrado lo que está causando el accidente - había un valor que faltaba en grp (que no estaba siendo imputado). Sin embargo, no parece muy bien que se bloquea R! despues de correr

 dt.fail <- dt.fail[!is.na(dt.fail$grp),]
 

Ya no se bloquea, sino que genera el error siguiente:

 Error in order(dfr$group) : argument 1 is not a vector
 

Voy a publicar una pregunta separada sobre eso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X