이상치(Outlier)는 주어진 회귀 모델에 의해 잘 설명되지 않는 데이터 점들을 뜻한다. 이상치 검출에서는 잔차, 특히 외면 스튜던트화 잔차(Externally Studentized Residual)를 사용한다.
외면 스튜던트화 잔차는 rstudent()를 사용해 구하며 이상치는 car::outlierTest()를 사용해 쉽게 구할 수 있다.
-rstudent : 외면 스튜던트화 잔차를 구한다.
rstuden(
model #lm또는 glm 함수가 반환한 모델 객체
)
-car::outlierTest : 본페로니(Bonferroni)이상값 검정을 수행한다.
car::outlierTest(
model, # lm또는 glm 객체
)
다음은 Orange 데이터에서 외면 스튜던트화 잔차를 계산하는 예다. corcumference를 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데이터에 이상치를 직접 추가하고, corcumference~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) >install.packages("car") >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 p가 0.05보다 작은 값이 나와 이상치로 검출되었다.
R을 이용한 데이터 처리&분석 실무 中