首页 文章

缺失机制和缺失率

提问于
浏览
0

如果我有两个变量和九个实例,我想在缺失率(5%.15%)下对我的数据应用缺失机制,如(MCAR,MAR,NMAR):

Aj <- c(48,75,83,58,83,32,45,50,86)
As <- c(24,30,31,35,60,76,81,82,88)

如下:
对于模拟MAR,我们首先将变量随机分成对(Aj,As),1≤j,s≤r,其中Aj是引入缺失值的变量,As是影响Aj缺失的变量 . 给定一对变量(Aj,As)和缺失率α,我们首先根据它们在As处的值将实例分成两个大小相等的子集 . 如果变量As是数字,我们将找到As的中值,然后根据天气将所有实例分配到两个子集中,实例具有比中值As更大的值 . 例如,我们可能会让As的值低于中位数60(实例编号1-5)的实例丢失,概率为4α,也就是说,Pr(Aj =缺失|As≤60)=4α .

我在R程序中编写了缺少机制的代码

ifelse(As<=median(As),Aj==NA,Aj)
[1] NA NA NA NA NA 32 45 50 86

我的问题是如何在r或上面的示例和插图的另一个代码中为此代码添加丢失率例如5% .

1 回答

  • 0

    这个单线会让你失去率alpha:

    ifelse( (As <= median(As)) & (runif(length(As)) < alpha), NA, Aj)
    

    如果您希望观察到的速率接近alpha(您需要弄清楚如何处理舍入),您可以执行以下操作:

    Aj <- c(48,75,83,58,83,32,45,50,86)
     As <- c(24,30,31,35,60,76,81,82,88)
    
     # missingness rate
     alpha <- 0.05
    
     # create subset less than the median
     b <- ifelse( As <= median(As) , NA, Aj) 
    
     # get the size of that subset (not known before hand due to tie handling)
     n.b <- sum(is.na(b))
     b.small <- Aj[is.na(b)]
    
     # sample from the small subset at a fixed rate, setting sampled to NA
     b.small[ sample(1:n.b, size=ceiling(n.b * alpha)) ] <- NA
     b[is.na(b)] <- b.small
    
     # b is now Aj with missingness
    

    输出应该类似于

    [1] 48 NA 83 58 83 32 45 50 86
    

相关问题