ggplot2 및 ggiraph를 사용한 interaction plot(2)

지난번에 이어 interaction plot을 ggplot2와 ggiraph 패키지를 사용하여 구현하였다. 오늘 소개할 함수는 다음과 같다.

  1. 다중회귀모형에서 interaction을 볼수 있는 ggEffect()함수
  2. One way ANOVA with 1 covariate(ANCOVA)에 쓸 수 있는 ggAncova()함수
  3. catepillar plot을 구현해주는 ggCatepillar()함수

1. 다중회귀분석모형에서 상호작용의 시각화 : ggEffect()함수

자동차의 연비에 관한 mtcars데이타에서 연비(mpg)를 반응(종속)변수로, 공차중량(wt)과 마력(hp)를 영향(독립)변수로 하여 다중회귀모형을 만들어 보자. 이때 반응변수의 상호작용을 보기 위해 hp/wt를 입력한다. 참고로 A/B는 완전교차(complete crossing)를 의미하며 AB= A+B+A:B(상호작용)이다. AB*C는 A+B+C+A:B+A:C+B:C+A:B:C 를 의미한다.

fit=lm(mpg~hp*wt,data=mtcars)
summary(fit)

Call:
lm(formula = mpg ~ hp * wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0632 -1.6491 -0.7362  1.4211  4.5513 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 49.80842    3.60516  13.816 5.01e-14 ***
hp          -0.12010    0.02470  -4.863 4.04e-05 ***
wt          -8.21662    1.26971  -6.471 5.20e-07 ***
hp:wt        0.02785    0.00742   3.753 0.000811 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.153 on 28 degrees of freedom
Multiple R-squared:  0.8848,    Adjusted R-squared:  0.8724 
F-statistic: 71.66 on 3 and 28 DF,  p-value: 2.981e-13

회귀모형을 살펴보면 hp도 의미가 있고 wt도 의미가 있으며 hp:wt의 상호작용도 의미가 있다. 이와 같은 상호 작용을 시각화 하기 위해 ggEffect()함수를 만들었다. 사용방법은 다음과 같다.

source("ggAncova.R")
ggEffect(fit,interactive=TRUE)

ggEffect()함수의 원형은 다음과 같다.

ggEffect=function(fit,
                  x=1,
                  probs=c(0.10,0.5,0.90),
                  point=TRUE,
                  xvalue=NULL,
                  se=FALSE,
                  use.rownames=FALSE,
                  interactive=FALSE){
   ...                  
}

인수중 probs의 기본 값은 probs=c(0.10,0.5,0.90)이며 이는 영향변수 x축 변수가 아닌 변수(여기서는 hp)의 10,50,90퍼센타일에 대한 회귀선을 그려준다. 만일 5,25,50,75,95퍼센타일의 5개의 회귀선을 그리고자 한다면 다음과 같이 하면 된다.

ggEffect(fit,probs=c(0.05,0.25,0.5,0.75,0.95),interactive=TRUE)

두번째 영향변수를 x축변수로 그림을 그리려면 x=2로 주면 되고 점의 tooltip을 데이타의 rownames로 바꾸려면 use.rownames인수를 TRUE로 변경하면 된다.

ggEffect(fit,x=2,use.rownames=TRUE,interactive=TRUE)

저자가 만든 moonBook 패키지에 있는 radial데이타에서 동맥경화 정도(NTAV) 에 미치는 나이와 흡연과의 상호작용을 시각화해보면 다음과 같다.

require(moonBook)
fit2=lm(NTAV~age*smoking,data=radial)
ggEffect(fit2,interactive=TRUE)