A remoção da interceptação é um modelo diferente, mas há muitos exemplos em que é legítimo. As respostas até agora já discutiram em detalhes o exemplo em que a verdadeira interceptação é 0. Vou focar em alguns exemplos em que podemos estar interessados em uma parametrização atípica do modelo.
Exemplo 1: O modelo no estilo ANOVA. Para variáveis categóricas, normalmente criamos vetores binários que codificam a associação ao grupo. O modelo de regressão padrão é parametrizado como interceptar vetores dummy + k - 1. A interceptação codifica o valor esperado para o grupo "referência", ou o vetor omitido, e os vetores restantes testam a diferença entre cada grupo e a referência. Mas, em alguns casos, pode ser útil ter o valor esperado de cada grupo.
dat <- mtcars
dat$vs <- factor(dat$vs)
## intercept model: vs coefficient becomes difference
lm(mpg ~ vs + hp, data = dat)
Coefficients:
(Intercept) vs1 hp
26.96300 2.57622 -0.05453
## no intercept: two vs coefficients, conditional expectations for both groups
lm(mpg ~ 0 + vs + hp, data = dat)
Coefficients:
vs0 vs1 hp
26.96300 29.53922 -0.05453
Exemplo 2: O caso de dados padronizados. Em alguns casos, pode-se estar trabalhando com dados padronizados. Nesse caso, a interceptação é 0 por design. Penso que um exemplo clássico disso foi o modelo ou fator de equações estruturais de estilo antigo, que operava apenas nas matrizes de covariância dos dados. No caso abaixo, provavelmente é uma boa ideia estimar a interceptação de qualquer maneira, apenas para diminuir o grau adicional de liberdade (que você realmente deveria ter perdido de qualquer maneira porque a média foi estimada), mas há várias situações em que construção, as médias podem ser 0 (por exemplo, certas experiências em que os participantes atribuem classificações, mas são limitadas a fornecer pontos positivos e negativos iguais).
dat <- as.data.frame(scale(mtcars))
## intercept is 0 by design
lm(mpg ~ hp + wt, data = dat)
Coefficients:
(Intercept) hp wt
3.813e-17 -3.615e-01 -6.296e-01
## leaving the intercept out
lm(mpg ~ 0 + hp + wt, data = dat)
Coefficients:
hp wt
-0.3615 -0.6296
Exemplo 3: Modelos multivariados e interceptações ocultas. Este exemplo é semelhante ao primeiro de várias maneiras. Nesse caso, os dados foram empilhados para que duas variáveis diferentes agora estejam em um vetor longo. Uma segunda variável codifica informações sobre se o vetor de resposta,, y
pertence a mpg
ou disp
. Nesse caso, para obter as interceptações separadas para cada resultado, você suprime a interceptação geral e inclui os dois vetores fictícios para a medida. Esta é uma espécie de análise multivariada. Normalmente não é feito usandolm()
porque você repetiu medidas e provavelmente deve permitir a não independência. No entanto, existem alguns casos interessantes em que isso é necessário. Por exemplo, ao tentar fazer uma análise de mediação com efeitos aleatórios, para obter a matriz de covariância de variância completa, você precisa dos dois modelos estimados simultaneamente, o que pode ser feito empilhando os dados e usando de maneira inteligente os vetores fictícios.
## stack data for multivariate analysis
dat <- reshape(mtcars, varying = c(1, 3), v.names = "y",
timevar = "measure", times = c("mpg", "disp"), direction = "long")
dat$measure <- factor(dat$measure)
## two regressions with intercepts only
lm(cbind(mpg, disp) ~ 1, data = mtcars)
Coefficients:
mpg disp
(Intercept) 20.09 230.72
## using the stacked data, measure is difference between outcome means
lm(y ~ measure, data = dat)
Coefficients:
(Intercept) measurempg
230.7 -210.6
## separate 'intercept' for each outcome
lm(y ~ 0 + measure, data = dat)
Coefficients:
measuredisp measurempg
230.72 20.09
Não estou argumentando que as interceptações geralmente devam ser removidas, mas é bom ser flexível.