我试图使用鼠标使用线性模型来估算值。我对老鼠的理解是它遍历行。对于具有NA的列,它使用所有其他列作为预测变量,拟合模型,然后从该模型中采样以填充NA。 这是一个我生成一些数据的例子,而不是使用ampute引入缺失的数据。
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
答案 0 :(得分: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)
如果您查看summary
来电中的mice
,那么您会看到出现问题。我的数据给出了
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
仅在非对角线上包含零,因此没有预测变量使用来自任何其他预测变量的信息。
问题在于您的模拟数据,因为两列太过共线,this detailed answer中给出了类似的解决方案。由于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)