点击上方『早起python』关注早起
和我一起,成为更好的自己
前言
大家好,在 之前的文章中 我们已经讲解了很多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
100
然后设置x1和x2,x1是0到10等差排列,x2是x1的平方
x = np.linspace(
再设置beta、误差项与响应变量y
beta = np.array([
接着建立回归模型
model = sm.OLS(y, X)
results = model.fit()
print(results.summary())
查看模型结果
是不是和R语言输出的结果形式很接近?回归系数值、P-value、R-squared等评估回归模型的参数值全部都有,还可以使用dir(results)
获得全部变量的值并调取出来
'Parameters: ', results.params)
那么回归模型的就是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(
最后再做一下预测
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 =
拟合模型
results = smf.ols(
查看结果
print(results.summary())
回归诊断:残差的正态性
Jarque-Bera test:
'Jarque-Bera',
Omni test:
'Chi^2',
回归诊断:异方差
Breush-Pagan test:
'Lagrange multiplier statistic',
Goldfeld-Quandt test
'F statistic',
回归诊断:多重共线性
检查多重共线性可以使用
np
结果是702.1792145490062,说明存在较强多重共线性。
结束语
以上就是Statsmodels的基本功能介绍,如果熟悉R的读者会发现很多命令与R是类似的。最后想多说一句,全文没有出现太多模型的理论知识,因为这些模型的推导过程随便百度一搜都能得到十分详细的优质回答,因此在学会如何用计算机实现之后必须要回过头去理解模型里每一个参数是怎样得到,又有哪些含义才算真正搞定。那么本文未提及的统计建模方法会在后续文章更新,记得在看哦,拜拜~
往期内容 ( 猛戳可查看 ) 热门文章: ➤ 情人节网站➤岗位对比分析 ➤ 爬取网易云音乐 ➤ 爬取钉钉评价 ➤ 自动追踪快递 ➤ Python画樱花 树 ➤Python斗地主➤Matplotlib神器➤全球疫情动态图 数据分析: ➤ 统计检验 ➤ 数据分析报告 ➤ 数据分析技巧 ➤ 数据可视化 ➤ Pandas 学习 ➤ 缺失值处理 ➤ Python 库整理➤数据降维➤ 疫情数据汇总 记得点个 在看 支持下~