(공지) 본 자료는 유쾌한 R 통계학 Chapter 6장을 요약 정리한 내용입니다.
공분산이 양수라는 것은 한 변수가 평균에서 이탈하면 다른 변수도 같은 방향으로 이탈함을 뜻한다. 반대로 공분산이 음수라는 것은 한 변수가 평균에서 이탈하면 다른 변수는 그와 반대 방향으로 이탈함을 뜻한다. 예를 들면, 한 변수가 평균보다 크면, 다른 변수는 평균보다 작다.
공분산은 측정의 축척에 의존한다는 것이다. 공분산은 표준화된 측도는 아니다. (단위값에 따라 공분산의 값이 달라질 수 있다.)
측정 척도 의존성 문제를 극복하려면 표준단위로 변환해야 하며, 이러한 변환 과정으로 표준화(standardization)이라고 부른다. 표준화 측정 단위로 쓰이는 것이 표준편차이며, 표준화된 공분산으로 상관계수라고 부르며 이러한 상관계수를 계산하는 공식이 피어슨의 상관계수라고 부른다. 이렇게 공분산을 표준화하면 -1에서 +1까지의 값이 된다.
상관계수는 인과관계의 방향을 말해주지는 않는다. - 제 3 변수 문제: 결과에 영향을 미치는 다른 어떤 변수가 있을 수 있으므로 두 변수 사이의 인과관계를 가정할 수 없다.
상관은 두 종류가 있다. - 이변량 상관: 두 변수의 상관관계 + 피어슨, 스피어만, 로켄달의 타우도 이변량 상관계수 - 편상관: 하나 이상의 다른 변수들의 효과를 ’제어’할 때의 두 변수의 상관관계를 말함.
#If you don't have Hmisc installed then use:
# install.packages("Hmisc")
# install.packages("polycor")
# install.packages("ggm")
library(Hmisc)
library(ggplot2)
library(boot)
library(polycor)
library(ggm)
R에서 기본적인 상관계수를 계산할 때 주로 사용하는 함수는 cor()
, cor.test()
, rcorr()
세가지이다.
library(googledrive)
drive_df <- drive_find("Exam Anxiety")
drive_download(file = as_id(drive_df$id[1]), path = "../data/Exam Anxiety.dat", overwrite = TRUE)
examData <- read.delim("../data/Exam Anxiety.dat", header = TRUE)
DT::datatable(examData)
데이터는 위와 같이 구성되어 있다.
examData <- examData[, c("Exam", "Anxiety", "Revise")]
cor(examData, use = "complete.obs", method = "pearson")
## Exam Anxiety Revise
## Exam 1.0000000 -0.4409934 0.3967207
## Anxiety -0.4409934 1.0000000 -0.7092493
## Revise 0.3967207 -0.7092493 1.0000000
cor(examData, use = "pairwise.complete.obs", method = "kendall")
## Exam Anxiety Revise
## Exam 1.0000000 -0.2847919 0.2633259
## Anxiety -0.2847919 1.0000000 -0.4885600
## Revise 0.2633259 -0.4885600 1.0000000
examMatrix <- as.matrix(examData[, c("Exam", "Anxiety", "Revise")])
Hmisc::rcorr(examMatrix)
## Exam Anxiety Revise
## Exam 1.00 -0.44 0.40
## Anxiety -0.44 1.00 -0.71
## Revise 0.40 -0.71 1.00
##
## n= 103
##
##
## P
## Exam Anxiety Revise
## Exam 0 0
## Anxiety 0 0
## Revise 0 0
시험 성적(Exam)과 시험 불안(Anxiety)의 상관을 분석해 보자. 상관계수와 함께 신뢰구간까지 계산해 주는 함수는 cor.test()임
cor.test(examData$Anxiety, examData$Exam)
##
## Pearson's product-moment correlation
##
## data: examData$Anxiety and examData$Exam
## t = -4.938, df = 101, p-value = 3.128e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.5846244 -0.2705591
## sample estimates:
## cor
## -0.4409934
How to interpret?
cor(examData)^2 * 100
## Exam Anxiety Revise
## Exam 100.00000 19.44752 15.73873
## Anxiety 19.44752 100.00000 50.30345
## Revise 15.73873 50.30345 100.00000
상관계수들은 두 변수 중 하나가 이분적 변수일 때, 즉 범주가 단 두 개인 범주형 변수일 때 쓰인다. 이분적 변수의 예(임신여부)
아래와 같은 코드를 실행하여 pbcorr.csv
파일을 다운로드 받는다.
library(googledrive)
drive_df <- drive_find("pbcorr", type = "csv")
drive_download(file = as_id(drive_df$id[1]), path = "../data/pbcorr.csv", overwrite = TRUE)
catData <- read.csv("../data/pbcorr.csv", header = TRUE)
DT::datatable(catData)
변수는 다음 세가지이다. - time은 한 주(week)에서 고양이가 집을 떠나서 보낸 시간으로, 단위는 시(hour)이다. - gender는 고양이의 성별을 나타낸다. 수컷은 1, 암컷은 0으로 부호화한다. - recode는 성별을 반대로 부호화 한 것인데, 일단 무시하자.
이제 피어슨 상관 분석을 해보자.
cor.test(catData$time, catData$gender)
##
## Pearson's product-moment correlation
##
## data: catData$time and catData$gender
## t = 3.1138, df = 58, p-value = 0.002868
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.137769 0.576936
## sample estimates:
## cor
## 0.3784542
어떻게 해석해야 할까? - 우선, 점이연 상관계수(\(r_{pb}\))는 0.378이고, 유의확률은 0.003이다. - 양의 상관 또는 음의 상관은 순전히 gender와 연관이 있다. + 양의 상관이면 gender 1을 따르는 것이고, 음의 상관이면 gender 0을 따르는 것이다. + 그 외의 모든 정보는 그냥 무시해야 한다.
점이연 상관계수는 이해가 되었다. 그런데, 이연상관계수는 무엇인가? 이연상관계수는 두개의 범주 사이에 연속성이 있는 경우다. 구체적으로 예를 들면, 점수의 총합과 합격과 불합격의 점수 구분이다. 합격과 불합격의 점수 구분이 고정된 것이 아니기 때문에, 연속성이 있다고 가정하는 경우다.
이연상관계수(\(r_{b}\))를 구하도록 해보자. 구체적인 계산과정은 교재 295페이지를 확인해보자.
library(polycor)
polyserial(catData$time, catData$gender)
## [1] 0.4749256
동일한 데이터를 기준으로 하는 것은 적절한 예시는 아니다. 그러나, 우선 일부 수고양이가 중성화 수술을 받아서 성별 변수의 연속성이 있다고 가정을 해보자.
다시 코드의 결과값으로 돌아와서 0.4749가 의미하는 것은 점이연 상관변수보다 크다는 뜻이다. 즉, 변수에 연속성이 있느냐 가정하느냐 아니냐에 따라 효과의 크기가 크게 달라지는 것을 볼 수가 있다.
이연 상관계수의 유의성을 판정하려면 표준오차를 구해야 하며, 풀이 과정은 Page 296를 확인하기를 바란다. 이연 상관계수는 p < .01로 유의하다.
개념: 시험 성적 변동 중 시험 불안으로 설명되는 일부는 고유(unique; 또는 유일)하지 않으며, 시험 불안보다는 복습 시간에 의한 것일 수도 있음. 즉, 다른 변수의 효과를 고정한 상태에서 두 변수의 상관을 편상관(partial correlation)이라고 함.
library(ggm)
pc <- pcor(c("Exam", "Anxiety", "Revise"), var(examData))
pc
## [1] -0.2466658
pc^2
## [1] 0.06084403
유의성 판정 위한 pcor.test()
pcor.test(pc, 1, 103)
## $tval
## [1] -2.545307
##
## $df
## [1] 100
##
## $pvalue
## [1] 0.01244581
How to interpret? - Revision 변수의 효과를 제어한 상태 + 시험 불안과 시험 성적의 편상관계수 -.247 (기존 r = -0.441) 크기가 훨씬 작아짐. 즉, 두 변수의 관계를 줄어듬. + 분산의 관점에서 보면, 편상관계수의 \(R^{2}\)은 0.06, 즉 6%만 공유. (시험불안 ~ 시험성적 변동)
이것의 의미는? 1. 시험 성적에 대한 시험 불안이 공유하는 변동이 크게 줄어듬 2. 시험 불안과 복습 시간, 시험 성적 사이에 복잡한 관계가 존재한다는 점 재 인식
제 3의 변수가 두 변수 중 한 변수에만 미치는 효과를 제어한 상태에서 두 변수의 관계를 수량화 함
종종 한 상관계수가 다른 어떤 상관계수보다 큰지 알고 싶을 때가 있음, 예를 들어 시험 성적에 대한 시험 불안의 효과를 파악할 때, 남성의 해당 상관계수와 여성의 상관계수가 다른지 알고 싶음.
이때, 두 상관계수의 차이가 진자 유의한지 평가하려면 어떻게 해야할까?
examData <- read.delim("../data/Exam Anxiety.dat", header = TRUE)
maleExam <- subset(examData, Gender == "Male", select= c("Exam", "Anxiety"))
femaleExam <- subset(examData, Gender == "Female", select= c("Exam", "Anxiety"))
cor(maleExam)
## Exam Anxiety
## Exam 1.0000000 -0.5056874
## Anxiety -0.5056874 1.0000000
cor(femaleExam)
## Exam Anxiety
## Exam 1.0000000 -0.3813845
## Anxiety -0.3813845 1.0000000
examData2 <- examData[, c("Exam", "Anxiety", "Revise")]
pc <- pcor(c("Exam", "Anxiety", "Revise"), var(examData2))
pc
## [1] -0.2466658
pc^2
## [1] 0.06084403
pcor.test(pc, 1, 103)
## $tval
## [1] -2.545307
##
## $df
## [1] 100
##
## $pvalue
## [1] 0.01244581
자가진단 수행결과 - \(r_{남}\) = -.506 - \(r_{여}\) = -.381
두개의 표본은 독립이며 서로 다른 개체들로 이루어져 있음. 위 계수들을 \(z_{r}\)로 변환함.
zdifference(-0.506, -0.381, 52, 51)
## [1] "Z Difference: -0.768709306290097"
## [1] "One-Tailed P-Value: 0.221032949510287"
z값(0.768; 음의 부호는 무시함)을 부록 A의 정규분포표에서 찾아서 ’작은 부분’열의 한쪽 꼬리 확률 .221이며, 양쪽 꼬리 확률은 .442이다. 즉, 남성과 여성의 시험 불안과 시험 성적의 상관이 유의하게 다르지 않다는 결론을 내릴 수 있음.
같은 표본에서 얻은 종속적인 두 상관계수의 차이가 유의한지는 t통계량으로 판단함. 예) 시험 불안(x)과 시험 성적(y)의 관계가 복습 시간(z)과 시험 성적(y)의 관계보다 강한지 알고 싶다고 가정. 3가지 상관계수 구하기 - 시험 불안(x) ~ 시험 성적(y) = \(r_{xy}\) - 복습 시간(z) ~ 시험 성적(y) = \(r_{zy}\) - 시험 불안(x) ~ 복습 시간(y) = \(r_{xz}\)
examData <- examData[, c("Exam", "Anxiety", "Revise")]
cor(examData, use = "complete.obs", method = "pearson")
## Exam Anxiety Revise
## Exam 1.0000000 -0.4409934 0.3967207
## Anxiety -0.4409934 1.0000000 -0.7092493
## Revise 0.3967207 -0.7092493 1.0000000
위 표를 통해 각각의 상관계수는 \(r_{xy}\) = -.441 \(r_{zy}\) = .397 \(r_{xz}\) = -.709
tdifference(-0.441, -0.709, 0.397, 103)
## [1] "t Difference: -5.09576822523987"
## [1] "One-Tailed P-Value: 8.21913727738007e-07"
t 분포 임계값 표에서 자유도가 N-3일 때, 양쪽꼬리 임계값들은 1.98과 2.63이다. 따라서, 시험 불안과 시험 성적의 상관이 복습 시간과 시험 성적의 상관보다 유의하게 높다.
상관계수의 차이가 효과 크기임.
상관분석 보고서 작성 시, Page 306을 참고하자.