더북(TheBook)

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 값을 구한다.

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