카테고리 없음

[R] 상관분석 cov(), cor(), cor.test()

Chaebae 2023. 5. 18. 20:08

공분산과 상관관계 둘 다 두 변수가 서로 선형적으로 상관관계가 있는지 확인하는 지표로 서로 뗄 수가 없는 사이다.  단, 둘의 차이점으로는, 공분산은 서로의 양, 음의 상관관계를 파악할 수 있지만, 값이 커질수록 상관관계가 커진다고 결론짓기 어려운 반면에, 상관관계는 공분산을 Scaling을 했기 때문에 둘의 상관 정도를 -1과 1사이의 값으로 측정하며, 강도까지 알 수 있게 해주는 지표이다. (앞으로 상관계수라고 언급하는 것은 모두 피어슨 상관계수다.)

 

cov(): covariance matrix

iris 데이터를 이용하여 연속형 변수들의 covariance를 구해보면 다음과 같다.

> cov(iris[,1:4])
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    0.6856935  -0.0424340    1.2743154   0.5162707
Sepal.Width    -0.0424340   0.1899794   -0.3296564  -0.1216394
Petal.Length    1.2743154  -0.3296564    3.1162779   1.2956094
Petal.Width     0.5162707  -0.1216394    1.2956094   0.5810063

Sepal.Length와 Petal.Length는 서로 양의 공분산을 가지므로, 양의 상관관계가 있다고 볼 수 있다.  

Petal.Length와 Petal.Width 또한 서로 양의 공분산을 가진다. 여기서 Diagonal한 값들은, 각 변수의 분산이다.  

 

cor(): Pearson Correlation

Pearson Correlation은 Continuous한 변수들의 상관관계를 측정할 때 사용되며, 공분산에 각 변수의 표준편차를 나누어서 구할 수 있다. 이 때의 상관계수를 피어슨 r이라고 하며, 적률 상관계수라고도 한다.  

 

> cor(iris[,1:4])
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

Sepal.Width와 Sepal.Length는 음의 상관관계를 가지고있고, 그 값이 -0.11로 0과 가깝기 때문에 서로의 선형관계가 강하다고 볼 수 없다. 그에 반해 Petal.Width와 Sepal.Length는 0.81로 강한 양의 상관관계를 가져 꽃잎의 너비가 넓으면 곷받침의 길이가 길다고 결론내릴 수 있다.  

 

Pearson Correlation 말고도 Spearman Correlation도 있다. (보통은 피어슨을 사용하고, 스피어만 상관계수를 쓸 경우 스피어만을 언급한다 :>)

 

cf) Spearman Correlation

스피어만 상관계수는 Ordered한 변수의 상관관계를 측정하는 데에 사용하며. 비선형적인 상관관계도 나다낸다. 

이 때 쓰이는 상관계수는 순위상관계수인 Rho(p)이다.

 

cor.test(x, y, method = ("pearson","spearman") : 상관분석

상관계수가 통계적으로 유의한지 검정할 때는 cor.test 함수를 사용한다. method는 피어슨과 스피어만 중 변수의 특성에 맞춰서 설정해주면 된다. iris 데이터의 경우 등간척도 이상의 연속형 변수기때문에 pearson을 적용해서 상관분석을 해보면 다음과 같다.  

 

> cor.test(iris$Sepal.Length, iris$Petal.Width, method = "pearson")

	Pearson's product-moment correlation

data:  iris$Sepal.Length and iris$Petal.Width
t = 17.296, df = 148, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.7568971 0.8648361
sample estimates:
      cor 
0.8179411

iris의 꽃받침 길이와 꽃잎의 너비 사이의 피어슨 상관계수는 0.818이므로, 꽃받침 길이가 길어질수록 꽃잎의 너비도 넓어진다고 결론내릴 수 있다. 또한 p-value는 유의수준 0.05보다 작으므로 통계적으로 유의하다.  

 

rcorr() : 상관계수와 상관분석 동시진행 (Hmisc package)

rcorr(as.matrix(iris[,1:4]), type = 'pearson')

 

as.matrix(df)를 넣어 데이터프레임을 매트릭스 형태로 변환해서 넣어주어야 오류가 나지 않는다.  

결과는, 위쪽 표가 상관계수, 밑에 표가 p-value이다. Sepal.Length와 Sepal.Width의 p-value는 유의수준보다 크기 때문에 둘의 상관관계는 통계적으로 유의하지 않다. 

 

             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length         1.00       -0.12         0.87        0.82
Sepal.Width         -0.12        1.00        -0.43       -0.37
Petal.Length         0.87       -0.43         1.00        0.96
Petal.Width          0.82       -0.37         0.96        1.00

n= 150 


P
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length              0.1519      0.0000       0.0000     
Sepal.Width  0.1519                   0.0000       0.0000     
Petal.Length 0.0000       0.0000                   0.0000     
Petal.Width  0.0000       0.0000      0.0000