如何应用 lm 或 glm 以外的模型来乘以估算数据?
How to apply a model other than lm or glm to multiply imputed data?
我有一个数据集,其中包含一个人 ID 和一个名为 sevenup 的问卷的 6 个答案:
> names(sevup_mice_data)
[1] "record_id" "sevenup_01" "sevenup_02" "sevenup_03" "sevenup_04" "sevenup_05" "sevenup_06" "sevenup_07"
所有答案都是 0 到 5 之间的数字。
sevenup_06
列中有缺失值,所以我想使用 mice
来估算它。
这是我到目前为止所做的:
sevup_mice <- mice(sevup_mice_data, m = 5, method = "pmm", seed = 0,
predictorMatrix = quickpred(sevup_mice_data, exclude = "record_id"))
现在,在我看到的大多数鼠标教程中,人们使用线性模型并获得拟合参数,然后使用 pool
加入结果,例如:
fit <- with(sevup_mice, exp = lm(sevenup_05 ~ sevenup_04 + sevenup_06))
pool(fit)
但是,我不需要对我的数据进行lm
拟合,我只想得到每个人的最终分数,即每个问题答案的总和。
如果我不估算数据,我会这样计算:
sevup_mice_data$sevup_score <- rowSums(sevup_mice_data[2:ncol(sevup_mice_data)], na.rm=TRUE)
所以我想对 sevup_mice
中包含的 5 个推算数据集的每一个都这样做,有没有办法不用循环就可以做到这一点,例如使用 with
函数?
之后,我可以用 pool
汇总结果吗,因为我的分析结果不是拟合参数,而是单列 ?
让我们试试这个:
library(mice)
set.seed(100)
mat = matrix(rnorm(100,rep(1:10,10)),ncol=10)
mat[sample(length(mat),20)]<-NA
然后我们估算:
imp = mice(mat,m = 5, method = "pmm")
有一个函数调用 complete
基本上使用每个插补来完成矩阵:
impdata = complete(imp,"all")
head(impdata[[1]])
V1 V2 V3 V4 V5 V6 V7 V8
1 5.116971 8.086186 0.561910 0.9088864 0.8983708 0.5529378 0.7380042 6.0127497
2 6.318630 2.096274 2.764061 3.8888065 4.4777166 0.2614021 6.5819589 0.9356443
3 2.921083 8.086186 3.261961 2.8620704 1.2232244 3.1788648 2.6211164 2.9379040
4 4.886785 6.611146 4.773405 3.8888065 4.6228674 5.8974657 6.5819589 2.9379040
5 5.116971 5.123380 4.185621 4.3099857 4.4777166 2.7280745 5.1298341 2.9379040
6 6.318630 5.970683 5.561549 5.7782058 7.3222310 6.9804641 5.2869750 6.0127497
V9 V10
1 1.896822 0.4428777
2 5.842095 3.4283014
3 1.654651 7.8213169
4 2.068788 2.8424288
5 5.709582 4.4697035
6 5.842095 0.4428777
如果您想对每个估算的数据集执行 rowSums,您可以:
sapply(impdata,rowSums)
1 2 3 4 5
[1,] 25.21572 25.27762 26.85518 18.89534 23.55415
[2,] 36.59489 44.62157 43.48562 48.05143 35.17675
[3,] 36.56838 34.46168 31.17314 30.25396 32.26478
[4,] 45.11155 47.54594 46.59836 47.54594 45.11155
[5,] 44.18877 44.18877 44.18877 44.18877 44.18877
[6,] 55.51646 62.89490 63.89955 57.91601 58.50188
[7,] 65.75129 68.00360 70.00043 65.89644 68.00360
[8,] 77.44877 83.87630 86.05698 86.05698 87.27713
[9,] 86.65979 91.35599 89.35916 86.65979 90.15827
[10,] 85.19222 90.37659 84.34492 86.62083 88.81410
我有一个数据集,其中包含一个人 ID 和一个名为 sevenup 的问卷的 6 个答案:
> names(sevup_mice_data)
[1] "record_id" "sevenup_01" "sevenup_02" "sevenup_03" "sevenup_04" "sevenup_05" "sevenup_06" "sevenup_07"
所有答案都是 0 到 5 之间的数字。
sevenup_06
列中有缺失值,所以我想使用 mice
来估算它。
这是我到目前为止所做的:
sevup_mice <- mice(sevup_mice_data, m = 5, method = "pmm", seed = 0,
predictorMatrix = quickpred(sevup_mice_data, exclude = "record_id"))
现在,在我看到的大多数鼠标教程中,人们使用线性模型并获得拟合参数,然后使用 pool
加入结果,例如:
fit <- with(sevup_mice, exp = lm(sevenup_05 ~ sevenup_04 + sevenup_06))
pool(fit)
但是,我不需要对我的数据进行lm
拟合,我只想得到每个人的最终分数,即每个问题答案的总和。
如果我不估算数据,我会这样计算:
sevup_mice_data$sevup_score <- rowSums(sevup_mice_data[2:ncol(sevup_mice_data)], na.rm=TRUE)
所以我想对 sevup_mice
中包含的 5 个推算数据集的每一个都这样做,有没有办法不用循环就可以做到这一点,例如使用 with
函数?
之后,我可以用 pool
汇总结果吗,因为我的分析结果不是拟合参数,而是单列 ?
让我们试试这个:
library(mice)
set.seed(100)
mat = matrix(rnorm(100,rep(1:10,10)),ncol=10)
mat[sample(length(mat),20)]<-NA
然后我们估算:
imp = mice(mat,m = 5, method = "pmm")
有一个函数调用 complete
基本上使用每个插补来完成矩阵:
impdata = complete(imp,"all")
head(impdata[[1]])
V1 V2 V3 V4 V5 V6 V7 V8
1 5.116971 8.086186 0.561910 0.9088864 0.8983708 0.5529378 0.7380042 6.0127497
2 6.318630 2.096274 2.764061 3.8888065 4.4777166 0.2614021 6.5819589 0.9356443
3 2.921083 8.086186 3.261961 2.8620704 1.2232244 3.1788648 2.6211164 2.9379040
4 4.886785 6.611146 4.773405 3.8888065 4.6228674 5.8974657 6.5819589 2.9379040
5 5.116971 5.123380 4.185621 4.3099857 4.4777166 2.7280745 5.1298341 2.9379040
6 6.318630 5.970683 5.561549 5.7782058 7.3222310 6.9804641 5.2869750 6.0127497
V9 V10
1 1.896822 0.4428777
2 5.842095 3.4283014
3 1.654651 7.8213169
4 2.068788 2.8424288
5 5.709582 4.4697035
6 5.842095 0.4428777
如果您想对每个估算的数据集执行 rowSums,您可以:
sapply(impdata,rowSums)
1 2 3 4 5
[1,] 25.21572 25.27762 26.85518 18.89534 23.55415
[2,] 36.59489 44.62157 43.48562 48.05143 35.17675
[3,] 36.56838 34.46168 31.17314 30.25396 32.26478
[4,] 45.11155 47.54594 46.59836 47.54594 45.11155
[5,] 44.18877 44.18877 44.18877 44.18877 44.18877
[6,] 55.51646 62.89490 63.89955 57.91601 58.50188
[7,] 65.75129 68.00360 70.00043 65.89644 68.00360
[8,] 77.44877 83.87630 86.05698 86.05698 87.27713
[9,] 86.65979 91.35599 89.35916 86.65979 90.15827
[10,] 85.19222 90.37659 84.34492 86.62083 88.81410