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 yappartenga mpgo 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.