2017-10-05 53 views
0

我在ggplot2中顯示我的lmer模型的結果時遇到了一些困難。我特別感興趣的是在觀察數據之上顯示預測的迴歸線。我對這個(語音)數據運行的模型11聚物這裏是下面:使用ggplot2覆蓋混合效果模型結果

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

這裏的因變量是基頻(F0),標準化和跨音節的中間60%的平均值。固定效果是音節數(Center.syll),從句子末尾向後計數(例如-2是句子中最後一個音節)。這裏的數據來自詞彙音調語言,所以音調(所有低音/ 1 /,所有中音/ 3 /和所有高音/ 4 /)都是離散的固定效果。實驗問題是F0是否落在這種語言的句子中,如果是這樣,多少,以及語調是否重要。對我來說想想一種在這裏生產玩具數據集的方法有點困難,但是可以下載這些數據(文件爲437K)here

爲了提取模型擬合,我使用了效果包並將輸出轉換爲數據幀。

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

我繪製使用GGPLOT2中的數據,用下面的代碼:

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 

這將產生以下情節:

Predicted trajectories and observed trajectories

預測值出現的左觀察到的數據,不覆蓋數據本身。無論我如何嘗試,我都無法讓它們在觀察到的數據上重疊。理想情況下,我希望繪製一條線而不是一個點範圍,但是當我嘗試使用geom_line時,默認情況下線是從一個點的上界連接到下一個點的下界(而不是中點/中點)。感謝您的幫助。

回答

0

編輯:由於OP指出,他其實幷包括一個鏈接到他的數據集我的道歉暗示他沒有。)

首先,你將有太多如果您提供minimal, complete, and verifiable example (MVCE),運氣會更好。請參閱here以獲取有關如何爲R專門做出最佳效果的信息。

由於缺乏您的實際數據,我相信您的問題在於您將stat_summary作爲x軸的因子,而對於geom_pointrange則沒有。我嘲笑了從圖中你鏈接到爲了證明玩具例子:

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(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

但是,如果我刪除初始x值的保理,我得到覆蓋線和點範圍:

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)) 

Fixed plot

請注意,我仍然得到疊加的結果,如果我因子的x軸的兩個。兩者必須一致。

再次強調,如果您提供代碼,我們可以複製/粘貼到R會話並查看您所看到的內容,那麼我對它的整個過程有多大幫助。希望這可以幫助你,但如果你幫助我們幫助你,它會更加順利(並且很快)。

+0

謝謝你的評論,安德魯。按照您的建議,我可以很好地工作。我沒有意識到,通過分解原始數據中的參數(但不是擬合的數據),我將無法重疊繪圖。我想你可能錯過了我包括我的數據集的事實(通過我的文章第二段中的鏈接)。再次感謝。 –

+0

對不起!我編輯了答案,指出了這一點。 –