Che cosè la matrice Hat e le leve nella regressione multipla classica? Quali sono i loro ruoli? E perché li usi?
Spiegali o fornisci riferimenti soddisfacenti a libri / articoli per comprenderli.
Commenti
- Ci sono molti post su questo sito che parlano di leva. Potresti iniziare sfogliando alcuni di essi: stats.stackexchange.com/search?q=leverage+
Risposta
La matrice cappello, $ \ bf H $ , è la matrice di proiezione che esprime i valori di le osservazioni nella variabile indipendente, $ \ bf y $ , in termini di combinazioni lineari dei vettori colonna della matrice del modello, $ \ bf X $ , che contiene le osservazioni per ciascuna delle molteplici variabili su cui stai regredendo.
Naturalmente, $ \ bf y $ in genere non si trova nello spazio della colonna di $ \ bf X $ e ci sarà una differenza tra questa proiezione, $ \ bf \ hat Y $ e i valori effettivi di $ \ bf Y $ . Questa differenza è il residuo o $ \ bf \ varepsilon = YX \ beta $ :
I coefficienti stimati, $ \ bf \ hat \ beta_i $ sono geometricamente intesi come la combinazione lineare dei vettori colonna (osservazioni sulle variabili $ \ bf x_i $ ) necessarie per produrre il vettore proiettato $ \ bf \ hat Y $ . Abbiamo che $ \ bf H \, Y = \ hat Y $ ; da qui il mnemonico, " la H mette il cappello sulla y. "
La matrice del cappello è calcolata come : $ \ bf H = X (X ^ TX) ^ {- 1} X ^ T $ .
E la stima $ \ bf \ hat \ beta_i $ verranno naturalmente calcolati come $ \ bf (X ^ TX) ^ {- 1} X ^ T $ .
Ogni punto del set di dati cerca di tirare verso se stesso la linea ordinaria dei minimi quadrati (OLS). Tuttavia, i punti più lontani allestremo dei valori del regressore avranno più effetto leva. Ecco un esempio di un punto estremamente asintotico (in rosso) che allontana davvero la linea di regressione da quello che sarebbe un adattamento più logico:
Allora, qual è la connessione tra questi due concetti: il punteggio di leva di una determinata riga o losservazione nel dataset si troverà nella voce corrispondente nella diagonale della matrice del cappello. Quindi per losservazione $ i $ il punteggio della leva si troverà in $ \ bf H_ {ii} $ . Questa voce nella matrice dei cappelli avrà uninfluenza diretta sul modo in cui la voce $ y_i $ risulterà in $ \ hat y_i $ (effetto leva elevato dellosservazione $ i \ text {-th} $ $ y_i $ nel determinare il proprio valore di previsione $ \ hat y_i $ ):
Poiché la matrice cappello è una matrice di proiezione, i suoi autovalori sono $ 0 $ e $ 1 $ . Ne consegue quindi che la traccia (somma di elementi diagonali – in questo caso somma di $ 1 $ “s) sarà il rango dello spazio della colonna, mentre ci sarà tanti zeri quante sono le dimensioni dello spazio nullo. Pertanto, i valori nella diagonale della matrice del cappello saranno inferiori a uno (trace = sum autovalori) e una voce sarà considerata con una leva elevata se $ > 2 \ sum_ {i = 1} ^ {n} h_ {ii} / n $ con $ n $ come numero di righe.
Leffetto leva di un punto dati anomalo nella matrice del modello può anche essere calcolato manualmente come uno meno il rapporto del residuo per il valore anomalo quando il valore anomalo effettivo è incluso nel modello OLS rispetto al residuo per lo stesso punto quando la curva adattata viene calcolata senza includere la riga corrispondente al valore anomalo: $$ Leverage = 1- \ frac {\ text {residual OLS with outlier}} {\ text {residual OLS without outlier}} $$ In R la funzione hatvalues()
restituisce questi valori per ogni punto.
Utilizzando il primo punto dati in il set di dati {mtcars}
in R:
fit = lm(mpg ~ wt, mtcars) # OLS including all points X = model.matrix(fit) # X model matrix hat_matrix = X%*%(solve(t(X)%*%X)%*%t(X)) # Hat matrix diag(hat_matrix)[1] # First diagonal point in Hat matrix fitwithout1 = lm(mpg ~ wt, mtcars[-1,]) # OLS excluding first data point. new = data.frame(wt=mtcars[1,"wt"]) # Predicting y hat in this OLS w/o first point. y_hat_without = predict(fitwithout1, newdata=new) # ... here it is. residuals(fit)[1] # The residual when OLS includes data point. lev = 1 - (residuals(fit)[1]/(mtcars[1,"mpg"] - y_hat_without)) # Leverage all.equal(diag(hat_matrix)[1],lev) #TRUE