拟合模型中的正交多项式

时间:2015-06-20 15:52:19

标签: r polynomials

我想在我的模型中拟合正交多项式。 截至目前,我首先使用以下内容获取正交多项式:     contr.poly(11)

然后我为线性,二次等创建一个新变量,然后我可以在模型中包含它:     lm(y~x + p + p_linear,data = d,...)

是否有更快的方法在公式中拟合正交多项式?

一个例子是:     lm(y~x + p + I((p - mean(p)/ sqrt(440))

我想单独拟合每个正交多项式项(首先是线性,然后是线性+二次等)

TIA。

更新

data(mtcars)
mtcars$carb <- factor(mtcars$carb)
contrasts(mtcars$carb) <- contr.poly(n=levels(mtcars$carb))
contrasts(mtcars$carb)

mt.mod <- lm(mpg ~ carb, data=mtcars)
summary(mt.mod)

如何逐步拟合正交多项式;首先是碳水化合物,然后是碳水化合物。+碳水化合物.Q,然后是碳水化合物。+碳水化合物.Q +碳水化合物。

1 个答案:

答案 0 :(得分:1)

这使用C函数来构建因子变量的多项式对比度。 bquote函数及其助手.()函数用于将度数值替换为语言对象,

sapply(1:3, function(degr){ 
                 form <- as.formula( bquote(mpg ~ C(factor(carb), poly, .(degr)))); 
                 coef( lm(form, data=mtcars))})
[[1]]
               (Intercept) C(factor(carb), poly, 1).L 
                  18.01040                  -11.13885 

[[2]]
               (Intercept) C(factor(carb), poly, 2).L 
                 18.821460                  -8.382298 
C(factor(carb), poly, 2).Q 
                  3.777842 

[[3]]
               (Intercept) C(factor(carb), poly, 3).L 
                18.9100420                 -7.9958797 
C(factor(carb), poly, 3).Q C(factor(carb), poly, 3).C 
                 4.0995446                  0.7565959 

我(重新)发现这个方法已经在2008年被Rhelp教授发布后,在有用的Ripley教授的推动下http://markmail.org/message/jz56m5gztqowa4lp?q=list:org%2Er-project%2Er-help+from:%22David+Winsemius%22+contrasts+poly