Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python统计模型-回归中的二次项_Python_Regression_Statsmodels_Quadratic - Fatal编程技术网

python统计模型-回归中的二次项

python统计模型-回归中的二次项,python,regression,statsmodels,quadratic,Python,Regression,Statsmodels,Quadratic,我有以下线性回归: import statsmodels.formula.api as sm model = sm.ols(formula = 'a ~ b + c', data = data).fit() 我想在这个模型中为b添加一个二次项 使用statsmodels.ols是否有一种简单的方法来实现这一点? 我是否应该使用更好的软件包来实现这一点?这应该可以: data['b2'] = data.b ** 2 model = sm.ols(formula = 'a ~ b2 + b +

我有以下线性回归:

import statsmodels.formula.api as sm

model = sm.ols(formula = 'a ~ b + c', data = data).fit()
我想在这个模型中为b添加一个二次项

使用
statsmodels.ols
是否有一种简单的方法来实现这一点?
我是否应该使用更好的软件包来实现这一点?

这应该可以:

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

虽然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]})
最简单的方法是

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

I(…)
基本上是说“patsy,请不要再聪明了,让Python来处理kthx内部的一切”。()

您知道这是否取决于某个版本吗?对我来说,b**2术语只是略过了。根据公式创建设计矩阵是由patsy完成的,与statsmodels版本无关。(我不知道patsy是如何对待公式中的幂运算的。)我知道我来晚了,但是在
公式中,='a~np.power(b,2)+b+c'
的波浪形符号是什么意思?@Jim421616就像在R编程语言中,
~
意味着
a
np.power(b,2)的线性组合+b+c
在Statsmodels 0.21.1中不起作用:显示“patsy.PatsyError:错误评估因子:ValueError:没有名称字段
I