python统计学习方面的包--statsmodels

转自:https://blog.csdn.net/qq_41518277/article/details/80275280

 

statsmodels
与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:

回归模型:线性回归,广义线性模型,健壮线性模型,线性混合效应模型等等。
方差分析(ANOVA)。
时间序列分析:AR,ARMA,ARIMA,VAR和其它模型。
非参数方法: 核密度估计,核回归。
统计模型结果可视化。
statsmodels更关注统计推断,提供不确定估计和参数p-value。相反的,scikit-learn注重预测。

Getting Started
Table of Contents
模型拟合和描述
输入输出模型
模型测试和绘图
使用R型公式来拟合模型
statsmodels参数
模型和拟合结果的超类
Python手册(Machine Learning)–statsmodels(GettingStarted)
Python手册(Machine Learning)–statsmodels(Regression)
Python手册(Machine Learning)–statsmodels(ANOVA)
Python手册(Machine Learning)–statsmodels(Tables+Imputation)
Python手册(Machine Learning)–statsmodels(MultivariateStatistics)
Python手册(Machine Learning)–statsmodels(TimeSeries)
Python手册(Machine Learning)–statsmodels(Survival)
Python手册(Machine Learning)–statsmodels(Graphics)

Table of Contents
http://www.statsmodels.org/stable/index.html#table-of-contents

线性回归
广义线性模型
广义估计方程
稳健的线性模型
线性混合效应模型
具有离散因变量的回归
广义线性混合效应模型
方差分析
时间序列分析 tsa
状态空间方法的时间序列分析 statespace
矢量自动回归 tsa.vector_ar
生存和持续时间分析方法
统计 stats
非参数方法 nonparametric
广义矩量法 gmm
列联表
链式方程多重插补
多变量统计 multivariate
经验似然估计 emplike
其他模型 miscmodels
分布
作图
输入输出 iolib
工具
数据集包
沙盒

模型拟合和描述
>>> import statsmodels.api as sm
>>> import statsmodels.formula.api as smf
>>> import pandas
>>> df = sm.datasets.get_rdataset("Guerry", "HistData").data
>>> df = df.dropna()
# step 1 Describe model,return model class
>>> mod = smf.ols(formula='Lottery ~ Literacy + Wealth + Region', data=df)
# step 2 Fit model,return result class
>>> res = mod.fit()
# step 3 Summarize model
>>> print(res.summary())
 OLS Regression Results                            
==============================================================================
Dep. Variable:                Lottery   R-squared:                       0.338
Model:                            OLS   Adj. R-squared:                  0.287
Method:                 Least Squares   F-statistic:                     6.636
Date:                Sun, 23 Dec 2018   Prob (F-statistic):           1.07e-05
Time:                        18:41:19   Log-Likelihood:                -375.30
No. Observations:                  85   AIC:                             764.6
Df Residuals:                      78   BIC:                             781.7
Df Model:                           6                                         
Covariance Type:            nonrobust                                         
===============================================================================
                  coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept      38.6517      9.456      4.087      0.000      19.826      57.478
Region[T.E]   -15.4278      9.727     -1.586      0.117     -34.793       3.938
Region[T.N]   -10.0170      9.260     -1.082      0.283     -28.453       8.419
Region[T.S]    -4.5483      7.279     -0.625      0.534     -19.039       9.943
Region[T.W]   -10.0913      7.196     -1.402      0.165     -24.418       4.235
Literacy       -0.1858      0.210     -0.886      0.378      -0.603       0.232
Wealth          0.4515      0.103      4.390      0.000       0.247       0.656
==============================================================================
Omnibus:                        3.049   Durbin-Watson:                   1.785
Prob(Omnibus):                  0.218   Jarque-Bera (JB):                2.694
Skew:                          -0.340   Prob(JB):                        0.260
Kurtosis:                       2.454   Cond. No.                         371.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
>>> res.params  # 获取模型参数
Intercept      38.651655
Region[T.E]   -15.427785
Region[T.N]   -10.016961
Region[T.S]    -4.548257
Region[T.W]   -10.091276
Literacy       -0.185819
Wealth          0.451475
dtype: float64
>>> dir(res)    # 查看完整的属性列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
输入输出模型
from statsmodels.iolib import smpickle
smpickle.save_pickle(obj, fname)    #Save the object to file via pickling.
smpickle.load_pickle(fname)    #Load a previously saved object from file
1
2
3
模型测试和绘图
>>> #Rainbow测试线性度(零假设是关系被正确建模为线性)
>>> sm.stats.linear_rainbow(res)
(0.847233997615691, 0.6997965543621644)
>>> sm.graphics.plot_partregress('Lottery', 'Wealth', ['Region', 'Literacy'],
      data=df, obs_labels=False) #绘制回归图
1
2
3
4
5


使用R型公式来拟合模型
import statsmodels.formula.api as smf

formula    说明    示例
~    分隔符,左边为响应变量,右边为解释变量    
+    添加变量    y~x+y
-    移除变量    y~xzw–x:z:w可展开为 y ~ (x + z + w)**2
-    移除变量    y~x-1(移除截距)
:    预测变量交互项    y~x+y+x:y
*    包含所有交互项的简洁方式    代码y~ x * z可展开为y ~ x + z + x:z
**    交互项的最高次数    代码 y ~ (x + z + w)**2 可展开为 y ~ x + z + w + x:z + x:w + z:w
C()    处理分类变量    
function    数学函数    log(y) ~ x + z + w
支持R型公式的模型

In [15] res = smf.ols(formula='Lottery ~ Literacy + Wealth + C(Region) -1 ', data=df).fit()
1
不支持R型公式的模型,使用patsy 模块

#Using formulas with models that do not (yet) support them
In [22]: import patsy
In [23]: f = 'Lottery ~ Literacy * Wealth'
In [24]: y, X = patsy.dmatrices(f, df, return_type='matrix')
 #y被转化为patsy.DesignMatrix,x被转化为转化为numpy.ndarray
In [26]: print(X[:5])
[[   1.   37.   73. 2701.]
 [   1.   51.   22. 1122.]
 [   1.   13.   61.  793.]
 [   1.   46.   76. 3496.]
 [   1.   69.   83. 5727.]]
In [27]: f = 'Lottery ~ Literacy * Wealth'

In [28]: y, X = patsy.dmatrices(f, df, return_type='dataframe') #转化为pandas.dataframe
In [30]: print(X[:5])
   Intercept  Literacy  Wealth  Literacy:Wealth
0        1.0      37.0    73.0           2701.0
1        1.0      51.0    22.0           1122.0
2        1.0      13.0    61.0            793.0
3        1.0      46.0    76.0           3496.0
4        1.0      69.0    83.0           5727.0
In [31]: res=smf.OLS(y, X).fit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
statsmodels参数
Statsmodels使用endog和exog为模型数据参数名称,作为估计器的观测变量。

endog    exog
y    x
y variable    x variable
left hand side (LHS)    right hand side (RHS)
dependent variable(因变量)    independent variable(自变量)
regressand    regressors
outcome    design
response variable(响应变量)    explanatory variable(解释变量)
模型和拟合结果的超类
https://www.statsmodels.org/stable/dev/internal.html#model-and-results-classes

Model和Result是statsmodels所有模型和结果的父类

model class

Model(endog, exog=None, **kwargs) #建立模型
1
Methods    desc
fit()    Fit a model to data.
from_formula(formula, data, subset=None, drop_cols=None, *args, **kwargs)    Create a Model from a formula and dataframe.
predict(params, exog=None, *args, **kwargs)    After a model has been fit predict returns the fitted values.
Attributes    desc
endog_names    Names of endogenous variables
exog_names    Names of exogenous variables
result class

Results(model, params, **kwd) #一般通过模型fit方法拟合生成
1
Methods    desc
initialize(model, params, **kwd)    
predict([exog, transform])    Call self.model.predict with self.params as the first argument.
summary()    
————————————————
版权声明:本文为CSDN博主「WilenWu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41518277/article/details/80275280

你可能感兴趣的:(python类)