1、林林总总的标准误
标准误在统计推断中发挥着至关重要的作用,直接影响着系数的显著性和置信区间,并最终影响到假设检验的结论。因此,正确地估计标准误在实证分析的过程中显得尤为重要。当干扰项满足「独立同分布 (iid)」 条件时, OLS 所估计的标准误是无偏的。但是当误差项之间存在相关性时,OLS 所估计的标准误是有偏的,不能很好地反映估计系数的真实变异性 (Petersen, 2009),故需要对标准误进行调整。在多种调整标准误的方式中,「聚类调整标准误 (cluster)」是一种有效的方法 (Petersen, 2009)。
相关内容可参考 Petersen (2009)、Thompson (2011)、 Cameron and Miller (2015)、 Abadie et al. (2017) 、Gu and Yoo (2019)等文献。
1. 应对异方差,使用white标准误等等
调整OLS估计的协方差矩阵(covariance matrix)的位置,并修正OLS估计的标准误差。目前学者们已经提出了多个调整方法,并且statsmodels对应于以下类型。
HC0:White(1980)的不均匀分散健壮协方差矩阵估计
HC1:Mackinon and White(1985)的不均匀分散健壮协方差矩阵推定v1
HC2:MacKinnon and White(1985)的不均匀分散健壮协方差矩阵推定v2
HC3:MacKinnon and White(1985)的不均匀分散健壮协方差矩阵推定v3
使用wooldridge包装的数据集gpa3进行说明。在这个例子中,我们将探索大学GPA和高中的成绩、性别、人种等有着怎样的关系。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.formula.api import ols
import lmdiag
import wooldridge
from statsmodels.stats.api import het_breuschpagan, het_white
from seaborn import residplot
from statsmodels.stats.outliers_influence import reset_ramsey
gpa3 = wooldridge.data('gpa3').query('spring == 1') #
wooldridge.data('gpa3', description=True)
wooldridge.data('gpa2', description=True)
form_ols = 'cumgpa ~ sat + hsperc + tothrs + female + black + white'
mod_ols = ols(form_ols, data=gpa3)
res_ols = mod_ols.fit()
print(res_ols.summary().tables[1])
稳健标准误估计:
res_robust = res_ols.get_robustcov_results(cov_type='HC3', use_t=True)
print(res_robust.summary().tables[1])
这样编码也是可以的:
res_HC3 = ols(form_ols, data=gpa3).fit(cov_type='HC3', use_t=True)
print(res_HC3.summary().tables[1])
2. Newey-West标准误
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
df = pd.DataFrame({
'a':[1,3,