Nierówność trójkąta na d1 przyniósłby:
d1(X,Z)1−|Cor(X,Z)|⟹|Cor(X,Y)|+|Cor(Y,Z)|≤d1(X,Y)+d1(Y,Z)≤1−|Cor(X,Y)|+1−|Cor(Y,Z)|≤1+|Cor(X,Z)|
Wydaje się to dość łatwą nierównością do pokonania. Możemy uczynić prawą stronę tak małą, jak to możliwe (dokładnie jedną), czyniąc X i Z niezależnymi. Czy możemy zatem znaleźć Y dla którego lewa strona przekracza jedno?
Jeśli oraz i mają identyczną wariancję, to i podobnie dla , więc lewa strona znajduje się znacznie powyżej jednego, a nierówność zostaje naruszona. Przykład tego naruszenia w R, gdzie i są składnikami normalnej zmiennej na wielu odmianach:Y=X+ZXZCor(X,Y)=2√2≈0.707Cor(Y,Z)XZ
library(MASS)
set.seed(123)
d1 <- function(a,b) {1 - abs(cor(a,b))}
Sigma <- matrix(c(1,0,0,1), nrow=2) # covariance matrix of X and Z
matrixXZ <- mvrnorm(n=1e3, mu=c(0,0), Sigma=Sigma, empirical=TRUE)
X <- matrixXZ[,1] # mean 0, variance 1
Z <- matrixXZ[,2] # mean 0, variance 1
cor(X,Z) # nearly zero
Y <- X + Z
d1(X,Y)
# 0.2928932
d1(Y,Z)
# 0.2928932
d1(X,Z)
# 1
d1(X,Z) <= d1(X,Y) + d1(Y,Z)
# FALSE
Pamiętaj jednak, że ta konstrukcja nie działa z twoim :d2
d2 <- function(a,b) {1 - cor(a,b)^2}
d2(X,Y)
# 0.5
d2(Y,Z)
# 0.5
d2(X,Z)
# 1
d2(X,Z) <= d2(X,Y) + d2(Y,Z)
# TRUE
Zamiast przeprowadzić teoretyczny atak na , na tym etapie po prostu łatwiej mi było bawić się macierzą kowariancji w R, dopóki nie pojawiła się ładna kontrprzykład. Dopuszczenie , i daje:d2Sigma
Var(X)=2Var(Z)=1Cov(X,Z)=1
Var(Y)=Var(X+Y)=Var(X)+Var(Z)+2Cov(X,Z)=2+1+2=5
Możemy również zbadać kowariancje:
Cov(X,Y)=Cov(X,X+Z)=Cov(X,X)+Cov(X,Z)=2+1=3
Cov(Y,Z)=Cov(X+Z,Z)=Cov(X,Z)+Cov(Z,Z)=1+1=2
Kwadratowe korelacje to:
Cor(X,Z)2=Cov(X,Z)2Var(X)Var(Z)=122×1=0.5
Cor(X,Y)2=Cov(X,Y)2Var(X)Var(Y)=322×5=0.9
Cor(Y,Z)2=Cov(Y,Z)2Var(Y)Var(Z)=225×1=0.8
Wtedy podczas gdy i więc nierówność trójkąta jest naruszona przez znaczny margines.d2(X,Z)=0.5d2(X,Y)=0.1d2(Y,Z)=0.2
Sigma <- matrix(c(2,1,1,1), nrow=2) # covariance matrix of X and Z
matrixXZ <- mvrnorm(n=1e3, mu=c(0,0), Sigma=Sigma, empirical=TRUE)
X <- matrixXZ[,1] # mean 0, variance 2
Z <- matrixXZ[,2] # mean 0, variance 1
cor(X,Z) # 0.707
Y <- X + Z
d2 <- function(a,b) {1 - cor(a,b)^2}
d2(X,Y)
# 0.1
d2(Y,Z)
# 0.2
d2(X,Z)
# 0.5
d2(X,Z) <= d2(X,Y) + d2(Y,Z)
# FALSE