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

Python statsmodels:使用patsy指定非线性回归模型,python,regression,statsmodels,Python,Regression,Statsmodels,我正在尝试使用statsmodles计算非线性回归模型。尤其是我在学习patsy语法时遇到了问题 有没有关于如何使用patsy语法建立非线性模型的教程或示例 特别是,如何使用patsy指定此示例()上的非线性模型 事先非常感谢 AndyPatsy在拟合一般非线性模型方面并不是很有用,但您链接到的页面上的模型是一种特殊的非线性模型——它们使用线性模型拟合方法(OLS),并将其应用于基本变量的非线性变换。一个标准且非常有用的技巧是组合同一变量的多个非线性变换,以便有效地拟合更一般的曲线。在这方面,p

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

有没有关于如何使用patsy语法建立非线性模型的教程或示例

特别是,如何使用patsy指定此示例()上的非线性模型

事先非常感谢


Andy

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

您真正想知道的是如何用patsy表示变量转换。这很容易。patsy的工作方式是,给定一个公式字符串,如
“x1+x2:x3”
,它扫描并解释特殊的patsy操作符,如
+
,然后剩下的东西(
x1
x2
x3
)被解释为任意python代码。因此,您可以编写
“np.sin(x1)+np.log(x2):x3”
或其他任何东西

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

但是如果你想,比如说,把两个变量加在一起,并把它们作为一个预测因子,而不需要记录日志,那该怎么办呢?好的,根据我们已经知道的,我们可以想出一个简单的方法:我们可以定义一个只返回其输入的函数(标识函数),然后调用它,比如:
“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(组)”
。(这里
C
是另一个特殊的内置函数,可以让我们调整分类数据的编码方式。这里我们只是用它告诉patsy,尽管
groups
看起来像一个数字向量——它的值是0、1、2——事实上我们应该将其视为分类的,每个值代表一个不同的组。然后patsy应用其默认的分类编码)

我们可以使用标识函数创建虚拟或交互吗?我可以构造一个像$I(x1*(x2=='USA'))$这样的术语吗?