ggplot2에서 지속적인 상호 작용으로 어떻게 연속성을 그릴 수 있습니까?


11

데이터가 있다고 가정 해 봅시다.

x1 <- rnorm(100,2,10)
x2 <- rnorm(100,2,10)
y <- x1+x2+x1*x2+rnorm(100,1,2)
dat <- data.frame(y=y,x1=x1,x2=x2)
res <- lm(y~x1*x2,data=dat)
summary(res)

x1이 X 축에 있고 x2가 3 줄로 표시되도록 연속 상호 작용으로 연속성을 플롯하고 싶습니다. 하나는 Z 점수 0에서 x2, 하나는 Z 점수 +1, 다른 하나는 -1의 Z- 점수, 각 줄은 별도의 색상으로 표시됩니다. ggplot2를 사용하여 어떻게 할 수 있습니까?

예를 들어, 다음과 같이 보일 수 있습니다 (물론 다른 선 종류가 아닌 다른 색깔의 선이 있음). 이미지 예


다른 패키지 / 소프트웨어의 예제 이미지를 보여 주거나 플롯하려는 내용에 대한 자세한 설명을 제공 할 수 있습니까?
daroczig

답변:


9

시뮬레이션 된 데이터 세트가있는 내 버전은 다음과 같습니다.

x1 <- rnorm(100,2,10)
x2 <- rnorm(100,2,10)
y <- x1+x2+x1*x2+rnorm(100,1,2)
dat <- data.frame(y=y,x1=x1,x2=x2)
res <- lm(y~x1*x2,data=dat)
z1 <- z2 <- seq(-1,1)
newdf <- expand.grid(x1=z1,x2=z2)

library(ggplot2)
p <- ggplot(data=transform(newdf, yp=predict(res, newdf)), 
            aes(y=yp, x=x1, color=factor(x2))) + stat_smooth(method=lm)
p + scale_colour_discrete(name="x2") + 
  labs(x="x1", y="mean of resp") + 
  scale_x_continuous(breaks=seq(-1,1)) + theme_bw()

x / y 축 레이블 및 범례 위치에 대한 세부 정보를 관리 할 수 ​​있습니다.

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


(물론) 먼저 스케일 (x1)과 스케일 (x2)을 조정해야한다는 것을 제외하고는 좋아 보입니다.
russellpierce

1
물론 @drknexus 예 (초기 테스트에서는 표준화 된 N (0; 1) 변수를 사용했습니다).
chl

5

Z 점수가 0 ( y0 열), -1 ( y1m 열) 및 1 ( y1p 열) 인 y에 대한 추정값 계산 :

dat$y0 <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*0 + res$coefficients[[4]]*dat$x1*0
	dat$y1m <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*-1 + res$coefficients[[4]]*dat$x1*-1
dat$y1p <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*1 + res$coefficients[[4]]*dat$x1*1

밑줄로 선을 플로팅 plot():

plot(dat$x1, dat$y0, type="l", xlab="x1", ylab="Estimates")
lines(dat$x1, dat$y1m, col="red")
lines(dat$x1, dat$y1p, col="blue")

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

ggplot을 사용하려면 geom_line을 호출 하십시오 .

ggplot(dat, aes(x1, y0)) + geom_line() +
    geom_line(aes(x1, y1m), color="red") +
    geom_line(aes(x1, y1p), color="blue") +
    theme_bw() + opts(title="") + xlab("x1") + ylab("Estimates")

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


2
예측을 사용하여 예측을 얻을 수 있습니다. dat [, "y0"] <-predict (res, newdata = data.frame (x1 = dat [, "x1"], x2 = 0)) 약간의 타이핑을 저장합니다.
mpiktas

@ mpiktas : 감사합니다.에 대해 몰랐지만 predict유용합니다.
daroczig

1
기울기를 직접 계산하는 대신 항상 예측을 사용하는 것이 좋습니다. 특히 상호 작용 또는 비선형 구성 요소가있는 경우에는 훨씬 간단합니다.
hadley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.