R и коэффициент кодирования в формуле - PullRequest
0 голосов
/ 08 марта 2012

Как использовать интерфейс формул, если я хочу использовать фиктивные макеты, например, если мне нужны значения 1 и два, а не 0 и 1. Оценка может выглядеть следующим образом, где supp - фактор-переменная.

fit <- lm(len ~ dose + supp, data = ToothGrowth)

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

РЕДАКТИРОВАТЬ: На самом деле, у меня естьнапример, 3 уровня, и нужно, чтобы два столбца кодировались по-разному, поэтому один - переменная 1/0, а другой - переменная 1/2.Приведенный выше пример имеет только два уровня.

1 Ответ

5 голосов
/ 08 марта 2012

Вы можете установить контрасты так, как вам нравится, создав матрицу, которую вы хотите использовать, и установив для нее либо contrasts аргумент lm, либо установив контраст по умолчанию самого фактора.

Некоторые примеры данных:

set.seed(6)
d <- data.frame(g=gl(3,5,labels=letters[1:3]), x=round(rnorm(15,50,20)))

Контрасты, которые вы имеете в виду:

mycontrasts <- matrix(c(0,0,1,0,1,1), byrow=TRUE, nrow=3)
colnames(mycontrasts) <- c("12","23")
mycontrasts
#     12 23
#[1,]  0  0
#[2,]  1  0
#[3,]  1  1

Затем вы используете это в lm вызове:

> lm(x ~ g, data=d, contrasts=list(g=mycontrasts))

Call:
lm(formula = x ~ g, data = d, contrasts = list(g = mycontrasts))

Coefficients:
(Intercept)          g12          g23  
       58.8        -13.6          5.8  

Мы можем проверить, что это правильно, сравнив средства:

> diff(tapply(d$x, d$g, mean))
    b     c 
-13.6   5.8 

Контраст по умолчанию - использовать первый уровень в качестве базовой линии:

> lm(x ~ g, data=d)

Call:
lm(formula = x ~ g, data = d)

Coefficients:
(Intercept)           gb           gc  
       58.8        -13.6         -7.8  

Но это можно изменить с помощью команды contrasts:

> contrasts(d$g) <- mycontrasts
> lm(x ~ g, data=d)

Call:
lm(formula = x ~ g, data = d)

Coefficients:
(Intercept)          g12          g23  
       58.8        -13.6          5.8  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...