我有以下线性回归:
import statsmodels.formula.api as sm
model = sm.ols(formula = 'a ~ b + c', data = data).fit()
我想在此模型中为b添加二次项。
使用statsmodels.ols有一种简单的方法吗? 我应该用更好的方法来实现这个目标吗?
答案 0 :(得分:19)
尽管亚历山大的解决方案正在发挥作用,但在某些情况下它并不是很方便。例如,每次要预测新值的模型结果时,都需要记住传递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]})
答案 1 :(得分:1)
这应该有效:
data['b2'] = data.b ** 2
model = sm.ols(formula = 'a ~ b2 + b + c', data=data).fit()