简要:实际上计量模型估计和实现最好用的软件还是stata,这个软件无论在国内还是国外,经济学家们都是爱不释手。今天我们要介绍的是python中的一个较为强大的统计分析包(Statsmodels),不过需要强调的是python因为本身并不是专门用于经济计量分析的软件,其包在计量分析性能上可能远不及stata,不过这并不影响我们学习这个包,因为结合python后有一个非常明显的优点就是将数据处理和简单的统计分析结合起来,有效地提高工作效率。但是如果是为了深入地进行学术研究,尤其是计量理论和方法上的是实现,当然还是建议大家去使用stata等专门的计量分析软件。本文将简要介绍线性回归中一个最为基础也是最简单的一元线性回归(OLS),首先我会对一元线性回归相关理论做一个简单的回顾;然后我们将使用数值模拟的方法调用Statsmodels包进行回归模型参数估计和拟合。
一元线性回归(OLS)
若假定回归函数为如下形式:
我们则称为Y对X的一元线性回归函数,其中
均为未知参数,称之为回归系数,
称之为随机扰动项,为服从0均值,有限方差的序列过程。
同时我们可以看到回归方程是线性方程,称为回归直线:
然而光有这样的假定我们发现还是无法有效地估计回归系数,因为我们好像并不清楚随机扰动项
的分布。我们发现如果
服从正态分布,那我们的估计将会大大简便。因此,我们在进一步给出假定条件如下:
于是原先的一元线性回归模型就变成了如下的形式:
此时,我们称之为Y对X的一元正态线性回归模型。也就是说,大多数情况下我们所说的一元线性回归模型其实是一元正态线性回归模型。
构造
的试验值
与理论回归值
的离差平方和:
以使此式取得最小值的
,
作为回归系数的估计值,称之为最小二乘估计,即是:
线性方程组:
正规方程组:
数值模拟
第一步,先导入python统计分析包“Statsmodels”和数组Numpy模块
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
from statsmodels.sandbox.regression.predstd import wls_prediction_std
第二步,我们模拟一组数据,假设模型符合以下条件:
nsample = 200
x = np.linspace(0.1, 5.0, 200)
beta = np.array([1, 0.6])
e = np.random.normal(size=nsample)
根据上述我们设定的回归直线模型形式,我们需要在模拟数据中添加一个截距项:
X = sm.add_constant(X)
y = np.dot(X, beta) + e
至此,我们模拟产生了Y和X数据,其中X数据包括截距项。接下来我们可用模拟产生的数据进行线性回归参数估计和模型拟合。
第三步,模型参数估计和拟合
model = sm.OLS(y, X)
results = model.fit()
print(results.summary())
模型估计结果如下:
调取出相关参数:
print('Parameters: ', results.params)
print('R2: ', results.rsquared)
我们发现回归系数的P值均显著,但是
值为0.474偏小。其实我们可以将上述设定的回归模型X系数参数设定为一个较大值,我们重新修改为如下:
nsample = 200
x = np.linspace(0.1, 5.0, 200)
beta = np.array([1, 10])
e = np.random.normal(size=nsample)
我们再次重新回归估计和拟合一遍,新的回归结果如下:
可以看到此时的
为0.995,比之前大了很多。但是需要强调的是在线性回归中
值的大小并不能作为我们评判回归模型性能优良的唯一尺度,甚至有时依靠这个评判标准还会产生很多错误。实际上,如果我们在利用时间序列数据进行回归拟合时,
总是表现的很大,但这并不能说明什么。
最后,我们将真实值和得到的回归直线的模拟值进行比较,这种比较会更加直观地让我们看到模型拟合的效果。注意:两根红线表示置信区间。
y_fitted = results.fittedvalues
fig, ax = plt.subplots(figsize=(12,20))
ax.plot(x, y, 'o', label='data')
ax.plot(x, y, 'b-', label="True")
ax.plot(x, y_fitted, 'r--.',label='OLS')
prstd, iv_l, iv_u = wls_prediction_std(results)
ax.plot(x, iv_u, 'r--')
ax.plot(x, iv_l, 'r--')
ax.legend(loc='best');
图形如下:
我们也可以截取图形的片段来展示,这样会更加清晰。
小结
我们根据模拟产生的数据估计和拟合了一元线性回归模型,方法应用简单。实际上线性回归虽然模型较为简单,属于计量分析入门级知识。但是在实际应用中,线性回归模型仍然被业界经常采用。下一节,我们将选取上海两家股票历史价格数据来进行进一步的实证建模和预测,来展示一元线性回归模型的实用之处。