library(datasets)
head(USArrests) #data set
cor(USArrests)
pairs(USArrests, panel= panel.smooth, main= 'USA_Arrests')
# panel.smooth = 산점도 위 line 그리기
US.prin2 <- prcomp(USArrests, center = T, scale = T) #표준화 적용
# center = T는 중앙을 0으로, scale.=T 는 분산을 1로
US.prin2
# loadings 값 확인
# loadings : 원 변수가 가진 고유벡터로서, 선형결합 시 계수를 의미
# ex) PC1 = -0.536*Murder + (-0.583)*Assault + (-0.278)*urbanPop ...
# == US.prin2$rotation 으로도 확인 가능
#
head(US.prin2$x)
# score : 주성분을 통해 계산된 각 행별 좌표를 의미
summary(US.prin2)
fviz_eig(US.prin2)
library(factoextra)
fviz_pca_biplot(US.prin2,
label=c("var"),
# label=c("var") : 데이터값 표시x, 화살표값만
# label=c("var", "ind") : 데이터, 화살표 모두 표시
col.var = 'contrib',
# 원 변수의 기여율에 따라 색 지정
repel = TRUE,
# 텍스트 겹침 피하기
addEllipses = TRUE,
# 타원 보이기
ellipse.level=0.95) +
labs(title = 'USArrests PCA') +
scale_color_gradient2(low="blue", mid="yellow",
high="red", midpoint = 25) #기울기에 따른 색
PC1은 Murder, Assault, Rape 변수와 평행을 이룬다고 볼 수 있는데 각종 범죄와 관련된 변수라고 할 수 있습니다.
PC2는 UrbanPop 변수와 평행을 이루기에 도시인구와 관련된 변수라고 할 수 있습니다.
fviz_contrib(US.prin2, choice = "var", axes = 1, top = 4)
fviz_contrib(US.prin2, choice = "var", axes = 2, top = 4)
# data set
min<- apply(swiss, 2, min)
max<- apply(swiss, 2, max)
swiss_scale<- scale(swiss, center = min, scale = max-min)
## min-max 스케일링
library(psych)
scree(cor(swiss_scale, use = "pairwise.complete.obs"))
## 결측값이 있는 case는 제거하고 상관계수 계산
fac<- factanal(swiss_scale,rotation= 'varimax', # 회전방법 지정
scores= 'regression', # 요인점수 계산 방법 지정
factors = 2) # 요인 개수 지정
fac
Call:
factanal(x = swiss_scale, factors = 2, scores = "regression", rotation = "varimax")
Uniquenesses:
Fertility Agriculture Examination Education
0.420 0.492 0.270 0.005
Catholic Infant.Mortality
0.061 0.960
Loadings:
Factor1 Factor2
Fertility -0.652 0.393
Agriculture -0.631 0.333
Examination 0.685 -0.510
Education 0.997
Catholic -0.124 0.961
Infant.Mortality 0.175
Factor1 Factor2
SS loadings 2.311 1.481
Proportion Var 0.385 0.247
Cumulative Var 0.385 0.632
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 20.99 on 4 degrees of freedom.
The p-value is 0.000318
# loadings : 해당 변수가 요인에 의해 설명되는 분산의 비율을 의미
# SS loadings : 인자 부하량(loadings)의 제곱
## └이 값이 높을수록 변수간 유사성이 좋다는 것이다.
## 유의확률이 0.05가 넘어야 모델이 적절하다고 판단
## └즉 많은 성분들이 손실하지 않는다. (현 모델은 유의하지 않다.)
# sort(fac$uniquenesses) ## 적을수록 좋음 # 독자성 = 1-공통성
## └대게 0.5미만이면 좋다고 판단
print(fac$loadings, cutoff=0.3)
## loading값이 0.3이상인 것들만을 표시
Loadings:
Factor1 Factor2
Fertility -0.652 0.393
Agriculture -0.631 0.333
Examination 0.685 -0.510
Education 0.997 -0.031
Catholic -0.124 0.961
Infant.Mortality -0.095 0.175
Factor1 Factor2
SS loadings 2.311 1.481
Proportion Var 0.385 0.247
Cumulative Var 0.385 0.632
fac$scores # 인자 득점 == 원 데이터 좌표
biplot(fac$scores, fac$loadings, cex = 0.4)