第五节 利用python进行WLS加权最小二乘回归

FBI WARNING: 好久没有写过文档了,偶然登陆账号发现一年前随手写下的“教程”竟然收到蛮多小伙伴们的支持,这是没想到的,谢谢各位大佬们。虽然计量经济学这门课早就结束,没有使用的机会,但最近写毕业论文有了不少数据,今天就对最近遇到的WLS进行总结吧~


一、关于WLS

  • 我们知道关于OLS的假设,其中有一条就是随机扰动项同方差且相互独立,如果不满足这个条件,就会引发异方差性的相关问题。那如果存在异方差性该怎样解决呢?加权最小二乘法WLS(weighted least square)估计就这样出来了!
  • 普通最小二乘法(OLS)目标是让我们的残差平方和最小,给予每一个观测同样的权重,如果这个时候存在异方差性,就应该对我们的残差不同的权重。WLS简单来讲就是:给残差比较小的观测更大的权重,给残差更小的观测一个更大的权重,异方差性得以解决。

二、代码实现

本次实验还是利用python的statesmodels快速完成,整个过程非常简单,直接上手吧!

1.statsmodels关于WLS方法的解读

来自官方文档

import statsmodels.api as sm

sm.WLS(endog,exog,weights)
#endog:自变量;exog:因变量;weight:加权的权重,默认为1

2.代码演示

WLS既然要给残差比较小的更大的权重,给残差更小的一个更大的权重,那么首先进行OLS回归,得到了回归的残差,取其绝对值的倒数作为权重进行WLS回归即可。

2.1 首先进行OLS回归

import pandas as pd
import numpy as np 
import statsmodels.api as sm

# 随机生成数据
X=pd.DataFrame(np.random.random((200,4)),columns=['x1','x2','x3','x4'])
Y=np.random.random(200)

#OLS回归
X = sm.add_constant(X) #增加常数项列
model = sm.OLS(Y,X)
result = model.fit()
result.summary()

展示一下OLS的结果,随机生成的数据,仅供参考:

python计量经济模型 用python做计量经济学_权重

2.2进行加权最小二乘回归

#获取刚才OLS回归得到的残差,用其绝对值的倒数作为权重
w = 1/abs(reusult.resid)
model_w = sm.WLS(Y,X,weights=w) #输入参数,w表示权重
result_w = model_w.fit()
result_w.summary()

WLS的结果如下:

python计量经济模型 用python做计量经济学_python计量经济模型_02


可以看到回归输出的参数和OLS回归相比还是有变化的,这里数据是随机生成的,我就不过多阐述了~好啦好啦,就这样吧!

总结

WLS的步骤大致总结为2步

  • OLS回归得到回归的残差序列(resid),取其绝对值的倒数作为权重;
  • 调用sm.WLS,将上一步骤得到的权重作为sm.WLS(Y,X,weights)中的weights进行回归即可