獨斷論

통계기초 정리 8. 상관관계 본문

과학과 기술/통계이론설명

통계기초 정리 8. 상관관계

부르칸 2021. 10. 5. 03:21

Pearson's correlation

모집단의 상관관계는 $rho$로 나타내고 샘플의 상관관계는 $r$로 나타낸다. 두 샘플 x와 y에 대한 상관관계를 구하려면

$$ r = \frac {1} {n-1} \sum \left( \frac {x - \bar{x}} {s_x}\right) \left( \frac{y - \bar{y}} {s_y} \right)$$

여기서 $s_x$는 샘플 x의 표준편차이고 $s_y$는 샘플 y의 표준편차이다. $\bar{x}$는 샘플 x의 평균이다.

 

이제 두 샘플의 상관관계를 구해보자

데이터

Exam.csv
0.00MB

exam.df = read.csv("d:/tmp/exam.csv", header = TRUE)
x = exam.df$Quiz_Average
y = exam.df$Final
mean_x = mean(x)
mean_y = mean(y)
sd_x = sd(x)
sd_y = sd(y)
n = length(x)
r = sum((x - mean_x) / sd_x * (y - mean_y) / sd_y)
r = r / (n-1)
print(r)

상관관계값은 약 0.609가 나온다. R에서 제공하는 cor( )를 이용할수도 있다.

> cor(x,y)
[1] 0.6086302

 

Pearson의 상관관계 성질

  • $-1 \le r \le 1$
  • r이 양수면 양의 상관관계, 음이면 음의 상관관계, 선형상관관계가 없으면 0
절대값		관계정도
0 - 0.2 	Very weak
0.2 - 0.4 	Weak
0.4 - 0.6 	Moderate
0.6 - 0.8 	Strong
0.8 - 1.0 	Very strong

상관관계 가설검증

test statistic

$$t = \frac {r - \rho_0} {\sqrt {\frac { 1-r^2 } {n-2  }}}$$

자유도가 $n-2$인 t-test이다.

> t = (r) / (sqrt((1 - r^2) / (n-2)))
> t
[1] 5.314377
> pt(t, n-2, lower.tail=FALSE)*2      
                 # two-tailed test이므로 2를 곱하였다
[1] 2.741767e-06

pvalue가 2.7e-6이므로 H0인 $\rho_0 = 0$을 기각한다.

 

R에서 제공하는 cor.test( )를 이용할수도 있다.

> cor.test(x, y)

	Pearson's product-moment correlation

data:  x and y
t = 5.3144, df = 48, p-value = 2.742e-06
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3976484 0.7584827
sample estimates:
      cor 
0.6086302

 

예제)

하루판매하는 커피량과 최대온도와의 상관관계를 구하여보자.

데이터

cafedata.csv
0.00MB

cafedat.df = read.csv("cafedata.csv", header = TRUE)
x = cafedat.df$MaxDaily.Temperature_F
y = cafedat.df$Coffees
cor.test(x, y)

실행결과는 다음과 같다.

> cor.test(x, y)

	Pearson's product-moment correlation

data:  x and y
t = -7.4091, df = 45, p-value = 2.53e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.8479578 -0.5769561
sample estimates:
      cor 
-0.741302

p-value = 2.53e-9 < 0.05 이므로 $H_0 : \rho_0$를 기각한다. 따라서 커피판매량과 커피의 최대온도는 서로 상관관계가 있다는 충분한 증거를 가지고 있다.

 

상관행렬(Correlation matrix)

2개 이상의 변수를 가지고 상관관계를 구하여 만들 행렬을 말한다.

데이터

StudentSurvey.csv
0.02MB

> stdsvy.df = read.csv("d:/tmp/StudentSurvey.csv", header = TRUE)

> names(stdsvy.df)
 [1] "Year"       "Gender"     "Smoke"      "Award"     
 [5] "HigherSAT"  "Exercise"   "TV"         "Height"    
 [9] "Weight"     "Siblings"   "BirthOrder" "VerbalSAT" 
[13] "MathSAT"    "SAT"        "GPA"        "Pulse"     
[17] "Piercings" 

> stdsvy2.df = stdsvy.df[c("Height", "Weight", "Pulse", "Exercise")]

> cor(stdsvy2.df, use = "complete.obs")
              Height     Weight       Pulse   Exercise
Height    1.00000000  0.6185323 -0.08786395  0.1118683
Weight    0.61853226  1.0000000 -0.11863900  0.1157465
Pulse    -0.08786395 -0.1186390  1.00000000 -0.1700925
Exercise  0.11186830  0.1157465 -0.17009248  1.0000000

use="complete.obs"는 결측값이 있는 observation은 모두 지우고 상관행렬을 구하라는 명령이다.

 

상관행렬을 그래프로 그리면 좀더 한눈에 알아볼수가 있다. 여기서는 PerformanceAnalytics라는 패키지를 사용한다. 우선 이 패키지를 설치하고

install.packages("PerformanceAnalytics")

패키지를 불러들인후 상관행렬을 그래프로 나타내면

library("PerformanceAnalytics")
chart.Correlation(stdsvy2.df, histogram=TRUE, pch=19)

대각선상에 각 변수의 히스토그램이 그려져있고

대각선 오른쪽으로는 상관관계가 계산되었다.

대각선 왼쪽으로는 각 데이터가 그려져있다.

 

Comments