Hat 행렬
관련된 내용
hat 행렬(H)은 회귀모델을 적용하여 $\hat{y}$을 추정하는 과정에서 설명변수의 영향을 나타내기 위해 작성합니다. 식 1과 같이 최소제곱 방법에 의한 회귀계수를 적용한 추정치의 추정 과정에서 설명변수만으로 구성된 부분을 hat 행렬(P)이라 합니다.
\begin{align}\hat{y} & = Xb\\&=X(X^TX)^{-1}X^Ty\\& = Py\\ H&= X(X^TX)^{-1}X^T\\& = P\end{align} | (식 1) |
이상치는 그 데이터가 보이는 일반적인 경향을 따르지 않는 값(들)을 의미합니다. 회귀분석시 일반적으로 이상치는 반응변수 값의 측면에서 고려되지만 설명변수 측면에서 극단의 값(x값)을 가진다면 그 데이터 지점은 높은 레버리지(leverage)를 가진다고 말합니다. 이 레버리지 즉, 각 샘플의 설명변수의 영향은 hat 행렬의 대각요소의 값으로 나타낼 수 있습니다.
hat 행렬은 이상치를 판단하기 위한 기본 값들로 이를 기준으로 여러 지표를 계산할 수 있습니다. statsmodel.api.OLS()에 의해 생성되는 모델의 get_influence() 메소드는 이상치 판단을 위한 여러 지표들의 결과를 나타냅니다. 이 결과는 .summary_frame()
메소드로 확인할 수 있습니다.
기사 회귀모형에서 이상치(outlier) 파악편에서 구축한 회귀모델 reg에 대해 이 메소드들을 실행하면 다음과 같습니다.
import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import FinanceDataReader as fdr import statsmodels.api as sm from scipy import stats
st=pd.Timestamp(2021,1, 1) et=pd.Timestamp(2024, 5, 10) kos=fdr.DataReader('KS11',st, et)[["Open","Close"]] kos.index=range(len(kos)) X=kos.values[:,0].reshape(-1,1) y=kos.values[:,1].reshape(-1,1) #독립변수 정규화(표준화) xScaler=StandardScaler().fit(X) X_n=xScaler.transform(X) #반응변수 정규화(표준화) yScaler=StandardScaler().fit(y) y_n=yScaler.transform(y) X_n0=sm.add_constant(X_n) X_n0.shape, y_n.shape reg=sm.OLS(y_n, X_n0).fit()
influence=reg.get_influence() infSummary=influence.summary_frame() infSummary.round(4).head(3)
dfb_const | dfb_x1 | cooks_d | standard_resid | hat_diag | dffits_internal | student_resid | dffits | |
0 | 0.1106 | 0.0620 | 0.0079 | 3.1599 | 0.0016 | 0.1261 | 3.1773 | 0.1268 |
1 | 0.0755 | 0.0597 | 0.0046 | 2.1649 | 0.0020 | 0.0961 | 2.1698 | 0.0963 |
2 | -0.0337 | -0.0323 | 0.0011 | -0.9695 | 0.0023 | -0.0467 | -0.9694 | -0.0467 |
댓글
댓글 쓰기