[R] 주성분분석(PCA) 사용자 함수

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)
}