2

技術的な問題があり、自分では解決できないようです。mcmcglmmパッケージで見積もりを実行しました。results$Sol によって、推定事後分布にアクセスできます。class()を適用すると、オブジェクトのクラスが「mcmc」であることがわかります。as.data.frame()を使用すると、他のデータ フレーム (他の多くのデータ フレームを含む 1 つのデータ フレーム) を含むネストされたデータ フレームが生成されます。メイン データ フレーム内のすべてのデータ フレームをrbind()して、すべての事後分布のすべての値と (セカンダリ) データ フレームの名前を行名として持つ 1 つのデータ フレーム (またはベクトル) を生成したいと思います。何か案は?すべてのヒントに感謝します!

更新: Stackoverflow の目的で有用なデータ セットを生成することができませんでした。これらすべてのサンプリング チェーンでは、これらのデータ セットは常に大きすぎます。私を助けたい場合は、次の(例示的な)モデルを実行することを検討してください

require(MCMCglmm)
data(PlodiaPO)
result <- MCMCglmm(PO ~ plate + FSfamily, data = PlodiaPO, nitt = 50, thin = 2, burn = 10, verbose = FALSE)

result$Sol (mcmc オブジェクト) は、すべてのチェーンが格納される場所です。すべての事後分布のすべての値と変数名を行名として (または追加の文字ベクトルとして重複する行名が許可されていないため) ベクトルにするために、すべてのチェーンを rbind したいと考えています。

4

1 に答える 1

3

(MCMCglmm のサンプル コードを使用して) as.data.frame(model$Sol) がデータフレームのデータフレームを提供する例を作成することはできません。したがって、おそらく簡単な答えがありますが、簡単に確認することはできません。

とはいえ、ここに役立つかもしれない例があります。子データフレームに同じ colnames がない場合、これは機能しないことに注意してください。

# create a nested data.frame example to work on
a.df <- data.frame(c1=runif(10),c2=runif(10))
b.df <- data.frame(c1=runif(10),c2=runif(10))
full.df <- data.frame(1:10)
full.df$a <- a.df
full.df$b <- b.df
full.df <- full.df[,c("a","b")]

# the solution
res <- do.call(rbind,full.df)

編集

さて、あなたの新しい例を使って、

require(MCMCglmm) 
data(PlodiaPO) 
result<- MCMCglmm(PO ~ plate + FSfamily, data=PlodiaPO,nitt=50,thin=2,burn=10,verbose=FALSE)
melt(do.call(rbind,(as.data.frame(result$Sol))))
于 2013-09-04T01:37:38.903 に答える