[통계] 이상점
이상점과 레버리지
- 이상점 outlier: 종속변수 가 데이터의 일반적 경향을 따르지 않는 점
- 레버리지 leverage: 한 점이 회귀분석 결과에 미치는 영향(대체로 독립변수 가 극단적)
- 영향점 influential point : 레버리지가 큰 이상점
- 이상점이나 레버리지가 작으면, 잔차만 커짐
hat 행렬
회귀분석을 행렬 형태로(식1)
의 유사역행렬 와 를 곱하면 의 OLS 추정치를 구할 수 있음(식2)
식2를 식1에 대입하면 hat 행렬
hat 행렬 는 데이터의 가 예측치 에 미치는 영향을 나타냄
유사 역행렬 pseudo-inverse
아래와 같은 를 의 유사 역행렬이라고 함
행렬 의 역행렬 이 존재하려면 가 정방행렬 square matrix이어야 함(크기가 )
유사 역행렬은 가 역행렬과 비슷하게 이나 가 정방행렬일 필요 없음
레버리지
행렬 의 대각원소 를 레버리지라고 함
번째 종속변수 가 번째 예측치 에 미치는 영향이기 때문
레버리지가 지나치게 크거나 작은 사례는 유의해서 볼 필요
레버리지는 0~1 사이의 실수
레버리지의 합은 모형의 계수의 개수 와 같다(절편 포함)
예를 들어 독립변수의 개수가 1개인 단순 회귀분석의 경우 레버리지의 합은 2
따라서 데이터가 개이면, 레버리지의 평균은
=== "Python"
데이터 열기
df = pd.read_excel('influence1.xlsx')
회귀분석
m = ols('y ~ x', df).fit()
레버리지
i = m.get_influence()
h = i.hat_matrix_diag
Python에서 레버리지가 큰 점 시각화
import seaborn as sns
sns.regplot(x='x', y='y', data=df) # 산점도 및 회귀선
# 레버리지가 큰 점 빨간색 표시
th = 2 / len(df) # p / n
sns.scatterplot(x='x', y='y', data=df[h > th], color='red')
=== "R"
데이터 열기
df = readxl::read_excel('influence1.xlsx')
회귀분석
m = lm(y ~ x, df)
레버리지
h = hatvalues(m)
레버리지가 큰 점 시각화
plot(y ~ x, data=df) # 산점도
abline(m) # 회귀선
# 레버리지가 큰 점 빨간색 표시
th = 2 / nrow(df) # p / n
points(y ~ x, data=df[h > th,], pch=16, col='red')
이상점 지표
내적 스튜던트화 잔차
internally studentized residual
각각의 잔차를, 잔차의 표준편차의 추정치로 나눈 값(보통 ±3 이상이면 이상점으로 봄)
=== "Python"
i.resid_studentized
삭제 잔차
deleted residual
를 제거하고 회귀분석을 했을 때, 와 그 예측치 의 차이
삭제 잔차가 크다면 영향이 크다고 할 수있음
외적 스튜던트화 잔차
externally studentized residual
삭제 잔차를 스튜던트화한 것(보통 ±3 이상이면 이상점으로 봄)
내적 스튜던트화 잔차보다 이상점 진단에 더 유리
=== "Python"
i.resid_studentized_external
=== "R"
rstudent(m)
Difference in Fits
를 분석에 포함했을 때와 포함하지 않았을 때 예측치 차이를 스튜던트화
아래 값보다 크면 이상점으로 의심
- : 관측치의 수
- : 계수의 수(절편 포함)
=== "Python"
i.dffits
=== "R"
dffits(m)
Cook's distance
잔차의 크기와 레버리지의 크기를 복합적으로 반영한 지수
=== "Python"
i.cooks_distance[0]
=== "R"
cooks.distance(m)
Fox’ Outlier Recommendation
Cook’s Distance가 다음과 같은 기준값보다 클 때 아웃라이어로 판단
이상점 시각화
=== "Python"
import statsmodels.api as sm
레버리지와 스튜던트화 잔차 비교(이상점 가능성이 높은 점에 번호 표시됨)
sm.graphics.plot_leverage_resid2(m)
Cook's distance에 따라 점의 크기 다르게(위의 그래프와 x-y 축이 반대)
sm.graphics.influence_plot(m)
=== "R" 레버리지와 스튜던트화 잔차 비교(이상점 가능성이 높은 점에 번호 표시됨)
plot(m, which=5)
이상점 다루기
- 수정해야할 경우
- 데이터 포인트의 원본과 대조하여 입력이 잘못된 경우
- 삭제해야할 경우
- 데이터 포인트가 연구의 모집단에 속하지 않을 경우
- 실험 절차나 측정이 잘못되었을 경우
- 모형을 수정해야 할 경우
- 중요한 변수의 누락
- 상호작용
- 비선형성
이상점을 다룰 때 주의할 점
- 진단 지표들을 기계적으로 적용하여 데이터를 삭제하지 말 것
- 데이터 삭제를 위해서는 객관적 이유가 필요
- 데이터를 삭제한 경우, 결과 보고에 포함시켜야 함
- 데이터 삭제 여부를 결정하기 어려울 경우:
- 삭제한 데이터셋과 그렇지 않은 데이터셋을 따로 분석하고 결과를 비교