Вы используете contr.sum
, где все уровни сравниваются с последним уровнем, и с добавленным ограничением, что все коэффициенты (кроме перехвата) суммируются до нуля.
Вы можете проверить это внутри mpg_glm :
mpg_glm = glm(hwy ~ trans, data = mpg, contrasts = list(trans = contr.sum))
mpg_glm$contrasts
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
auto(av) 1 0 0 0 0 0 0 0
auto(l3) 0 1 0 0 0 0 0 0
auto(l4) 0 0 1 0 0 0 0 0
auto(l5) 0 0 0 1 0 0 0 0
auto(l6) 0 0 0 0 1 0 0 0
auto(s4) 0 0 0 0 0 1 0 0
auto(s5) 0 0 0 0 0 0 1 0
auto(s6) 0 0 0 0 0 0 0 1
manual(m5) 0 0 0 0 0 0 0 0
manual(m6) -1 -1 -1 -1 -1 -1 -1 -1
[,9]
auto(av) 0
auto(l3) 0
auto(l4) 0
auto(l5) 0
auto(l6) 0
auto(s4) 0
auto(s5) 0
auto(s6) 0
manual(m5) 1
manual(m6) -1
У вас есть 9 столбцов, которые являются 9 коэффициентами без перехвата в вашей модели. Они являются более или менее средством каждого уровня минус последний уровень из-за ограничения суммирования до нуля. Последний уровень избыточен и здесь не показан:
var_means = with(mpg,tapply(hwy,trans,mean))
cbind(delta_mean = var_means[-length(var_means)]-var_means[length(var_means)],
coef = coef(mpg_glm)[-1])
delta_mean coef
auto(av) 3.5894737 3.3827066
auto(l3) 2.7894737 2.5827066
auto(l4) -2.2466709 -2.4534380
auto(l5) -3.4925776 -3.6993447
auto(l6) -4.2105263 -4.4172934
auto(s4) 1.4561404 1.2493733
auto(s5) 1.1228070 0.9160399
auto(s6) 0.9769737 0.7702066
manual(m5) 2.0825771 1.8758101
Следовательно, когда вы изменяете первый уровень, вы меняете только порядок, в котором они появляются, но значения не меняются. Вы можете легко проверить контраст:
mpg$trans <- relevel(mpg$trans, ref="auto(l3)")
new_glm = glm(hwy ~ trans, data = mpg, contrasts = list(trans = contr.sum))
new_glm$contrasts
$trans
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
auto(l3) 1 0 0 0 0 0 0 0
auto(av) 0 1 0 0 0 0 0 0
auto(l4) 0 0 1 0 0 0 0 0
auto(l5) 0 0 0 1 0 0 0 0
auto(l6) 0 0 0 0 1 0 0 0
auto(s4) 0 0 0 0 0 1 0 0
auto(s5) 0 0 0 0 0 0 1 0
auto(s6) 0 0 0 0 0 0 0 1
manual(m5) 0 0 0 0 0 0 0 0
manual(m6) -1 -1 -1 -1 -1 -1 -1 -1
[,9]
auto(l3) 0
auto(av) 0
auto(l4) 0
auto(l5) 0
auto(l6) 0
auto(s4) 0
auto(s5) 0
auto(s6) 0
manual(m5) 1
manual(m6) -1
Для того, что вы описываете, как изменение ссылки и наличие других уровней относительно этой ссылки, это должно быть contr.treatment
.