scipy.stats.linregress、numpy.polynomy.polyfit和statsmodels.api.OL之间的差异

2024-06-16 10:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这三个函数似乎都可以做简单的线性回归,例如

scipy.stats.linregress(x, y)

numpy.polynomial.polynomial.polyfit(x, y, 1)

x = statsmodels.api.add_constant(x)
statsmodels.api.OLS(y, x)

我想知道这三种方法之间是否真的有什么不同?我知道statsmodels是建立在scipy之上的,而且scipy在很多方面都依赖于numpy,所以我希望它们不会有太大的差异,但是魔鬼总是在细节上。

更具体地说,如果我们使用上面的numpy方法,我们如何得到由其他两种方法默认给定的p-value斜率?

我在Python 3中使用它们,如果这有什么不同的话。


Tags: 方法函数numpyaddapistats线性scipy
2条回答

Scipy看起来快了一点——这实际上与我所期望的正好相反!

x = np.random.random(100000)
y = np.random.random(100000)

%timeit numpy.polynomial.polynomial.polyfit(x, y, 1)
100 loops, best of 3: 8.89 ms per loop
%timeit scipy.stats.linregress(x,y)
100 loops, best of 3: 1.67 ms per loop

这三个是非常不同的,但在参数估计中重叠的非常简单的例子只有一个解释变量。

通过增加普遍性:

scipy.stats.linregress只处理带有专用代码的单个解释变量的情况,并计算一些额外的统计信息。

numpy.polynomial.polynomial.polyfit估计单变量多项式的回归,但不返回太多额外的统计量。

statsmodelsOLS是一个通用的线性模型(OLS)估计类。它不预先指定解释变量是什么,并且可以处理任何解释变量的多元数组、公式和pandas数据帧。它不仅返回估计的参数,而且还返回一组用于统计推断和预测的结果统计和方法。

对于Python中估计线性模型的选项的完整性(在Bayesian分析之外),我们还应该考虑scikit-learnLinearRegression和类似的线性模型,这些模型对于在大量解释变量中进行选择很有用,但没有statsmodels提供的大量结果。

相关问题 更多 >