Как заставить R использовать указанный уровень фактора в качестве ссылки в регрессии?
Как я могу сказать R использовать определенный уровень в качестве ссылки, если я использую двоичные объясняющие переменные в регрессии?
это просто использование некоторого уровня по умолчанию.
lm(x ~ y + as.factor(b))
С b {0, 1, 2, 3, 4}
. Предположим, я хочу использовать 3 вместо нуля, который используется R.
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 (примечание в верхнем регистре) для установки контрастов и contr.функция treatments с базовым аргументом для выбора уровня ты хочешь быть основой. Например:
lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
на relevel()
command-это метод стенографии вашего вопроса. То, что он делает, - это переупорядочить фактор так, чтобы первым был уровень 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'))