ols回归分析 stata,python的ols回归
Statsmodels是Python强大的统计分析软件包,包括回归分析、时间序列分析和假设检验。
检查功能等。Statsmodels在测量的易用性上赶不上Stata和其他软件,但它的优势是可以有效地配合其他Python任务,如NumPy和Pandas,以提高生产率。本文主要讨论回归分析中最常用的ols函数。
当bldzfj需要用Python进行回归分析时.
将statsmodels.api作为sm导入!
在一切开始之前。
神介绍NumPy()。大家都叫它sac派吗?我称之为口袋),
进口编号为NP
还有时间。
上帝引入了matplotlib,
将matplotlib.pyplot作为plt导入
可以有空间。
上帝引入了国家模式,
将statsmodels.api作为sm导入
世界开始了。
简单OLS回归
假设有一个回归模型Y=0 1X1 nXn,
然后就是K组数据。使用OLS回归来计算回归系数I的评估值b0,b1,…,bn,并对误差进行平方。
最小化。
statsmodels有四种输入。OLS (endog,exog,missing,hasconst),但我们现在只考虑前两个。第一个输入endog是回归中的响应变量(也叫因变量),就是上面模型的y(t)。输入是一个长度为k的数组,第二个输入exog是回归变量(也叫自变量)的值,即模型的x1(t),x1(t)。但是,statsmodels。OLS没有假设回归模型中有常数项,因此模型将
另外,对于所有t=1,k的数据中,x0(t )=1。所以exog的输入是一个k(n1)的数组,其中最左边一列的值都是1。通常,在输入数据中,没有特殊值为1的列。Stats提供了函数sm.add_constant()来直接解决这个问题。一列将被添加到数组的左侧。(本文中等价列表,pd。系列或pd。DataFrame也可以用于输入数组的所有内容。)
具体来说,statsmodels。OLS是位于stats models . regression . linear _ model中的函数。(从这个命名也可以看出,statsmodel有很多函数,其中一个叫做回归。输出结果是stats models . regression . linear _ model . ols,只是一个没有任何操作的类。对OLS模型调用拟合函数fit()进行回归运算,得到stats models . regression . linear _ model . regression results wrapper。它包含这组数据的回归拟合结果的总结。当调用params时,将显示计算的回归系数b0,b1,…,bn。
简单线性回归
以上介绍绕过了大gddgb。现在我们来看一个例子。假设回归公式为:
我们从最简单的集中式模型开始,组成数据集。首先设置数据量,也就是上面的k值。
nsample=100
然后,制作上面x1的数据数组。这里,我想要一个从0到10的x1值的算术数组。
x=NP.linspace (0,10,nsample)).
Sm.add_constant))将常量项1的列添加到数组中。
x=sm.add_constant(x)
然后设置模型的0和1。这里它被设置为1和10。
beta=NP.array ([ 1,10 ]
然后,因为误差项被添加到数据中,所以生成了长度为k的正态分布样本。
e=NP.random.normal(大小=n个样本).
由此,产生反应项y(t)。
Y=NP.dot(x,beta) e
是的,对反应变量和回归变量使用OLS函数。
model=sm.ols(y,x)).
然后得到拟合结果。
结果=model.fit(
计算出的回归系数。
打印(results.params))。
得到
[ 1.04510666,9.97239799 ]
非常接近实际回归系数。
当然,你也可以打印所有回归拟合的摘要。
打印(结果.摘要) )
得到
中央系数列是计算的回归系数。
我们也可以打个结。
画水果。首先调用拟合结果的fittedvalues以获得拟合的y值。
y _ fitted=results.fittedvalues值
然后用matplotlib.pyploft画图。首先设置画面轴,画面尺寸为86。
fig,ax=plt.subplots(figsize=(8,6))
绘制原始数据,图像为圆点,默认颜色为蓝色。
ax.plot(x,y, o ,label=data )
绘制拟合数据,图像为红色,带有虚线。
ax.plot(x,y_fitted, r -,label=OLS )
发表评论。
ax.legend(loc=best )
得到
大局观看不清细节。让我们从0放大到2,看看数据和拟合的关系。
添加更改坐标轴间隔的指令。
ax.axis((-0.05,2,-1,25))
高阶模型的回归
假设反应变量Y和回归变量X之间的关系是高阶多项式,即
我们仍然可以用OLS进行线性回归。但前提是我们必须知道这个关系中x的所有次方;例如,如果这个公式中有一个
. 5项,但我们对此并不了解,所以无法通过线性回归得到准确的拟合。
虽然x和y之间的关系不是线性的,但是y和
关系自信,煎蛋线性。也就是说,只要我们把高阶项看成其他自变量,也就是集合。所以,对于线性公式
可以进行常规的OLS回归来估计每个回归系数 i,可以理解为将一元非线性问题映射到一个有把握的煎蛋上,从而成为线性关系。
我们举一个演示的例子。
首先设置数据量,也就是上面k的值。
nsample=100
然后创建一个数组,就是上面x1的数据。这里,我们希望x1的值以从0到10的等差排列。
x=np.linspace(0,10,nsample)
创建另一个k2数组,分别包含两列x1和x2。我们需要x2是x1的平方。
X=np.column_stack((x,x**2))
使用sm.add_constant()将常量项1的列表添加到数组中。
X=sm.add_constant(X)
然后在模型中设置 0, 1, 2。我们希望将它们设置为1、0.1和10。
beta=np.array([1,0.1,10])
然后,将误差项添加到数据中,从而生成长度为k的正态分布样本。
e=NP . random . normal(size=n sample)
因此,我们生成反应项y(t),它是x1(t)的二次多项式。
y=np.dot(X,beta) e
对反应变量和回归变量使用OLS()函数。
型号=sm。OLS(y,X)
然后得到拟合结果。
结果=model.fit()
然后检索计算出的回归系数。
打印(结果.参数)
得到
[ 0.95119465, 0.10235581, 9.9998477]
获取完整摘要
打印(results.summary())
得到
拟合结果如下
放大横轴的[0,2]区间,可以看到
虚变数
一般来说,取值连续的变量称为连续变量,其取值可以是任意实数,也可以是一定区间内的任意实数,比如股价、时间、高度等。然而,一些属性不是连续的,并且只有有限数量的可能值。一般用来区分类别,比如性别,婚姻状况,股票行业。表达这些变量称为分类变量。在回归分析中,我们需要将分类变量转化为虚拟变量。
如果我们要用D个值来表示一个分类变量,那么它对应的哑变量的值就是一个D元组(可以看作是一个长度为D的向量),其中一个元素为1,其他为0。元素出现1的位置就是变量的类别。例如,如果一个分类变量的值是{a,B,C,d},那么类别A对应的哑变量是(1,0,0,0),B是(0,1,0,0),C是(0,0,1,0),D是(0,0,0,0),这样的用法是,如果四个条件A,B,C,D分别对应四个系数 0, 1, 2, 3,设(x0,x1,x2,x3)是一个哑变量,其值为
可以直接得到相应的系数。可以理解为分类变量本身的值只是分类,并不能形成任何线性关系。但如果映射到自信煎蛋的0,1点,就可以用线性关系来表示,从而进行回归。
Statsmodels中有一个函数category()可以直接将category { 0,1,…,d-1}转换成对应的元组。确切地说,sm . categorial()(data,col,dictnames,drop)有四个输入。其中,数据是一个k1或k2数组,其中记录了每个样本的分类变量的值。Drop是一个Bool值,表示是否在输出中丢失样本变量的值。中间的两个输入可以忽略。这个函数的输出是一个kd数组(如果drop=False,则为k(d 1)),其中每一行都是对应样本的哑变量;这是数据中分类变量的总类别数。
举个例子吧。这里假设反应变量Y对应连续自变量X和分类变量z,常系数为10,系数XX为1;Z {a,B,c}有三种类型,其中A类系数为1,B类系数为3,C类系数为8。也就是说,z转换成哑变量(Z1,Z2,Z3),其中Zi的值为0,1,有一个线性公式。
OLS回归可以通过常规方法进行。
我们根据这个关系生成一组数据来做个演示。首先,将样本数定义为50。
nsample=50
设置分类变量数组。前20个样本被归类为a。
groups=np.zeros(nsample,int)
接下来的20个样本被分类为b。
groups[20:40]=1
后10名为c级。
组[40:]=2
一个虚拟变量。
dummy=sm . categorial(groups,drop=True)
创建一组连续变量,即从0到20递增的50个值。
x=np.linspace(0,20,nsample)
组合连续变量和虚拟变量的数组,并添加一个常数项列表。
X=np.column_stack((x,dummy))
X=sm.add_constant(X)
定义回归系数。我们想把常系数设为10,唯一连续变量系数设为1,把分类变量的三个分类A、B、C的系数分别设为1、3、8。
贝塔=[10,1,1,3,8]
生成另一个正态分布的噪声样本。
e=NP . random . normal(size=n sample)
最后,生成一个反射变量。
y=np.dot(X,beta) e
获得虚拟数据后,将其放入OLS模型进行拟合。
结果=sm。OLS(y,X)。适合()
打印(result.summary())
得到
再画一张图。
fig,ax=plt.subplots(figsize=(8,6))
ax.plot(x,y, o ,label=data )
ax.plot(x,result.fittedvalues, r -,label=OLS )
ax.legend(loc=best )
得出(结论)
这里需要指出的是,哑变量是与其他自变量平行的影响因素,也就是说哑变量和原X同时影响回归结果。初学者往往会误解这一点,认为哑变量是一个选择变量:也就是说,上图给出的回归结果只做了一次,而不是三段三次回归。虚拟变量的值隐藏在其他三维空间中。可以理解为,上图其实是把自信煎蛋的回归结果映射到一个平面上得到的图。
简单应用
我们来做一个很简单的实际应用。设x为上证指数日收益率,y为深证指数日收益率。通过我们对股票市场的了解,我们认为X和y之间有很强的线性关系。因此可以假设模型
并利用Statsmodels软件包进行OLS回归分析。
我们取上证综指和深证综指一年的收盘价。
data=get_price([000001。XSHG , 399001。XSHE],start_date=2015-01-01 ,end_date=2016-01-01 ,频率=每日,fields=[close])[close]
x_price=data[000001。XSHG]。价值观念
y_price=data[399001。XSHE]。价值观念
计算两个指数一年内的日收益,记录在x_pct和y_pct列表中。
x_pct,y_pct=[],[]
对于范围内的I(1,len(x_price)):
x _ pct . append(x _ price[I]/x _ price[I-1]-1)
对于范围内的I(1,len(y_price)):
y _ pct . append(y _ price[I]/y _ price[I-1]-1)
将数据转换成数组形式;不要忘记添加常量项。
x=np.array(x_pct)
X=sm.add_constant(x)
y=np.array(y_pct)
Go,u.v.(sm。OLS。fit())!全靠你了!
结果=sm。OLS(y,X)。适合()
打印(results.summary())
得到
嗯,y=0.002 0.9991x,比较合理,或者干脆四舍五入到y=x,最后画出数据和拟合线。
fig,ax=plt.subplots(figsize=(8,6))
ax.plot(x,y, o ,label=data )
ax.plot(x,results.fittedvalues, r -,label=OLS )
ax.legend(loc=best )
标签
本文介绍了统计模型中常用的OLS回归函数,并给出了一些使用方法。线性回归的应用场景非常广泛。在我们的量化课堂应用内容中,也有相当多的策略使用了线性回归。我们将应用类文章中与线性回归相关的部分链接到本文中,形成一个系统。量化课堂未来还会介绍Statsmodel包的一些其他功能,敬请关注。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。