2017-12-01 14 views
2

nlme、lme4、brmsで使用されているranef()と似たコマンドを探しています。このコマンドを使うと、MCMCglmmモデルで個々のランダム効果を抽出できます。私のデータセットでは、私は40のプロバイダーを持っており、それぞれのプロバイダーのランダムな効果を抽出し、キャタピラープロットでそれらをプロットしたいと思います。どんな提案も素晴らしいだろう。ありがとうございました。MCMCglmmからランダム効果を抽出するにはどうすればよいですか?

それはここで、有用である場合には、私のMCMCglmmモデルです:

prior.3 <- list(R = list(R1 = list(V = diag(2), nu = 0.002)), 
       G = list(G1 = list(V = diag(2), nu = 0.002), 
         G2 = list(V = diag(2), nu = 0.002))) 

mc_mod2 <- MCMCglmm(outcome ~ 1, data = filter(data, rem2 == "white" | rem2 == "rem"), 
        random = ~ idh(rem2):id + us(rem2):provider, 
        rcov = ~idh(rem2):units, 
        verbose = TRUE, 
        prior = prior.3, 
        family = "gaussian", 
        nitt = 100000, burnin = 5000, 
        pr = TRUE) 
+1

https://rdrr.io/github /JWiley/postMCMCglmm/man/ranef.MCMCglmm.html? –

+0

私は 'ranef(mc_mod2)'を使ってそれを試みましたが、次のエラーがスローされました: 'UseMethod(" ranef ")のエラー:クラス" MCMCglmm "' – bpace

+1

のオブジェクトに 'ranef'そのパッケージをロードしますか? –

答えて

0

私は(これを指摘してくれてありがとう、ベン)をインストールするために必要な追加パッケージを見落とし。単にpostMCMCglmmパッケージをインストールし、ranef()を実行できるようにする

からhttps://github.com/jwiley/postMCMCglmm/

#install.packages("devtools") 
require(devtools) 

install_github("JWiley/postMCMCglmm") 
6

もう少し詳しく、パッケージが組み込まキャタピラプロットを持っていないようですので、注意:あなたがpr=TRUEを使用する必要がありますランダム効果の値を格納するためにMCMCglmmを呼び出すとき。

library(MCMCglmm) 
data(PlodiaPO) 
model1 <- MCMCglmm(PO~1, random=~FSfamily, data=PlodiaPO, verbose=FALSE, 
       nitt=1300, burnin=300, thin=1, 
       pr=TRUE) 
if (!require("postMCMCglmm")) { 
    devtools::install_github("JWiley/postMCMCglmm") 
    library("postMCMCglmm") 
} 

ranef()ランダム効果(行=レベル、列=サンプル)の行列を返すように見えます。平均と分位数を持つデータフレームに変換:プロットするため

qfun <- function(x,lev) unname(quantile(x,lev)) 
rsum <- as.data.frame(t(apply(ranef(model1),1, 
     function(x) c(est=mean(x), 
        min=qfun(x,0.025),max=qfun(x,0.975))))) 

注文:

rsum$term <- reorder(factor(rownames(rsum)), 
        rsum$est) 

プロット:

library(ggplot2) 
ggplot(rsum,aes(term,est))+ 
    geom_pointrange(aes(ymin=min,ymax=max))+ 
    coord_flip() 

enter image description here

+0

これは素晴らしいです...ありがとう、ベン。私の唯一の問題は、 'random =〜idh(rem2):id + us(rem2):provider'のようにランダム効果を指定すると' ranef'関数が動作しないように見えるということです。クライアントの人種的な少数民族のステータス(白/非白)に基づいて、クライアントとプロバイダーのステータスにランダムな影響を与えます。 'id'と' provider'ランダム効果だけを呼び出すと、ranef関数はうまく動作しますが、REM状態に基づいてレイヤ化すると、空の行列が出力されます。何か案は? – bpace

+0

最終的には、provider_1_white、provider_1_rem、provider_2_white、provider_2_remなどのようなランダムなエフェクト出力を持つことが目標です。これは不可能なのでしょうか? – bpace

+0

私は解決策を見つけました...ランダム効果が階層化されていると(上記のモデルに示されているように)、postMCMCglの 'ranef()'関数は(少なくともこの文章の時点では)動作しません。 (mc_mod2 $ Sol [、1:50])、CI = HPDinterval(mc_mod2 $ Sol [mc_mod2 $ Sol [、1:50])を使用して読み込み可能な形式で置くことができます。 、1:50])) ' – bpace

関連する問題