Mój opis odległości Mahalanobis od dołu do góry wyjaśnienie odległości Mahalanobis? zawiera dwa kluczowe wyniki:
Z definicji nie zmienia się, gdy regresory są równomiernie przesuwane.
Kwadratowa odległość Mahalanobisa między wektorami x i y jest dana przez re2)( x , y) = ( x - y)′Σ- 1( x - y)
gdzie Σ jest kowariancją danych.
(1) pozwala założyć, że wszystkie regresory są zerowe. Pozostaje obliczyć hja . Jednak, aby twierdzenie było prawdziwe, musimy dodać jeszcze jedno założenie:
Model musi zawierać punkt przecięcia.
Pozwalając na to, niech będzie k ≥ 0 regresory i n danych, pisanie wartość REGRESSOR jot do obserwacji ja jako xI j . Niech wektor kolumna z tych n wartości dla REGRESSOR jot być napisany x, j , a wektor rzędu tych k wartości dla obserwacji ja być napisane xja . Zatem macierz modelu jest
X=⎛⎝⎜⎜⎜⎜11⋮1x11x21⋮xn1⋯⋯⋮⋯x1kx2k⋮xnk⎞⎠⎟⎟⎟⎟
a z definicji macierz kapelusza jest
H=X(X′X)−1X′,
skąd wpis i wzdłuż przekątnej jest
hja= godzja ja= ( 1 ; xja) ( X′X)- 1( 1 ; xja)′.(1)
Nie ma nic innego, jak wypracować odwrotną macierz centralną - ale dzięki pierwszemu kluczowemu wynikowi jest to łatwe, szczególnie, gdy piszemy to w postaci macierzy blokowej:
X′X= n ( 100′do)
gdzie 0 =(0,0,…,0 )′ i
doj k= 1n∑i = 1nxI jxja k= n - 1nCov( xjot, xk) = n - 1nΣj k.
(Napisałem Σ dla przykładowej macierzy kowariancji regresorów.) Ponieważ jest to przekątna bloku, jej odwrotność można znaleźć po prostu odwracając bloki:
( X′X)- 1= 1n( 100′do- 1) = ( 1n00′1n - 1Σ- 1) .
Z definicji ( 1 ) otrzymujemy
hja= ( 1 ; xja) ( 1n00′1n - 1Σ- 1) (1; xja)′= 1n+ 1n - 1xjaΣ- 1x′ja= 1n+ 1n - 1re2)( xja, 0 ) .
Rozwiązanie dla kwadratowej długości Mahalanobisa re2)ja= D.2)( xja, 0 ) daje
re2)ja= ( n - 1 ) ( godzja- 1n) ,
QED .
Patrząc wstecz, możemy prześledzić addytywny termin 1 / nXn - 1n - 1n
ja
Kod R, aby pokazać, że relacja rzeczywiście zawiera:
x <- mtcars
# Compute Mahalanobis distances
h <- hat(x, intercept = TRUE); names(h) <- rownames(mtcars)
M <- mahalanobis(x, colMeans(x), cov(x))
# Compute D^2 of the question
n <- nrow(x); D2 <- (n-1)*(h - 1/n)
# Compare.
all.equal(M, D2) # TRUE
print(signif(cbind(M, D2), 3))