MER*_*ose 2 regression r categorical-data
当 R 使用分类变量执行回归时,它实际上是虚拟编码。也就是说,省略了一个级别作为基础或参考,并且回归公式包括所有其他级别的虚拟变量。但是,R 选择哪个作为参考以及我如何影响这个选择?
具有四个级别的示例数据(来自UCLA 的 IDRE):
hsb2 <- read.csv("http://www.ats.ucla.edu/stat/data/hsb2.csv")
summary(lm(write ~ factor(race), data = hsb2))
# level 1 is the reference level
hsb2.ordered <- hsb2[rev(order(hsb2$race)),]
summary(lm(write ~ factor(race), data = hsb2.ordered))
# level 1 is still the reference level
Run Code Online (Sandbox Code Playgroud)
R 中因子水平的顺序不依赖于数据的顺序。因此,改变数据的顺序不会影响因子的参考水平。
您可以使用以下函数获取级别的顺序levels:
fac <- factor(hsb2$race)
levels(fac)
# [1] "1" "2" "3" "4"
Run Code Online (Sandbox Code Playgroud)
因子水平的顺序基于数据的字母顺序。
您可以使用以下relevel功能更改参考电平:
fac2 <- relevel(fac, ref = "2")
levels(fac2)
# [1] "2" "1" "3" "4"
Run Code Online (Sandbox Code Playgroud)
现在,水平"2"是参考水平。这也会影响回归:
lm(write ~ fac2, data = hsb2)
#
# Call:
# lm(formula = write ~ fac2, data = hsb2)
#
# Coefficients:
# (Intercept) fac21 fac23 fac24
# 58.000 -11.542 -9.800 -3.945
Run Code Online (Sandbox Code Playgroud)
该函数factor允许创建因子水平的任何排序:
fac3 <- factor(fac, levels = c("3", "4", "2", "1"))
levels(fac3)
# [1] "3" "4" "2" "1"
Run Code Online (Sandbox Code Playgroud)