Programing/R- programming

상관관계 분석 R programming

sosal 2014. 8. 21. 14:46
반응형

/*

 http://sosal.kr/
 * made by so_Sal
 */


Pearson 상관분석은 변수들이 얼마나 직선적인 관계를 가지는지 분석하는 기법으로

상관계수를 이용하여 측정한다.


상관계수: Correlation coefficient


> attach(iris)


> cor(Sepal.Length, Petal.Width)

[1] 0.8179411

# Pearson 상관계수: 0.8179...


> cor.test(Sepal.Length, Petal.Width)


        Pearson's product-moment correlation


data:  Sepal.Length and Petal.Width

t = 17.2965, 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 

cor.test() 함수로 Sepal.length와 Petal.Width간 상관계수 및 p-value, 신뢰구간을 구할 수 있다.



> head(iris)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1          5.1         3.5          1.4         0.2  setosa

2          4.9         3.0          1.4         0.2  setosa

3          4.7         3.2          1.3         0.2  setosa

4          4.6         3.1          1.5         0.2  setosa

5          5.0         3.6          1.4         0.2  setosa

6          5.4         3.9          1.7         0.4  setosa



iris 데이터의 4가지 변수에 대해서 (Species를 제외한) 상관계수와 p-value를 구해보자.


> 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


# 4x4 상관계수 행렬 ( 자기자신과의 상관계수는 항상 1이므로 대각선 element의 값은 모두 1.0000 )


> pairs( iris[, 1:4] )



pair 함수를 통해 all pair-wise 산점도를 볼 수 있다.

전체 데이터의 시각적인 현황을 볼 수 있으므로, 탐색 자료 분석측면(Exploratory Data Analysis)에서 유용하다.






- 결측치(Missing value)가 존재하는 경우

> iris.na.test <- iris[ ,1:4]

> iris.na.test[1, 1] <- NA

> iris.na.test[3, 2] <- NA

> iris.na.test[4, 3] <- NA

> head(iris.na.test)

  Sepal.Length Sepal.Width Petal.Length Petal.Width

1           NA         3.5          1.4         0.2

2          4.9         3.0          1.4         0.2

3          4.7          NA          1.3         0.2

4          4.6         3.1           NA         0.2

5          5.0         3.6          1.4         0.2

6          5.4         3.9          1.7         0.4


> cor( iris.na.test )

             Sepal.Length Sepal.Width Petal.Length Petal.Width

Sepal.Length            1          NA           NA          NA

Sepal.Width            NA           1           NA          NA

Petal.Length           NA          NA            1          NA

Petal.Width            NA          NA           NA           1


cor() 함수의 결과는 모두 결측치를 반환한다. (NA가 연산에 포함되는 순간 그 결과값은 무조건 NA다.)


- 결측치(NA)가 존재하는 데이터 row 벡터를 삭제하는 방법

cor( iris.na.test, use="complete.obs")

             Sepal.Length Sepal.Width Petal.Length Petal.Width

Sepal.Length    1.0000000  -0.1094799    0.8678973   0.8121441

Sepal.Width    -0.1094799   1.0000000   -0.4246671  -0.3610068

Petal.Length    0.8678973  -0.4246671    1.0000000   0.9615075

Petal.Width     0.8121441  -0.3610068    0.9615075   1.0000000


- 결측치(NA)가 존재하는 위치에서의 연산만 넘어가는 방법

cor( iris.na.test, use="pairwise.complete.obs")

             Sepal.Length Sepal.Width Petal.Length Petal.Width

Sepal.Length    1.0000000  -0.1097160    0.8696945   0.8169612

Sepal.Width    -0.1097160   1.0000000   -0.4299167  -0.3654865

Petal.Length    0.8696945  -0.4299167    1.0000000   0.9624433

Petal.Width     0.8169612  -0.3654865    0.9624433   1.0000000