2017-10-05 3 views
0

ggplot2 내 lmer 모델의 결과를 표시하는 데 어려움이 있습니다. 나는 관측 된 데이터 위에 예상되는 회귀선을 표시하는 데 특히 관심이있다. ,ggplot2로 혼합 효과 모델 결과 오버레이

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

여기서 종속 변수는 기본 주파수 (F0)는 정규화 음절의 중간 60 %에 걸쳐 평균 :이 (음성) 데이터에서 실행하고있는 lmer 모델은 여기에 다음과 같습니다. 고정 효과는 음절 번호 (Center.syll)이며 문장의 끝에서부터 뒤로 계산됩니다 (예 : -2는 문장의 마지막 세 번째 음절입니다). 여기의 데이터는 어휘 톤 언어에서 가져온 것이므로 톤 (모든 저음/1 /, 모든 중간 톤/3/및 모든 고음/4 /)은 개별 고정 효과입니다. 실험적 질문은 F0가이 언어의 문장에 해당하는지 여부, 그렇다면 얼마만큼, 그리고 음조가 중요한지 여부입니다. 여기 장난감 데이터 세트를 만드는 방법을 생각하는 것이 다소 어려웠지만 데이터는 here (437K ​​파일)으로 다운로드 할 수있었습니다.

모델 맞추기를 추출하기 위해 효과 패키지를 사용하여 출력을 데이터 프레임으로 변환했습니다.

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

I는 다음 코드, 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)을 제공하면 도움이되는 응답이 더 좋습니다. R을 가장 잘 수행하는 방법에 대한 정보는 here을 참조하십시오.

실제 데이터가 부족하여 stat_summary의 x 축을 고려하고 있지만 geom_pointrange의 x 축은 제외하고 있다고 생각됩니다.이제

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

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

참고. 둘은 단순히 일관성을 유지해야합니다.

다시 말해서 R 세션에 복사/붙여 넣기 할 수있는 코드를 제공하고보고있는 내용을 볼 때이 전체 프로세스에 어느 정도 도움이되는지 충분히 강조 할 수 없습니다. 다행히도 이것은 당신을 도와 줄지 만, 우리가 당신을 도울 수 있도록 돕는다면 모든 것이 더 부드럽게 (그리고 빨리) 간다.

+0

Andrew에게 감사드립니다. 나는 당신의 제안에 따라 잘 작동하는 것들을 가지고있다. 필자는 원본 데이터 (그러나 맞는 데이터가 아님)에서 인수를 인수 분해하여 플로팅을 겹칠 수는 없다는 것을 인식하지 못했습니다. 내 데이터 세트를 포함시킨 사실을 놓친 것일 수도 있습니다 (내 게시물의 두 번째 단락에있는 링크를 통해). 다시 한번 감사드립니다. –

+0

죄송합니다! 나는 그 점을 지적하기위한 답을 편집했습니다. –

관련 문제