发布 0.5.0

statsmodels 0.5 是一个大型且非常令人兴奋的版本,它汇集了38位作者一年来的工作成果,包括超过2000次提交。它包含许多新功能和大量详细的错误修复,如下所述。

查看具体的已关闭问题,请参见已修复问题列表

以下是此版本中的主要新功能。

通过Patsy支持模型公式

statsmodels 现在支持使用公式拟合模型。此功能由 patsy 提供。Patsy 现在是 statsmodels 的依赖项。可以从 statsmodels.formula.api 命名空间单独导入模型,或者您可以全部导入它们,如下所示:

import statsmodels.formula.api as smf

或者,通常的 statsmodels.api 命名空间中的每个模型都有一个 from_formula 类方法,该方法将使用公式创建模型。公式也可用于在模型拟合后使用 t_testf_test 方法指定线性假设检验。一个典型的流程现在可以看起来像这样。

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

url = 'https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/csv/HistData/Guerry.csv'
data = pd.read_csv(url)

# Fit regression model (using the natural log of one of the regressors)
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=data).fit()

参见 这里有一些关于在 statsmodels 中使用公式的更多文档

经验似然(Google Summer of Code 2012项目)

基于经验似然的单变量和多变量变量矩推断以及基于EL的方差分析检验也是可用的。基于EL的线性回归,包括通过原点的回归模型。此外,还提供了用于推断具有随机右删失内生变量的线性回归模型的加速失效时间模型。

方差分析 (ANOVA) 建模

支持ANOVA功能现已可用,包括I型、II型和III型平方和。请参阅方差分析

多元核密度估计器(GSoC 2012项目)

核密度估计已经扩展到通过乘积核来处理多元估计。它可以通过sm.nonparametric.KDEMultivariate实现。它支持带宽估计的最小二乘法和最大似然交叉验证,以及混合连续、有序和无序分类数据。条件密度估计也可以通过sm.nonparametric.KDEMUltivariateConditional实现。

非参数回归 (GSoC 2012 项目)

核回归模型现在可以通过sm.nonparametric.KernelReg获得。它基于上述乘积核,因此也具有相同的功能集,包括支持交叉验证以及支持估计混合连续和分类变量。删失核回归也由kernel_regression.KernelCensoredReg提供。

分位数回归模型

分位数回归通过 sm.QuantReg 类实现。使用核密度估计器估计渐近协方差矩阵时,可以选择核函数和带宽选项。

负二项回归模型

现在可以通过最大似然法使用 sm.NegativeBinomial 类来拟合计数数据的负二项模型。NB1NB2geometric 方差规范是可用的。

l1-penalized 离散选择模型

离散模型(包括Logit、Probit、MNLogit和Poisson)新增了一种优化方法,使得可以使用l1线性惩罚来估计模型。这种方法将参数收缩至零,并可以将与零差异不大的参数设置为零。这在存在大量解释变量和大量相关参数时特别有用。CVXOPT现在是一个可选依赖项,可用于拟合这些模型。

新改进的图形

  • ProbPlot: 新增了一个ProbPlot对象,提供了一个简单的接口来创建P-P、Q-Q和概率图,并可以选择拟合分布和显示各种参考线。在Q-Q和P-P图的情况下,可以使用other关键字参数比较两个不同的样本。sm.graphics.ProbPlot

import numpy as np
import statsmodels.api as sm
x = np.random.normal(loc=1.12, scale=0.25, size=37)
y = np.random.normal(loc=0.75, scale=0.45, size=37)
ppx = sm.ProbPlot(x)
ppy =  sm.ProbPlot(y)
fig1 = ppx.qqplot()
fig2 = ppx.qqplot(other=ppy)

功效与样本量计算

功率模块(statsmodels.stats.power)目前实现了t检验(sm.stats.TTestPowersm.stats.TTestIndPower)、基于正态分布的检验(sm.stats.NormIndPower)、F检验(sm.stats.FTestPower:class:sm.stats.FTestAnovaPower )和卡方拟合优度检验(sm.stats.GofChisquarePower)的功率和样本量计算。该实现是基于类的,但该模块还提供了三个快捷函数,sm.stats.tt_solve_powersm.stats.tt_ind_solve_powersm.stats.zt_ind_solve_power,用于求解功率方程的任意一个参数。有关新增内容的更深入描述,请参见此博客文章

其他重要的新功能

  • IPython notebook示例:我们的许多示例现在已经转换或添加为IPython notebook。它们可以在这里找到。

  • 离散选择模型的边际效应改进:在估计非线性离散选择模型后,获取边际效应的选项已扩展。请参阅 get_margeff

  • OLS影响异常值度量:在用OLS估计模型后,现在可以将常见的影响和异常值度量以及异常值测试作为方法get_influnceoutlier_test附加到结果实例上。请参阅OLSInfluenceoutlier_test

  • 新数据集:新的 数据集 可用于示例。

  • 访问R数据集:我们现在可以通过Rdatasets项目访问许多与R用户相同的数据集。您可以使用sm.datasets.get_rdataset函数来访问这些数据集。此函数还包括这些数据集的缓存功能。

  • 改进的数值微分工具:数值微分例程已得到极大改进和扩展,涵盖了以下讨论的所有例程:

    Ridout, M.S. (2009) Statistical applications of the complex-step method
        of numerical differentiation. The American Statistician, 63, 66-74
    

    参见 sm.tools.numdiff 模块。

  • 模型间一致的常数处理:结果统计不再依赖于模型中存在常数的假设。

  • 跨模型的缺失值处理:用户现在可以通过每个模型实例化时可用的missing关键字来控制模型在存在缺失值时的行为。选项包括'none''drop''raise'。默认值是'none',它不进行缺失值检查。要删除缺失值,请使用'drop'。而'raise'将在存在任何缺失数据时引发错误。

  • 能够编写Stata数据集:增加了编写Stata .dta 文件的功能。请参阅 sm.iolib.StataWriter

  • ARIMA建模:statsmodels现在支持拟合自回归积分移动平均(ARIMA)模型。请参阅ARIMAARIMAResults了解更多信息。

  • AR(I)MA模型中的动态预测支持:现在可以在ARMAARIMA模型中获得动态样本内预测值。

  • 改进的 Pandas 集成:statsmodels 现在支持 pandas 中所有可用的时间序列建模频率。这些频率用于预测时的智能日期处理。如果您将带有 DatetimeIndex 的 pandas Series 或 DataFrame 传递给时间序列模型,这些功能将可用。

主要修复的Bug

  • 加权最小二乘法的后估计统计量依赖于中心化的总平方和,之前这些统计量不正确。现在这些统计量已经正确并经过测试。请参阅Issue #501

  • 回归通过原点的模型现在在估计后统计中正确使用未中心化的总平方和。这影响了没有常数的线性模型中的\(R^2\)值。请参阅问题 #27

向后不兼容的更改和弃用

  • Cython代码现在是必需的。您需要一个C编译器来从源代码构建。如果从github构建而不是从源代码发布构建,您还需要安装Cython。请参阅安装文档

  • 线性模型的 q_matrix 关键字 t_testf_test 已被弃用。您现在可以使用公式指定线性假设。

  • The conf_int keyword to sm.tsa.acf is deprecated.

  • 参数namessm.tsa.VARsm.tsa.SVAR 中已被弃用。现在会自动检测并处理。

  • 已弃用将 order 关键字传递给 sm.tsa.ARMA.fit。现在在模型实例化时传递它。

  • 经验分布函数(sm.distributions.ECDF)及相关函数已移动到statsmodels.distributions。它们的老路径已被弃用。

  • 离散选择模型的margeff方法已被弃用。请改用get_margeff。请参见上文。此外,离散选择模型的模糊resid属性已被弃用,取而代之的是更具描述性的resid_dev,以表明它们是偏差残差。

  • KDE 已被弃用并重命名为 KDEUnivariate 以区别于新的 KDEMultivariate。请参见上文。

开发总结与致谢

上一个版本(statsmodels 0.4.3)发布于2012年7月2日。自那时以来,我们总共关闭了380个问题,172个拉取请求和208个常规问题。可以查看详细列表

此版本是以下38位作者共同努力的结果,他们总共贡献了2032次提交。如果我们因任何原因未能将您的名字列在下文中,请与我们联系:

  • 安娜·马丁内斯·帕尔多

  • anov

  • avishaylivne

  • 布鲁诺·罗德里格斯

  • 卡尔·沃格尔

  • 查德·富尔顿

  • 克里斯蒂安·普里诺特

  • 丹尼尔·B·史密斯

  • dengemann

  • 迪特尔·范登布舍

  • Dougal Sutherland

  • 恩里科·贾姆皮耶里

  • 伊芙琳·米切尔

  • 乔治·潘特罗夫

  • 格雷森

  • 扬·舒尔茨

  • 约瑟夫·珀克托德

  • 杰夫·雷巴克

  • 贾斯汀·格拉纳

  • langmore

  • 马修·布雷特

  • 纳撒尼尔·J·史密斯

  • otterb

  • padarn

  • 保罗·霍布森

  • 皮特罗·巴蒂斯通

  • 拉尔夫·戈默斯

  • 理查德·T·盖伊

  • 罗伯特·西姆尔曼

  • Skipper Seabold

  • 托马斯·哈斯旺特

  • timmie

  • 汤姆·奥格斯珀格

  • 特伦特·豪克

  • 泰勒哈特利

  • 文森特·阿雷-邦多克

  • VirgileFritsch

  • Zhenya

注意

通过运行 git log v0.4.3..HEAD --format='* %aN <%aE>' | sed 's/@/\-at\-/' | sed 's/<>//' | sort -u 获得。

在0.5.0开发周期中关闭的问题

在0.5.0版本中关闭的问题

GitHub 统计数据为发布版本 0.5.0(2012年7月2日 - 2013年8月14日)。

我们总共关闭了380个问题,172个拉取请求和208个常规问题。这是完整列表(使用脚本 tools/github_stats.py 生成的):

此列表是自动生成的,可能不完整:

拉取请求 (172):

  • PR #1015: 文档:更新版本。移除已完成任务。

  • PR #1010: 文档/RLS: 更新发布说明工作流程。需要帮助!

  • PR #1014: 文档:nbgenerate 不喜欢行尾的注释。

  • PR #1012: 文档:添加笔记本链接和交叉引用。关闭 #924。

  • PR #997:杂项,测试,诊断

  • PR #1009: 维护:添加 .mailmap 文件。

  • PR #817: 为 arima_process 添加 3 个新的单元测试

  • PR #1001: BUG 包含安装包数据的include_package_data关闭了#907

  • PR #1005: GITHUB: 贡献指南

  • PR #1007: 清理文档以准备发布

  • PR #1003: BUG: 针对sphinx 1.1.3中的bug的解决方法。参见 #1002。

  • PR #1004: 文档:更新维护者笔记,包含分支指令。

  • PR #1000: 错误:支持 pandas 0.8.0。

  • PR #996: 错误:处理pandas 0.8.0和dateutils 1.5.0的组合

  • PR #995: 增强:打印 dateutil 版本。

  • PR #994: 增强:对于未找到的版本优雅地失败。

  • PR #993: 在TimeSeriesModel中更保守的错误捕获

  • PR #992: 杂项修复 12: 单元测试调整

  • PR #985: 维护:打印版本脚本。

  • PR #986: 增强:优先使用 to_offset 而不是 get_offset。关闭 #964。

  • PR #984: 兼容性:Pandas 0.8.1 兼容性。关闭 #983。

  • PR #982: 杂项修复 11

  • PR #978: TST: 通用 mle pareto 禁用 bsejac 测试与估计的 loc

  • PR #977: BUG python 3.3 修复 numpy str TypeError,参见 #633

  • PR #975: 杂项修复 10 numdiff

  • PR #970: 错误:数组太长,使用较新的numpy会引发异常,关闭 #967

  • PR #965: Vincent summary2 重新基于

  • PR #933: 更新并改进GenericlikelihoodModel和miscmodels

  • PR #950: BUG/REF 修复精确p值的McNemar检验,允许表格作为输入

  • PR #951: Pylint emplike 公式 genmod

  • PR #956: 修复了KDEMultivariateConditional中的一个文档字符串。

  • PR #949: 修复lowess排序时nans的问题,关闭 #946

  • PR #932: 增强:在 LikelihoodModel.fit() 中支持 basinhopping 求解器

  • PR #927: 文档:更清晰的极简示例

  • PR #919: OLS 摘要崩溃

  • PR #918: 修复10个emplike lowess

  • PR #909: GLM p值中的错误,更多测试,pylint

  • PR #906: 增强:没有使用Windows SDK的fmax,因此定义为内联。

  • PR #905: 维护更多修复

  • PR #898: 杂项修复 7

  • PR #896: Quantreg rebase2

  • PR #895: 修复问题 #832

  • PR #893: 增强:移除对低值的不必要限制。关闭 #867。

  • PR #894: 维护:移除损坏的函数。保留弃用。关闭 #781。

  • PR #856: Carljv 改进了 lowess rebased2

  • PR #884: Pyflakes 清理

  • PR #887: 错误:修复kde缓存

  • PR #883: 修复了离散模块中的pyflakes问题

  • PR #882: 更新 predstd.py

  • PR #871: 更新沙盒文档

  • PR #631: 进行中: 相关性半正定

  • PR #857: BLD: 从Neurodebian获取apt依赖项,清理空白

  • PR #855: AnaMP 问题 783 混合 rvs 测试重新基于

  • PR #854: Enrico 多线性重构

  • PR #849: Tyler tukeyhsd 重新基于

  • PR #848: BLD TravisCI 使用 python-dateutil 包

  • PR #784: 杂项07清理多重检验和比例

  • PR #841: 增强:向主API添加加载功能。关闭 #840。

  • PR #820: 确保元组不被视为数据,也不被视为数据容器

  • PR #822: 文档:更新以适应Cython的变化。

  • PR #765: 修复构建问题

  • PR #800: 自动生成笔记本的输出

  • PR #802: 错误:在t_test中使用双侧而不是单侧t检验。关闭 #740。

  • PR #806: 增强:在 statsmodels.api 命名空间中导入 formula.api。

  • PR #803: 增强:修复arima错误消息以处理错误的start_params

  • PR #801: 文档: 修复ANOVA部分标题

  • PR #795: 负二项式重构

  • PR #787: 起源测试

  • PR #794: 增强:允许在 tsa.filters 中使用 pandas-in/pandas-out

  • PR #791: 发布说明的Github统计信息

  • PR #779: 在 stattools 中为 durbin_watson 添加了 np.asarray 调用

  • PR #772: Anova 文档

  • PR #776: 错误:修复 dates_from_range 的长度问题。关闭 #775。

  • PR #774: 错误:在AR中附加预测开始日期。关闭 #773。

  • PR #767: 维护:从示例和文档中移除已弃用的用法。

  • PR #762: 增强:向包装器添加新的残差

  • PR #754: 修复arima预测

  • PR #760: 增强:在信息准则中调整k_trend。关闭 #324。

  • PR #761: 增强:修复并测试sign_test。关闭 #642。

  • PR #759: 修复 236

  • PR #758: 文档: 更新 VAR 文档。关闭 #537。

  • PR #752: 离散清理

  • PR #750: 使用一维数组的VAR

  • PR #748: 移除对new_t_test和new_f_test的引用。

  • PR #739: 文档: 删除文档字符串中过时的注释

  • PR #732: BLD: 在构建时检查patsy依赖 + 文档

  • PR #731: 处理包装

  • PR #730: 修复opt fulloutput

  • PR #729: 消除文档构建中的警告

  • PR #698: 更新hsb2数据集的URL

  • PR #727: 文档: 修复缩进并添加线性模型中缺失的参数。关闭 #709。

  • PR #726: 清理:移除未使用的方法。关闭 #694

  • PR #725: BUG: 应该调用anova_single。关闭 #702。

  • PR #723: 幂的根查找

  • PR #722: 在 make_lags 中处理带有名称的 pandas.Series

  • PR #714: 修复 712

  • PR #668: 允许在TimeSeriesModel中使用任何pandas频率。

  • PR #711: 杂项06 - 错误修复

  • PR #708: 错误:修复conf_int的一个回归器情况。关闭 #706。

  • PR #700: 错误修复

  • PR #680: 错误:在 scipy >= 0.12.0 中交换 fftconvolve 的参数

  • PR #640: 杂项修复 05

  • PR #663: runs.py 文档字符串中 McNemar 测试的拼写错误

  • PR #652: 进行中: 修复 pyflakes / pep8, 尝试提高可读性

  • PR #619: 文档:公式介绍

  • PR #648: BF: 使RLM遵循Huber的描述

  • PR #649: 错误修复

  • PR #637: Pyflakes 清理

  • PR #634: VAR 文档拼写错误

  • PR #623: 慢测试

  • PR #621: 维护:在 setup.py 中,仅捕获 pandas 的 ImportError。

  • PR #590: 清理测试输出

  • PR #591: 评分者间一致性和可靠性度量

  • PR #618: 文档修复了在sphinx构建过程中出现的主要警告和错误

  • PR #610: 非参数示例和一些修复

  • PR #578: 修复 577

  • PR #575: MNT: 移除已弃用的 scikits 命名空间

  • PR #499: 进行中: 处理常量

  • PR #567: 移除已弃用的内容

  • PR #571: 数据集文档

  • PR #561: 获取rdatasets

  • PR #570: 文档:修复了Rdatasets的链接

  • PR #524: 文档:清理离散模型文档。

  • PR #506: 增强:如果模型使用QR拟合,则重用效果

  • PR #556: 进行中: L1 文档修复

  • PR #564: TST: 使用原生整数以避免在dtype断言中的问题

  • PR #543: 使用M.Brett nipy hack的Travis CI

  • PR #558: 图表清理

  • PR #541: 将 pandas DataMatrix 替换为 DataFrame

  • PR #534: Stata 测试修复

  • PR #532: 兼容性 323

  • PR #531: 文档: 在分布文档中添加ECDF

  • PR #526: 增强:添加类以写入Stata二进制dta文件

  • PR #521: 文档: 在文档中添加abline图

  • PR #518: 小修复:interaction_plot

  • PR #508: 增强:避免对对角矩阵进行Cholesky分解

  • PR #509: 文档: 在文档中添加ARIMA

  • PR #510: 文档:realdpi 是可支配个人收入。关闭 #394。

  • PR #507: 增强:保护 numdifftools 导入。关闭 #45

  • PR #504: 修复权重

  • PR #498: 文档: 添加patys要求以安装文档

  • PR #491: 将_data设为公共属性。

  • PR #494: 文档: 修复 pandas 链接

  • PR #492: 为 pandas 添加了 intersphinx

  • PR #422: 处理缺失数据

  • PR #485: 增强:改进没有日期索引的pandas对象的错误消息

  • PR #428: 移除其他数据

  • PR #483: Arima 预测错误

  • PR #482: TST: 使用 numpy.testing 时进行数组-数组比较

  • PR #471: 公式重命名 df -> 数据

  • PR #473: Vincent 文档调整重新合并

  • PR #468: 文档 050

  • PR #462: 后向重基

  • PR #461: 测试:numpy 1.5.1 兼容性

  • PR #460: Emplike 描述回归重构

  • PR #410: 离散模型的边际效应

  • PR #417: 数值差异清理

  • PR #398: 改进了plot_corr和plot_corr_grid函数。

  • PR #401: 错误:完成对虚拟变量的margeff重构。关闭 #399。

  • PR #400: 维护:删除lowess.py,该文件在0.4.x中保留以实现向后兼容…

  • PR #371: BF+测试:修复、检查和测试isestimable

  • PR #351: 增强:在即将到来的numpy更改之前复制对角线

  • PR #384: 参考:将mixture_rvs移出沙盒。

  • PR #368: 增强:添加带有置信区间的acf/pacf图的精炼版本

  • PR #378: 推断频率

  • PR #374: 增强:添加Fair的婚外情数据集。来自tobit-model分支。

  • PR #358: 增强:为OLSResults添加异常值检测方法

  • PR #369: 增强:允许 predict 通过 patsy 进行转换

  • PR #352: 公式集成重构

  • PR #360: 参考: 弃用fit中的order并移至ARMA初始化

  • PR #366: 版本修复

  • PR #359: 文档: 修复sphinx警告

问题 (208):


Last update: Oct 16, 2024