2017-02-11 11 views
1

以下の2つのR関数は、「欠損データの柔軟な置き換え」(59ページおよび63ページ)の書籍のものです。最初のものは完全無作為(MCAR)データが欠落し、2番目の欠損はランダム(MAR)データを生成します。どちらの関数も約50%の欠損値を与えます。Rの異なる割合のRデータを生成するR

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

不足しているデータのトピックについては、** Roderick J.AによるMissing Data第2版の統計分析を参照してください。リトルとドナルドB.ルビン(2002年)ウィリー**。 –

答えて

0

定義により、missingnessがランダムであるため、欠落している観測確率は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.marrightの高い値の場合は、r2.marrightが1になる可能性があります。欠損率全体を変更するには、p2.marrightの計算を変更して、それをより高くまたは小さくするように変更できます。

ロジスティック変換の定数を変更することでp2.marrightを操作できます(この例では-5)。値を大きくする(負の値を小さくする、たとえば-4にする)とp2.marrightが減少し、結果としてy2の値がより多く失われます。それを減らす(負の値にする、たとえば-6にする)と、y2の欠損値は少なくなります。 (理由は、-5は、変換される変数の平均が5であるために、50%の欠落を招きます。y1。)これは機能しますが、メカニズムはむしろ不透明であり、簡単に制御することは難しいかもしれません。たとえば、y2に20%の欠落があるようにするには、定数をどのように設定するべきかは明白ではありません。

+0

ありがとうございましたRose Hartman – statm

+0

@Shohebこれが問題を解決すれば、それを答えとして受け入れることができます。 –

関連する問題