在 R 中生成不同百分比的 MAR 数据

Generating different percentages of MAR data in R

以下两个R函数来自"Flexible Imputation of Missing Data"一书(第59和63页)。第一个生成随机完全缺失 (MCAR) 数据,第二个生成随机缺失 (MAR) 数据。这两个函数都给出了大约 50% 的缺失值。

在MCAR函数中,我们可以通过改变p值来生成不同百分比的缺失数据。但是在 MAR 函数中,我不明白我们应该更改哪个参数来生成不同百分比的缺失数据,例如 10% 或 30%?

麦卡

makemissing <- function(data, p=0.5){
  rx <- rbinom(nrow(data), 1, p)
  data[rx==0,"y"] <- NA
  return(data)
}

3 月

logistic <- function(x) exp(x)/(1+exp(x))
set.seed(32881)
n <- 10000
y <- mvrnorm(n=n,mu=c(5,5),Sigma=matrix(c(1,0.6,0.6,1),nrow=2))
p2.marright <- 1 - logistic(-5 + y[,1])
r2.marright <- rbinom(n, 1, p2.marright)
yobs <- y
yobs[r2.marright==0, 2] <- NA

对于 MCAR 函数的每个案例,观测值缺失的概率为 50%,因为根据定义,缺失是随机的。对于 MAR 版本,每个观测值缺失观测值的概率都不同,因为它取决于 y[,1] 的值。在您的代码中,y[,2] 上的缺失概率保存在变量 p2.marright 中。通过排列数据框中的所有值,您也许可以更容易地看到这一点:

df <- data.frame(y1 = y[,1], y2_ori = y[,2], y2_mis = yobs[,2], p2.marright = p2.marright, r2.marright)
head(df)
        y1   y2_ori   y2_mis p2.marright r2.marright
1 2.086475 3.432803 3.432803   0.9485110           1
2 3.784675 5.005584 5.005584   0.7712399           1
3 4.818409 5.356688       NA   0.5452733           0
4 2.937422 3.898014 3.898014   0.8872124           1
5 6.422158 5.032659 5.032659   0.1943236           1
6 4.115106 5.083162 5.083162   0.7078354           1

您可以看到 y2 上的观测值是否为 NA 编码在 r2.marright 中,这是 p2.marright 的概率二进制版本 --- 对于更高的值p2.marrightr2.marright 更有可能为 1。要更改总体缺失率,您可以更改 p2.marright 的计算以使其偏高或偏低。

您可以通过更改逻辑变换中的常量(示例中的 -5)来操纵 p2.marright。如果你增加它(让它不那么负,例如 -4)然后 p2.marright 会减少,导致 y2 上有更多的缺失值。如果你减少它(让它更负,例如 -6)那么你最终会在 y2 上得到更少的缺失值。 (-5 导致 50% 缺失的原因是因为 5 是被转换变量的均值,y1。)这是可行的,但该机制相当不透明,您可能难以控制它容易地。例如,如果您希望 y2 上有 20% 的缺失,那么您应该将常量设置为什么并不明显。