前言

大家好,在之前的文章中我们已经讲解了很多Python数据处理的方法比如读取数据、缺失值处理、数据降维等,也介绍了一些数据可视化的方法如Matplotlib、pyecharts等,那么在掌握了这些基础技能之后,要进行更深入的分析就需要掌握一些常用的建模方法,本文将讲解如何利用Python进行统计分析。和之前的文章类似,本文只讲如何用代码实现,不做理论推导与过多的结果解释(事实上常用的模型可以很轻松的查到完美的推导与解析)。因此读者需要掌握一些基本的统计模型比如回归模型、时间序列等。

Statsmodels简介

在Python 中统计建模分析最常用的就是Statsmodels模块。Statsmodels是一个主要用来进行统计计算与统计建模的Python库。主要有以下功能:

探索性分析:包含列联表、链式方程多重插补等探索性数据分析方法以及与统计模型结果的可视化图表,例如拟合图、箱线图、相关图、时间序列图等

回归模型:线性回归模型、非线性回归模型、广义线性模型、线性混合效应模型等

其他功能:方差分析、时间序列分析等模型的参数估计与估计参数的假设检验等

安装 brew install Statsmodels

文档 github.com/statsmodels/statsmodels

线性回归模型:普通最小二乘估计

线性模型有普通最小二乘(OLS)广义最小二乘(GLS)、加权最小二乘(WLS)等,Statsmodels对线性模型有较好的支持,来看个最简单的例子:普通最小二乘(OLS)

首先导入相关包

%matplotlib inline

import numpy as np

import statsmodels.api as sm

import matplotlib.pyplot as plt

from statsmodels.sandbox.regression.predstd import wls_prediction_std

np.random.seed(9876789)

然后创建数据,先设置样本量为100

nsample = 100 #样本数量

然后设置x1和x2,x1是0到10等差排列,x2是x1的平方

x = np.linspace(0, 10, 100)

X = np.column_stack((x, x**2))

再设置beta、误差项与响应变量y

beta = np.array([1, 0.1, 10])

e = np.random.normal(size=nsample)

X = sm.add_constant(X)

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

接着建立回归模型

model = sm.OLS(y, X)

results = model.fit()

print(results.summary())

查看模型结果

是不是和R语言输出的结果形式很接近?回归系数值、P-value、R-squared等评估回归模型的参数值全部都有,还可以使用dir(results)获得全部变量的值并调取出来

print('Parameters: ', results.params)

print('R2: ', results.rsquared)

那么回归模型的就是y=1.3423-0.0402x1+10.0103x2,当然这个模型可以继续优化那么就交给读者完成。接下来我们来绘制一下样本点与回归曲线

y_fitted = results.fittedvalues

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')

时间序列:ARMA

关于时间序列的模型有很多,我们选择ARMA模型示例,首先导入相关包并生成数据

%matplotlib inline

import numpy as np

import statsmodels.api as sm

import pandas as pd

from statsmodels.tsa.arima_process import arma_generate_sample

np.random.seed(12345)

arparams = np.array([.75, -.25])

maparams = np.array([.65, .35])

arparams = np.r_[1, -arparams]

maparams = np.r_[1, maparams]

nobs = 250

y = arma_generate_sample(arparams, maparams, nobs)

接着,我们可以添加一些日期信息。对于本例,我们将使用pandas时间序列并建立模型

dates = sm.tsa.datetools.dates_from_range('1980m1', length=nobs)

y = pd.Series(y, index=dates)

arma_mod = sm.tsa.ARMA(y, order=(2,2))

arma_res = arma_mod.fit(trend='nc', disp=-1)

最后再做一下预测

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10,8))

fig = arma_res.plot_predict(start='1999-06-30', end='2001-05-31', ax=ax)

legend = ax.legend(loc='upper left')

回归诊断:估计回归模型

首先导入相关包

%matplotlib inline

from statsmodels.compat import lzip

import numpy as np

import pandas as pd

import statsmodels.formula.api as smf

import statsmodels.stats.api as sms

import matplotlib.pyplot as plt

然后加载数据

url = 'https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/HistData/Guerry.csv'

dat = pd.read_csv(url)

拟合模型

results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()

查看结果

print(results.summary())

回归诊断:残差的正态性

Jarque-Bera test:

name = ['Jarque-Bera', 'Chi^2 two-tail prob.', 'Skew', 'Kurtosis']

test = sms.jarque_bera(results.resid)

lzip(name, test)

####结果

[('Jarque-Bera', 3.3936080248431666),

('Chi^2 two-tail prob.', 0.1832683123166337),

('Skew', -0.48658034311223375),

('Kurtosis', 3.003417757881633)]

Omni test:

name = ['Chi^2', 'Two-tail probability']

test = sms.omni_normtest(results.resid)

lzip(name, test)

####结果

[('Chi^2', 3.713437811597181), ('Two-tail probability', 0.15618424580304824)]

回归诊断:异方差

Breush-Pagan test:

name = ['Lagrange multiplier statistic', 'p-value',

'f-value', 'f p-value']

test = sms.het_breuschpagan(results.resid, results.model.exog)

lzip(name, test)

###结果

[('Lagrange multiplier statistic', 4.893213374093957),

('p-value', 0.08658690502352209),

('f-value', 2.503715946256434),

('f p-value', 0.08794028782673029)]

Goldfeld-Quandt test

name = ['F statistic', 'p-value']

test = sms.het_goldfeldquandt(results.resid, results.model.exog)

lzip(name, test)

####结果

[('F statistic', 1.1002422436378152), ('p-value', 0.3820295068692507)]

回归诊断:多重共线性

检查多重共线性可以使用

np.linalg.cond(results.model.exog)

结果是702.1792145490062,说明存在较强多重共线性。

结束语

以上就是Statsmodels的基本功能介绍,如果熟悉R的读者会发现很多命令与R是类似的。最后想多说一句,全文没有出现太多模型的理论知识,因为这些模型的推导过程随便百度一搜都能得到十分详细的优质回答,因此在学会如何用计算机实现之后必须要回过头去理解模型里每一个参数是怎样得到,又有哪些含义才算真正搞定。

以上就是Python进行统计建模的详细内容,更多关于Python统计建模的资料请关注脚本之家其它相关文章!

python 财务报表 建模_Python进行统计建模相关推荐

  1. python三维建模_Python在数学建模中的简单应用

    最近在学习数学建模,发现大多数人都在用MATLAB,但MATLAB不是一门正统的计算机编程语言,而且速度慢还收费,最不能忍受的就是MATLAB编辑器不支持代码自动补全.于是就想到了可爱的Python, ...

  2. python去重计数_Python 快速统计数据的去重数和去重数据

    之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量.为了加快程序的速度,我启用了多进程.但不幸的是,程序跑了近一个星期,还没处理完.这时,我 ...

  3. python财务报表书籍_Python读财报-获取财务报表

    学习了一段时间python,学以致用,结合财报练练手. 代码环境:WIN10.Aanconda3.Jupyter notebook 第三方库:pandas .os.tuahare.datetime.t ...

  4. python 财务报表审计_python 自动化审计

    本文通过介绍在python开发中经常出现的常规web漏洞,然后通过静态和动态两种方式对python代码进行自动化审计挖掘漏洞,并且展示自动化系统在自动化审计python应用代码的成果,本文比较长,请耐 ...

  5. python 抽奖概率_Python 自动统计微博抽奖中奖男女比例(附代码)

    今天来写一个自动计算微博抽奖男女比例的代码,很早就应该发这篇了,只是不想蹭热点(才不是拖更). 整个的过程大概分为三步: S1:从抽奖公示页获取所有中奖者的微博ID S2:由每个中奖者的微博ID进入其 ...

  6. python 财务报表 建模_使用Python进行统计建模

    =============== 我的公众号:早起python =============== 前言 大家好,在之前的文章中我们已经讲解了很多Python数据处理的方法比如读取数据.缺失值处理.数据降维 ...

  7. 《贝叶斯思维:统计建模的Python学习法》——1.8 讨论

    本节书摘来异步社区<贝叶斯思维:统计建模的Python学习法>一书中的第1章,第1.8节,作者:[美]Allen B. Downey,更多章节内容可以访问云栖社区"异步社区&qu ...

  8. 《贝叶斯思维:统计建模的Python学习法》——2.5 封装框架

    本节书摘来异步社区<贝叶斯思维:统计建模的Python学习法>一书中的第2章,第2.5节,作者:[美]Allen B. Downey,更多章节内容可以访问云栖社区"异步社区&qu ...

  9. 《贝叶斯思维:统计建模的Python学习法》——2.3 贝叶斯框架

    本节书摘来异步社区<贝叶斯思维:统计建模的Python学习法>一书中的第2章,第2.3节,作者:[美]Allen B. Downey,更多章节内容可以访问云栖社区"异步社区&qu ...

最新文章

  1. MyBaties学习记录
  2. window 删除顽固 node_modules
  3. Nginx安装学习使用具体记录
  4. Oracle学习(1)——BLOCK
  5. IOS之使用AwesomeMenu框架令人惊叹的菜单
  6. 23、java中的网编基础
  7. 在命令提示符下输入的命令
  8. Project查看资源分配情况
  9. 【算法分析与设计】习题分享
  10. 计算机辅助翻译课怎么学的,计算机辅助翻译原理与实践
  11. Web Audio API 入门1
  12. Scheme调试手册(四)
  13. Brettle.Web.NeatUpload.dll支持的大文件上传
  14. Ubuntu学习笔记(2)---安装LumaQQ
  15. ai跟随路径_ai中图像怎么沿着路径走
  16. Element ui Switch 开关二次确认弹窗后再更改开关状态
  17. 虚拟拨号服务器名称,怎么设置虚拟拨号服务器
  18. 如何成功搭建一个游戏平台?
  19. 红绿灯单片机仿真;Keil和Proteus的联合使用仿真;包含免费资源
  20. 雨巷 喜欢文学 喜欢雨中撑伞的姑娘

热门文章

  1. uni-app常用组件
  2. ANSYS学习2——前处理
  3. 访问共享文件夹里的office文档时提示内存或磁盘空间不足
  4. 达梦迁移oracle,达梦数据迁移工具的使用
  5. cocos creator利用ShareSDK实现微信登录功能
  6. web专题 HTTP介绍和HTTPS协议区别,以及http版本特性
  7. php execl内存不足,PHPExcel读取Excel文件出现内存不足 各种情况处理办法
  8. 【检测工具】奇安信CVE-2020-0796快速扫描检测工具使用手册
  9. 高精度小数乘法c语言程序设计教程课后答案,级C语言程序设计基教程课后习题答案.doc...
  10. 106、监控系统交换机的带宽到底应该如何计算?