Dear R-devel list members, This is an observation about how logical variables in models are handled, followed by questions.
As a general matter, character variables and logical variables are treated as if they were factors when they appear on the RHS of a model formula; for example: - - - - snip- - - - - > set.seed(123) > c <- sample(letters[1:3], 10, replace=TRUE) > f <- as.factor(sample(LETTERS[1:3], 10, replace=TRUE)) > L <- sample(c(TRUE, FALSE), 10, replace=TRUE) > y <- rnorm(10) > options(contrasts=c("contr.sum", "contr.poly")) > mod <- lm(y ~ c + f + L) > model.matrix(mod) (Intercept) c1 c2 f1 f2 L1 1 1 1 0 -1 -1 1 2 1 -1 -1 0 1 1 3 1 0 1 -1 -1 1 4 1 -1 -1 0 1 1 5 1 -1 -1 1 0 1 6 1 1 0 -1 -1 1 7 1 0 1 1 0 1 8 1 -1 -1 1 0 1 9 1 0 1 1 0 -1 10 1 0 1 -1 -1 -1 attr(,"assign") [1] 0 1 1 2 2 3 attr(,"contrasts") attr(,"contrasts")$c [1] "contr.sum" attr(,"contrasts")$f [1] "contr.sum" attr(,"contrasts")$L [1] “contr.sum" - - - - snip- - - - - But logical variables don’t appear in the $xlevels component of the objects created by lm() and similar functions: - - - - snip- - - - - > mod$xlevels $c [1] "a" "b" "c" $f [1] "A" "B" “C" - - - - snip- - - - - Why the discrepancy? It’s true that the level-set (i.e., TRUE, FALSE) for a logical “factor” is known, but examining the $levels component is a simple way to detect variables treated as factors in the model. For example, I’d argue that .getXlevels() returns misleading information: - - - - snip- - - - - > .getXlevels(terms(mod), model.frame(mod)) $c [1] "a" "b" "c" $f [1] "A" "B" “C" - - - - snip- - - - - An alternative for detecting “factors” is to examine the 'contrasts' attribute of the model matrix, although that doesn’t produce levels: - - - - snip- - - - - > names(attr(model.matrix(mod), "contrasts")) [1] "c" "f" "L" - - - - snip- - - - - Is there are argument against making the treatment of logical variables consistent with that of factors and character variables? Comments? Best, John ------------------------------------------------- John Fox, Professor Emeritus McMaster University Hamilton, Ontario, Canada Web: http::/socserv.mcmaster.ca/jfox ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel