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

MLi*_*ter 12 python numpy scipy python-3.x statsmodels

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

scipy.stats.linregress(x, y)

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

x = statsmodels.api.add_constant(x)
statsmodels.api.OLS(y, x)
Run Code Online (Sandbox Code Playgroud)

我想知道这三种方法之间是否有任何真正的区别?我知道它statsmodels是建立在最基础之上的scipy,并且scipy有点依赖于numpy很多东西,所以我希望它们不应该大不相同,但是魔鬼总是在细节中.

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

我在Python 3中使用它们,如果这有任何区别.

Jos*_*sef 12

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

通过增加普遍性:

scipy.stats.linregress 仅处理具有专门代码的单个解释变量的情况并计算一些额外的统计数据.

numpy.polynomial.polynomial.polyfit 估计单个变量的多项式的回归,但在额外的统计量方面没有多少回报.

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

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