티스토리 뷰

INTRO

1. 상관 분석(Correlation Analysis)

   - 피어슨 상관계수(Pearson Correlation Coefficient, PCC)

   - 스피어만 상관계수(Spearman's Rank Correlation Coefficient, SRCC)

2. 다차원 척도법(Multi-Dimensional Scailing, MDS)

3. 주성분 분석(Principal Component Analysis, PCA)

 

1. 상관 분석

- 스피어만 상관계수

피어슨의 상관계수는 두 변수 간의 선형관계의 크기를 측정하는 값으로 비선형적인 상관관계는 나타내지 못한다.

스피어만 상관계수는 두 변수 간의 비선형적인 관계도 나타낼 수 있는 값으로, 한 변수를 단조 증가 함수로 변환하여 다른 변수를 나타낼 수 있는 정도를 나타낸다.

스피어만의 상관계수는 두 변수를 모두 순위로 변환시킨 후 두 순위 사이의 피어슨 상관계수로 정의된다.

 

 

$ 여기서, -1 \leq \theta \leq 1 $
$ r_i는 {x_1,x_2,...,x_n}에서 x_i의 순위 $
$ s_i는 {y_1,y_2,...,y_n}에서 y_i의 순위 $

 

[예제] mtcars 데이터를 이용한 상관분석

dataset

package "Hmisc" mtcars

R console> install.packages("Hmisc")

 

Spearman's Rank Correlation Coefficient 구하기

test_correlation_analysis_SRCC.R
rm(list=ls())

## Ex. Hmisc
library(Hmisc)
data(mtcars)
head(mtcars)
tail(mtcars)

# correlation coefficient and p-value for mtcars dataset
rcorr(as.matrix(mtcars), type="spearman")

출력결과

> ## Ex. Hmisc
> library(Hmisc)

> data(mtcars)

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

> tail(mtcars)
                mpg cyl  disp  hp drat    wt qsec vs am gear carb
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.6  1  1    4    2

> # correlation coefficient and p-value for mtcars dataset
> rcorr(as.matrix(mtcars), type="spearman")
       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
mpg   1.00 -0.91 -0.91 -0.89  0.65 -0.89  0.47  0.71  0.56  0.54 -0.66
cyl  -0.91  1.00  0.93  0.90 -0.68  0.86 -0.57 -0.81 -0.52 -0.56  0.58
disp -0.91  0.93  1.00  0.85 -0.68  0.90 -0.46 -0.72 -0.62 -0.59  0.54
hp   -0.89  0.90  0.85  1.00 -0.52  0.77 -0.67 -0.75 -0.36 -0.33  0.73
drat  0.65 -0.68 -0.68 -0.52  1.00 -0.75  0.09  0.45  0.69  0.74 -0.13
wt   -0.89  0.86  0.90  0.77 -0.75  1.00 -0.23 -0.59 -0.74 -0.68  0.50
qsec  0.47 -0.57 -0.46 -0.67  0.09 -0.23  1.00  0.79 -0.20 -0.15 -0.66
vs    0.71 -0.81 -0.72 -0.75  0.45 -0.59  0.79  1.00  0.17  0.28 -0.63
am    0.56 -0.52 -0.62 -0.36  0.69 -0.74 -0.20  0.17  1.00  0.81 -0.06
gear  0.54 -0.56 -0.59 -0.33  0.74 -0.68 -0.15  0.28  0.81  1.00  0.11
carb -0.66  0.58  0.54  0.73 -0.13  0.50 -0.66 -0.63 -0.06  0.11  1.00

n= 32 


P
     mpg    cyl    disp   hp     drat   wt     qsec   vs     am     gear   carb  
mpg         0.0000 0.0000 0.0000 0.0000 0.0000 0.0071 0.0000 0.0008 0.0013 0.0000
cyl  0.0000        0.0000 0.0000 0.0000 0.0000 0.0006 0.0000 0.0022 0.0008 0.0005
disp 0.0000 0.0000        0.0000 0.0000 0.0000 0.0081 0.0000 0.0001 0.0003 0.0014
hp   0.0000 0.0000 0.0000        0.0023 0.0000 0.0000 0.0000 0.0416 0.0639 0.0000
drat 0.0000 0.0000 0.0000 0.0023        0.0000 0.6170 0.0102 0.0000 0.0000 0.4947
wt   0.0000 0.0000 0.0000 0.0000 0.0000        0.2148 0.0004 0.0000 0.0000 0.0036
qsec 0.0071 0.0006 0.0081 0.0000 0.6170 0.2148        0.0000 0.2644 0.4182 0.0000
vs   0.0000 0.0000 0.0000 0.0000 0.0102 0.0004 0.0000        0.3570 0.1170 0.0000
am   0.0008 0.0022 0.0001 0.0416 0.0000 0.0000 0.2644 0.3570        0.0000 0.7264
gear 0.0013 0.0008 0.0003 0.0639 0.0000 0.0000 0.4182 0.1170 0.0000        0.5312
carb 0.0000 0.0005 0.0014 0.0000 0.4947 0.0036 0.0000 0.0000 0.7264 0.5312

 

 

[예제] test_data 이용한 상관분석

Spearman's Rank Correlation Coefficient 구하기

test_correlation_analysis_SRCC.R
...

## Ex. test
test = read.csv("~/R_coding/test_data.csv")
test

plot(test)
rcorr(as.matrix(test),type="spearman")

출력결과

...

> ## Ex. test
> test = read.csv("~/R_coding/test_data.csv")

> test
   korean math english science
1      85   80      80      90
2      75   60      70     100
3      65   75      69      50
4      78   40      79      80
5      59   50      80      67
6      60   64      95      89
7      90   70      98      60
8     100   78      97      79
9      99   90      67      89
10     91   98      80      80
11     70   50      59     100

> plot(test)

> rcorr(as.matrix(test),type="spearman")
        korean  math english science
korean    1.00  0.65    0.20    0.00
math      0.65  1.00    0.16   -0.09
english   0.20  0.16    1.00   -0.42
science   0.00 -0.09   -0.42    1.00

n= 11 


P
        korean math   english science
korean         0.0299 0.5517  1.0000 
math    0.0299        0.6462  0.7937 
english 0.5517 0.6462         0.1926 
science 1.0000 0.7937 0.1926

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함