web-dev-qa-db-ja.com

scipy.stats.linregress、numpy.polynomial.polynomial.polyfit、statsmodels.api.OLSの違い

3つの関数すべてが単純な線形回帰を実行できるようです。

scipy.stats.linregress(x, y)

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

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

3つの方法の間に本当の違いがあるのだろうか? statsmodelsscipyの上に構築されており、scipyは多くの点でnumpyに依存しているので、違いはないと思います。広大ですが、悪魔は常に細部にあります。

より具体的には、上記のnumpyメソッドを使用する場合、他の2つのメソッドによってデフォルトで与えられる勾配のp-valueを取得するにはどうすればよいですか?

違いがあれば、Python 3で使用しています。

12
MLister

3つは非常に異なりますが、説明変数が1つしかない非常に単純な例のパラメーター推定では重複しています。

一般性を高めることによって:

scipy.stats.linregressは、特殊なコードを持つ単一の説明変数の場合のみを処理し、いくつかの追加の統計を計算します。

numpy.polynomial.polynomial.polyfitは、単一変数の多項式の回帰を推定しますが、追加の統計に関してはあまり戻りません。

statsmodelsOLSは、一般的な線形モデル(OLS)推定クラスです。説明変数が何であるかを事前に指定せず、説明変数の多変量配列、または数式とpandas DataFramesを処理できます。推定されたパラメーターだけでなく、多数の結果も返します。統計的推論と予測のための統計と方法。

Python(ベイズ分析以外)で線形モデルを推定するためのオプションを完全にするために、scikit-learnLinearRegressionおよび同様の線形モデルも検討する必要があります。多数の説明変数から選択しますが、statsmodelsが提供する多数の結果はありません。

12
Josef

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
2
maxymoo