Python에서 goldfeld-quandt 테스트를 수행하는 방법


Goldfeld-Quandt 테스트는 회귀 모델에 이분산성이 존재하는지 여부를 확인하는 데 사용됩니다.

이분산성은 회귀 모델에서 반응 변수 의 다양한 수준에서 잔차가 동일하지 않게 분산되는 것을 의미합니다.

이분산성이 존재하는 경우 이는 잔차가 반응 변수의 각 수준에 동일하게 분산되어 있다는 선형 회귀 분석의 주요 가정 중 하나를 위반합니다.

이 튜토리얼에서는 Python에서 Goldfeld-Quandt 테스트를 수행하는 방법에 대한 단계별 예를 제공합니다.

1단계: 데이터세트 만들기

이 예에서는 수업 시간, 응시한 준비 시험, 수업 중 13명의 학생이 얻은 최종 시험 결과에 대한 정보가 포함된 다음 pandas DataFrame을 만들어 보겠습니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' hours ': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6],
                   ' exams ': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2],
                   ' score ': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96]})

#view DataFrame
print (df)

    hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96

2단계: 선형 회귀 모델 피팅

다음으로 시간시험을 예측 변수로 사용하고 점수를 응답 변수로 사용하여 다중 선형 회귀 모델을 적합합니다.

 import statsmodels. api as sm

#define predictor and response variables
y = df[' score ']
x = df[[' hours ', ' exams ']]

#add constant to predictor variables
x = sm. add_constant (x)

#fit linear regression model
model = sm. OLS (y,x). fit ()

#view model summary
print ( model.summary ())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.718
Model: OLS Adj. R-squared: 0.661
Method: Least Squares F-statistic: 12.70
Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.00180
Time: 09:22:56 Log-Likelihood: -38.618
No. Observations: 13 AIC: 83.24
Df Residuals: 10 BIC: 84.93
Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 71.4048 4.001 17.847 0.000 62.490 80.319
hours 5.1275 1.018 5.038 0.001 2.860 7.395
exams -1.2121 1.147 -1.057 0.315 -3.768 1.344
==================================================== ============================
Omnibus: 1,103 Durbin-Watson: 1,248
Prob(Omnibus): 0.576 Jarque-Bera (JB): 0.803
Skew: -0.289 Prob(JB): 0.669
Kurtosis: 1.928 Cond. No. 11.7
==================================================== ============================

3단계: Goldfeld-Quandt 테스트 수행

다음으로 statsmodels het_goldfeldquandt() 함수를 사용하여 Goldfeld-Quandt 테스트를 수행하겠습니다.

참고 : Goldfeld-Quandt 테스트는 데이터 세트의 중앙에 있는 여러 관측치를 제거한 다음 잔차 분포가 중앙 관측치의 양쪽에 바인딩된 두 결과 데이터 세트와 다른지 테스트하는 방식으로 작동합니다.

일반적으로 전체 관측치의 약 20%를 제거하도록 선택합니다. 이 경우 drop 인수를 사용하여 관측값의 20%를 제거하도록 지정할 수 있습니다.

 #perform Goldfeld-Quandt test
sm. stats . diagnosis . het_goldfeldquandt (y, x, drop= 0.2 )

(1.7574505407790355, 0.38270288684680076, 'increasing')

결과를 해석하는 방법은 다음과 같습니다.

  • 검정 통계량은 1.757 입니다.
  • 해당 p-값은 0.383 입니다.

Goldfeld-Quandt 검정은 다음과 같은 귀무 가설과 대립 가설을 사용합니다.

  • Null (H 0 ) : 동분산성이 존재합니다.
  • 대안( HA ): 이분산성이 존재합니다.

p-값이 0.05 이상이므로 귀무가설을 기각할 수 없습니다.

회귀 모델에서 이분산성이 문제라고 주장할 충분한 증거가 없습니다.

다음에 무엇을할지

Goldfeld-Quandt 검정의 귀무 가설을 기각하지 못하면 이분산성이 존재하지 않으며 계속해서 원래 회귀 결과를 해석할 수 있습니다.

그러나 귀무 가설을 기각하면 데이터에 이분산성이 존재한다는 의미입니다. 이 경우 회귀 출력 테이블에 표시되는 표준 오류는 신뢰할 수 없습니다.

이 문제를 해결하는 몇 가지 일반적인 방법은 다음과 같습니다.

1. 반응 변수를 변환합니다.

예를 들어 응답 변수의 로그, 제곱근 또는 세제곱근을 취하는 등 응답 변수에 대한 변환을 수행해 볼 수 있습니다. 일반적으로 이로 인해 이분산성이 사라질 수 있습니다.

2. 가중 회귀를 사용하십시오.

가중 회귀는 적합치의 분산을 기반으로 각 데이터 포인트에 가중치를 할당합니다. 본질적으로 이는 분산이 더 높은 데이터 포인트에 낮은 가중치를 부여하여 잔차 제곱을 줄입니다.

적절한 가중치를 사용하면 가중 회귀를 통해 이분산성 문제를 해결할 수 있습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Python에서 OLS 회귀를 수행하는 방법
Python에서 잔차 플롯을 만드는 방법
Python에서 White의 테스트를 수행하는 방법
Python에서 Breusch-Pagan 테스트를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다