R에서 주성분 분석(PCA) 시 활용할 수 있는 사용자 정의 함수(UDF)를 소개하는 글입니다.
R에서 주성분 분석(PCA)을 수행하기 위해 검색하던 중 분석을 조금 더 편하게 할 수 있는 사용자 정의 함수(UDF)를 발견하였고,
범용적으로 활용할 수 있도록 함수를 변경하여 개인 소스코드 목록에 추가하였습니다.
이 포스트는 사용자 정의 함수(UDF)에 관한 글이기에 주성분 분석에 대해 알고 싶으신 분은 링크를 참고하시면 됩니다.
1. 원본(수정 전)
변수에 대한 설명력의 누적기여율(cummulative proportion)이 80%가 되는 주성분의 개수 k개를 찾아서, 주성분 1번부터 주성분 k번째까지의 주성분점수를 반환하는 사용자 정의함수는 아래와 같습니다.
#---------------------------------------------------------
# PCA (Principal Component Analysis)
# User Defined Function
# - finding PC k which Cummulative Proportion is over 0.8
#---------------------------------------------------------
pca <- function(dataset){
pc = prcomp(dataset, scale = TRUE)
k = 0
R = 0
while(R < 0.8) {
k = k + 1
R = sum(pc[[1]][1:k]^2)/sum(pc[[1]]^2)
cat("When number of Principal Component(k) is ", k,
", Cummulative Proportion(R) is ", R, "\n", "\n", sep="")
}
SelectedDataSet = pc[[5]][,1:k]
return(SelectedDataSet)
}
[출처] http://rfriend.tistory.com/61
2. 나에게 맞춘 사용자 함수 (수정 후)
변수에 대한 설명력의 누적기여율(cummulative proportion)이 'prob' 이상이 되는 주성분의 개수 k개를 찾아서, 주성분 1번부터 주성분 k번째까지의 주성분점수를 반환하는 사용자 정의함수는 아래와 같습니다.
-> PCA의 경우 80%~90% 사이의 값을 일반적으로 선택하기에 개인 판단에 의존할 수 있도록 변경
#---------------------------------------------------------
# PCA (Principal Component Analysis)
# User Defined Function
# - finding PC k which Cummulative Proportion is over prob
# - http://rfriend.tistory.com/61
#---------------------------------------------------------
# dataset : PCA를 수행하려는 데이터셋 입력
# prob : 누적 기여율 기준 입력
udf.pca <- function(dataset, prob){
pc = prcomp(dataset, scale = TRUE)
k = 0
R = 0
while(R <= prob) {
k = k + 1
R = sum(pc[[1]][1:k]^2)/sum(pc[[1]]^2)
cat("When number of Principal Component(k) is ", k,
", Cummulative Proportion(R) is ", R, "\n", "\n", sep="")
}
SelectedDataSet = pc[[5]][,1:k]
return(SelectedDataSet)
}