두 변수의 상관계수와 유클리드 거리
Correlation coefficient and Euclidean distance
이산확률변수 \(X\) , \(Y\) 를 가정하다. 이때 \(X=x_i\), \(Y=y_i\) 의 확률은 모두 \(1/n\) 으로 균일하다고 가정해보자.
그리고 이산확률변수 \(X\) 와 \(Y\) 를 모두 평균 \(0\), 분산 \(1\) 로 표준화하여, 새로운 확률 변수 \(X^*\) 와 \(Y^*\) 을 만들자.
\[X^* = \frac{X-\mu_X}{\sigma_X}\]
\[x_i^* = \frac{x_i-\sum_i x_i /n}{\sum_i (x_i-\sum_i x_i)^2 /n}\]
확률변수 \(Y\) 도 마찬가지로 표준화할 수 있다. 이때 확률변수 \(X^*\) 와 \(Y^*\) 의 상관계수는 다음과 같다.
\[\text{r}(X,Y) = \textrm{r}(X^*,Y^*) = \frac{\sum_i x_i^* y_i^*}{n}\]
모든 \(x_i^*\) 을 모두 하나의 벡터로 나타내면, \(\vec{x}^* = (x_1^*, x_2^*, \cdots, x_n^*)\) 가 된다.
두 벡터 \(\vec{x}^*\) 와 \(\vec{y}^*\) 의 유클리드 거리는 다음과 같다.
\[\textrm{d}(\vec{x}^*, \vec{y}^*) = \sqrt{(x_1^*-y_1^*)^2 + ( x_2^*-y_2^*)^2 + \cdots + (x_n^*-y_n^*)^2}\]
좀 더 간단히 쓰면,
\[\textrm{d}(\vec{x}^*, \vec{y}^*)^2 = \sum_i(x_i^*-y_i^*)^2 = \sum_i({(x_i^*)}^2 – 2x_i^*y_i^*+{(y_i^*)}^2)\]
여기서 \(x_i^*\) 과 \(y_i^*\) 는 모두 평균 0, 분산 1로 표준화되었기 때문에, \(\sum_i x_i=0\) 그리고 \(\sum_i {(x_i^*)}^2=1\) 이다. 이를 적용해서 정리하면,
\[\textrm{d}(\vec{x}^*, \vec{y}^*)^2 = \sum_i({(x_i^*)}^2 – 2x_i^* y_i^* + {(y_i^*)}^2) = 2 – 2 \sum_i(x_i^* y_i^*)\]
이제 앞에서 구했던 상관계수 식 \(\textrm{r}(X^*,Y^*) = \frac{\sum_i x_i^* y_i^*}{n}\) 과 \(\textrm{d}(\vec{x}^*, \vec{y}^*)^2 = 2 – 2 \sum_i(x_i^* y_i^*)\) 을 공통 부분 \(\sum_i x_i^* y_i^*\) 을 통해 합쳐보면,
\[\textrm{d}(\vec{x}^*, \vec{y}^*)^2 = 2 – 2 n \textrm{r}(X^*,Y^*) = 2(1-n \cdot \textrm{r}(X^*,Y^*)).\]
또는 다음의 식을 얻는다.
\[\textrm{r}(X^*,Y^*) = 1-\frac{\textrm{d}(\vec{x}^*, \vec{y}^*)^2}{2n}.\]
R에서 확인
상관계수와 두 변수의 유클리드 거리의 관계를 R에서 확인해보자.[1]
[1]: 이때 유클리드 거리는 단순히 두 점에서의 거리가 아니라 두 확률변수에서 정의된 거리임을 유의하자. 앞의 예에서 \((x,y)\) 가 \(n\) 개일 때, \(n\) – 차원 공간 상에서 두 점 \((x_1, x_2, \cdots, x_n)\) 과 \((y_1, y_2, \cdots, y_n)\) 의 거리이다.
library(dplyr)
# sampling x, y
N <- 100
x <- runif(N, min=-3, max=2)
y <- 1*x + rnorm(N, mean=1, sd=1.4)
plot(y ~ x)
# scale x, y to x2, y2
x2 <- scale(x)
y2 <- scale(y)
# correlation
cor(x,y)
## [1] 0.5890677
# Euclidean distance between scaled x, y
d2 = sum((x2-y2)^2)
1-d2/(2*N)
## [1] 0.5931771
두 값에 약간 차이가 나지만, 비슷하다. 만약 N
을 1000
, 10000
으로 늘리면, 그 차이가 더욱 줄어든다.
이 차이는 scale
함수가 주어진 변수를 평균으로 빼고, 표준편차로 나눌 때, 표본표준편차를 쓰기 때문이다.
만약 주어진 데이터를 모집단으로 생각하고 모표준편차( \(n-1\) 대신 \(n\) )을 사용하면 다음과 같이 두 값이 같다.
x3 <- (x-mean(x)) / sqrt(sum(((x-mean(x))/sqrt(N))^2))
# scale uses N-1 instead of N
y3 <- (y-mean(y)) / sqrt(sum(((y-mean(y))/sqrt(N))^2))
# correlation
cor(x,y)
## [1] 0.5890677
# Euclidean distance between scaled x, y
d2 = sum((x3-y3)^2)
1-d2/(2*N)
## [1] 0.5890677
연속 변수로의 확장
만약 두 두 확률 변수의 거리를 다음과 같이 정의한다면,
\[\textrm{d}(X^*, Y^*) = \sqrt{\int_{x^*} \int_{y^*} |x^*-y^*|^2 f_{X^*, Y^*}(x^*, y^*) d{x^*}d{y^*}}\]
다음의 식을 성립할 것이다.
\[\textrm{r}(X^*,Y^*) = 1-\frac{\textrm{d}(X^*, Y^*)^2}{2}.\]
연속확률의 근사로 임의의 이산확률분포를 생성한 후 위의 등식이 성립하는지 확인해 보자.
x <- 1:100
y <- 1:100
df = expand.grid(x=x,y=y)
df$prob = rpois(25, 3)
df <- df %>% mutate(prob = ifelse(x>y, 0, prob))
# random variable x, y has clear relationship
df$prob = df$prob / sum(df$prob)
mx <- sum(df$x * df$prob)
my <- sum(df$y * df$prob)
varx <- sum((df$x - mx)^2 * df$prob)
vary <- sum((df$y - my)^2 * df$prob)
df <- df %>% mutate(x2 = (x-mx)/sqrt(varx),
y2 = (y-my)/sqrt(vary))
# Check if appropriately standardized
#sum(df$x2*df$prob)
#sum(df$x2^2*df$prob)
#sum(df$y2*df$prob)
#sum(df$y2^2*df$prob)
df <- df %>% mutate(d=(x2-y2)^2*prob)
d2 = sum(df$d)
sum(df$x2 * df$y2 * df$prob)
## [1] 0.5001581
1-d2/2
## [1] 0.5001581
Leave a comment