如何强制 R 在回归中使用指定的因子水平作为参考?

问题描述 投票:0回答:6

如果我在回归中使用二元解释变量,我如何告诉 R 使用某个水平作为参考?

它只是默认使用一些级别。

lm(x ~ y + as.factor(b)) 

b {0, 1, 2, 3, 4}
。假设我想使用 3 而不是 R 使用的零。

r regression linear-regression categorical-data dummy-variable
6个回答
193
投票

参见

relevel()
功能。这是一个例子:

set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
                 y = 4 + (1.5*x) + rnorm(100, sd = 2),
                 b = gl(5, 20))
head(DF)
str(DF)

m1 <- lm(y ~ x + b, data = DF)
summary(m1)

现在使用

b
函数改变
DF
中的因子
relevel()

DF <- within(DF, b <- relevel(b, ref = 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)

模型估计了不同的参考水平。

> coef(m1)
(Intercept)           x          b2          b3          b4          b5 
  3.2903239   1.4358520   0.6296896   0.3698343   1.0357633   0.4666219 
> coef(m2)
(Intercept)           x          b1          b2          b4          b5 
 3.66015826  1.43585196 -0.36983433  0.25985529  0.66592898  0.09678759

80
投票

我知道这是一个老问题,但我遇到了类似的问题并发现:

lm(x ~ y + relevel(b, ref = "3")) 

完全按照你的要求做。


39
投票

其他人提到了

relevel
命令,如果您想更改所有数据分析的基本级别(或者愿意忍受更改数据),这是最好的解决方案。

如果您不想更改数据(这是一次性更改,但将来您又想要默认行为),那么您可以结合使用

C
(注意大写)函数来设置对比度以及带有 base 参数的
contr.treatments
函数,用于选择要作为基线的级别。

例如:

lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )

33
投票

relevel()
命令是您问题的简写方法。它所做的是对因子重新排序,以便无论参考级别是什么,都排在第一位。因此,重新排序你的因子水平也会有同样的效果,但会给你更多的控制权。也许您想拥有 3、4、0、1、2 级。那样的话……

bFactor <- factor(b, levels = c(3,4,0,1,2))

我更喜欢这种方法,因为在我的代码中不仅可以更容易地看到引用是什么,还可以更容易地看到其他值的位置(而不必为此查看结果)。

注意:请勿将其设为有序因子。具有指定顺序的因子和有序因子不是一回事。

lm()
如果你这样做,可能会开始认为你想要多项式对比。


12
投票

您还可以使用

contrasts
属性手动标记列,这似乎受到回归函数的尊重:

contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
   base=which(levels(df$factorcol) == 'RefLevel'))

2
投票

对于那些正在寻找 dplyr/tidyverse 版本的人。基于 Gavin Simpson 解决方案:

# Create DF
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
                 y = 4 + (1.5*x) + rnorm(100, sd = 2),
                 b = gl(5, 20))

# Change reference level
DF = DF %>% mutate(b = relevel(b, 3))

m2 <- lm(y ~ x + b, data = DF)
summary(m2)
© www.soinside.com 2019 - 2024. All rights reserved.