据我所知,R 在回归分析时将逻辑变量视为具有两个水平的因子变量。这在大多数情况下似乎运作良好,但在某些情况下会产生意想不到的结果(见下文)。所以我想知道:在 R 中将虚拟变量编码为逻辑变量而不是数字变量是否有益?
当逻辑变量作为主效应包括在内时,R 检测其两个因子水平的共线性并降低 FALSE
水平。但是,当仅存在交互作用时,R 无法检测共线性并估计两个系数,而我预计只有一个:
library(tidyverse)
# create dataset
dat <- mtcars %>%
as_tibble() %>%
mutate(vs = as.logical(vs))
# regression with main effects
lm(mpg ~ vs + disp + vs:disp, data = dat)
#>
#> Call:
#> lm(formula = mpg ~ vs + disp + vs:disp, data = dat)
#>
#> Coefficients:
#> (Intercept) vsTRUE disp vsTRUE:disp
#> 25.63755 8.39771 -0.02937 -0.04219
# regression without main effects
lm(mpg ~ vs:disp, data = dat)
#>
#> Call:
#> lm(formula = mpg ~ vs:disp, data = dat)
#>
#> Coefficients:
#> (Intercept) vsFALSE:disp vsTRUE:disp
#> 30.05647 -0.04228 -0.04591
由 reprex package (v2.0.0) 于 2021 年 7 月 14 日创建
有什么方法可以理解这种行为,还是应该在 R 中将虚拟变量表示为数字变量?