我试图用statsmodles计算非线性回归模型。尤其是我在学习patsy语法时遇到了问题。
有没有使用patsy语法建立非线性模型的教程或示例?
特别是,如何使用patsy指定这个示例(http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html)上的非线性模型?
非常感谢你提前
安迪

最佳答案

Patsy对于拟合一般的非线性模型并不是很有用,但是页面上链接到的模型是一种特殊的非线性模型——它们使用线性模型拟合方法(OLS),并将其应用于基本变量的非线性变换。一个标准且非常有用的技巧是组合同一变量的多个非线性变换,以便有效地拟合更一般的曲线。为此,帕西非常有用。
您真正想知道的是如何在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单独解释。
但是,如果你想,比如说,把两个变量加在一起,用它们作为预测因子,而不需要记录日志呢?好吧,根据我们已经知道的,我们可以想出一个简单的技巧:我们可以定义一个只返回其输入的函数(identity函数),然后调用它,比如:"x1 + I(x2 + x3)"。现在对I(...)的函数调用将阻止patsy看到第二个+,但当我们实际评估时,这个词将与I(x2 + x3)x2相同。
而且有帮助的是,patsy自动提供了一个名为x3的函数,该函数的工作原理是这样的,它总是可以使用的。
现在您知道了复制该页上的示例所需了解的一切。第一个公式是I()。第二个公式是"x + I(x**2)"
在最后一个例子中,使用patsy内置的分类编码支持是最简单的:"x + np.sin(x) + I((x - 5)**2)"。(这里"x + C(groups)"是另一个特殊的内置函数,允许我们调整分类数据的编码方式。这里我们只是用它来告诉patsy,尽管C看起来像一个数值向量——它的值是0,1,2——实际上我们应该把它看作是分类的,每个值代表一个不同的组。然后patsy应用它的默认分类编码)

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

10-12 21:37