04 | 이상치

    이상치Outlier는 주어진 회귀 모델에 의해 잘 설명되지 않는 데이터 점들을 뜻한다. 이상치 검출에서는 잔차, 특히 외면 스튜던트화 잔차Externally Studentized Residual를 사용한다.

    <Note> 스튜던트화 잔차[13]

    스튜던트화 잔차(Studentized Residual)는 잔차를 잔차의 표준 편차로 나눈 값이다. 일반적으로 표준 편차는 데이터 전체에 대해서 구한다. 그런데 i번째 데이터가 이상치인지 확인하면서 i번째 데이터를 포함해 표준 편차를 구하는 것은 적절치 않을 수 있다. 따라서 외면 스튜던트화 잔차는 i번째 스튜던트화 잔차를 구할 때 i를 제외하여 표준 편차를 구한다.

    반면 전체 데이터에 대해 표준 편차를 구하는 경우를 내면 스튜던트화 잔차(Internally Studentized Residual)라 한다.

    외면 스튜던트화 잔차는 rstudent( )를 사용해 구하며 이상치는 car::outlierTest( )를 사용해 쉽게 구할 수 있다.

    표 8-8 이상치

    rstudent : 외면 스튜던트화 잔차를 구한다.

    rstudent(
      model  # lm 또는 glm 함수가 반환한 모델 객체
    )

    car::outlierTest : 본페로니(Bonferroni) 이상값 검정을 수행한다.

    car::outlierTest(
      model,  # lm 또는 glm 객체
      ...
    )

    다음은 Orange 데이터에서 외면 스튜던트화 잔차를 계산하는 예다. circumference를 age + age2으로 적합했다.

    > data(Orange)
    > m <- lm(circumference ~ age + I(age^2), data=Orange)
    > rstudent(m)
              1          2           3           4           5           6 
     0.19985287 -0.53303263 -0.17840851 -0.54325622 -1.31082205 -0.92292494
              7          8           9           10          11          12
    -1.72799370  0.33615199 -0.06394288  0.85316955  1.23124345  0.92915017
             13          14          15          16          17          18
    1.75080916   0.93486279  0.19985287 -0.83687327 -0.69447869 -0.84791970
             19          20          21          22          23          24
    -1.54276649 -1.05591062 -1.98782529  0.29066403 -0.36166980  0.89732592
             25          26          27          28          29          30
    1.75037512   1.24135751  2.05032759  1.45729711  0.19985287 -0.92493008
             31          32          33          34          35
    -0.43504980 -0.11561888 -0.34906199  0.44471090 -0.23134075
    

    외면 스튜던트화 잔차는 t 분포를 따르므로 t-test를 사용해 rstudent( ) 값이 너무 크거나 작은 점을 찾으면 된다. 다행히 R에는 이를 간단하게 할 수 있는 라이브러리 car::outlierTest( )가 있다.

    Orange 데이터에 이상치를 직접 추가하고, circumference ~ age + I(age^2)의 포뮬러로 선형 회귀를 수행한 다음 outlierTest를 호출해 이상치를 찾아보자.

    > data(Orange)
    > Orange <- rbind(Orange,
    +                 data.frame(Tree=as.factor(c(6, 6, 6)),
    +                            age=c(118, 484, 664),
    +                            circumference=c(177, 50, 30)))
    > tail(Orange)
       Tree  age circumference
    33    5 1231           142
    34    5 1372           174
    35    5 1582           177
    36    6  118           177
    37    6  484            50
    38    6  664            30
    
    > m <- lm(circumference ~ age + I(age^2), data=Orange)
    > outlierTest(m)
       rstudent unadjusted p-value Bonferonni p
    36 5.538438          3.429e-06    0.0001303
    

    보다시피 36번째 데이터에서 Bonferroni p6 가 0.05보다 작은 값이 나와 이상치로 검출되었다.


    6 본페로니(Bonferroni) p는 여러 가설 검정을 수행할 때 발생하는 다중 비교(Multiple Comparison) 문제를 해결한 p 값이다. 위키피디아의 본페로니 교정에 대한 페이지[14]를 참고하기 바란다. 간단하게 요약하자면 여러 개의 가설 검정을 동시에 수행하면 귀무가설을 기각하게 될 확률이 높아진다. 이를 다중 비교 문제라 한다. 본페로니 교정은 이를 해결한 p 값을 구한다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.