Предположим, я подгоняю модель в R следующим образом:
model = glm(y ~ x + language, family = binomial, data = data)
language
- факторная переменная;идея заключается в том, что для каждого языка существует разный перехват.
Вот коэффициенты model
:
> coef(model)
(Intercept) x languageen-GB languageen-US languageja languageko
-17.919438297 0.003119914 -0.427067341 -0.613194669 1.406719444 2.402191148
languagezh
0.894899827
Один уровень коэффициента language
(de
) был выбран в качестве базовой линии, а (Intercept)
дает перехватдля этого базового уровня. languageen-GB
и т. Д. Дают перехваты как дельты от базового перехвата.
Этот код
coeffs = coef(model)
intercepts = c("baseline" = 0, tail(coeffs, -2)) + coeffs["(Intercept)"]
names(intercepts) <- levels(data$language)
intercepts
извлекает фактические перехваты для каждого факторного уровня:
de en-GB en-US ja ko zh
-17.91944 -18.34651 -18.53263 -16.51272 -15.51725 -17.02454
Но это ужасный код. Должен быть более хороший способ сделать это с помощью методов модели или функций пакета ...?
Редактировать: одна особенно неприятная часть заключается в том, что tail(coeffs, -2)
сломается, если вы измените формулу. Я полагаю, что здесь можно использовать какой-то поиск по строке.