繁体   English   中英

scipy.stats.linregress,numpy.polynomial.polynomial.polyfit和statsmodels.api.OLS之间的差异

[英]Difference(s) between scipy.stats.linregress, numpy.polynomial.polynomial.polyfit and statsmodels.api.OLS

似乎所有三个函数都可以进行简单的线性回归,例如

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中使用它们,如果这有任何区别。

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

通过增加普遍性:

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

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

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

为了完整性地估计Python中的线性模型(贝叶斯分析之外),我们还应该考虑scikit-learn LinearRegression和类似的线性模型,它们可用于在大量解释变量中进行选择,但不具有大量的statsmodels提供的结果。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM