在大量数据将被删除的情况下,插补对于提高参数估计的准确性非常有用。考虑在一项研究中,例如,有 100 个观测值和 4 个回归变量,每个观测值的缺失率为 10%,您只会丢失 10% 的数据,但平均而言,您将删除大约 34% 的观测值如果您删除一个或多个缺失值的每个观察值 - 如果您只是通过标准回归包运行数据,就会发生这种情况。您将删除比实际丢失更多的数据(实际上是 2.4 倍)。此外,除非您的数据完全随机丢失,否则案例删除可能会在您的参数估计中引入偏差。
通常最好使用至少捕获数据的协方差结构并生成随机数(而不是用平均值或中值替换)的插补算法。尤其是如果您要使用估算数据,因为您将获得参数协方差矩阵的更准确估计。用平均值替换会给你过度乐观的标准误差,有时会相当多。
我已经包含了一个使用 R 中包中的默认插补方法mice的示例。该示例有一个回归,包含 100 个观测值和四个回归量,每个观测值都有 10% 的概率缺失值。我们比较标准。完整数据回归(无缺失值)、案例删除回归(删除具有缺失值的任何观察值)、均值插补(用变量的平均值替换缺失值)和高质量插补的估计误差估计数据的协方差矩阵并生成随机值的例程。我在回归变量之间构建了非线性关系,使得mice不会使用他们的真实关系来建模他们,只是为了给整个事情增加一层不准确性。我已经将整个过程运行了 100 次,并对每个参数的四种方法的标准误差进行了平均,以进行比较。
这是代码,底部是标准错误的比较:
results <- data.frame(se_x1 = rep(0,400),
se_x2 = rep(0,400),
se_x3 = rep(0,400),
se_x4 = rep(0,400),
method = c(rep("Complete data",100),
rep("Case deletion",100),
rep("Mean value imputation", 100),
rep("Randomized imputation", 100)))
N <- 100
pct_missing <- 0.1
for (i in 1:100) {
x1 <- 4 + rnorm(N)
x2 <- 0.025*x1^2 + rnorm(N)
x3 <- 0.2*x1^1.3 + 0.04*x2^0.7 + rnorm(N)
x4 <- 0.4*x1^0.3 - 0.3*x2^1.1 + rnorm(N)
e <- rnorm(N, 0, 1.5)
y <- x1 + x2 + x3 + e # The coefficient of x4 = 0
# Complete data regression
mc <- summary(lm(y~x1+x2+x3+x4))
results[i,1:4] <- mc$coefficients[2:5,2]
# Cause data to be missing
x1[rbinom(N,1,pct_missing)==1] <- NA
x2[rbinom(N,1,pct_missing)==1] <- NA
x3[rbinom(N,1,pct_missing)==1] <- NA
x4[rbinom(N,1,pct_missing)==1] <- NA
# Case deletion
mm <- summary(lm(y~x1+x2+x3+x4))
results[i+100,1:4] <- mm$coefficients[2:5,2]
# Mean value imputation
x1m <- x1; x1m[is.na(x1m)] <- mean(x1, na.rm=TRUE)
x2m <- x2; x2m[is.na(x2m)] <- mean(x2, na.rm=TRUE)
x3m <- x3; x3m[is.na(x3m)] <- mean(x3, na.rm=TRUE)
x4m <- x4; x4m[is.na(x4m)] <- mean(x4, na.rm=TRUE)
mmv <- summary(lm(y~x1m+x2m+x3m+x4m))
results[i+200,1:4] <- mmv$coefficients[2:5,2]
# Imputation; I'm only using 1 of the 5 multiple imputations
# It would be better to use all the multiple imputations, though.
imp <- mice(cbind(y,x1,x2,x3,x4), printFlag=FALSE)
x1[is.na(x1)] <- as.numeric(imp$imp$x1[,1])
x2[is.na(x2)] <- as.numeric(imp$imp$x2[,1])
x3[is.na(x3)] <- as.numeric(imp$imp$x3[,1])
x4[is.na(x4)] <- as.numeric(imp$imp$x4[,1])
mi <- summary(lm(y~x1+x2+x3+x4))
results[i+300,1:4] <- mi$coefficients[2:5,2]
}
options(digits = 3)
results <- data.table(results)
results[, .(se_x1 = mean(se_x1),
se_x2 = mean(se_x2),
se_x3 = mean(se_x3),
se_x4 = mean(se_x4)), by = method]
和输出:
method se_x1 se_x2 se_x3 se_x4
1: Complete data 0.208 0.278 0.192 0.193
2: Case deletion 0.267 0.359 0.244 0.250
3: Mean value imputation 0.231 0.301 0.212 0.217
4: Randomized imputation 0.213 0.271 0.195 0.198
请注意,完整的数据方法与您可以使用此数据一样好。案例删除导致参数估计的准确度大大降低,但随机插补mice几乎可以让您回到使用完整数据获得的准确度。(这些数字有点乐观,因为我没有使用完整的多重插补方法,但这只是一个简单的例子。)在这种情况下,平均值插补似乎相对于案例删除有很大改善,但实际上过于乐观。
因此,tl;dr 版本是:估算,除非您使用案例删除只会遗漏一小部分案例(如 1%)。最大的警告是:首先了解估算所需的假设!如果没有随机丢失数据,并且我在非技术性地使用该短语,那么请查看这方面的插补要求,插补对您没有帮助,并且可能会使事情变得更糟。但这是另一个问题的话题。以下是一些可能有用的链接:估算概述、缺失数据率和估算、不同的估算算法。