用鼠标输入 data.frame 的所有列中的值

Imputing values in all columns of data.frame with mice

我正在尝试使用鼠标使用线性模型来估算值。我对鼠标的理解是它遍历行。对于具有 NA 的列,它使用所有其他列作为预测变量,拟合模型,然后从此模型中采样以填充 NA。 这是一个示例,其中我生成了一些数据,然后使用截肢引入了缺失的数据。

    n <- 100
    xx<-data.frame(x = 1:n + rnorm(n,0,0.1), y =(1:n)*2 + rnorm(n,0,1))
    head(xx)
    res <- (ampute(xx))
    head(res$amp)

缺失的数据如下所示:

            x         y
   1       NA  3.887147
   2 2.157168        NA
   3 2.965164  6.639856
   4 3.848165  8.720441
   5       NA 11.167439
   6       NA 12.835415

然后我试图估算丢失的数据:

   mic <- mice(res$amp,diagnostics = FALSE )

而且我希望没有,但其中一列中总是有 NA。

 colSums(is.na(complete(mic,1)))

两者中哪一个比较随机。

通过运行上面的代码我得到:

 > colSums(is.na(complete(mic,1)))
  x  y 
  0 30 

还有 :

 > colSums(is.na(complete(mic,1)))
  x  y 
 33  0 

我试过运行你的代码,结果遇到了同样类型的问题:

library(mice)
n <- 100
xx<-data.frame(x = 1:n + rnorm(n,0,0.1), y =(1:n)*2 + rnorm(n,0,1))
head(xx)
res <- (ampute(xx))
head(res$amp)

如果您查看 mice 调用中的 summary,那么您会发现有问题。我的数据给出

tempData <- mice(res$amp,m=5,maxit=50,seed=500)
summary(tempData)
Multiply imputed data set
Call:
mice(data = res$amp, m = 5, maxit = 50, seed = 500)
Number of multiple imputations:  5
Missing cells per column:
 x  y 
21 23 
Imputation methods:
    x     y 
"pmm" "pmm" 
VisitSequence:
x 
1 
PredictorMatrix:
   x  y
x  0  0
y  0  0
Random generator seed value:  500 

这里有两个指标。一个是 VisitSequence,它表明仅访问了第一列 x,而不是列 y。此外,PreditorMatrix 仅在非对角线上包含零,因此 none 的预测变量使用来自任何其他预测变量的信息。

问题出在你的模拟数据中,因为两列太共线了,中给出了类似的解决方案。因为 y 列基本上是 x 列值的两倍,所以它被默默地从分析中丢弃。

尝试模拟几乎不是完全线性的数据,它会起作用。例如二次关系

n <- 100
xx<-data.frame(x = 1:n + rnorm(n,0,0.1), y =(1:n)**2 + rnorm(n,0,1))
head(xx)
res <- (ampute(xx))
head(res$amp)