Python에서 breusch-godfrey 테스트를 수행하는 방법
선형 회귀의 주요 가정 중 하나는 잔차 사이에 상관 관계가 없다는 것입니다. 즉, 잔차는 독립적입니다.
1차 자기상관을 테스트하기 위해 Durbin-Watson 테스트를 수행할 수 있습니다. 그러나 더 높은 차수에서 자기 상관을 테스트하려면 Breusch-Godfrey 테스트를 수행해야 합니다.
이 테스트에서는 다음과 같은 가정을 사용합니다.
H 0 (귀무가설): p 보다 작거나 같은 차수에 대한 자기상관이 없습니다.
HA (대립가설): p 보다 작거나 같은 특정 차수의 자기상관이 존재합니다.
검정 통계량은 자유도가 p 인 카이제곱 분포를 따릅니다.
이 검정 통계량에 해당하는 p-값이 특정 유의 수준(예: 0.05)보다 낮으면 귀무 가설을 기각하고 특정 낮은 차수 또는 p 와 동일한 잔차 사이에 자기 상관이 존재한다는 결론을 내릴 수 있습니다.
Python에서 Breusch-Godfrey 테스트를 수행하려면 statsmodels 라이브러리의 acorr_breusch_godfrey() 함수를 사용할 수 있습니다.
다음 단계별 예제에서는 Python에서 Breusch-Godfrey 테스트를 수행하는 방법을 설명합니다.
1단계: 데이터 생성
먼저 두 개의 예측 변수(x1 및 x2)와 응답 변수(y)가 포함된 데이터 세트를 만들어 보겠습니다.
import pandas as pd #create dataset df = pd. DataFrame ({' x1 ': [3, 4, 4, 5, 8, 9, 11, 13, 14, 16, 17, 20], ' x2 ': [7, 7, 8, 8, 12, 4, 5, 15, 9, 17, 19, 19], ' y ': [24, 25, 25, 27, 29, 31, 34, 34, 39, 30, 40, 49]}) #view first five rows of dataset df. head () x1 x2 y 0 3 7 24 1 4 7 25 2 4 8 25 3 5 8 27 4 8 12 29
2단계: 회귀 모델 적합
그런 다음 x1과 x2를 예측 변수로 사용하고 y를 응답 변수 로 사용하여 다중 선형 회귀 모델을 적합할 수 있습니다.
import statsmodels. api as sm
#define response variable
y = df[' y ']
#define predictor variables
x = df[[' x1 ', ' x2 ']]
#add constant to predictor variables
x = sm. add_constant (x)
#fit linear regression model
model = sm. OLS (y,x). fit ()
3단계: Breusch-Godfrey 테스트 수행
다음으로 Breusch-Godfrey 테스트를 수행하여 차수 p 에서 잔차 간의 자기 상관을 테스트합니다. 이 예에서는 p = 3을 선택합니다.
import statsmodels. stats . diagnosis as dg
#perform Breusch-Godfrey test at order p = 3
print (dg. acorr_breusch_godfrey (model, nlags= 3 ))
(8.70314827, 0.0335094873, 5.27967224, 0.0403980576)
출력의 첫 번째 값은 검정 통계량을 나타내고 두 번째 값은 해당 p-값을 나타냅니다.
결과에서 우리는 다음을 볼 수 있습니다:
- 검정 통계량 X 2 = 8.7031
- P-값 = 0.0335
이 p-값이 0.05보다 작기 때문에 귀무가설을 기각하고 3보다 작거나 같은 잔차 사이에 자기상관이 있다는 결론을 내릴 수 있습니다.
자기 상관을 처리하는 방법
귀무가설을 기각하고 잔차에 자기상관이 존재한다고 결론을 내리는 경우 문제가 충분히 심각하다고 판단되면 이 문제를 해결할 수 있는 몇 가지 옵션이 있습니다.
- 양의 계열 상관관계를 얻으려면 종속변수 및/또는 독립변수의 시차를 모델에 추가하는 것을 고려하십시오.
- 음의 계열 상관관계의 경우 변수가 과도 하게 지연되지 않았는지 확인하세요.
- 계절 상관관계를 확인하려면 모델에 계절 모형을 추가하는 것이 좋습니다.
추가 리소스
Python의 선형 회귀에 대한 완전한 가이드
Python에서 Durbin-Watson 테스트를 수행하는 방법
Python에서 Ljung-Box 테스트를 수행하는 방법