Python StatsModels统计

时间:2020-02-23 14:43:22  来源:igfitidea点击:

Python StatsModels允许用户浏览数据,执行统计测试和估计统计模型。
它应该补充SciPy的统计信息模块。
它是Python科学堆栈的一部分,用于处理数据科学,统计数据和数据分析。

Python StatsModels

StatsModels建立在NumPy和SciPy之上。

它还使用Pandas进行数据处理,并使用Patsy进行类似R的公式接口。
它从matplotlib获取其图形功能。
提供其他python软件包的统计背景是众所周知的。

最初,乔纳森·泰勒(Jonathan Taylor)编写了scipy.stats的模型模块。
它是scipy的一部分,但后来被删除了。

在Google Summer of Code 2009期间对其进行了测试,更正和改进,并以我们称为StatsModels的新程序包的形式发布。

StatsModels开发团队不断开发和引入新模型,绘图工具和统计模型。

为什么选择StatsModels?

顾名思义,StatsModels专为进行核心统计而设计,因此可以以其他人无法做到的方式处理统计信息。

StatsModels是用于统计分析的出色工具,并且与R更加一致,因此对于使用R并希望转向Python的人来说更容易使用。

StatsModels入门

让我们开始使用这个Python库。

安装StatsModels

在您的计算机上获取StatsModels之前,StatsModels假定以下内容在您的计算机上正常运行:

  • Python 2.6或者更高版本
  • Numpy 1.6或者更高版本
  • Scipy 0.11或者更高版本
  • Pandas 0.12或者更高版本
  • Patsy 0.2.1或者更高版本
  • Cython 0.24或者更高版本

一旦拥有这些,就可以开始安装。

要使用pip进行安装,请打开您的终端并输入以下命令:

sudo pip install statsmodels

您也可以使用conda进行安装。
要使用conda进行安装,请在终端中键入以下命令:

sudo conda install statsmodels

使用StatsModels

安装完成后,可以通过导入StatsModels在Python代码中轻松使用它:

import statsmodels

StatsModels的简单示例

让我们看一个简单的示例,以更好地了解该软件包:

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Load data
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
# Fit regression model (using the natural log of one of the regressors)
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
# Inspect the results
print(results.summary())

运行上面的脚本会得到以下结果:

Python StatsModels线性回归

现在我们已经熟悉了程序包,让我们从更复杂的内容开始。
其中我们尝试使用StatsModels对我们的数据实施线性回归。
让我们开始吧:

# Load modules and data
import numpy as np
import statsmodels.api as sm
spector_data = sm.datasets.spector.load()
spector_data.exog = sm.add_constant(spector_data.exog, prepend=False)
# Fit and summarize OLS model
mod = sm.OLS(spector_data.endog, spector_data.exog)
res = mod.fit()
print(res.summary())

运行上面的代码使我们易于阅读和理解,如下所示:

广义线性模型(GLM)

这些目前支持使用一参数指数族进行估计。
让我们更好地研究一下:

# Load modules and data
import statsmodels.api as sm
data = sm.datasets.scotland.load()
data.exog = sm.add_constant(data.exog)
# Instantiate a gamma family model with the default link function.
gamma_model = sm.GLM(data.endog, data.exog, family=sm.families.Gamma())
gamma_results = gamma_model.fit()
print(gamma_results.summary())

运行上面的代码使我们易于阅读和理解,如下所示:

广义估计方程(GEE)

从名称上可以清楚地看出,当观测值可能在一个聚类内而不是整个聚类之间相关时,GEE是用于面板,聚类或者重复测量数据的广义线性模型。

# Load modules and data
import statsmodels.api as sm
import statsmodels.formula.api as smf
data = sm.datasets.get_rdataset('epil', package='MASS').data
fam = sm.families.Poisson()
ind = sm.cov_struct.Exchangeable()
# Instantiate model with the default link function.
mod = smf.gee("y ~ age + trt + base", "subject", data,cov_struct=ind, family=fam)
res = mod.fit()
print(res.summary())

运行上面的代码可以给我们:

稳健的线性模型

让我们创建一个更强大的线性模型。
到目前为止,您一定已经观察到了使用statsmodels创建此类模型有多么容易:

# Load modules and data
import statsmodels.api as sm
data = sm.datasets.stackloss.load()
data.exog = sm.add_constant(data.exog)
# Fit model and print summary
rlm_model = sm.RLM(data.endog, data.exog, M=sm.robust.norms.HuberT())
rlm_results = rlm_model.fit()
print(rlm_results.params)

运行上面的代码可以给我们:

线性混合效应模型

有时我们必须处理依赖数据。
当使用纵向和其他研究设计进行多个研究设计时,通常会找到此类数据。
使用回归线性混合效应模型分析此类数据非常有帮助:

# Load modules and data
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Fit model and print summary
data = sm.datasets.get_rdataset("dietox", "geepack").data
md = smf.mixedlm("Weight ~ Time", data, groups=data["Pig"])
mdf = md.fit()
print(mdf.summary())