覆盖默认多项式与有序因子形成对比

时间:2014-12-16 02:38:45

标签: r regression lm

默认情况下,使用有序因子作为回归的预测因子会产生线性(.L)和二次(.Q)多项式对比度。有没有办法省略二次对比?这是我操纵过的一些笨拙的示例代码:

xvar<-rnorm(100)
yvar<-x+rnorm(100)
xfac<-as.factor(c(1,2,3))

dat<-cbind(xvar,yvar,xfac)
dat<-data.frame(dat)
dat$xfac<-ordered(as.factor(dat$xfac))

summary(lm(yvar~xvar+xfac,data=dat))

假设将二次对比作为预测因子包含在内可能会导致一些多重共线性问题,我是否正确?我环顾四周,但找不到任何其他关于仅包括线性组件的帖子。谢谢!

1 个答案:

答案 0 :(得分:1)

不,你不对。如果你这样做,那你就是对的:

lm( yvar ~ xvar + as.numeric(xfac) +I(as.numeric(xfac)^2), data=dat)

但这与R遇到这种情况时所做的不一样。二次项是否会“削弱”线性估计实际上取决于数据情况。如果二次拟合减少了拟合与数据的偏差,那么线性估计可能会“减弱”,但不一定。

如果你只想要线性对比,你可以这样做(通常称为xfac的“趋势测试”):

lm( yvar ~ xvar + as.numeric(xfac), data=dat)

如果您有一个具有多个级别的有序因子而您只想要线性和二次对比,那么您可以这样做:

 > fac <- factor(c("E","VG","G","F","P"),  
                  levels=c("E","VG","G","F","P"), ordered=TRUE)
> sfac <- sample(fac, 30, rep=TRUE) 
> outcome <- 5*as.numeric(sfac) +rnorm(30) # linear outcome effect
> lm(outcome ~ sfac)
#-----------
Call:
lm(formula = outcome ~ sfac)

Coefficients:
(Intercept)       sfac.L       sfac.Q       sfac.C       sfac^4  
   14.97297     15.49134      0.10634     -0.03287      0.40144  
#---------

> contrasts(sfac, 2) <- contr.poly(5)[, 1:2]
> lm(outcome ~ sfac)

Call:
lm(formula = outcome ~ sfac)

Coefficients:
(Intercept)       sfac.L       sfac.Q  
   14.97078     15.50680      0.07977