[R] Regression with factor having1 level

peter dalgaard pdalgd at gmail.com
Fri Mar 11 09:48:40 CET 2016


> On 11 Mar 2016, at 08:25 , David Winsemius <dwinsemius at comcast.net> wrote:
>> 
...
>>> dfrm <- data.frame(y=rnorm(10), x1=rnorm(10) ,x2=as.factor(TRUE), x3=rnorm(10))
>>> lm(y~x1+x2+x3, dfrm, na.action=na.exclude)
>> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
>> contrasts can be applied
> 
> Yes, and the error appears to come from `model.matrix`:
> 
>> model.matrix(y~x1+factor(x2)+x3, dfrm)
> Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
>  contrasts can be applied only to factors with 2 or more levels
> 

Actually not. The above is because you use an explicit factor(x2). The actual smoking gun is this line in lm()

mf$drop.unused.levels <- TRUE

which someone must have thought was a good idea at some point....

model.matrix itself is quite happy to leave factors alone and let subsequent code sort out any singularities, e.g.

> model.matrix(y~x1+x2, data=df[1:2,])
  (Intercept) x1 x2B
1           1  1   0
2           1  1   0
attr(,"assign")
[1] 0 1 2
attr(,"contrasts")
attr(,"contrasts")$x2
[1] "contr.treatment"



>> model.matrix(y~x1+x2+x3, dfrm)
>   (Intercept)          x1 x2TRUE         x3
> 1            1  0.04887847      1 -0.4199628
> 2            1 -1.04786688      1  1.3947923
> 3            1 -0.34896007      1 -2.1873666
> 4            1 -0.08866061      1  0.1204129
> 5            1 -0.41111366      1 -1.6631057
> 6            1 -0.83449110      1  1.1631801
> 7            1 -0.67887823      1  0.3207544
> 8            1 -1.12206068      1  0.6012040
> 9            1  0.05116683      1  0.3598696
> 10           1  1.74413583      1  0.3608478
> attr(,"assign")
> [1] 0 1 2 3
> attr(,"contrasts")
> attr(,"contrasts")$x2
> [1] "contr.treatment"
> 
> -- 
> 
> David Winsemius
> Alameda, CA, USA
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list