회귀분석 가설검정

2020. 9. 17. 00:04계량경제학

반응형

회귀분석의 계수의 유의성을 판단하기 위해 t-statistic을 활용합니다. t-statistic을 활용하여 회귀분석의 계수가 0이 아니라는 것을 검증하여 계수의 유의성을 판단하는 방법입니다.(t 분포를 활용한 검정: direction-f.tistory.com/32)

만약 추정된 독립변수의 회귀계수를 $\widehat{\beta_1}$이라고 가정해보겠습니다. 그렇다면  $\widehat{\beta_1}$의 분산은 $\frac{\sigma^2}{S_{xx}}$입니다. 이 때 $S_{xx}$은 $\sum(x_i-\overline{x})^2$입니다. 최종적으로 관측수가 $n$이라고 했을 때 회귀 계수의 유의성을 검증하기 위한 t-statistic은 아래와 같습니다.(아래 수식은 단순회귀분석의 경우이고, 다중회귀분석의 경우 t-distribution의 자유도는 $n-p-1$이 됩니다. ($p$ : 독립변수 수))

이 때 위 식에서 $\beta_1$를 0으로 두고 검증을 수행합니다. 만약 귀무가설($H_0$): $\widehat{\beta_1}$ $\neq \beta_1$ 에 대한 검증에서 p-value가 유의하다면, 우리는 $\widehat{\beta_1}$이 0이 아님을 확인할 수 있습니다.

$$ Score = \beta_0 + \beta_1 STR+\beta_2 english+\mu $$

위와 같은 회귀식을 Python을 활용하여 추정해보겠습니다.

import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from math import sqrt
import random
import scipy.stats as stats

## load the data
CASchools = pd.read_csv("CASchools.csv")

## define variable
CASchools["STR"]=CASchools["students"]/CASchools["teachers"]
CASchools["score"]=(CASchools["read"]+CASchools["math"])/2
CASchools["FracEL"]=CASchools["english"]/100

## Hypothesis Testing Using the t-statistic
multi_mod_ = smf.ols("score ~ STR+english",data=CASchools).fit()
multi_mod_.summary()

'''
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept    686.0322      7.411     92.566      0.000     671.464     700.600
STR           -1.1013      0.380     -2.896      0.004      -1.849      -0.354
english       -0.6498      0.039    -16.516      0.000      -0.727      -0.572
'''

결과를 확인하면 각 계수들은 P-value가 0.05이하이며 95%신뢰구간에 0이 포함되지 않아 유의한 변수임을 확인할 수 있습니다.

추가적으로 Introduction Econometrics to R에서는 실습시, 오차의 heteroscedasticity때문에 기존에 $\widehat{\beta_1}$의 분산인 $\frac{\sigma^2}{S_{xx}}$를 이용하지 않고 더 강건한 분산을 추정하여 통계적 타당성을 확보했습니다.

multi_mod_.get_robustcov_results(cov_type="HC1").summary()
'''
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept    686.0322      8.728     78.599      0.000     668.875     703.189
STR           -1.1013      0.433     -2.544      0.011      -1.952      -0.250
english       -0.6498      0.031    -20.939      0.000      -0.711      -0.589
'''

보시면 계수는 그대로이나 p-value가 조금씩 변경된 것을 확인하실 수 있습니다. 오차의 heteroscedasticity에 대해서 더 자세한 내용은 아래 사이트를 참조하면 좋을 것 같습니다.

http://web.vu.lt/mif/a.buteikis/wp-content/uploads/PE_Book/4-7-Multiple-heteroskedastic.html

반응형