출처: https://3months.tistory.com/307 [Deep Play]

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 탐색적 자료분석 3-3. 세 변수의 상호작용 (R)
    R 2019. 8. 28. 13:19

    두 변수의 관계 파악이 끝났으면 세 변수의 상호작용을 살펴본다. 두 변수 관계를 본 후에 세 변수로 넘어가니 혹시 네 변수, 다섯 변수... 이 나올까 걱정할 수도 있겠지만 통상적으로 (상호작용 자체가 연구의 주제가 아닌 한) 세 변수를 넘는 상호작용은 연구에 고려하지 않는다.

    이쯤에서 탐색적 자료 분석의 순서를 다시 정리해 보면,

    Y~x1+x2+x3+A+B+C (x1~3: 연속 변수, A,B,C: 범주형 변수)

     

      대상변수 분석 내용
    한 변수 분석 Y, x1, x2, x3, A, B, C 결측치 확인: Y, x1~3, A~C 

    최대/최소치/ 이상값 확인: Y, x1~3, A~C 

    정규성 검증 및 정규화: Y, x1~3
    두 변수의 관계 파악 (연속변수) Y~x1 / Y~x2 / Y~x3 선형관계 유무 확인 

    잔차검정 

    필요할 경우 x1~x3를 번주형 변수로 변경
    두 변수의 관계 파악 (범주형변수) Y~A / Y~B / Y~C

    등분산 확인

    필요할 경우 A~C의 level 수 변경 

    상호작용 파악  (연속변수+연속변수) Y~x1+x2 / Y~x1+x3 / Y~x1+x3 상호작용 확인 및 필요시 x1~3를 범주형 변수로 변경
    상호작용 파악  (연속변수+범주형변수) Y~x1+A / Y~x1+B / Y~x1+C

    Y~x2+A / Y~x2+B / Y~x1+C

    Y~x3+A / Y~x3+B / Y~x3+C
    상호작용 확인

    분석해야 할 요인변수가 6개(연속 변수 3+ 범주형 변수 3)라면 9쌍의 상호작용을 확인해야 한다. (범주형 변수끼리의 상호작용은 꼭 확인할 필요가 없음.)  이번 포스트의 주요 주제는 상호작용의 확인이 되겠는데, 상호작용이라는 게 쉽게 보면 쉽고 어렵게 보면 이해가 잘 안 되는 측면이 존재한다.(그나마 이해하기 쉬운 방법이 시각적 분석을 통한 이해이다.) 

    우선 연속변수와 범주형 변수 조합의 상호작용을 본 후, 연속 변수와 연속 변수의 상호작용으로 넘어가자.

     

     

     

     

    1. 연속변수와 범주형 변수의 상호작용 확인

    library(car)
    library(ggplot2)
    set.seed(0830)
    df <- data.frame(x1=rnorm(n = 99, mean = 0, sd = 0.5), A=c(rep(1, 33), rep(2, 33), rep(4, 33)))
    df$y <- 2*df$x1+3*df$A-2*df$x1*df$A+rnorm(n = 99, mean = 0, sd = 2)
    df$A <- factor(df$A, labels = c("a","b","c"))
    
    ggplot(df, aes(x1,y))+geom_point()+stat_smooth(method="lm", se=F)+theme_classic(base_size = 10)
    ggplot(df, aes(A,y))+geom_boxplot(fill="grey80")+theme_classic(base_size = 10)
    
    m1 <- lm(y~x1+A, data=df)
    summary(m1)

     

    시각적으로 확인해보면 x1이 늘어날수록 y가 감소하는 경향을 확인할 수 있다.

    범주형 변수인 A에 의해서도 y의 분포가 차이를 보임도 확인 할 수 있다. 

    회귀분석 결과에서도

     

    if A=a, y=-2.92*x1+2.73

       A=b, y=-2.92*x1+2.73+3.30

       A=c, y=-2.92*x1+2.73+8.82   의 결과를 확인할 수 있다. 

     

    하지만 이런 해석은 x1과 A사이에 아무 관계가 없다는 가정하에 말하는 것이며, 실제로 연구에 투입되는 변수들은 전혀 관계가 없다고는 할 수 없다. 상호작용은 그것을 확인하는 과정이다.

     

     R에서 상호작용은 * 를 이용해서 표시한다. (위의 데이터를 만들때 사용된 공식을 잘 보면 상호작용이 * 인 이유를 알 수 있다. 진짜 숫자를 곱한 수치이다.^^) 

    m2 <- lm(y~x1*A, data=df)
    anova(m2)
    summary(m2)

     

    anova 테이블을 우선 확인해보면, x1, A, x1:A 세 변수 모두가 통계적으로 유의하다 (세 변수 모두 개별 변수가 없는 모형에 비해 있는 모형이 설명력이 높다 --> 세 변수 모두가 쓸모가 있다). 아래쪽의 summary 결과를 보면 

     

    if A=a, y= -0.07*x1+2.44

       A=b, y= (-0.07-2.68)*x1+(2.44+3.59) = -2.75*x1+6.03

       A=c, y= (-0.07-6.23)*x1+(2.44+9.26) = -6.30*x1+11.7

     

    임을 확인 할 수 있다. 

    솔직히 사람이 숫자만 보고 이해가 되는 사람이 그리 많지는 않은 것 같다.

    그림으로 표시해 보면,

    ggplot(df, aes(x1,y, col=A))+geom_point()+stat_smooth(method="lm", se=F)+theme_classic(base_size = 10)+theme(legend.position = c(0.8,0.9))

    A의 집단 별 회귀선이다. 회귀선을 보면 y와 x1의 관계에 기울기 변화를 주는 것을 알 수 있다. 만약 x1과 A사이에 상호 작용이 유의하지 않다면 세 직선의 기울기는 동일해야 한다. 하지만 세 직선의 기울기는 눈으로도 알 수 있을 정도로 다르고, R2값도 0.7349 (설명력 73.5%)에서 0.818 (설명력 81.8%)로 8%의 추가적인 설명력을 증가시켰다. 

    다시 강조하자면 호작용은 기울기의 차이이다.

    이걸 이해해야 뒷 내용을 이해할 수 있다. 한번 이해하면 쉽지만 그 한 번 이해가 그리 쉽지만은 않은 것 같다. 이해가 될 때까지 반복해서 읽는 것이 좋을 것 같다. 

    상호작용을 표시할 때 x1*A의 방식으로 표현하였으며,
    결과는 x1+A+x1:A 의 방식으로 표현되었다.
    둘은 같은 방식이며 x1:A 항목이 x1과 A 이 둘을 곱해서 만든 변수이다.
    필요에 따라 x1+x1:A 와 같이 필요없다고 생각하는 변수를 제외한 후 식을 전개할 수도 있다. 

    from https://en.wikipedia.org/wiki/Interaction_(statistics)

    영문 위키에서 가져온 상호작용의 한 예이다. 신념(보수/ 중도/ 진보)에 따른 지구 온난화에 대한 관심도이다. 완벽한 직선은 아니지만 학력에 따른 기울기가 신념에 따라 다르다. (그리고 이건 두 변수 모두 범주형 변수로 되어 있다. 그리고 위에서 나는 범주형*범주형은 일반적으로 상호작용 고려하지 않는다라고 언급했기도 했다^^. case by case라고 설명 가능하기도 하고, 논문의 주제가 이 내용이면 충분히 범주*범주형 변수도 상호작용을 볼 수 있다. 그리고 학력 자체가 범주형 변수이지만 연속적인 느낌도 가지고 있지 않을까?)

     

     

     

     

     

    2. 연속변수와 연속 변수의 상호작용 확인

    set.seed(0830)
    df2 <- data.frame(x1=rnorm(n = 100, mean = 0, sd = 0.5), x2=rnorm(n = 100, mean = 0, sd = 0.5))
    df2$y <- 2*df2$x1-df2$x1*df2$x2+rnorm(n = 100, mean = 0, sd = 1)
    ggplot(df2, aes(x1,y))+geom_point()+stat_smooth(method = "lm", se=F)+theme_classic(base_size = 10)
    ggplot(df2, aes(x2,y))+geom_point()+stat_smooth(method = "lm", se=F)+theme_classic(base_size = 10)

    x1은 y와 선형관계를 가지고 있는 것으로 보이지만, x2는 y와 별 관계없어 보인다.

     

    m3 <- lm(y~x1+x2, data=df2)
    summary(m3)

    회귀 방정식에서도 x2는 유의하지 않다. 그럼 과연 필요 없는 변수니 x2를 버려야 하는가? 그건 좀 빠르다. 자체로는 유의하지 않으면 서서 다른 변수와 상호작용을 통해 y에 영향을 미칠 수 있으며 이번 케이스의 x 2가 바로 그렇다.

    상호작용을 고려한 회귀식을 확인해 보자.

    m4 <- lm(y~x1*x2, data=df2)
    anova(m4)
    summary(m4)
    ## 참고로 m4의 회귀식은 y~x1+x2+x1:x2 와 동일하다.

    x2는 모형에 도움되지 않았지만, x1과 x1:x2 두 변수는 모형이 좋아지는데 도움이 되었다 (유의했다).

    그리고 회귀방정식은 y=0.01+2.20*x1+0.23*x2-1.35*x1*x2 로 설명 가능하다. 

    이번 케이스에서 x2는 스스로는 유의하지 않으면서 x1과 상호작용을 통해서 x1과 y의 관계를 훼방 놓고 있다 (x2=1일때, 원래라면 x1이 1 증가할 때 y는 2.20 증가해야 하지만 1.35만큼 상호작용을 통해 까먹는다). 상호작용의 틀에서 x2 같은 변수를 억제 변수 (Suppressor variable)이라고 부른다. 그리고 억제 변수가 비록 유의하지 않더라도 상호작용 항목을 결과에 제시할 때에는 억제 변수의 결과까지 포함해서 제시한다 (y~x1+x2+x1:x2의 형식으로 제시해야지 유의하지 않다고 y~x1+x1:x2의 형식으로 제시하면 안 된다는 의미이다). 

    한번 봐서 이해가 잘 안되는게 정상이다. 사람은 원래 눈으로 구성을 확인해야 이해 가능하다. 그런데 3개의 연속 변수의 관계를 보려면 3차원 공간이 필요하다. 당연히 R에서 3차원 그래프 그리는 것이 가능하지만 일반적인 사람은 3차원 그래프를 이해하기? (받아들이기) 힘들다.  따라서 중요도가 상대적으로 떨어지는 x2를 범주화해서 이를 해결한다.

    quantile(df2$x2, probs = c(0.33,0.66))
    df2$x2_cate <- cut(df2$x2, breaks = c(-Inf, -0.242, 0.044, Inf))
    ggplot(df2, aes(x1, y, col=x2_cate))+geom_point()+stat_smooth(method="lm", se=F)+theme_classic(base_size = 10)+theme(legend.position = c(0.8, 0.2))
    

    x2를 3군으로 나눴더니 기울기가 군마다 다른 것을 확인 할 수 있다. 결과 제시는 여러 방법으로 가능한데, x1과 x2를 둘 다연속변수로 분석하고 둘 중 하나를 범주화한 그림을 위와 같이 제시할 수도 있고, 아니면 둘 중 중요도가 떨어지거나, 범주화하기 편하거나, 범주화했을 때 결과의 임팩트가 더 커 보이는... 여러 이유 중 하나 이상을 가진 변수를 범주화해서 분석 결과부터 범주화한 변수를 가지고 제시하는 방법이 있다. 어떻게 하라고 정해진 원친은 없으니 케이스 바이 케이스로 결과에 맞춰 진행하면 될 것 같다.

     

     

    마지막이 범주화변수*번주화변수의 예인데... 초반에 언급했듯이 논문의 주제 자체가 그 두 변수의 상호작용이 아닌 한 별다르게 신경 쓰지 않아도 된다. 그도 그럴게 범주 변수*범주 변수는 카이스퀘어 검정이다. 구태여 상호작용의 틀을 이용하지 않고도 분석이 가능하다. 그리고 범주*범주 변수의 상호작용이 결과를 흔들 만큼 큰 경우는 그리 많지 않다. 만약 신경 쓰이는 부분이 존재하거나 선행연구에서 범주*범주 변수의 상호작용을 다뤘었다면 y~A*B 문구를 추가해서 시도해 볼 수 있다.      

     

     

    3. Take Home Message

     

    1) 연속변수*연속변수, 연속 변수*범주형 변수의 pair는 상호작용을 확인해 보는 것이 좋다.

    2) 상호작용은 그래프에서 기울기의 차이로 표현된다.

    3) 변수 자체로는 영향이 없는것 같지만 상호작용을 통해 자신을 드러내는 변수도 존재한다.

         

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.