Principal Components
Example
아래 예제는 IMPORT 데이터(파일 P241.txt)를 사용한 주성분분석 예시입니다. 먼저, 상관계수를 구하고 고유값(eigenvalues)과 고유벡터(eigenvectors)를 살펴봅니다.
# (예시) 파일 읽기: "../P241.txt"에서 앞 11행만 사용
IMPORT <- read.table ("https://www.stat.uchicago.edu/~yibi/s224/data/P241.txt" , header = TRUE )[1 : 11 , ]
# 상관계수 행렬 구하기
corr <- cor (IMPORT[, 3 : 5 ]) # 예: DOPROD, STOCK, CONSUM
corr
DOPROD STOCK CONSUM
DOPROD 1.00000000 0.02585067 0.99726069
STOCK 0.02585067 1.00000000 0.03567322
CONSUM 0.99726069 0.03567322 1.00000000
# eigen() 함수를 이용해 고유값과 고유벡터 추출
eigenvectors <- eigen (corr)$ vectors
eigenvalues <- eigen (corr)$ values
# 행 이름 지정
rownames (eigenvectors) <- rownames (corr)
eigenvectors
[,1] [,2] [,3]
DOPROD 0.70633041 0.03568867 0.706982083
STOCK 0.04350059 -0.99902908 0.006970795
CONSUM 0.70654444 0.02583046 -0.707197102
[1] 1.999154934 0.998154176 0.002690889
세 변수(DOPROD, STOCK, CONSUM)를 표준화했을 때, 첫 번째와 세 번째 고유값 사이에 큰 차이가 있음을 알 수 있습니다. 마지막 고유값이 0에 매우 가까우므로(0.002690889), 이들은 선형종속에 가깝다고 해석할 수 있습니다.
\[
\lambda_1 \approx 1.999,\quad \lambda_2 \approx 0.998,\quad \lambda_3 \approx 0.003
\]
이처럼 \(\lambda_3\) 가 0에 가까우면 해당 축에 대한 분산이 거의 없으므로, 실질적으로 변수가 서로 강한 공선성을 가진다고 볼 수 있습니다.
Eigenvalues
주성분분석에서 고유값(condition number)으로도 공선성을 판별할 수 있습니다. 고유값이 매우 작으면(0에 가깝다면) 대응되는 고유벡터가 나타내는 방향의 분산이 거의 0에 가까워 강한 공선성을 의미합니다.
Example
condition.number <- sqrt (max (eigenvalues) / eigenvalues)
cbind (
lambda_j = eigenvalues,
k_j = condition.number
)
lambda_j k_j
[1,] 1.999154934 1.000000
[2,] 0.998154176 1.415221
[3,] 0.002690889 27.256827
마지막 고유값이 0에 매우 가깝고, 이에 해당하는 \(k_j\) 가 27 이상으로 크게 나타납니다. 이는 해당 축 방향으로 분산이 거의 없다는 뜻이며, 세 변수(DOPROD, CONSUM, STOCK)가 강한 공선성을 가진다고 결론내릴 수 있습니다.