신뢰 구간이있는 교호 작용 그림을 그리는 방법은 무엇입니까?


11

내 시도 :

  1. 에 신뢰 구간을 얻을 수 없습니다 interaction.plot()

  2. 반면에 plotmeans()'gplot'패키지는 두 개의 그래프를 표시하지 않습니다. 또한 plotmeans()기본적으로 축이 다르기 때문에 두 개의 그래프를 다른 그래프 위에 부과 할 수 없었습니다 .

  3. plotCI()'gplot'패키지에서 사용 하고 두 개의 그래프를 겹쳐서 성공 했지만 여전히 축의 일치가 완벽하지 않았습니다.

신뢰 구간을 사용하여 교호 작용도를 만드는 방법에 대한 조언이 있습니까? 하나의 기능으로, 또는 중첩 plotmeans()또는 plotCI()그래프 작성 방법에 대한 조언 .

코드 샘플

br=structure(list(tangle = c(140L, 50L, 40L, 140L, 90L, 70L, 110L, 
150L, 150L, 110L, 110L, 50L, 90L, 140L, 110L, 50L, 60L, 40L, 
40L, 130L, 120L, 140L, 70L, 50L, 140L, 120L, 130L, 50L, 40L, 
80L, 140L, 100L, 60L, 70L, 50L, 60L, 60L, 130L, 40L, 130L, 100L, 
70L, 110L, 80L, 120L, 110L, 40L, 100L, 40L, 60L, 120L, 120L, 
70L, 80L, 130L, 60L, 100L, 100L, 60L, 70L, 90L, 100L, 140L, 70L, 
100L, 90L, 130L, 70L, 130L, 40L, 80L, 130L, 150L, 110L, 120L, 
140L, 90L, 60L, 90L, 80L, 120L, 150L, 90L, 150L, 50L, 50L, 100L, 
150L, 80L, 90L, 110L, 150L, 150L, 120L, 80L, 80L), gtangles = c(141L, 
58L, 44L, 154L, 120L, 90L, 128L, 147L, 147L, 120L, 127L, 66L, 
118L, 141L, 111L, 59L, 72L, 45L, 52L, 144L, 139L, 143L, 73L,  
59L, 148L, 141L, 135L, 63L, 51L, 88L, 147L, 110L, 68L, 78L, 63L, 
64L, 70L, 133L, 49L, 129L, 100L, 78L, 128L, 91L, 121L, 109L, 
48L, 113L, 50L, 68L, 135L, 120L, 85L, 97L, 136L, 59L, 112L, 103L, 
62L, 87L, 92L, 116L, 141L, 70L, 121L, 92L, 137L, 85L, 117L, 51L, 
84L, 128L, 162L, 102L, 127L, 151L, 115L, 57L, 93L, 92L, 117L, 
140L, 95L, 159L, 57L, 65L, 130L, 152L, 90L, 117L, 116L, 147L, 
140L, 116L, 98L, 95L), up = c(-1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
-1L, -1L, 1L, 1L, 1L, 1L, -1L, -1L, -1L, -1L, 1L, 1L, -1L, -1L, 
1L, 1L, -1L, 1L, 1L, -1L, 1L, 1L, 1L, 1L, 1L, -1L, -1L, 1L, 1L, 
1L, 1L, -1L, -1L, 1L, 1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 
1L, -1L, -1L, -1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, -1L, -1L, 
-1L, 1L, -1L, 1L, -1L, -1L, -1L, 1L, -1L, 1L, -1L, 1L, 1L, 1L, 
-1L, -1L, -1L, -1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, -1L, 1L, 
1L, 1L, -1L, 1L, 1L, 1L)), .Names = c("tangle", "gtangles", "up"
), class = "data.frame", row.names = c(NA, -96L))

plotmeans2 <- function(br, alph) {
dt=br;   tmp   <- split(br$gtangles, br$tangle);   
means <- sapply(tmp, mean);  stdev <- sqrt(sapply(tmp, var));  
n <- sapply(tmp,length);  
ciw   <- qt(alph, n) * stdev / sqrt(n)
plotCI(x=means, uiw=ciw, col="black", barcol="blue", lwd=1,ylim=c(40,150),  xlim=c(1,12)); 
par(new=TRUE) dt= subset(br,up==1);   
tmp   <- split(dt$gtangles, dt$tangle);  
means <- sapply(tmp, mean);  
stdev <- sqrt(sapply(tmp, var));  
n <- sapply(tmp,length); 
ciw  <- qt(0.95, n) * stdev / sqrt(n)
plotCI(x=means, uiw=ciw, type='l',col="black", barcol="red", lwd=1,ylim=c(40,150), xlim=c(1,12),pch='+');
abline(v=6);abline(h=90);abline(30,10); par(new=TRUE);
dt=subset(br,up==-1);   
tmp <- split(dt$gtangles, dt$tangle);  
means <- sapply(tmp, mean);  
stdev <- sqrt(sapply(tmp, var));  
n <- sapply(tmp,length); 
ciw <- qt(0.95, n) * stdev / sqrt(n)
plotCI(x=means, uiw=ciw, type='l', col="black", barcol="blue",   lwd=1,ylim=c(40,150), xlim=c(1,12),pch='-');abline(v=6);abline(h=90);
abline(30,10);
}

plotmeans2(br,.95)

답변:


21

ggplot 을 사용 하려는 경우 다음 코드를 사용해보십시오.

연속 예측 변수

library(ggplot2)
gp <- ggplot(data=br, aes(x=tangle, y=gtangles)) 
gp + geom_point() + stat_smooth(method="lm", fullrange=T) + facet_grid(. ~ up)

패싯 상호 작용 플롯

여기에 이미지 설명을 입력하십시오

에 의해 생성 된 것과 같은 표준 상호 작용 플롯의 interaction.plot()경우 패싯을 제거하기 만하면됩니다.

gp <- ggplot(data=br, aes(x=tangle, y=gtangles, colour=factor(up))) 
gp + geom_point() + stat_smooth(method="lm")

여기에 이미지 설명을 입력하십시오

이산 예측 변수

ToothGrowth데이터 세트를 사용하여 (참조 help(ToothGrowth))

ToothGrowth$dose.cat <- factor(ToothGrowth$dose, labels=paste("d", 1:3, sep=""))
df <- with(ToothGrowth , aggregate(len, list(supp=supp, dose=dose.cat), mean))
df$se <- with(ToothGrowth , aggregate(len, list(supp=supp, dose=dose.cat), 
              function(x) sd(x)/sqrt(10)))[,3]

opar <- theme_update(panel.grid.major = theme_blank(),
                     panel.grid.minor = theme_blank(),
                     panel.background = theme_rect(colour = "black"))
gp <- ggplot(df, aes(x=dose, y=x, colour=supp, group=supp))
gp + geom_line(aes(linetype=supp), size=.6) + 
     geom_point(aes(shape=supp), size=3) + 
     geom_errorbar(aes(ymax=x+se, ymin=x-se), width=.1)
theme_set(opar)

여기에 이미지 설명을 입력하십시오


자세한 답변을 보내 주셔서 감사합니다. 나는 독립 변수의 각 수준에서 수직 신뢰 구간을 만드는 방법이 있습니까? 배경을 제거하고 '이전 스타일'그래프로 되 돌리는 방법이 있습니까?
Adam SA

1
@Adam 나는 2 개의 범주 형 변수 + 연속 응답 변수의 경우로 내 응답을 업데이트했습니다. 또한 ggplot테마 를 사용자 정의하는 방법을 보여주는 코드를 추가했습니다 . 일반적으로 gp + theme_bw()회색 배경 만 제거 한다고 말할 수 있습니다 . 여기서도 그리드를 제거했습니다.
chl

12

R 에는 Fox와 Hong의 효과 패키지도 있습니다. J. Stat. 부드러운. 논문 여기여기 신뢰 구간 및 생성 R 코드 예제.

ggplot 솔루션만큼 예쁘지는 않지만 다소 일반적이며 복잡한 GLM을위한 생명의 은인입니다.


1
(+1) 나는이 접근법을 선호한다는 것을 인정해야한다 :-)
chl

@chl 및 / 또는 Conjugate, 왜이 접근법을 선호하는지 더 자세히 말씀해 주시겠습니까? 그것은 나와 같은 사람들이 시간을 투자 할 방법을 결정하는 데 도움이 될 것입니다.
Michael Bishop

1
@MichaelBishop 본질적으로 R 명령 (및 개인적으로, 나는 lattice그래픽을 매우 좋아한다 :)
chl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.