python - statsmodels:使用 patsy 指定非线性回归模型

标签 python regression statsmodels

我正在尝试使用 statsmodles 计算非线性回归模型。特别是我在学习 patsy 语法时遇到了问题。

是否有任何教程或示例如何使用 patsy 语法制定非线性模型?

特别是,如何使用 patsy 指定此示例 (http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html) 中的非线性模型?

非常感谢您

安迪

最佳答案

Patsy 对于拟合一般非线性模型并不是很有用,但是您链接到的页面上的模型是一种特殊的非线性模型——它们使用的是线性模型拟合方法 (OLS),并将其应用于基本变量的非线性变换。一个标准且非常有用的技巧是组契约(Contract)一变量的多个非线性变换,以便有效地拟合更一般的曲线。为此,patsy 非常有用。

您真正想知道的是如何在 patsy 中表达变量转换。这很容易。 patsy 的工作方式,给定一个像 "x1 + x2:x3" 这样的公式字符串,它会扫描并解释特殊的 patsy 运算符,如 +:,然后剩下的内容(x1x2x3)被解释为任意 python 代码。因此,您也可以编写 "np.sin(x1) + np.log(x2):x3" 或其他内容。

唯一需要注意的是,如果您想编写一个使用与 patsy 运算符冲突的 python 运算符的转换。比如,如果你想在你的转换中使用 +**,那么你必须小心确保 patsy 不会自己解释那些,并留下它们到 python 。这里的技巧是 patsy 将忽略出现在函数调用中的任何运算符(或 patsy 不理解的其他复杂 python 表达式,但主要是函数调用)。因此,如果您编写 "x1 + np.log(x2 + x3)",那么 patsy 会将其视为两个预测变量,x1np.log(x2 + x3)——你可以看到它解释了第一个+,但是它把第二个单独留给了python来解释。

但是,如果您想将两个变量加在一起并将它们用作预测变量,而不使用对数怎么办?好吧,根据我们已经知道的,我们可以想出一个简单的 hack:我们可以定义一个只返回其输入的函数(identity 函数),然后调用它,例如:” x1 + I(x2 + x3)”。现在对 I(...) 的函数调用将阻止 patsy 看到第二个 +,但是当我们实际计算术语 I(x2 + x3) 将与 x2 加上 x3 相同。

有用的是,patsy 自动提供了一个名为 I() 的函数,它的工作方式与此类似,并且始终可用。

现在您已经了解了重现该页面上的示例所需的一切知识。对于第一个,公式为 "x + I(x**2)"。对于第二个,公式是 "x + np.sin(x) + I((x - 5)**2)"

对于最后一个示例,最简单的方法是使用 patsy 的内置分类编码支持:"x + C(groups)"。 (这里 C 是另一个特殊的内置函数,可以让我们调整分类数据的编码方式。这里我们只是用它来告诉 patsy 即使 groups 看起来像一个数值向量——它的值是 0、1、2——事实上我们应该把它当作分类的,每个值代表一个不同的组。然后 patsy 应用它的默认分类编码)

关于python - statsmodels:使用 patsy 指定非线性回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16665833/

相关文章:

python - 逻辑回归统计模型概率预测的置信区间

python - 从直方图制作概率分布函数 (PDF)

不在 hasattr() 上求值的 Python 惰性属性

python - 找不到 GraphViz 的可执行文件 : Anaconda-3

python - 为 Django 应用程序实现 Facebook 注销功能

python - altair:在回归中访问 r 平方值

python - 使用 beautiful soup 有条件地获取类内容

machine-learning - 使用 TensorFlow 进行非线性回归,结果呈直线

r - R 中的 k-NN 回归问题

python - 通过字符串变量访问 pandas DataFrame 的列