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 编程语言中一样,~ 表示anp.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 统计回归简介

Python:多元线性回归:statsmodels.formula.api.ols()

Python数模笔记-StatsModels 统计回归可视化

Python基于statsmodels包构建多元线性回归模型:模型构建模型解析模型推理预测