以下两个R功能来自“缺失数据的灵活插补”(第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)
}
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
答案 0 :(得分:0)
对于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
的概率二进制版本为{更高值{ {1}},p2.marright
更有可能1.要更改总体失踪率,您可以更改r2.marright
的计算值,使其偏高或偏低。
您可以通过更改逻辑转换中的常量来操纵p2.marright
(示例中为-5)。如果你增加它(使它减少负数,例如-4),那么p2.marright
将减少,导致y2上更多的缺失值。如果你减少它(使它更负面,例如-6)那么你最终会减少y2上的缺失值。 (-5导致50%缺失的原因是因为5是被转换的变量p2.marright
的平均值。)这是有效的,但机制相当不透明,你可能很难控制它容易。例如,如果你想在y1
上有20%的缺失,你应该设置常量是不明显的。