用鼠标输入 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)
我正在尝试使用鼠标使用线性模型来估算值。我对鼠标的理解是它遍历行。对于具有 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)