1. 벡터 공간과 노름

vector Spaces and Norms

1.1 정의

벡터 공간(Vector Space)

같은 수의 성분을 가지는 벡터들로 이루어진 공집합이 아닌 집합 V가 있을 때,

  • V에 속하는 임의의 두 벡터 a와 b의 일차결합이 αa + βb (α, β 는 임의의 실수)가 또한 V에 속하고

  • 벡터에 대한 덧셈과 스칼라곱이 아래의 8가지 벡터의 합과 스칼라곱에 대한 연산법칙을 만족하면 집합 V를 벡터공간(vector space) 또는 선형공간(linear space)이라고 하며, 그 원소를 벡터(vector)라고 합니다.

2차원 백터 공간

2차원 백터 공간

성질

벡터의 합 법칙 스칼라 곱 법칩
a + b = b + a 교환(commutative)법칙 c(a + b) = ca + cb 분배법칙
(a + b) + c = a + (b + c) 결합(associative) 법칙 (c + k)a = ca + ka 분배법칙
a + 0 = a 항등원 c(ka) = (ck)a
a + (-a) = 0 역원 1a = a

벡터 부분공간(vector subspace)

벡터공간(vector space) V의 부분집합 W가 위에서 설명한 (1) 덧셈 조건, (2) 스칼라배 조건을 모두 만족할 때 W를 부분공간(subspace)라고 함, 이를 벤 다이어그램(venn diagram)으로 나타내보면 아래와 같다.

노름(Norms) : Vector 크기

1.2 예제

벡터 공간(Vector Space)과 벡터 내적(Vector InnerProduct)

Vector Space 이야기가 나오면 대부분 내적과 관련된 이야기.. 백터 공간에서 백터의 내적은 두 백터간의 유사도를 수치화 하기 위해 주로 사용!

[참고] http://bbs.nicklib.com/algorithm/1670

2. 특수한 형태의 행렬

2.1 제로행렬(zero matrix or null matrix)

A_zero <- matrix(rep(0, 9), byrow = TRUE, nrow = 3)
A_zero
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0

2.2 전치행렬 (transpose matrix)

# transpose matrix(3,3)
A <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), byrow = TRUE, nrow = 3)
A
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
A_t <- t(A)
A_t
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
# transpose matrix(2,3)
B <- matrix(c(4, 5,  6, 7, 8, 9), nc=3)
B
##      [,1] [,2] [,3]
## [1,]    4    6    8
## [2,]    5    7    9
B_t <- t(B)
B_t
##      [,1] [,2]
## [1,]    4    5
## [2,]    6    7
## [3,]    8    9

2.3 대칭행렬 (symmetric matrix)

# symmetric matrix
s <- matrix(c(1:25), 5)
s
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    6   11   16   21
## [2,]    2    7   12   17   22
## [3,]    3    8   13   18   23
## [4,]    4    9   14   19   24
## [5,]    5   10   15   20   25
# 하삼각행렬
lower.tri(s, diag=FALSE)
##       [,1]  [,2]  [,3]  [,4]  [,5]
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,]  TRUE FALSE FALSE FALSE FALSE
## [3,]  TRUE  TRUE FALSE FALSE FALSE
## [4,]  TRUE  TRUE  TRUE FALSE FALSE
## [5,]  TRUE  TRUE  TRUE  TRUE FALSE
s[lower.tri(s, diag=FALSE)]
##  [1]  2  3  4  5  8  9 10 14 15 20
# 하삼각행렬을 상삼각행렬로 대입하기 위해 전치
t(s)[lower.tri(s, diag=FALSE)]
##  [1]  6 11 16 21 12 17 22 18 23 24
s[lower.tri(s, diag=FALSE)] = t(s)[lower.tri(s, diag=FALSE)]
s
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    6   11   16   21
## [2,]    6    7   12   17   22
## [3,]   11   12   13   18   23
## [4,]   16   17   18   19   24
## [5,]   21   22   23   24   25

대칭행렬이란 대각성분을 중심으로 대칭인 n차정방행렬로서, 원래 행렬과 전치행렬이 동일한 경우를 의미

2.4 대각행렬 (diagonal matrix)

# diagonal matrix
A <- c(1, 2, 3, 4)
diag(A)
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    0
## [2,]    0    2    0    0
## [3,]    0    0    3    0
## [4,]    0    0    0    4

2.5 항등행렬 또는 단위행렬 (identity matrix, I, or unit matrix, U)

# identity matrix or unit matrix : diag(k)
diag(4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    0
## [2,]    0    1    0    0
## [3,]    0    0    1    0
## [4,]    0    0    0    1

3. 고유값 & 고유벡터

Eigenvalues & Eigenvectors

다소 단순하게 보이는 벡터 방정식 “정방행렬 A에 대해 Ax = λx”로부터 놀랄만큼 많은 관련 이론과 풍부한 응용예가 유도된다. 실제로 공학, 물리학, 기하학, 수치해석, 이론수학, 생물학, 환경과학, 도시계획, 경제학, 심리학 등 많은 분야에서 고유값 문제가 나타난다. - Erwin Keryszig

3.1 정의

Definition 1. Eigenvalues and Eigenvectors

[영문] Let A be an n×n matrix. A number λ is said to be an eigenvalue of A if there exists a nonzero solution vector K of the linear system

AK=λK⋯(1)

The solution vector K is said to be an eigenvector corresponding to the eigenvalue λ.

[한글] 정방행렬 A에 대하여 Ax = λx (상수 λ) 가 성립하는 0이 아닌 벡터 x가 존재할 때 상수 λ 를 행렬 A의 고유값 (eigenvalue), x 를 이에 대응하는 고유벡터 (eigenvector) 라고 합니다.

고유값, 고유벡터 정의

고유값, 고유벡터 정의


3.2 예제

좀더 쉽게 이해할 수 있도록 고유값(eigenvalue)과 고유벡터(eigenvector)가 가지는 의미를 아래의 예를 들어 알아보자.

행렬 A에 대한 고유값, 고유벡터

행렬 A에 대한 고유값, 고유벡터

고유값(eigenvalue)와 고유벡터(eigenvector)의 기하학적인 의미를 살펴보면, 벡터 x에 대해 n차 정방행렬 A를 곱하는 결과와 상수 λ를 곱하는 결과가 같다는 의미. 즉, 행렬의 곱의 결과가 원래 벡터와 “방향”은 같고, “배율”만 상수 λ 만큼만 비례해서 변했다라는 의미.

[고유값(eigenvalue)과 고유벡터(eigenvector)가 무척 중요한 이유] 행렬과 벡터 곱을 했더니 “방향”도 바뀌고 “크기(배율)”도 모두 바뀌는 것과, “방향”은 그대로 있고 “크기(배율)”만 바뀌는 것 중에 뭐가 연산이 간단할 지 생각해보자!

아래의 2차 정방행렬 A=(4,3 2, 5) 에 의해 대응되는 선형사상 f에 의한 c1(2, 3)+c2(-1, 1) 의 상을 가지고 기하학적인 의미의 예를 들어보겠습니다.

위의 결과를 좌표에 나타내보면 아래와 같습니다. 좀 복잡해보이긴 하는데요, 화살표의 eigenvector (2, 3), (-1, 1)의 R^2 공간이 정방행렬 A=(4, 3 2, 5)에 의해서 오른쪽 R^2 공간으로 변환될 때 “방향”은 똑같고, “배율”만 eigenvalue λ 배수 (7배, 2배) 만큼 변했다는 것을 알 수 있습니다.

왼쪽의 A, B, C, D, E 의 좌표점들이 오른쪽에는 A’, B’, C’, D’, E’ 로 정방행렬 A=(4, 3 2, 5)에 의해 변환되었습니다. 계산 예시로 B (2, 3) -> B’ (14, 21)와 D (-1, 1) -> D’ (-2, 2) 만 아래 그래프 위에 겹쳐서 제시해보았습니다.

좀더 직관적으로 이해할 수 있도록 아래에 사람 얼굴()이 어떻게 변환되는지 겹쳐서 제시해보았습니다. eigenvector의 방향은 똑같고 (same direction), 크기만 eigenvalue 만큼씩 배수(magnification)가 되었습니다.

3.3 고유값, 고유벡터 구하기

다음 기회에…

4. 고유값 분해

Eigendecomposition of a matrix

선형대수학에서 고유값 분해특이값 분해가 차지하는 비중은 상당히 큼

4.1 정방행렬의 대각화 : 고유값 분해

행렬의 대각화란 행렬을 대각요소만 가진 대각형렬로 만들어주는 것. 정방행렬의 대각화는 고유값 분해라고도 불림. n X n 행렬 A가 n개의 선형적으로 독립인 고유벡터들을 가지면 다음과 같이 성립

행렬 A가 역행렬을 가질 조건: 0이 아닌 고유값들을 갖는다.

행렬 A가 대각화될 조건: n개의 선형 독립인 고유벡터들을 갖는다.

5. 단일값 분해

SVD (Singular Value Decomposition)

5.1 정의

특이값 분해 역시 고유값분해처럼 행렬을 대각화하는 방법이다. 고유값 분해는 정방행렬에만 사용가능했다면, 특이값 분해는 직사각형 행렬일 때도 사용가능하다. 그러다보니 고유값 분해보다 활용도가 훨씬 더 크다. 일단 m x n 행렬의 특이값 분해 공식

5.2 예제

이해를 돕기 위해서 4 by 2 직사각행렬 (rectacgular matrix) A를 가지고 (full) SVD 계산

[1] 먼저 A X t(A) 의 고유벡터인 U를 구해보자

R로 A%*%t(A)의 고유벡터를 구해서 U를 구하는 방법

A <- matrix(c(3, 2, 0, 0,  6, 3, 0, 0), nc=2, byrow = FALSE)
A
##      [,1] [,2]
## [1,]    3    6
## [2,]    2    3
## [3,]    0    0
## [4,]    0    0
t(A)
##      [,1] [,2] [,3] [,4]
## [1,]    3    2    0    0
## [2,]    6    3    0    0
##--- (1) calculation of U
# A%*%t(A)
W_1 <- A%*%t(A)


# eigenvalue, eigenvector of W
eigen(W_1)
## eigen() decomposition
## $values
## [1] 57.8444102  0.1555898  0.0000000  0.0000000
## 
## $vectors
##           [,1]       [,2] [,3] [,4]
## [1,] 0.8816746 -0.4718579    0    0
## [2,] 0.4718579  0.8816746    0    0
## [3,] 0.0000000  0.0000000    0    1
## [4,] 0.0000000  0.0000000    1    0
# U
U <- eigen(W_1)[[2]] # eigenvectors
U
##           [,1]       [,2] [,3] [,4]
## [1,] 0.8816746 -0.4718579    0    0
## [2,] 0.4718579  0.8816746    0    0
## [3,] 0.0000000  0.0000000    0    1
## [4,] 0.0000000  0.0000000    1    0

[2] 다음으로, t(A) X A 의 고유벡터(eigenvectors)를 구해보겠습니다. 위의 (1)번 풀이 과정과 동일합니다.

R로 풀이

##---- (2) calculation of V^T
# t(A)%*%A
W_2 <- t(A)%*%A
W_2
##      [,1] [,2]
## [1,]   13   24
## [2,]   24   45
# eigenvalue of W
eigen(W_2)
## eigen() decomposition
## $values
## [1] 57.8444102  0.1555898
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.4718579 -0.8816746
## [2,] 0.8816746  0.4718579
# V^T
V_t <- eigen(W_2)[[2]] # eigenvectors 
V_t
##           [,1]       [,2]
## [1,] 0.4718579 -0.8816746
## [2,] 0.8816746  0.4718579

[3] 다음으로, A X t(A) , t(A)*A 의 고유값(eigenvalue)의 제곱근(square root)을 특이값(singular value) 대각원소로 가지고 나머지는 ’0’인 대각행렬 Σ 를 구해보겠습니다.

R로 풀이

##--- (3) calculation of Σ
# square root of eigenvalues
W_2_eigenvalue_sqrt <- sqrt(eigen(W_2)[[1]])
W_2_eigenvalue_sqrt
## [1] 7.6055513 0.3944487
S <- matrix(rep(0, 8), nc=2, byrow=F) # all zeros, temp matrix
S
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
## [3,]    0    0
## [4,]    0    0
S[1,1] <- W_2_eigenvalue_sqrt[1] 
S[2,2] <- W_2_eigenvalue_sqrt[2]
S
##          [,1]      [,2]
## [1,] 7.605551 0.0000000
## [2,] 0.000000 0.3944487
## [3,] 0.000000 0.0000000
## [4,] 0.000000 0.0000000

[4] 위에서 구한 U, V^T, Σ 를 종합하면 끝이네요.

R 로 그동안 풀었던거 다시 한번 풀이

# overall (aggregation)
 
A # 4 by 2 rectacgular matrix
##      [,1] [,2]
## [1,]    3    6
## [2,]    2    3
## [3,]    0    0
## [4,]    0    0
U # eigenvectors of A*t(A)
##           [,1]       [,2] [,3] [,4]
## [1,] 0.8816746 -0.4718579    0    0
## [2,] 0.4718579  0.8816746    0    0
## [3,] 0.0000000  0.0000000    0    1
## [4,] 0.0000000  0.0000000    1    0
S # square root of eigenvalues of t(A)*A
##          [,1]      [,2]
## [1,] 7.605551 0.0000000
## [2,] 0.000000 0.3944487
## [3,] 0.000000 0.0000000
## [4,] 0.000000 0.0000000
V_t # eigenvectors of t(A)*A
##           [,1]       [,2]
## [1,] 0.4718579 -0.8816746
## [2,] 0.8816746  0.4718579
SVD_of_A <- U %*% S %*% V_t
SVD_of_A
##      [,1] [,2]
## [1,]    3   -6
## [2,]    2   -3
## [3,]    0    0
## [4,]    0    0

정리

특이값 분해는 고유값 분해와 함께 행렬을 대각화하는 방법인데, 고유값분해는 정방행렬에만 사용할 수 있는 반면, 특이값 분해는 좀 더 확장되어 직사각형행렬에도 사용가능하다. 고유값 분해와 특이값 분해는 행렬이 양의 정부호일때만 동일하고, 나머지 경우에는 다르다. 특이값 분해는 데이터 압축 등 많은 분야에서 활용되고 있다

6. LU 분해

선형대수에서 행렬분해는 어떤 행렬을 여러 행렬들의 곱으로 표현하는 것을 의미함

목적

  1. 계산의 편리함
  2. 분석적 용이성

LU Decomposition

6.1 정의

LU 분해(영어: LU decomposition)는 수치 해석 분야에서 하삼각행렬과 상삼각행렬의 곱으로 표현하는 것이다. L과 U는 각각 Lower와 Upper를 의미한다. 때때로 치환행렬(permutation matrix)도 함께 곱으로 나타내기도 한다. LU 분해는 가우스 소거법에서 많이 이용된다. LU 분해는 앨런 튜링에 의해 소개됐다.

행렬 A를 말하면,

A = LU

L은 하삼각행렬(lower triangular matrix)

U는 상삼각행렬(upper triangular matrix)


6.2 LU 분해 활용 사례

LU 분해를 활용한 해 찾기

  1. Ax=bLUx=b로 표현
  2. 새로운 벡터 yUx=y로 정의하고, LUx=bLy=b로 표현
  3. 선형 Ly=b를 기존의 방법으로 풀어 y를 구함
  4. 구한 벡터 yUx=y에 대입하여 이 선형모형을 기존 방법으로 풀어 최종적으로 x를 구함

아래의 선형계를 LU 분해를 이용하여 풀어보자

(ㄱ) ———– A * x = b (ㄱ)

위의 선형계의 계수행렬을 LU 분해하면 아래와 같다.

———– A = L * U

첫 번째 과정에 의해 (ㄱ)의 선형계를 아래와 같이 표현

(ㄴ) ———– L * U * x = b (ㄴ)

두번째 과정에 의해 아래와 같이 y1, y2, y3를 잡음

(ㄹ) ———– U * x = y (ㄹ)

그리고 (ㄴ)의 식을 아래와 같이 표현

(ㄷ) ———– L * y = b (ㄷ)

세번째 과정 (ㄷ)풀기

y1 = 1, y2 = 5, y3 = 2

네 번째 과정은 세번째 과정에서 구한 y1, y2, y3를 (ㄹ)에 대입하여 x1, x2, x3를 구하는 과정

6.3 LU 분해 방법

[]http://blog.naver.com/PostView.nhn?blogId=ldj1725&logNo=220243255314&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

7. QR 분해

QR Decomposition/Factorization

QR 분해(QR decomposition, QR factorization)는 행렬 분해의 일종으로 임의의 행렬을 직교행렬과 상삼각행렬의 곱으로 분해하는 방법이다. QR 분해는 선형 최소제곱법을 풀 때나 고유벡터를 구할 때 등의 상황에 사용되며, 그람-슈미트 직교정규화 혹은 하우스홀더 행렬, 기븐스 회전 등을 사용한다.

7.1 정의

A 는 임의의 n x n 정사각행렬,

A = QR

Q = 직교 행렬

R = 상삼각 행렬

Q * t(Q) = I 단위행렬

t(Q) 전치행렬

t(t(Q))

7.2 예제

8. 주성분 분석

PCA (Principal Component Analysis)

상관관계가 있는 고차원 자료의 변동을 최대한 보존하는 저차원 자료로 변환시키는 방법, 자료의 차원을 축약시키는데 주로 사용

8.1 목적

주성분분석은 왜 하는가? 어떤 분석에 연계활용되나 ?

  1. 여러 변수들 간에 내재하는 상관관계, 연관성을 이용해 소수의 주성분 또는 요인으로 차원을 축소함으로써 데이터를 이해하기 쉽고 관리하기 쉽게 해줍니다.
    사람은 1차원, 2차원까지는 그래프로 그려서 직관적으로 이해를 할 수 있지만, 3차원 이상으로만 넘어가도 집단의 모습을 인식하는데 큰 어려움을 겪게 됩니다. 만약 변수가 10개 있는데 이를 단 2개의 차원으로 요약을 했는데도 변수들이 가지는 변동을 80~90% 설명할 수 있다면 굳이 변수 10개를 모두 이용할 필요가 없겠지요. [참고] 사진

  2. 회귀분석이나 의사결정나무(decision tree) 등의 모형 개발 시 입력변수들간의 상관관계가 높은 다중공선성(multicollinearity)이 존재할 경우 모형이 잘못만들어지고 따라서 해석에도 문제가 생기게 됩니다. 다중공선성이 존재할 경우 해결 방법 중의 하나가 바로 상관도가 높은 변수들을 하나의 주성분 혹은 요인으로 축소하여 모형개발에 활용하는 것입니다.

  3. 연관성이 높은 변수 간 주성분 또는 요인분석을 통해 차원을 축소한 후에 군집분석을 수행하면 군집화 결과, 연산속도 개선에 기여하게 됩니다. 가령, Benefit 고객세분화를 위해 survey를 하게 되면 소구점들에 대한 다수의 문항(변수)의 답변 결과에 대해서 먼저 요인분석을 한 후에 요인점수(factor score)를 가지고 군집분석(clustering)을 수행하고 세분군집을 명명(naming)하게 됩니다.

  4. 기계에서 나오는 다수의 센서데이터를 주성분분석이나 요인분석을 하여 차원을 축소한 후에 시계열로 분포나 추세의 변화를 분석하면 기계의 고장(fatal failure) 징후를 사전에 파악하는데 활용하기도 합니다.

8.2 예제

한국신용평가정보에서 나온 ‘국내 증권회사의 주요 재무제표’ (2007.3.31 기준)를 가지고 주성분분석을 R 로 실시

8.2.1 Data 읽기

한국신용평가정보 ‘국내 증권회사의 주요 재무제표’ (2007.3.31 기준)

secu_com_finance_2007 <- read.csv("C:/Users/lhj91/Documents/DataScience/secu_com_finance_2007.csv", header = TRUE, stringsAsFactors = FALSE)

secu_com_finance_2007
재무재표 변수 설명
V1 총자본순이익율
V2 자기자본순이익율
V3 자기자본순이익율
V4 부채비율
V5 자기자본회전율

8.2.2 전처리

standardization

문제 1 : 각 변수들 사이의 scale 이 다르므로 왜곡 가능성 존재

해결방안 : 평균, 표준편차를 가지고 표준화 데이터로 변경

# 표준화 변환 (standardization)
library(dplyr)
secu_com_finance_2007 <- transform(secu_com_finance_2007,
                                   V1_s = scale(V1), 
                                   V2_s = scale(V2),
                                   V3_s = scale(V3),
                                   V4_s = scale(V4),
                                   V5_s = scale(V5))

secu_com_finance_2007 %>% select(-c(2:6))

transform

PCA 목적 : 서로 같은 방향으로 움직이게 해서 상관도가 높게 나와 같은 주성분에 반영되도록 함

문제 2 : 나머지 변수와 달리 V4(부채비율) 변수만 클수록 안 좋다고 해석

해결방안 : 방향 변환 -> V4_s2 = (max(V4_s) - V4_s)

# 부채비율(V4_s)을 방향(max(V4_s)-V4_s) 변환
secu_com_finance_2007 <- transform(secu_com_finance_2007, V4_s2 = max(V4_s) - V4_s)

# variable selection
secu_com_finance_2007_2 <- secu_com_finance_2007[,c("company", "V1_s", "V2_s", "V3_s", "V4_s2", "V5_s")]

secu_com_finance_2007_2

8.2.3 상관관계

PCA 는 변수들 간의 상관관계가 높다는 것을 가정하므로 확인!!

# 상관 계수
cor(secu_com_finance_2007_2[,-1])
##             V1_s       V2_s       V3_s      V4_s2        V5_s
## V1_s  1.00000000  0.6165153  0.3239780  0.3553930  0.01387883
## V2_s  0.61651527  1.0000000 -0.5124351 -0.4659444  0.42263462
## V3_s  0.32397800 -0.5124351  1.0000000  0.9366296 -0.56340782
## V4_s2 0.35539305 -0.4659444  0.9366296  1.0000000 -0.53954570
## V5_s  0.01387883  0.4226346 -0.5634078 -0.5395457  1.00000000

8.2.4 주성분 분석 실시

secu_prcomp <- prcomp(secu_com_finance_2007_2[,c(2:6)]) 

summary(secu_prcomp)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5
## Standard deviation     1.6618 1.2671 0.7420 0.25311 0.13512
## Proportion of Variance 0.5523 0.3211 0.1101 0.01281 0.00365
## Cumulative Proportion  0.5523 0.8734 0.9835 0.99635 1.00000

제1요인이 표준편차가 1.66으로 가장 크고, 제2요인이 1.26으로 그 다음으로 큰 식으로 순서가 있습니다.

print(secu_prcomp)
## Standard deviations (1, .., p=5):
## [1] 1.6617648 1.2671437 0.7419994 0.2531070 0.1351235
## 
## Rotation (n x k) = (5 x 5):
##               PC1         PC2           PC3          PC4         PC5
## V1_s   0.07608427 -0.77966993  0.0008915975 -0.140755404  0.60540325
## V2_s  -0.39463007 -0.56541218 -0.2953216494  0.117644166 -0.65078503
## V3_s   0.56970191 -0.16228156  0.2412221065 -0.637721889 -0.42921686
## V4_s2  0.55982770 -0.19654293  0.2565972887  0.748094314 -0.14992183
## V5_s  -0.44778451 -0.08636803  0.8881182665 -0.003668418 -0.05711464

Rotation 후 고유벡터(eigenvector)의 계수 확인

제 1요인(PC1) : 자기자본비율(V3_s), 부채비율(V4_s2) 관련

제 2요인(PC2) : 총자본순이익율(V1_s), 자기자본순이익율(V2_s) 관련

제 3요인(PC3) : 자기자본회전율(V5_s) 관련

이처럼 변수와 주성분간 관계를 고려해서 주성분에 이름을 명명(naming)

요약

요약

# Scree Plot
plot(prcomp(secu_com_finance_2007_2[,c(2:6)]), type="l", sub = "Scree Plot")

주성분의 개수를 정할 때 누적기여율을 가지고 하기도 하고, 또는 고유값(eigenvalue)을 가지고 위 처럼 Scree plot 그래프를 그려서 고유값 곡선이 꺽이는 지점의 바로 앞의 주성분 개수를 선택하기도 합니다. 위 그래프로 보면 주성분 3개째에서 수평으로 드러누웠으므로 한개를 뺀 (3-1 = 2) 2개 주성분이 적합해 보입니다.

# Biplot
biplot(prcomp(secu_com_finance_2007_2[,c(2:6)]), cex = c(0.7, 0.8))
 
# 관측치별 주성분1, 주성분2 점수 계산(PC1 score, PC2 score)
secu_pc1 <- predict(secu_prcomp)[,1]
secu_pc2 <- predict(secu_prcomp)[,2]
 
 
# 관측치별 이름 매핑(rownames mapping)
 text(secu_pc1, secu_pc2, labels = secu_com_finance_2007_2$company, cex = 0.7, pos = 3, col = "blue")

가로축 PC1(안정성)을 기준으로 보면 오른쪽에 V3_s, V4_s2 화살표가 향하는 쪽에 있는 부국증권, 한양증권, 유화증권사는 안정성이 높은 회사군이라고 해석을 할 수 있게 됩니다.

(참고: PC1 = 0.076 X V1_s - 0.394 X V2_s + 0.569 X V3_s + 0.559 X V4_s2 - 0.447 X V5_s )

세로축 PC2(수익성)을 기준으로 보면 아래쪽에 있는 대우증권, 미래애셋증권사 등이 수익성이 좋은 축에 속합니다. (아래 식 부호가 (-) 라서 숫자 낮은 것이 수익성 좋다는 뜻)

(참고: PC2 = -0.779 X V1_s - 0.565 X V2_s - 0.162 X V3_s - 0.196 X V4_s2 - 0.086 X V5_s )

이렇게 변환한 주성분점수를 가지고 다른 통계모형이나 데이터마이닝 모형 개발 시 input으로 활용해도 되겠습니다.