Как заставить R использовать указанный уровень фактора в качестве ссылки в регрессии?


Как я могу сказать R использовать определенный уровень в качестве ссылки, если я использую двоичные независимые переменные в регрессии?

Это просто использование некоторого уровня по умолчанию.

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

С b {0, 1, 2, 3, 4}. Допустим, я хочу использовать 3 вместо нуля, который используется R.

5 81

5 ответов:

посмотреть . Вот пример:

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 С помощью :

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

другие упомянули команду relevel, которая является лучшим решением, если вы хотите изменить базовый уровень для всех анализов ваших данных (или готовы жить с изменением данных).

Если вы не хотите изменять данные (это однократное изменение, но в будущем вы снова хотите использовать поведение по умолчанию), то вы можете использовать комбинацию функции C (примечание в верхнем регистре) для установки контрастов и контров.функция обработки с базовым аргументом для выбора уровня вы хотите быть базовой линией. Например:

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

The relevel() команда-это сокращенный метод для вашего вопроса. То, что он делает, - это переупорядочить фактор так, чтобы все, что является уровнем ref, было первым. Таким образом, переупорядочение уровней факторов также будет иметь тот же эффект, но дает вам больше контроля. Возможно, вы хотели иметь уровни 3,4,0,1,2. В таком случае...

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

Я предпочитаю этот метод, потому что мне легче видеть в моем коде не только то, что ссылка была, но и положение других значений (а не глядя на результаты).

примечание: не делайте его упорядоченным фактором. Фактор с заданным порядком и упорядоченный фактор-это не одно и то же. lm() может начать думать, что вы хотите, полиномиальные контрасты если вы сделаете это.

Я знаю, это старый вопрос, но у меня была аналогичная проблема и обнаружил, что:

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

делает именно то, что вы просили.

вы также можете вручную пометить столбец с contrasts атрибут, который, кажется, соблюдается регрессионными функциями:

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