2017-10-05 11 views
0

私はgmerplot2内の私のlmerモデルからの結果を表示するのに若干の問題がありました。私は、観察されたデータの上に予測回帰直線を表示することに特に関心があります。私はこの上で実行しているlmerモデル(音声)データを以下にここにある:ggplot2での混合エフェクトモデル結果のオーバーレイ

lmer.declination <- lmer(zlogF0_m60~Center.syll*Tone + (1|Trial) + (1+Tone|Speaker) + (1|Utterance.num), data=data) 

ここで従属変数は、基本周波数(F0)、正規化され、音節の中央60%を横切って平均しました。固定効果は、音節番号(Center.syll)であり、文の最後から数えて(例えば、-2は文の最後の3番目の音節)。ここでのデータはレキシカルトーン言語からのものなので、トーン(すべて低トーン/ 1 /、すべてミッドトーン/ 3 /、すべてハイトーン/ 4 /)は個別固定効果です。実験的な質問は、F0がこの言語の文章に該当するかどうかであり、そうであれば、どれくらいかどうか、そしてトーンが重要かどうかです。ここでおもちゃのデータセットを作成する方法を考えるのは少し難しかったが、データはhere(437Kファイル)でダウンロードできます。

モデルフィットを抽出するために、エフェクトパッケージを使用して、出力をデータフレームに変換しました。

ex <- Effect(c("Center.syll","Tone"),lmer.declination) 
ex.df <- as.data.frame(ex) 

Iは、次のコードで、ggplot2を使用してデータをプロット:予測値はの左側に表示さ

Predicted trajectories and observed trajectories

t.plot <- ggplot(data, aes(factor(Center.syll), zlogF0_m60, group=Tone, color=Tone)) + stat_summary(fun.data = mean_cl_boot, geom = "smooth") + ylab("Normalized log(F0)") + xlab("Syllable number") + ggtitle("F0 change across utterances with identical level tones, medial 60% of vowel") + geom_pointrange(data=ex.df, mapping=aes(x=Center.syll, y=fit, ymin=lower, ymax=upper)) + theme_bw() 
t.plot 

をこれには、以下のプロットを生成しますデータそのものに重ならない観測データ。何を試してみても、観察されたデータに重なり合わせることはできません。理想的には、点線ではなく単線を描くのが理想的ですが、geom_lineを使用しようとすると、デフォルトはラインの1つの点の上限から次の下限への接続です(中央値ではありません/中点)。ご協力ありがとうございました。

答えて

0

編集: OPが指摘したように、彼は実際にはなかったが、彼のデータセットへのリンクが含まれ、彼はなかったことを意味しているため私の謝罪を。。)

まず第一に、あなたはを持っていますあなたがminimal, complete, and verifiable example (MVCE)を提供した場合、多くの場合、が役立ちます。具体的にRのための最良の方法については、hereをご覧ください。

実際のデータが不足していると、stat_summaryのx軸が考慮されていますが、geom_pointrangeのx軸は考慮されていません。

ggplot(dat1, aes(factor(x), # note x being factored here 
       y, group=z, color=z)) + 
    geom_line() + # (this is a place-holder for your stat_summary) 
    geom_pointrange(data=dat2, 
        mapping=aes(x=x, # but x not being factored here 
           y=y, ymin=lower, ymax=upper)) 

Replicated plot

:さて、次の呼び出しは私にあなたがにリンクされているグラフと同様の結果を与える

dat1 <- data.frame(x=c(-6:0, -5:0, -4:0), 
        y=c(-0.25, -0.5, -0.6, -0.75, -0.8, -0.8, -1.5, 
         0.5, 0.45, 0.4, 0.2, 0.1, 0, 
         0.5, 0.9, 0.7, 0.6, 1.1), 
        z=c(rep('a', 7), rep('b', 6), rep('c', 5))) 

dat2 <- data.frame(x=dat1$x, 
        y=dat1$y + runif(18, -0.2, 0.2), 
        z=dat1$z, 
        upper=dat1$y + 0.3 + runif(18, -0.1, 0.1), 
        lower=dat1$y - 0.3 + runif(18, -0.1, 0.1)) 

:私はあなたが証明するためににリンクされているプロットからおもちゃの例を嘲笑しました

ggplot(dat1, aes(x, # no more factoring here 
       y, group=z, color=z)) + 
    geom_line() + 
    geom_pointrange(data=dat2, 
        mapping=aes(x=x, y=y, ymin=lower, ymax=upper)) 
:私は初期のx値のファクタリングを削除する場合

はしかし、私は重ねラインとポイント範囲を取得します私はx軸の両方を考慮場合、私はまだオーバーレイされた結果を得る

Fixed plot

注意。 2つは単に一貫していなければなりません。

また、私がRセッションにコピー/ペーストするコードを提供し、あなたが見ているものを見ることができれば、このプロセス全体にどれくらいの助けになるかを十分に強調することはできません。うまくいけば、これはあなたを助けますが、私たちがあなたを助ける手助けをしてくれれば、よりスムーズに(そして素早く)行くことができます。

+0

コメントありがとう、アンドリュー。私はあなたの提案に従ってうまく動作するようになっています。私は、元のデータ(しかし適合データではない)の議論を因数分解することによって、プロットを重ね合わせることができないことを認識していませんでした。私は私のデータセットを(私の郵便の第2段落のリンクを介して)含んでいたという事実を忘れたかもしれないと思います。再度、感謝します。 –

+0

申し訳ありません!私はそれを指摘する答えを編集しました。 –

関連する問題