我需要一个用于 R 中缺失数据插补的包。但由于我正在处理大数据,缺失数据条目的数量也可能很高。使用均值或中值估算的包当然工作得很快,但是使用回归或 PCA 估算的更复杂的包对于大量缺失值来说花费的时间太长。我试过missMDA
and missForest
,但正如我所说,它们看起来就像永远一样。有一个名为 的包FastImputation
,但是当我没有来自某些训练数据的模式时,我无法弄清楚如何使用它。有什么建议可以快速估算的软件包吗?
R 中对大数据的快速缺失数据插补比简单插补手段更复杂?
机器算法验证
r
大数据
数据插补
2022-03-27 11:08:16
2个回答
我使用了老鼠(通过链式方程进行多重插补)。它相当快,而且相当简单。我在3000 obs上使用它。对于 ca 10 个变量。在旧电脑上 10 分钟完成。此外,我相信它是目前最好的多重插补包之一。除其他方法外,它还可以使用回归进行估算。
您需要使用要估算的变量创建一个数据框,并包括每个可能预测该变量值的变量(因此模型中的每个变量 + 可能还有其他变量)。老鼠包将估算该数据框中的每个缺失值。
最简单的估算方法。为您提供一个Datimp
包含五个估算数据 + 原始数据的数据框。
library(mice)
#m=5 number of multiple imputations
#maxit=10 number of iterations. 10-20 is sufficient.
imp <- mice(Dat1, m=5, maxit=10, printFlag=TRUE)
Datimp <- complete(imp, "long", include=TRUE)
write.table(Datimp, "C:/.../impute1.txt",
sep="\t", dec=",", row.names=FALSE)
一个更好的方法是:
library(mice)
Dat1 <- subset(Dat, select=c(id, faculty, gender, age, job, salary)) #create subset
#of variables you would like to either impute or use as predictors for imputation.
ini <- mice(Dat1, maxit=0, pri=F)
pred <- ini$pred
pred[,c("id", "faculty")] <- 0 #variables you do not want to use as predictors (but
#want to have in the dataset, can't add them later.
meth <- ini$meth
meth[c("id", "faculty", "gender", "age", "job")] <- "" #choose a prediction method
#for imputing your variables. Here I don't want these variables to be imputed, so I
#choose "" (empty, no mehod).
imp <- mice(Dat1, m=5, maxit=10, printFlag=TRUE, pred=pred, meth=meth, seed=2345)
Datimp <- complete(imp, "long", include=TRUE)
write.table(Datimp, "C:/.../impute1.txt",
sep="\t", dec=",", row.names=FALSE)
看看你的推算是否有用:
library(lattice)
com <- complete(imp, "long", inc=T)
col <- rep(c("blue","red")[1+as.numeric(is.na(imp$salary))],6)
stripplot(salary~.imp, data=com, jit=TRUE, fac=0.8, col=col, pch=20,
xlab="Imputation number",cex=0.25)
densityplot(salary~.imp, data=com, jit=TRUE, fac=0.8, col=col, pch=20,
xlab="Imputation number",cex=0.25)
long <- complete(imp,"long")
levels(long$.imp) <- paste("Imputation",1:22)
long <- cbind(long, salary.na=is.na(imp$data$salary))
densityplot(~salary|.imp, data=long, group=salary, plot.points=FALSE, ref=TRUE,
xlab="Salary",scales=list(y=list(draw=F)),
par.settings=simpleTheme(col.line=rep(c("blue","red"))), auto.key =
list(columns=2,text=c("Observed","Imputed")))
最后,也是重要的。您不能只保存新数据集并将估算值用作正常观察值。您使用合并回归或合并 lmer ...因此考虑了估算值的不确定性。
fit1 <- with(imp, lm(salary ~ gender, na.action=na.omit))
summary(est <- pool(fit1))
pool.r.squared(fit1,adjusted=FALSE)
Hmisc 包可能可以通过插补函数 (aregImpute) 完成此操作。同意列很多,但行很少。应该由Hisc处理...
其它你可能感兴趣的问题