La rimozione dell'intercettazione è un modello diverso, ma ci sono molti esempi in cui è legittimo. Finora le risposte hanno già discusso in dettaglio l'esempio in cui l'intercettazione vera è 0. Mi concentrerò su alcuni esempi in cui potremmo essere interessati a una parametrizzazione del modello atipico.
Esempio 1: il modello in stile ANOVA. Per le variabili categoriali, in genere creiamo vettori binari che codificano l'appartenenza al gruppo. Il modello di regressione standard è parametrizzato come intercettore + k - 1 vettori fittizi. L'intercettazione codifica il valore atteso per il gruppo "riferimento", o il vettore omesso, e i vettori rimanenti verificano la differenza tra ciascun gruppo e il riferimento. Ma in alcuni casi, può essere utile avere il valore atteso di ciascun gruppo.
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
Esempio 2: il caso di dati standardizzati. In alcuni casi, si potrebbe lavorare con dati standardizzati. In questo caso, l'intercetta è 0 in base alla progettazione. Penso che un classico esempio di questo sia stato il modello o il fattore di equazione strutturale vecchio stile, che ha operato solo sulle matrici di covarianza dei dati. Nel caso seguente, è probabilmente una buona idea stimare l'intercettazione comunque, anche solo per eliminare il grado aggiuntivo di libertà (che avresti davvero perso comunque perché la media è stata stimata), ma ci sono una manciata di situazioni in cui costruzione, i mezzi possono essere 0 (ad esempio, alcuni esperimenti in cui i partecipanti assegnano voti, ma sono costretti a dare uguali positivi e negativi).
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
Esempio 3: Modelli multivariati e intercettazioni nascoste. Questo esempio è simile al primo in molti modi. In questo caso, i dati sono stati impilati in modo che due diverse variabili siano ora in un vettore lungo. Una seconda variabile codifica le informazioni sul fatto che il vettore di risposta y
appartenga mpg
o disp
. In questo caso, per ottenere le intercettazioni separate per ciascun risultato, è necessario sopprimere l'intercettazione generale e includere entrambi i vettori fittizi per la misurazione. Questa è una sorta di analisi multivariata. In genere non si esegue utilizzandolm()
perché hai ripetute misure e probabilmente dovresti consentire la non indipendenza. Tuttavia, ci sono alcuni casi interessanti in cui ciò è necessario. Ad esempio, quando si tenta di eseguire un'analisi di mediazione con effetti casuali, per ottenere la matrice di covarianza della varianza completa, è necessario stimare entrambi i modelli contemporaneamente, cosa che può essere fatta impilando i dati e un uso intelligente dei vettori fittizi.
## 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
Non sto sostenendo che le intercettazioni dovrebbero essere generalmente rimosse, ma è bene essere flessibili.