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

时间:2013-05-21 08:53:24

标签: python regression statsmodels

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

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

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

非常感谢您提前

安迪

1 个答案:

答案 0 :(得分:7)

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

您真正想知道的是如何在patsy中表达变量转换。这很简单。 patsy的工作方式,给定一个像"x1 + x2:x3"这样的公式字符串,它会扫描并解释特殊的patsy运算符,如+:,然后是剩下的东西({{1} },x1x2)被解释为任意python代码。所以你也可以写x3或其他什么。

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

但是,如果您想要将两个变量一起添加并将它们用作预测变量而不记录日志呢?好吧,根据我们已经知道的,我们可以提出一个简单的黑客攻击:我们可以定义一个只返回其输入的函数(身份函数),并调用它,如:{{1} }。现在,对+的函数调用将阻止patsy看到第二个"x1 + I(x2 + x3)",但是当我们实际评估术语I(...)时,+加上I(x2 + x3) }。

并且有用的是,patsy会自动提供一个名为x2的函数,它可以像这样工作,可以随时使用。

现在,您已了解在该页面上重现示例所需了解的所有内容。对于第一个,公式为x3。对于第二个,公式为I()

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