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つの方法の間に本当の違いがあるのだろうか? statsmodels
はscipy
の上に構築されており、scipy
は多くの点でnumpy
に依存しているので、違いはないと思います。広大ですが、悪魔は常に細部にあります。
より具体的には、上記のnumpy
メソッドを使用する場合、他の2つのメソッドによってデフォルトで与えられる勾配のp-value
を取得するにはどうすればよいですか?
違いがあれば、Python 3で使用しています。
3つは非常に異なりますが、説明変数が1つしかない非常に単純な例のパラメーター推定では重複しています。
一般性を高めることによって:
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