0

Rでギブスサンプラーを実行しています(少なくとも実行しようとしています)が、データの表示に問題があります。

Rスタジオを使用しています

参考までに、私のコードは次のとおりです。

###Step 2
###Draw from truncated normal
for(i in 1:length(cens.list[,1])){

  row.i <- as.numeric(cens.list[i,1])

  mu.i <- as.numeric(x.mat[row.i,] %*% beta)

  bio.set[row.i,var.name] <- rtnorm(1,mean=mu.i,sd=sqrt(var),lower=-Inf,upper=dl)
}

test <- bio.set[which(row.names(bio.set) %in% cens.list[,1]),]

bio.set には、私が代入しようとしている変数とその他の情報が含まれています

cens.list には、代入される打ち切られた値のリストと、それに対応する行情報が含まれています。

dl は検出限界です。この値を下回っているため、帰属されている観測値が欠落しています

View()問題: (またはを使用して) データを表示しようとするとedit()、帰属値がすべて同じ数値 (検出限界) を示しています。これは、テスト データ フレームまたは bio.set 自体から表示した場合に発生します。

ただし、入力して値を個別に表示すると

bio.set[995,var.name] #Where I set the row number to be one of the imputed rows.

正しく描画された値が表示されます。

データが正しく保存されていて、単なるビューアーの問題であると仮定して続行できますか? それとも、私が間違っていることがありますか?

4

1 に答える 1

0

返信ありがとうございます。私の問題が何であるかを理解したとき、私は再現可能な例の作成に取り組んでいました。

基本的に、cens.list には、代入される値の行番号が含まれています。作成後、何らかの理由でいくつかの行が削除されますが、以前の行番号はRによって保存されます

私が提示したコードでは、ループ内で、row.names ではなく、データフレームの現在の状態に固有の行番号を参照していることがわかります。

これを修正するために、id 変数を使用するつもりです。

今後の質問では、私のコードが再現可能なものであることを確認します。

于 2013-10-10T15:51:16.890 に答える