> On 11 Mar 2016, at 23:48 , David Winsemius <dwinsem...@comcast.net> wrote: > >> >> On Mar 11, 2016, at 2:07 PM, peter dalgaard <pda...@gmail.com> wrote: >> >> >>> On 11 Mar 2016, at 17:56 , David Winsemius <dwinsem...@comcast.net> wrote: >>> >>>> >>>> On Mar 11, 2016, at 12:48 AM, peter dalgaard <pda...@gmail.com> wrote: >>>> >>>> >>>>> On 11 Mar 2016, at 08:25 , David Winsemius <dwinsem...@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 >>> >>> It's possible that modifying model.matrix to allow single level factors >>> would then bump up against that check, but at the moment the traceback() >>> from an error generated with data that has a single level factor and no >>> call to factor in the formula still implicates code in model.matrix: >> >> You're missing the point: model.matrix has a beef with 1-level factors, not >> with 2-level factors of which one level happens to be absent, which is what >> this thread was originally about. It is lm that via model.frame with >> drop.unused.levels=TRUE converts the latter factors to the former. >> > > I guess I did miss the point. Apologies for being obtuse. I thought that a > one level factor would have been "aliased out" when model.matrix "realized" > that it was collinear with the intercept. (Further apologies for my > projection of cognitive capacites on a machine.) Are you saying it remains > desirable that an error be thrown rather than reporting an NA for > coefficients and issuing a warning? >
For the moment I was just analyzing where this came from. Intuitively I'd be leaning in the opposite direction -- dropping factor levels automatically is usually a bad thing. -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-help@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.