前文传送门:

13.3 statsmodels介绍

statsmodels是Python进行拟合多种统计模型、进行统计试验和数据探索可视化的库。Statsmodels包含许多经典的统计方法,但没有贝叶斯方法和机器学习模型。

statsmodels包含的模型有:

线性模型,广义线性模型和健壮线性模型

线性混合效应模型

方差(ANOVA)方法分析

时间序列过程和状态空间模型

广义矩估计

下面,我会使用一些基本的statsmodels工具,探索Patsy公式和pandasDataFrame对象如何使用模型接口。

估计线性模型

statsmodels有多种线性回归模型,包括从基本(比如普通最小二乘)到复杂(比如迭代加权最小二乘法)的。

statsmodels的线性模型有两种不同的接口:基于数组,和基于公式。它们可以通过API模块引入:

import statsmodels.api as sm

import statsmodels.formula.api as smf

为了展示它们的使用方法,我们从一些随机数据生成一个线性模型:

def dnorm(mean, variance, size=1):

if isinstance(size, int):

size = size,

return mean + np.sqrt(variance) * np.random.randn(*size)

# For reproducibility

np.random.seed(12345)

N = 100

X = np.c_[dnorm(0, 0.4, size=N),

dnorm(0, 0.6, size=N),

dnorm(0, 0.2, size=N)]

eps = dnorm(0, 0.1, size=N)

beta = [0.1, 0.3, 0.5]

y = np.dot(X, beta) + eps

这里,我使用了“真实”模型和可知参数beta。此时,dnorm可用来生成正太分布数据,带有特定均值和方差。现在有:

In [66]: X[:5]

Out[66]:

array([[-0.1295, -1.2128, 0.5042],

[ 0.3029, -0.4357, -0.2542],

[-0.3285, -0.0253, 0.1384],

[-0.3515, -0.7196, -0.2582],

[ 1.2433, -0.3738, -0.5226]])

In [67]: y[:5]

Out[67]: array([ 0.4279, -0.6735, -0.0909, -0.4895,-0.1289])

像之前Patsy看到的,线性模型通常要拟合一个截距。sm.add_constant函数可以添加一个截距的列到现存的矩阵:

In [68]: X_model = sm.add_constant(X)

In [69]: X_model[:5]

Out[69]:

array([[ 1. , -0.1295, -1.2128, 0.5042],

[ 1. , 0.3029, -0.4357, -0.2542],

[ 1. , -0.3285, -0.0253, 0.1384],

[ 1. , -0.3515, -0.7196, -0.2582],

[ 1. , 1.2433, -0.3738, -0.5226]])

sm.OLS类可以拟合一个普通最小二乘回归:

In [70]: model = sm.OLS(y, X)

这个模型的fit方法返回了一个回归结果对象,它包含估计的模型参数和其它内容:

In [71]: results = model.fit()

In [72]: results.params

Out[72]: array([ 0.1783, 0.223 , 0.501 ])

对结果使用summary方法可以打印模型的详细诊断结果:

In [73]: print(results.summary())

OLS Regression Results

==============================================================================

Dep. Variable: y R-squared: 0.430

Model: OLS Adj. R-squared: 0.413

Method: Least Squares F-statistic: 24.42

Date: Mon, 25 Sep 2017 Prob (F-statistic): 7.44e-12

Time: 14:06:15 Log-Likelihood: -34.305

No. Observations: 100 AIC: 74.61

Df Residuals: 97 BIC: 82.42

Df Model: 3

Covariance Type: nonrobust

==============================================================================

coef std err t P>|t| [0.025 0.975]

------------------------------------------------------------------------------

x1 0.1783 0.053 3.364 0.001 0.073 0.283

x2 0.2230 0.046 4.818 0.000 0.131 0.315

x3 0.5010 0.080 6.237 0.000 0.342 0.660

==============================================================================

Omnibus: 4.662 Durbin-Watson: 2.201

Prob(Omnibus): 0.097 Jarque-Bera (JB): 4.098

Skew: 0.481 Prob(JB): 0.129

Kurtosis: 3.243 Cond. No.

1.74

==============================================================================

Warnings:

[1] Standard Errors assume that the covariance matrix of the errors is correctly

specified.

这里的参数名为原始的名字x1, x2等等。假设所有的模型参数都在一个DataFrame中:

In [74]: data = pd.DataFrame(X, columns=['col0', 'col1', 'col2'])

In [75]: data['y'] = y

In [76]: data[:5]

Out[76]:

col0 col1 col2 y

0 -0.129468 -1.212753 0.504225 0.427863

1 0.302910 -0.435742 -0.254180 -0.673480

2 -0.328522 -0.025302 0.138351 -0.090878

3 -0.351475 -0.719605 -0.258215 -0.489494

4 1.243269 -0.373799 -0.522629 -0.128941

现在,我们使用statsmodels的公式API和Patsy的公式字符串:

In [77]: results = smf.ols('y ~ col0 + col1 + col2', data=data).fit()

In [78]: results.params

Out[78]:

Intercept 0.033559

col0 0.176149

col1 0.224826

col2 0.514808

dtype: float64

In [79]: results.tvalues

Out[79]:

Intercept 0.952188

col0 3.319754

col1 4.850730

col2 6.303971

dtype: float64

观察下statsmodels是如何返回Series结果的,附带有DataFrame的列名。当使用公式和pandas对象时,我们不需要使用add_constant。

给出一个样本外数据,你可以根据估计的模型参数计算预测值:

In [80]: results.predict(data[:5])

Out[80]:

0 -0.002327

1 -0.141904

2 0.041226

3 -0.323070

4 -0.100535

dtype: float64

statsmodels的线性模型结果还有其它的分析、诊断和可视化工具。除了普通最小二乘模型,还有其它的线性模型。

估计时间序列过程

statsmodels的另一模型类是进行时间序列分析,包括自回归过程、卡尔曼滤波和其它态空间模型,和多元自回归模型。

用自回归结构和噪声来模拟一些时间序列数据:

init_x = 4

import random

values = [init_x, init_x]

N = 1000

b0 = 0.8

b1 = -0.4

noise = dnorm(0, 0.1, N)

for i in range(N):

new_x = values[-1] * b0 + values[-2] * b1 + noise[i]

values.append(new_x)

这个数据有AR(2)结构(两个延迟),参数是0.8和-0.4。当你和AR模型,你可能不知道滞后项的个数,因此可以用较多的滞后量来拟合这个模型:

In [82]: MAXLAGS = 5

In [83]: model = sm.tsa.AR(values)

In [84]: results = model.fit(MAXLAGS)

结果中的估计参数首先是截距,其次是前两个参数的估计值:

In [85]: results.params

Out[85]: array([-0.0062, 0.7845, -0.4085, -0.0136, 0.015 , 0.0143])

更多的细节以及如何解释结果超出了本书的范围,可以通过statsmodels文档学习更多。

python广义矩估计_《利用Python进行数据分析》13章(中二)建模库介绍相关推荐

  1. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)

    抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...

  2. python post请求 上传图片_利用python模拟实现POST请求提交图片的方法

    本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传 ...

  3. python自定义函数画图_利用Python绘图和可视化(长文慎入)

    Python有许多可视化工具,但是我主要讲解matplotlib(http://matplotlib.sourceforge.net).此外,还可以利用诸如d3.js(http://d3js.org/ ...

  4. python实现邮件客户端_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  5. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  6. python处理nc数据_利用python如何处理nc数据详解

    利用python如何处理nc数据详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用python如何处理nc数据详解.txt ] (友情提示:右键点上行txt ...

  7. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  8. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  9. python itchat 无法登录_利用python实现在微信群刷屏的方法

    hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一个大牛不也是从一个小白慢慢进步学习从而达到一定的高度的吗,而 ...

最新文章

  1. 2019年,智慧零售是如何影响零售行业?
  2. 信息处理进入了计算机领域,信 息 处 理 进 入 了 计 算 机 领 域 ,实 质 是 进 入 了()的 领 域 。...
  3. Maven命令行使用:mvn clean install(安装)
  4. C# 系统应用之调用SDelete程序粉碎文件及基础原理知识
  5. winform关闭当前form_C#中WinForm程序退出方法技巧总结
  6. 将背景色添加到Word 2007文档中
  7. c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...
  8. Maven系列(一):maven基础入门
  9. C#调用SQL Server参数过程传参
  10. 大数据之-Hadoop之HDFS的API操作_文件夹_以及文件删除案例---大数据之hadoop工作笔记0059
  11. 创建两个Thread子类,第一个用run()方法启动,并捕获第二个Thread对象的句柄,然后调用wait()。第二个类的run()方法几秒后为第一个线程调用notifAll(),使第一个线程打印消息
  12. .NET(C#):觉察XML反序列化中的未知节点
  13. IE下调试CSS与JS
  14. Alsa是Linux高级音频接口(百度文库无下载券抄来的)
  15. Arm linux开发板移植OpenSSH
  16. PSGAN——姿态稳健型可感知空间式生成对抗网络论文详细解读与整理
  17. css设置兄弟元素样式-兄弟选择器
  18. 基于组态王和三菱PLC的modbus仿真(七)——RS指令
  19. CAN总线的EMC设计方案
  20. 阿里国际站运营的核心指标是什么?

热门文章

  1. 微信账单怎么查?微信流水账单怎么打印
  2. iOS - 暗黑模式图片、颜色的适配
  3. charles(抓包神器)
  4. 小爱控制HA上的开关(红外线)
  5. Sim Lock —— 手机Network锁
  6. 1217: 青蛙(二)
  7. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
  8. 4月20日第壹简报,星期四,农历三月初一,谷雨
  9. 跟领导汇报工作时,这句话建议你不要说
  10. 实验11-1-7 藏头诗 (15 分)