ols回归分析 stata,python的ols回归

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: