공부해 봅시다/R-Project

Heatmap 만들기

Anonymous Pathologist 2010. 5. 16. 13:01
  작년쯤에 겨우 했는데 기록을 해두지 않았더니 다시 기억을 끄집어 내는데 2시간쯤 걸렸다. 그래서 까먹지 않도록 여기에 기록을 해두어야 겠다는 생각이 들었다. 예전에 기록한 내용이라서 될 줄 알고 그냥 했더니 오류가 있어서 수정을 했다. 기본은 Data 파일을 불러와서, Matrix 로 변환한 다음 Heatmap 작성이다. 말로는 간단하고, 실제로도 간단하다. :)

arraydata <- read.table("b08.csv", header=T, sep=",")
설명) b08.csv 에 저장한 파일을 불러와서 arraydata 에 입력한다. 보통 자료를 관리할 때에 첫 열에 기본 항목을 입력하는 경향이 있는데 이러한 양식을 그대로 사용할 경우 Heatmap 을 만들 수가 없다. 물론, 첫 열을 인식시키지 않는 방법이 있을 것 같기는 하지만, 아직 방법을 찾지 못했다. 첫 줄의 항목은 Header 항목으로 인식하고, 자료 사이의 값은 ",(쉼표)" 에 의하여 분리되어 있다는 의미임. 엑셀에서 파일을 CSV 로 저장할 때에 'CSV (쉼표로 분리)' 라는 항목이 있는 것을 알고 있어야 함.

matrixarraydata <- as.matrix(arraydata)
설명) Distance 를 계산하기 위해서는 자료를 matrix 로 불러와야 한다고 함. 기본적인 개념을 알고 있어야 할 것 같기는 한데.. 아무튼 'as.matrix' 로 하면 한 방에 해결됨. 이러면 b08.csv 에서 불러온 파일은 matrixarraydata 라는 matrix 로 입력된다.

heatmap(matrixarraydata, hclustfun=my.hclust, distfun=my.dist)
설명) 결과값을 heatmap 으로 작성해 줌. Clustering 방법은 my.hclust 에서 지정된 방법, distance 는 my.dist 에서 지정된 방법으로 구함. 기본적으로 euclidean distance 에 complete method 로 clustering 이 되어 있어서 뒷 부분은 빼줘도 되지만, 다른 방법으로 해볼 것이라면 넣어 주는게 좋다.

my.hclust <- function(x){hclust(x, method="complete")}
설명) 대부분의 논문에서 생략하는 부분인데 이런 data 는 Chip 에 DNA 나 RNA 등을 반응시키는 방법부터 Scan 은 어떻게 하였으며, 어떻게 Normalization 을 시행 했는데 기술을 해줘야 한다. Normalization 은 아직 책에서 몇 번 보고 넘어간 부분이라서 생략하도록 하고, 외부에 의뢰를 하면 Normalization 까지는 되어져서 오기 때문에 구할 필요까지는 없다. Complete method를 사용할 경우에는 저렇게 표현하고 Ward method 일 경우에는 "ward"라고 하면 됨.

my.dist <- function(x){dist(x, method="euclidean")}
설명) 위에걸 보면 이것도 쉽게 알 수 있다.



 약 5000개의 값이 10개 있는 data로 만든 표이다. 처음에 중복된 값이 3개씩 있다는 것을 몰라서 15000개 정도의 값을 10개 있는 걸로 했더니 메모리 부족이라며 안되었는데.. 그래도 5000개 정도이면 시간이 좀 걸려서 그렇지 나오기는 한다. 시간을 측정하지는 않았지만 5~10분 정도 소요된다.

2009/06/21 - [공부해 봅시다/R-Project] - Heatmap
2009/06/23 - [공부해 봅시다/R-Project] - 함수 지정하기..ㅡㅡ

2008/05/03 - [지름신의 영접] - Do more in less time

'공부해 봅시다 > R-Project' 카테고리의 다른 글

Array data 살펴 보기 - 삽질편  (0) 2010.05.26
Green-Black-Red heatmap  (0) 2010.05.24
Chip data 찾아보기..  (0) 2010.05.05
McNemar Test  (0) 2009.10.11
Odds ratio  (2) 2009.10.06