R을 이용한 3차원 PCA plot 그리기

3차원의 scatter plot을 그리기

주성분분석(PCA)에서는 1,2주성분에 대해서 각각 x,y의 2차원상에서 plot을 그려서 보여준다. 그런데 어느 논문에서 각 개체의 1부터 7까지 주성분을 모두([1,2주성분],[3,4주성분],[5,6주성분],[7,8주성분] - 총 4개의 그래프를 죄다 보여주는)보여주는 것을 보고는 저럴 필요가지 있을까라는 생각이 들긴 했지만, 그렇다면 개체의 1,2,3 주성분(x,y,z축으로)을 3차원으로 보여주는 것도 괜찮을 것 같다는 생각이 들었다.

우선 R의 rgl패키지의 plot3d()를 이용할것이므로 rgl 패키지를 설치한다.

>library(rgl)
>data<-read.table("point2.dat",header=TRUE)
>p1=prcomp(data,scale=TRUE)
>p2<-predict(p1)
>plot3d(p2[,1:3])

또는 prcomp() 대신 princomp()를 이용할 경우에는

>p3<-princomp(data,scale=TRUE)
>plot3d(p3$scores[,1:3])

이렇게 그려진 plot은 다음과 같이 OpenGL을 이용하여 그려지게 되고, 마우스 줌과 회전이 가능해진다. 마우스로 적당한 포즈?를 취한 후에는 snapshot()을 이용해서 그림 파일로 저장이 가능하다.

>rgl.snapshot("3dplot.png")

rgl plot3d

그림 파일이 아닌 동영상(움직이는 gif)로 저장하고 싶다면 ImageMagick을 설치한 후 movie3d()를 실행하면 지정된 tmp 폴더에 movie.gif 라는 움직이는 동영상이 저장된다.

>movie3d(spin3d(),duration=20,convert=TRUE)


이건 신모박사님의 데이터를 잠깐 빌려서 그려본 3D PCA plot  ^^;;
Picture 4

Posted by hongiiv

2009/06/25 15:58 2009/06/25 15:58
,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/594

PCA(Principal Components Analysis) - Using R

각 라면에 대하여 면발, 라면 그릇의 모양(크기), 국물맛에 대한 점수가 있다고 한다면, 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

Posted by hongiiv

2009/06/23 17:48 2009/06/23 17:48
,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/592

R-package 컴파일 하기

모든 생물정보학을 하시는 분들의 제일 첫 질문은 R 설치되어 있습니까? 라는 질문이다. 가장 많이들 사용하시는 프로그램(?) 중 하나인데, 일반 X86에서는 문제가 없지만, Intel Itanium2나 IBM PowerPC의 64bit machine에서는 잘 컴파일된 것 같지만, 막상 테스트를 해보면 어이없게도 에러가 발생하곤 한다.

PPC64에서 rnorm(10^9)을 계산해보면 바로 메모리 관련 에러를 뱉으면서 계산하기 싫다는 에러를 내곤 계산을 포기하는 현상이 발생해 버렸다(cannot allocate vector length XXXXXKB). 여태 모르고 있었다니..ㅜㅜ 음~ 역시 구글링을 통해 R 메일링 리스트를 검색해보니 답이 나와 있더군요 ^^

It has been reported that using gcc 4.0.3 on `ppc64' needed the compiler flag -mminimal-toc to avoid errors when linking R as a shared library.

To build a 64-bit version of R on `ppc64' (also known as `powerpc64') with gcc 4.1.1, Ei-Ji Nakama used

     CC="gcc -m64"
     CXX="gxx -m64"
     F77="gfortran -m64"
     FC="gfortran -m64"
     CFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2"
     FFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2"

the additional flags being needed to problems linking against libnmath.a and when linking R as a shared library.

64비트 옵션을 주기 위해서 -m64 뿐만 아니라, 동적으로 링크 된 바이너리를 만들기 위해서는 -fPIC 플래그가 포함해야 하고, TOC 지원(8K 엔트리 보다 큼)은 -mminimal-toc 컴파일 플래그로 지정된 다중 TOC가 필요하다.

그래서 위의 내용을 기반으로 해서 ./configure를 실행할 때 다음과 같이 실행한다.

./configure --prefix=/usr/local/R CC="gcc -m64 -fPIC" F77="g77 -m64 -fPIC" CXX="gcc -m64 -fPIC" FC="g77 -m64-fPIC" CFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2" FFLAGS="-mminimal-toc -fno-optimize-sibling-calls -g -O2" --with-readline=no --with-x=no LDFLAGS="-L/lib64"

그다음은 make, make install 끝~

Posted by hongiiv

2007/12/06 18:00 2007/12/06 18:00
, , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/282

R 과 Rserve를 이용한 Taverna 프로그래밍

향후 Bioworks의 경우 각종 스크립트 언어를 추가하여 사용자가 워크플로우내에서 프로그래밍을 통하여 필요한 기능을 추가할 수 있도록 할 계획에 있다고 한다.

Taverna의 경우는 BeanShell이라는 Java 언어를 통하여 사용자가 워크플로우내에 프로그래밍 로직을 작성할 수 있도록 해주고 있다. 기타 Perl, python, Ruby등의 다른 스크립트 언어에 익숙한 사용자에게는 다소 불편함이 있을 수도 있다.

어쨌든 이러한 프로그램 언어의 사용과 더불어 Taverna에서는 통계 언어인 R(Bioinformatics에 관련된 라이브러리도 상당히 많이 존재하죠 ^ㅇ^)을 사용할 수 있도록 하고 있는데, 바로 RShell을 통해서다.

Taverna의 RShell은 R을 TCP/IP 기반으로 원격에서도 실행하고 그 결과를 돌려 받을 수 있는 Rserve를 통해서 가능하도록 하고 있다.

여기서는 윈도우즈 환경에서 R과 Rserve를 설치하고 Taverna가 Rserve를 통해서 R 스크립트를 워크플로우내에 포함시켜 볼 것이다.

첫번째는 R과 Rserve를 윈도우즈 설치하여야 한다. R은 여기(R 윈도우즈용 2.4.0버전을 다운로드한다. 현재 Rserve가 R 2.4.0을 지원하기 때문에 R 2.6.0은 좀 기다려야 할듯...)에서 다운로 한다. (http://bibs.snu.ac.kr/R/bin/windows/base/old/2.4.0/)

두번째로 Rserve를 여기서 다운로드 한다. 윈도우즈 버전을 다운로드 한다. (http://rosuda.org/Rserve/dist/rserve-win.html)

R을 설치하면 C:\Program Files\R\R-2.4.0\bin 위치에다가 Rserve.exe를 복사해 넣는다. 도스창을 띄워서 R.exe CMD Rserve.exe 라고 치면 R과 Rserve를 사용할 수 있다.

RRun

Rserve가 잘 수행되는 확인하기 위해서 telnet을 통해서 localhost의 6331 포트로 접속해 본다. 다음과 같은 화면이 나오면 제대로 설치된 것이다.

Rtelnet

RtelnetResult

이제 Taverna를 통해서 RScript를 작성하고 로컬에 설치된 R과 Rserve를 통해서 실행하면 된다.

Taverna의 Processor에서 RShell을 선택하여 model에 추가한다. 추가된 RShell 프로세서를 속성을 다음과 같이 편집한다. output을 string 형태로 지정하고 sin값을 구하는 스크립트를 작성한다. 최종 Taverna의 outputs와 지정한 RShell의 output을 연결하고 실행하면 끝.

sin값을 구하는 RShell 스크립트
Rscript

RShell의 output을 지정
RscriptOut


완성된 워크플로우
tavernaR

RScript를 수행한 Taverna결과
taverResult

보너스로 R을 통해서 만들어진 이미지도 Taverna에서 가져올 수 있습니다. (그런데 지금까지 내용은 모두 Taverna 문서에 있는거 아시죠 ^^) output을 하나 만들고 이 ouput의 mime type을 image/png로 지정합니다. 그리고 RScript를 통해 이미지를 그립니다.

이미지 그리기 RScript
pngscript

output의 mime types을 지정

mimetype

결과로 출력된 이미지
imageresult

Posted by hongiiv

2007/11/16 14:35 2007/11/16 14:35
, , , , , , , ,
Response
No Trackback , 4 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/260

R 패키징하기

R을 사용하는 사람들이 많아서 아예 패키징을 해버렸는데 잘된건지??
SUSE Linux Enterprise Server 9 for IBM POWER에서 패키징한 spec파일과 소스RPM입니다.
일반적인 RedHat계열의 x86용은 패키징된것이 많이 있는데 PPC용은 없어서 한번 만들어봤습니다.

R.spec
R-base-2.4.1-0.src.rpm
R-base-2.4.1-0.ppc64.rpm


Posted by hongiiv

2007/06/11 09:45 2007/06/11 09:45
, , , , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/197



야후 블로그 벳지


Site Stats

Total hits:
291450
Today:
57
Yesterday:
166