代码之家  ›  专栏  ›  技术社区  ›  Niek

小鼠在尝试输入多水平数据时的错误

  •  3
  • Niek  · 技术社区  · 8 年前

    我一直在努力解决一个问题 mice 试图用两个层次上缺失的数据来填充多级数据。我花了一些时间,但我终于重新创建了错误,这似乎发生在 老鼠 尝试在 sampler 功能。我有一个变量表示测试版本,但只与第一次测量相关(之后是常数)。这个变量似乎导致了这个错误。

    使用时 "2lonly.pmm" 作为变量的插补方法 老鼠 返回错误: Error in get("state", parent.frame(frame)) : object 'state' not found 使用任何其他方法都不会导致错误。通常 老鼠 将创建一个记录事件,说明变量(或某个因素的某个级别)已从插补过程中删除。但是当方法是 “2Lim.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)
    

    我在用 老鼠 版本3.0.0和R3.5.0

    1 回复  |  直到 8 年前
        1
  •  2
  •   Niek    8 年前

    我问包装的设计者 GitHub 很显然,这是MICE v3.0.0中的一个bug。在本版本中,可以通过将方法更改为岭回归来解决此问题: ls.meth = "ridge" 其缺点是在结果中引入了一个小的偏差。

    设计人员在更新(v3.0.9)中修复了这个bug,可以使用

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

    希望这能帮助遇到同样问题的人。

    推荐文章