Python StatsModels统计
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())