MICE 的多重插补提供两倍于预期的行数
Multiple imputation with MICE provides twice the expected number of rows
我 运行 以下代码用于估算 2120 个观测值的 10 个数据帧。
我期望得到一个10 X 2120 = 21200个观测值的长数据帧,但我得到了42400个观测值,整个过程好像运行两次。前 3 列如下所示。
这不是什么大问题,因为我可以对前半部分进行子集化,但我想知道是否有人对此有解释。我的代码有问题吗?
谢谢
for (group in 0:1) {
predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
exclude=c("idme"))
imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
predictorMatrix = predictor.selection)
long.imputation = rbind(long.imputation,complete(imputation, action="long"))
} ````
row# .imp .id idme
1 1 1 5001
2 1 2 5002
3 1 3 5003
4 1 4 5004
...
2121 1 2120 8288
2122 2 1 5001
2123 2 2 5002
2124 2 3 5003
...
21200 10 2120 8288
21201 1 1 5001
21202 1 2 5002
21203 1 3 5003
21204 1 4 5004
...
23320 1 2120 8288
23321 2 1 5001
23322 2 2 5002
23324 2 3 5003
...
42400 10 2120 8288
由于 group
值 (0:1
) 未在循环中使用,因此使用 lapply
/replicate
将是一个不错的选择。
imputed_dataset <- function() {
predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
exclude=c("idme"))
imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
predictorMatrix = predictor.selection)
return(imputation)
}
result <- do.call(rbind, replicate(2, imputed_dataset(), simplify = FALSE))
result
我 运行 以下代码用于估算 2120 个观测值的 10 个数据帧。
我期望得到一个10 X 2120 = 21200个观测值的长数据帧,但我得到了42400个观测值,整个过程好像运行两次。前 3 列如下所示。
这不是什么大问题,因为我可以对前半部分进行子集化,但我想知道是否有人对此有解释。我的代码有问题吗?
谢谢
for (group in 0:1) {
predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
exclude=c("idme"))
imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
predictorMatrix = predictor.selection)
long.imputation = rbind(long.imputation,complete(imputation, action="long"))
} ````
row# .imp .id idme
1 1 1 5001
2 1 2 5002
3 1 3 5003
4 1 4 5004
...
2121 1 2120 8288
2122 2 1 5001
2123 2 2 5002
2124 2 3 5003
...
21200 10 2120 8288
21201 1 1 5001
21202 1 2 5002
21203 1 3 5003
21204 1 4 5004
...
23320 1 2120 8288
23321 2 1 5001
23322 2 2 5002
23324 2 3 5003
...
42400 10 2120 8288
由于 group
值 (0:1
) 未在循环中使用,因此使用 lapply
/replicate
将是一个不错的选择。
imputed_dataset <- function() {
predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
exclude=c("idme"))
imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
predictorMatrix = predictor.selection)
return(imputation)
}
result <- do.call(rbind, replicate(2, imputed_dataset(), simplify = FALSE))
result