如何解决缺少数据插补:R
没有使用插补方法,在此过程中感觉很迷茫...
我有一个(小型)数据集,其中包含来自两个不同任务的“重复”变量。 例如:每个任务的持续时间,频率和费率,因此我具有durationA,durationB,freqA,freqB等。我大约。 44个变量(包括两个任务)。
我有2位参与者没有22个变量的值(任务A的所有变量;由于测试期间的技术问题)。我的数据集非常小,完全省略它们对我的样本量没有帮助(n = 18)。因此,我正在尝试使用多个插补来估算回归模型的参数。我已经尝试过一个单一的值,但是我还没有开始工作。因此,我有两个问题:
- 我的初始方法有误吗?
- 如果这是可行的并且值已被估算,是否有办法一次在所有变量上运行它,而不是单独进行?
样本数据:
ID durationA freqA rateA ... durationB freqB rateB ...
01 200 1000 2.5 150 1200 2.7
...
07 NA NA NA 400 1150 2.3
08 NA NA NA 300 950 2.4
18 180 1110 2.8 340 1080 3.9
这是我运行的代码:
library(mice)
md.pattern(df)
impdata <- mice(df,m=5,maxit = 50,method = 'pmm',seed = 500)
summary(impdata)
#build predictive model
myaudio$nsyll_h <- as.numeric(as.character(df$freqA))
myaudio$nsyll_m <- as.numeric(as.character(df$freqB)
myaudio$npause_h <- as.numeric(as.character(df$duratiobA))
myaudio$npause_m <- as.numeric(as.character(df$durationB))
cordf <- df %>% subset(ID != '07' & ID != '08')
cordf <- cordf[,c(-1)]
corvar <- cor(cordf,use = "complete.obs")
# resulted in durationA correlating most with freqA
predval <- with(data = impdata,exp = lm(freqA~ durationA))
#combine results of all 5 models
combinepv <- pool(predval)
summary(combinepv)
#Model: y(freqA) = 1611.78 + (-2.065)*X
indicator <- function(t) {
x <- dim(length(t))
x[which(!is.na(t))] = 1
x[which(is.na(t))] = 0
return(x)
}
df$na <- indicator(df$freqA)
for (i in 1:nrow(df)){
if(df$na[i] == 0) {
df$freqA[i] == 1611.78 + (-2.065)*df$durationA[i]
}
}
df
我的输出没有将估计值插入缺失的单元格中(问题1)。
输出:
ID freqA ...
...
7 07 NA
...
问题2:是否有更好的方法可以做到这一点,或者我可以一次对所有22个缺失变量使用这种方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。