La suppression de l'interception est un modèle différent, mais il existe de nombreux exemples dans lesquels elle est légitime. Les réponses à ce jour ont déjà traité en détail de l'exemple où l'interception vraie est 0. Je me concentrerai sur quelques exemples dans lesquels nous pourrions être intéressés par une paramétrisation de modèle atypique.
Exemple 1: le modèle de type ANOVA. Pour les variables catégorielles, nous créons généralement des vecteurs binaires codant l'appartenance à un groupe. Le modèle de régression standard est paramétré comme intercept + k - 1 vecteurs factices. L'interception code la valeur attendue pour le groupe "référence" ou le vecteur omis, et les vecteurs restants testent la différence entre chaque groupe et la référence. Mais dans certains cas, il peut être utile de connaître la valeur attendue de chaque groupe.
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
Exemple 2: Le cas des données normalisées. Dans certains cas, on peut travailler avec des données normalisées. Dans ce cas, l'interception est 0 par conception. Je pense qu'un exemple classique de ceci est les modèles ou facteurs à équations structurelles à l'ancienne, qui ne fonctionnaient que sur les matrices de covariance des données. Dans le cas ci-dessous, il est probablement judicieux d’estimer l’interception de toute façon, ne serait-ce que pour laisser tomber le degré de liberté supplémentaire (que vous auriez vraiment dû perdre de toute façon parce que la moyenne a été estimée), mais il existe quelques cas où construction, les moyennes peuvent être 0 (par exemple, certaines expériences où les participants attribuent des cotes, mais sont contraints de donner des nombres positifs et négatifs égaux).
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
Exemple 3: Modèles multivariés et intersections cachées. Cet exemple est similaire au premier à bien des égards. Dans ce cas, les données ont été empilées de sorte que deux variables différentes sont maintenant dans un long vecteur. Une seconde variable code des informations indiquant si le vecteur de réponse y
appartient à mpg
ou disp
. Dans ce cas, pour obtenir les interceptions distinctes pour chaque résultat, vous supprimez l'interception globale et incluez les deux vecteurs factices pour la mesure. C'est une sorte d'analyse multivariée. Ce n'est généralement pas fait aveclm()
parce que vous avez des mesures répétées et devrait probablement permettre la non-indépendance. Cependant, il existe des cas intéressants où cela est nécessaire. Par exemple, lorsque vous essayez d'effectuer une analyse de médiation avec des effets aléatoires, pour obtenir la matrice de covariance de variance complète, vous avez besoin d'estimer les deux modèles simultanément, ce qui peut être effectué en empilant les données et en faisant un usage intelligent des vecteurs factices.
## 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
Je ne dis pas que les interceptions devraient généralement être supprimées, mais il est bon d'être flexible.