Python中poly(x, 2)的等效操作是添加一个二次正交多项式。

4

以下是 R 代码:

model1 <- glm(wt82_71 ~ qsmk + sex + race + poly(age, 2, raw = TRUE)   + education + poly(smokeintensity, 2, raw = TRUE) + poly(smokeyrs, 2, raw = TRUE) + exercise + active + poly(wt71, 2, raw = TRUE) + qsmk:smokeintensity,data = nhefs)

在Python中,我编写了以下代码:
mod3 = smf.glm(formula='qsmk ~ sex + race + education + exercise + active + poly(age,2) + poly(smokeintensity,2) + poly(smokeyrs,2) + poly(wt71,2)', family=sm.families.Binomial(), data=nhefs).fit()
mod3.summary()

poly()在Python中应该是什么?以下是一些注释:

(1) poly(x, 2)添加一个二阶正交多项式,如果希望产生与x + x^2相同的系数,则添加参数raw=TRUE

(2) x1*x2输入x1x2的主效应以及它们的乘积项,x1:x2只输入乘积项(对于smokeintensity是必要的,因为我们希望在交互作用中smokeintensity以线性方式处理,但在主效应中以二次方式处理,因此对于smokeintensity的线性项无法估计)

(3) 具有缺失值的观测值会自动删除


2
你应该明确指出模块smf是指哪个模块。 - MichaelChirico
这是来自statmodels的内容,网址为http://www.statsmodels.org/stable/index.html。 - Khalid M. Kahloot
1个回答

4
据我所知,patsy目前不支持连续变量的多项式基函数,现有的poly适用于有序分类变量。
Numpy具有各种多项式基函数的vander函数,可直接在公式中使用。
关于是否在现有数据集上进行正交处理存在争议。我个人更倾向于不这样做,因为这样当数据集发生变化时,基函数不会改变。

https://github.com/pydata/patsy/issues/20 https://github.com/pydata/patsy/pull/92/files

作为替代方案,可以直接指定幂项,参见 python stats models - quadratic term in regression,但这样不能进行正交化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接