我想在我的模型中拟合正交多项式。 截至目前,我首先使用以下内容获取正交多项式: 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 +碳水化合物。
答案 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