본문 바로가기
R

PCA(Principal Components Analysis) - Using R

by hongiiv 2009. 6. 23.
반응형
각 라면에 대하여 면발, 라면 그릇의 모양(크기), 국물맛에 대한 점수가 있다고 한다면, 3개의 변수(면, 그릇, 국물)를 가지고 PCA 분석을 해보자.

Picture 2

1. 데이터를 read.table()을 이용해서 로드한다.

Picture 3

2. 이제 각 변수를 표준화하고, 이에 대한 상관행렬을 구한다.

Picture 5

3. EigenValue, EigenVector 값을 구한다. 첫번째 주성분(PC1)의 기여율은 Cumulative Proportion이 0.524 즉, 52%의 기여율을 보인다. 이것은 PC1이 분석대상의 데이터가 가지고 있던 정보가 PC1 주성분에 어느정도 집약 되어 있는지에 대한 대략적인 크기가 된다.

Picture 6

4. 각각에 대한 제1주성분, 제2주성분 점수를 구한다.

Picture 7

5. 제1주성분 점수와 제2주성분 점수를 토대로 그래프 작성

Picture 8

생성된 pdf 파일은 다음과 같다. 결론은 짬뽕, 김치, 쇠고기가 좋은 것으로 묶이고 국물이 역시 좋아야 한다는 결론,, -.-;;

R PCA
반응형

태그

,

댓글9

  • 학생 2011.04.28 21:44

    안녕하세요, 주성분분석에 대해서 조사하러 다니다 쉽게 설명하신 것을 보고 질문을 하나 남겨봅니다. ^^;;

    주성분분석에서 각 변수 값에 대한 상관행렬을 구하고, 상관행렬의 고유값과 고유벡터(그림에는 고유벡터 값이 안 나온 것 같은데 맞나요?;;)를 구하는데요, 여기서 구한 고유벡터가 주성분 혹은 기저와 동일한 것이 맞나요?

    그리고 각각에 대한 제1주성분, 제2주성분을 계산하여 그 값을 새로운 고유공간의 좌표로써 사용하는 것 같은데요, 그렇다면 제1주성분, 제2주성분을 계산하는 것은 하나의 대상(쇠고기라면의 경우 [2, 4, 5] 벡터로 표현한다면)에 무엇을 곱해서 계산하는지 궁금합니다.

    좋은 글 감사합니다. ^^
    답글

  • 방문자 2011.07.08 09:16

    안녕하세요.
    올려주신 글 너무 감사하게 보았습니다.
    R을 공부하는 초보이고 R을 이용해서 PCA 분석하는 글을 찾다가 여기까지
    오게 되었습니다.
    제 블로그에도 님이 올리신 글과 절차 + 일부 내용 첨가해서 글을 올리고 싶은데...
    괜찮으실런지요? 물론, 출처는 표시하구요.
    제 블로그 주소는 http://blog.naver.com/skkong89 입니다.

    아... 저자권 관련 크리에이티브 커먼즈 라이선스를 참조하니...
    출처 표시에 비영리 목적이면... 개작이 가능하군요.
    해당 라이선스로 제 블로그에 배포하겠습니다.
    양해 부탁드립니다.
    답글

  • 스마일 2011.12.17 12:46

    안녕하세요,,
    PCA를 하다가 궁금한점이 있어서 질문드립니다
    제가 SNP genotype을 가지고 있구요,, PCA를 해보려고 합니다..
    각 SNP는 0,1,2로 숫자로 변환시켜준후
    prcomp를 할때 scale, center, rex 옵션 등이 있는 걸로 알고 있는데요
    어떤 옵션을 사용해야 하는지,,,, 잘 모르겠어서요,, 질문드립니다..
    normalization을 꼭 해주어야 하나요??
    답변 부탁드립니다..
    답글

    • hongiiv 2011.12.18 22:34 신고

      간단히 말씀드리자면, SNP 데이터의 경우 PCA 분석을 수행할 때 EIGENSOFT라는 소프트웨어를 이용하면 쉽게 분석이 가능합니다. SNP과 같은 데이터를 가지고 PCA 알고리즘을 구현해 놓은거라, 이것을 사용하는편이 좀더 편리하고 논문에 언급하기도 수월합니다.

      Normalization 부분은 모든 SNP을 입력으로 넣는것이 아니라 서로 연관관계가 없는 SNP만을 선택해서 이를 PCA의 입력으로 넣는 것으로 마무리 됩니다. LD를 기준으로 SNP을 선택하시거나, 혹은 지놈상의 일정 거리를 두고 SNP을 선택하는 방법이 쓰입니다. 이때 PLINK와 같은 툴을 purining이라는 것을 이용해서 서로 관계가 없는 SNP만을 선택 후 > PCA 수행... 자세한 내용은 메일 주소를 주시면 메일로 매뉴얼을 보내드리겠습니다. ^^ 답변이 되었을라나 모르겠네요. ㅎ

  • 2013.02.19 15:13

    비밀댓글입니다
    답글

    • hongiiv 2013.02.20 16:19 신고

      우선 분석하고자 하는 데이터에 주목해 보시면 각각의 점수가 로우데이터로 쓰였습니다. 즉 PCA분석을 통해 나온 결과를 가지고 제가 좋다/나쁘다라고 이야기한것은 로우 데이터가 의미하는것이 각 라면의 특성에 대한 점수이기 때문입니다.

      PCA라는 것은 분석을 위한 것이고 데이터가 어떠한 특성을 가지느냐에 따라 좋다/나쁘다라고 혹은 다른 의미를 부여할 수 있는거죠... -.-;;

  • hongiiv 2013.02.22 17:11 신고

    PC값은 해당변수(여기서는 라면의 국물,그릇,면)를 잘 설명하는 하나의 값입니다. 즉 쇠고기라면이 0.71이고 해물라면이 -0.97이라고 되어있죠. 단순한 값으로 여기서 -/+는 별의미가 없는 것입니다. 그냥 이들의 특성을 PCA라는 알고리즘이 돌아서 나온값으로 오히려 의미있는건 두 값이 차이가 되겠죠. 모두 +값으로 나오게 만들 수도 있는거구요.
    답글

  • 2013.02.28 12:28

    비밀댓글입니다
    답글