La disuguaglianza del triangolo sul tuo produrrebbe:
d1
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)|
Sembra una disuguaglianza abbastanza facile da sconfiggere. Possiamo rendere il lato destro il più piccolo possibile (esattamente uno) rendendo e indipendenti. Quindi possiamo trovare una per la quale il lato sinistro supera uno?XZY
Se e e hanno varianza identica, allora e similmente per , quindi la parte sinistra è ben al di sopra di una e la disuguaglianza è violata. Esempio di questa violazione in R, dove e sono componenti di una normale multivariata: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
Nota che questa costruzione non funziona con il tuo :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
Piuttosto che lanciare un attacco teorico su , in questa fase ho appena trovato più facile giocare con la matrice di covarianza in R fino a quando non è spuntato un bel controesempio. Consentire , e dà: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
Possiamo anche indagare sulle covarianze:
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
Le correlazioni al quadrato sono quindi:
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
Quindi mentre e quindi la disuguaglianza del triangolo è violata da un margine sostanziale.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