python statsmodels - 回归中的二次项
Posted
技术标签:
【中文标题】python statsmodels - 回归中的二次项【英文标题】:python stats models - quadratic term in regression 【发布时间】:2015-11-05 20:57:23 【问题描述】:我有以下线性回归:
import statsmodels.formula.api as sm
model = sm.ols(formula = 'a ~ b + c', data = data).fit()
我想在这个模型中为 b 添加一个二次项。
有没有一种简单的方法可以用statsmodels.ols
做到这一点?
我应该使用更好的软件包来实现这一目标吗?
【问题讨论】:
【参考方案1】:最简单的方法是
model = sm.ols(formula = 'a ~ b + c + I(b**2)', data = data).fit()
I(...)
基本上是说“patsy,请不要在这里聪明,让 Python 处理 kthx 中的所有内容”。 (More detailed explanation)
【讨论】:
在 Statsmodels 0.21.1 中不起作用:说“patsy.PatsyError:评估因子错误:ValueError:没有名称字段I
”【参考方案2】:
虽然 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])
【讨论】:
我知道我在这里聚会迟到了,但是formula = 'a ~ np.power(b, 2) + b + c'
中的波浪号~
是什么意思?
@Jim421616 就像在 R 编程语言中一样,~
表示a
是np.power(b, 2) + b + c
的线性组合【参考方案3】:
这应该可行:
data['b2'] = data.b ** 2
model = sm.ols(formula = 'a ~ b2 + b + c', data=data).fit()
【讨论】:
你知道这是否取决于某个版本吗?对我来说,b**2 术语只是被跳过了 根据公式创建设计矩阵由 patsy 完成,并且独立于 statsmodels 版本。 (我不知道 patsy 如何处理公式中的幂运算。)以上是关于python statsmodels - 回归中的二次项的主要内容,如果未能解决你的问题,请参考以下文章
Python数模笔记-StatsModels 统计回归模型数据的准备
Python:使用 Statsmodels 预测 y 值 - 线性回归
Python:多元线性回归:statsmodels.formula.api.ols()