我正在尝试使用statsmodles来计算非线性回归模型。特别是我在学习patsy语法时遇到了问题。statsmodels:使用patsy指定非线性回归模型
是否有任何教程或例子如何使用patsy语法来制定非线性模型?
特别是,如何使用patsy指定此示例上的非线性模型(http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html)?
非常感谢你提前
安迪
我正在尝试使用statsmodles来计算非线性回归模型。特别是我在学习patsy语法时遇到了问题。statsmodels:使用patsy指定非线性回归模型
是否有任何教程或例子如何使用patsy语法来制定非线性模型?
特别是,如何使用patsy指定此示例上的非线性模型(http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html)?
非常感谢你提前
安迪
懦夫不是件一般非线性模型确实有用,但你链接到页面上的模型是非线性的一种特殊模型 - 他们使用线性模型拟合法(OLS),并将其应用于非线性变换的基本变量。一个标准且非常有用的技巧是将相同变量的多个非线性变换组合起来,以便有效地拟合更一般的曲线。为此,patsy非常有用。
你真正想知道的是如何在patsy中表达变量转换。这很容易。 patsy的工作原理是,给定一个像"x1 + x2:x3"
这样的公式字符串,它扫描并解释特殊的可怕运算符,如+
和:
,然后将剩下的内容(x1
,x2
,)解释为任意的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
加相同。
有用的是,patsy会自动提供一个叫做I()
的函数,它可以像这样工作,它总是可以使用。
现在你知道你需要知道的一切,以重现该页面上的例子。对于第一个,公式是"x + I(x**2)"
。第二,公式是"x + np.sin(x) + I((x - 5)**2)"
。
对于最后一个示例,仅使用patsy的内置分类编码支持最简单:"x + C(groups)"
。(这里C
是另一个特殊的内置函数,可以让我们调整分类数据的编码方式,在这里我们只是用它来表示即使groups
看起来像一个数值向量 - 它的值是0,1,2 - - 实际上我们应该把它当作是分类的,每个值代表不同的组,然后patsy应用它的默认分类编码)
我们可以使用标识函数创建一个虚拟或交互吗?像我可以构造一个像$ I(x1 *(x2 =='USA'))$? – xappppp