web-dev-qa-db-ja.com

python統計モデル-回帰の二次項

次の線形回帰があります。

import statsmodels.formula.api as sm

model = sm.ols(formula = 'a ~ b + c', data = data).fit()

このモデルでbの2次項を追加したいと思います。

Statsmodels.olsでこれを行う簡単な方法はありますか?これを達成するために使用すべきより良いパッケージはありますか?

16
datavoredan

Alexanderによる解決策は機能していますが、状況によってはあまり便利ではありません。たとえば、新しい値のモデルの結果を予測するたびに、面倒で不要なb ** 2とbの両方の値を渡すことを覚えておく必要があります。 patsyは "b ** 2"という表記を認識しませんが、numpy関数を認識します。したがって、使用できます

import statsmodels.formula.api as sm
import numpy as np

data = {"a":[2, 3, 5], "b":[2, 3, 5], "c":[2, 3, 5]}
model = sm.ols(formula = 'a ~ np.power(b, 2) + b + c', data = data).fit()

このように、後者では、b ** 2の値を指定する必要なく、このモデルを再利用できます。

model.predict({"a":[1, 2], "b":[5, 2], "c":[2, 4]})
24

最も簡単な方法は

_model = sm.ols(formula = 'a ~ b + c + I(b**2)', data = data).fit()
_

I(...)は基本的に、「パッシー、ここで賢くなるのをやめて、Python kthx内のすべてを処理するようにしてください」と言います。( 詳細な説明

25

これはうまくいくはずです:

data['b2'] = data.b ** 2
model = sm.ols(formula = 'a ~ b2 + b + c', data=data).fit()
1
Alexander