私は現在、ガウス混合モデルを介して欠落データを代入しようとしています。私の参照論文はここからです: http://mlg.eng.cam.ac.uk/zoubin/papers/nips93.pdf
私は現在、2 つのガウス成分を持つ二変量データセットに注目しています。これは、各ガウス コンポーネントの重みを定義するコードです。
myData = faithful[,1:2]; # the data matrix
for (i in (1:N)) {
prob1 = pi1*dmvnorm(na.exclude(myData[,1:2]),m1,Sigma1); # probabilities of sample points under model 1
prob2 = pi2*dmvnorm(na.exclude(myData[,1:2]),m2,Sigma2); # same for model 2
Z<-rbinom(no,1,prob1/(prob1 + prob2 )) # Z is latent variable as to assign each data point to the particular component
pi1<-rbeta(1,sum(Z)+1/2,no-sum(Z)+1/2)
if (pi1>1/2) {
pi1<-1-pi1
Z<-1-Z
}
}
これは、欠損値を定義するための私のコードです:
> whichMissXY<-myData[ which(is.na(myData$waiting)),1:2]
> whichMissXY
eruptions waiting
11 1.833 NA
12 3.917 NA
13 4.200 NA
14 1.750 NA
15 4.700 NA
16 2.167 NA
17 1.750 NA
18 4.800 NA
19 1.600 NA
20 4.250 NA
私の制約は、特定のコンポーネントに基づいて「待機中」の変数に欠落しているデータを代入する方法です。このコードは、条件付き平均代入を使用して欠損データを代入する最初の試みです。私は知っています、それは間違いなく間違った方法です。結果は特定のコンポーネントに嘘をつくことはなく、異常値を生成します。
miss.B2 <- which(is.na(myData$waiting))
for (i in miss.B2) {
myData[i, "waiting"] <- m1[2] + ((rho * sqrt(Sigma1[2,2]/Sigma1[1,1])) * (myData[i, "eruptions"] - m1[1] ) + rnorm(1,0,Sigma1[2,2]))
#print(miss.B[i,])
}
ガウス混合モデルを介して潜在/非表示変数を処理できる代入手法を改善する方法について、誰かがアドバイスをいただければ幸いです。前もって感謝します