일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 고구려
- 한서지리지
- 히스토그램
- 낙랑군
- repeated measures ANOVA
- 우분투
- 단군
- 태그를 입력해 주세요.
- 기자
- R
- 독사방여기요
- spss
- 유주
- categorical variable
- post hoc test
- 패수
- 통계
- 통계학
- 기자조선
- ANOVA
- linear regression
- 신라
- 풍백
- 후한서
- 선형회귀분석
- Histogram
- 창평
- 한서
- 지리지
- t test
- Today
- Total
獨斷論
통계기초 정리 8. 상관관계 본문
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.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
예제)
하루판매하는 커피량과 최대온도와의 상관관계를 구하여보자.
데이터
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개 이상의 변수를 가지고 상관관계를 구하여 만들 행렬을 말한다.
데이터
> 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)
대각선상에 각 변수의 히스토그램이 그려져있고
대각선 오른쪽으로는 상관관계가 계산되었다.
대각선 왼쪽으로는 각 데이터가 그려져있다.