R 中的分类变量 - R 选择哪一个作为参考?

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)

Sve*_*ein 6

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)