【问题标题】:python stats models - quadratic term in regressionpython statsmodels - 回归中的二次项
【发布时间】: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 做到这一点?
我应该使用更好的软件包来实现这一目标吗?

【问题讨论】:

    标签: python regression statsmodels quadratic


    【解决方案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 如何处理公式中的幂运算。)
    猜你喜欢
    • 2016-02-16
    • 2017-08-17
    • 2014-07-27
    • 2016-09-07
    • 2016-05-13
    • 2015-12-31
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多