2017-02-11 61 views
1

以下兩個R函數來自「缺少數據的靈活插補」一書(第59和63頁)。第一個隨機產生完全丟失(MCAR)數據,第二個隨機產生丟失(MAR)數據。這兩個函數都會給出大約50%的缺失值。在R中生成不同百分比的MAR數據

在MCAR函數中,我們可以通過更改p值來生成不同百分比的缺失數據。但是在MAR功能中,我不明白應該修改哪個參數來生成不同百分比的丟失數據,例如10%或30%?

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

MAR
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 
+1

有關缺失數據主題的信息覆蓋見**統計分析與丟失數據第2版羅德里克J.A. Little和Donald B. Rubin(2002)Wiley **。 –

回答

0

的觀察被丟失的概率爲每一種情況下爲MCAR功能50%,因爲根據定義,所述missingness是隨機的。對於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 

你可以看到,觀察是否會是NA上y2r2.marright進行編碼,這是一個概率的二進制版本的p2.marright ---對於p2.marright的更高值,r2.marright更可能爲1.要更改整體失蹤率,您可以更改p2.marright的計算以使其偏高或偏低。

您可以通過更改邏輯轉換中的常量(示例中爲-5)來操作p2.marright。如果增加它(使其負值較小,例如-4),則p2.marright將減少,導致y2上缺少更多值。如果減小它(使其更負,例如-6),那麼y2上的缺失值將會減少。 (原因-5導致50%的缺失是因爲5是被變換的變量的平均值,y1。)這有效,但機制相當不透明,並且可能很難輕鬆控制它。例如,如果您想在y2上找到20%的缺失,那麼您應該設置的常數並不明顯。

+0

謝謝Rose Hartman – statm

+0

@Shoheb如果這解決了您的問題,您可以接受它作爲答案。 –