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.