小鼠的插补方法-数据集的相关性。R

小鼠的插补方法-数据集的相关性。R,r,debugging,missing-data,imputation,r-mice,R,Debugging,Missing Data,Imputation,R Mice,我正在努力用老鼠来插补。主要目的是估算NAs(如有可能,按组)。 由于此示例对于此处的简单帖子来说有点大,因此可以下载: 我的问题是: 一般来说,相关数据有多大问题?我还能做些什么来估算数据? 这些数据是一个实证研究问题的一部分,我还不知道应该包含哪些变量,因此最好暂时保留尽可能多的变量 什么方法比“购物车”和“pmm”更合适?我不想简单地将平均数/中位数归为 我可以用“ID”来估算数据吗 调试技巧 这是我的密码 #Start require(mice) require(Hmisc) 'set

我正在努力用老鼠来插补。主要目的是估算NAs(如有可能,按组)。 由于此示例对于此处的简单帖子来说有点大,因此可以下载:

我的问题是:

  • 一般来说,相关数据有多大问题?我还能做些什么来估算数据? 这些数据是一个实证研究问题的一部分,我还不知道应该包含哪些变量,因此最好暂时保留尽可能多的变量

  • 什么方法比“购物车”和“pmm”更合适?我不想简单地将平均数/中位数归为

  • 我可以用“ID”来估算数据吗

  • 调试技巧

  • 这是我的密码

    #Start
    require(mice)
    require(Hmisc)
    'setwd(...)
    'test.df<-read.csv(...)
    str(test.df)
    
    #开始
    需要(老鼠)
    要求(Hmisc)
    'setwd(…)
    
    “test.df我认为问题的出现是因为你处理的是纵向数据,
    小鼠
    将观察结果视为独立的。纵向数据按ID进行聚类,处理这种情况的一种方法是使用多级(即混合)模型作为插补模型。
    老鼠
    有许多处理此类数据的选项,您可以在预测矩阵和插补方法中指定这些选项

    library(mice)
    setwd("X:/My Downloads")
    
    test.df <- read.csv("Impute.csv")
    
    您可以通过小鼠干运行(即0次迭代插补)轻松获得预测矩阵和插补方法

    该方法考虑了个体内观测值之间的较高相关性。总差异分为
    ID
    或个人层面的差异和
    年度
    或观察层面的差异

    注意,我还将数据集的数量从
    m=1
    更改为
    m=5
    <代码>鼠标
    用于计算多个插补,产生多个数据集。每个数据集略有不同,插补之间的差异用于反映缺失数据背后真实值的不确定性。如果只插补一个数据集,则不会获得此优势

    由于插补模型更为复杂,运行时间更长,但错误不再发生,插补方法更好地代表了数据结构(希望导致更准确的插补)


    对于多层次建模,我建议使用斯尼杰德斯和博斯克的《多层次分析》一书。mice手册还包含数据中NAs拟合值的一些信息。例如,可以通过将NAs替换为数据平均值来实现。我明白了,谢谢你的解释。我建议在课堂上提问你问题的理论/推理部分[,因为他们在统计知识方面有更多的经验。我不明白你为什么要排除相关列。如果你想插补值,来自强相关列的信息似乎最有用。或者你指的是自相关?那么我建议使用Amelia软件包,它可以在插补模型。您可能希望尝试单个插补包(如果您似乎不需要多个插补值)。它们通常更易于使用。例如,查看missForest、VIM、Inputer包。另一条评论:问题确实与强相关变量有关。另请参见此处。这只是使用鼠标的默认算法的一个问题。(glm)。如果您想继续使用鼠标,您也可以将method参数设置为另一个算法。嘿,Niek,回答得不错。@Juan从ID和年份中得到了错误。但是,在鼠标中实际包含该错误的良好研究。@Niek,稍后将查看您的答案。谢谢!@StupidWolf thx:)。删除后,错误会消失,这是有意义的描述数据纵向结构的变量。将观察值视为独立变量将在插补过程和任何后续分析中产生向下偏差的标准误差(见McCoach&Adleson,2010)。当进行单一插补而不是多重插补时,这一问题会加剧(见Graham,2009)。主要的问题是,这两种方法都会导致后续假设测试中的1型错误率过高。@Juan,最后的旁注:),因为缺少的观察很少(在x11中最差为1.3%)也许删除并不是一个坏主意。它比插补更容易,偏见和权力问题可能也没那么糟糕。我肯定认为使用多级多重插补会给出最好的估计,但对于您试图解决的问题来说,这可能有点过头了。
    #Simple example
    
    test.df2<-test.df[,-c(4,7,10,11)]
    test.df2
    sum(is.na(test.df2))
    
    imputation.df2<-mice(test.df2, m=1, seed=123456)
    imputation.df2$method
    test.df2.imp<-mice::complete(imputation.df2)
    
    Warning message:
    Number of logged events: 1 
    
    
    sum(is.na(test.df2.imp))
    
    
    imputation.df<-mice(test.df,m=1,seed = 66666)
    
     iter imp variable
      1   1  x1Error in solve.default(xtx + diag(pen)) : 
      system is computationally singular: reciprocal condition number = 1.49712e-16
    
    test123<- lapply(split(test.df, test.df$ID), function(x) mice::complete(mice(x, m = 1 ,seed = 987654)))
    Error in edit.setup(data, setup, ...) : nothing left to impute
    In addition: There were 19 warnings (use warnings() to see them)
    Called from: edit.setup(data, setup, ...)
    
    library(mice)
    setwd("X:/My Downloads")
    
    test.df <- read.csv("Impute.csv")
    
    test.df$ID <- as.integer(test.df$ID)
    
    ini<-mice(test.df,maxit=0)
    
    pred1<-ini$predictorMatrix
    pred1[,"ID"]<- -2 # set ID as class variable for 2l.norm
    pred1[,"year"]<- 2 # set year as a random effect, slopes differ between individuals
    
    # 2l.norm mixed model (heterogenous within group variance) 2l.pan (homogenous within group variance)
    #Work on method
    meth1<-ini$method
    meth1[which(meth1 == "pmm")] <- "2l.pan"
    
    imputation.df<-mice(test.df,m=5,seed = 66666, method = meth1, predictorMatrix = pred1)
    
     iter imp variable
      1   1  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      1   2  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      1   3  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      1   4  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      1   5  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      2   1  x1  x2  x3  x4  x5  x6  x7  x8  x9  x10  x11
      2   2  x1  x2  x3  x4  x5