Category: R

  • Green-Black-Red heatmap

    Green-Black-Red heatmap

      Heatmap 은 역시 녹색, 검정, 빨강으로 표시가 되어야 제맛이다. 🙂
      R-Project에서 제공하는 Heatmap 으로는 안되고 별도의 패키지를 설치하여야 하며, 이 경우에는 gplots 패키지를 설치해야 한다. 그러면 heatmap.2 라는 명령어를 사용할 수 있으며, 이 명령어를 통해서 쉽게 만들 수 있다.

    library(gplots)
    heatmap.2(abc, col=redgreen(75), trace=”none”, density.info=”none”, hclustfun=my.hclust, distfun=my.dist)

    아직 trace, density.info 에 대한 것은 확인하지 못했다. 없어도 늘 보는 것들과 차이가 없다는 점에서 필요 없을 것 같기는 하다. 🙂

  • Heatmap 만들기

    Heatmap 만들기

      작년쯤에 겨우 했는데 기록을 해두지 않았더니 다시 기억을 끄집어 내는데 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

  • Chip data 찾아보기..

    Chip data 찾아보기..

      지난번 Heatmap 결과(2010/05/01 – [공부해 봅시다/R-Project] – Heatmap 만들기) 를 통하여 앞의 2개의 증례 가 다른 증례와는 다소 차이가 나는 것을 확인해 보았다. 하지만 Heatmap 을 만드는 과정에서 자료의 위치가 이동하기 때문에 원자료를 찾아보면 그 2개의 증례는 10번, 11번째 column 에 위치하는 것을 확인하였다.

      여기서 부터가 삽질이었다. 특정 질환에서 발현이 증가하고 다른 질환에서 발현이 감소하는 그러한 값을 찾는것이 기본이 되기 때문에 이 미묘한 자료를 찾는 것은 엑셀에서 순차 정렬을 11번 반복하게 된다.  OTL
      게다가 cut-off 값을 바꾸면 바꿀 때 마다 이 짓을 계속 해야하기 때문에 인터넷 바다를 검색한 끝에 해결책을 찾았다. 비록 결과물이 좀 보기 흉하기는 하지만, 내가 할 삽질을 컴퓨터가 대신 하도록 하는 방법을 찾을 수는 있었다.

    data <- read.table(“b08.csv”, header=T, sep=”,”)
    설명) 자료를 불러오는 것. 이 자료는 지난 자료와는 달리 첫 column 에 chip의 설명을 담고 있다. 특정 유전자를 찾기 위해서는 필요한 정보이다. 문자값이 있기 때문에 Heatmap 으로 진행은 할 수가 없다.

    x <- which(data[,2] < X & data[,3] < X & data[,4] < X & data[,5] < X & data[,6] < X & data[,7] < X & data[,8] < X & data[,9] < X & data[,10] < X & data[,11] >= X & data[,12] >= X)
    설명) 식이 좀 지저분하지만 Ctrl+C 와 Ctrl+V를 반복하면 쉽게 만들 수 있다. data 의 2~10 column 까지는 X 값보다 작은 것을 선택하고, 11, 12 column 은 X 값보다 같거나 큰 값을 선택한다. 아직 정확한 사용법을 알고 있지는 않지만 이렇게 한 후에 x 값을 살펴 보면 row 번호만 나왔다. 그래서 다음과 같은 식을 입력해주면 그 row 에 해당하는 값을 볼 수가 있다.

    data[x,]

    X 값을 1부터 대략 20 정도까지 일일이 입력하고 그 결과를 확인하면 되지만.. 그래도 반복되는 구문이라서 해결책을 찾을 수 있었다.

    for (X in 1:20) {
    x <- which(data[,2] < X & data[,3] < X & data[,4] < X & data[,5] < X & data[,6] < X & data[,7] < X & data[,8] < X & data[,9] < X & data[,10] < X & data[,11] >= X & data[,12] >= X)
    print(X);print(data[x,])}
    설명) 역시 R-project의 문법을 정확하게 이해하고 있지 않아서 생긴 지저분한 문장이다. {} 괄호로는 하나의 식을 입력할 수 있고, 엔터키로 문장을 바꾸면 실행을 하게 되는 것 같기는 한데.. ㅡㅡ;;
    X가 1에서 20까지 1씩 증가하는 값으로 되어 있고 그에 따라서 x 값이 나온다. 결과를 보여주기 위해서 어떤 X 값인지 보여주는 print(X) 와 그 X 값에 따른 결과물을 볼 수가 있다.

  • McNemar Test

      SPSS로 McNemar Test를 하려고 하는데 힘들었다. Matrix로 실행하는 방법이 없는 것 같은데 못찾은 건지는 모르겠다. R이 새삼스럽게 고마워지는 순간이었다. R의 장점 중 하나는 p=0.000 이라는 표현 대신에 지수를 사용해서 작은 값을 표현해준다. 🙂
      Data가 없이 표로만 자료가 주어지는 상황이라면 다음과 같은 방법으로 구할 수가 있다. Data 입력 순서와 보여지는 방식을 잘 보면 응용하기는 쉽다.

    > drug <- matrix(c(55,9,43,77), nrow=2, dimnames=list(“Before program”=c(“No”, “Yes”), “After program”=c(“No”, “Yes”)));drug
                  After program
    Before program No Yes
               No  55  43
               Yes  9  77
    > mcnemar.test(drug)

            McNemar’s Chi-squared test with continuity correction

    data:  drug
    McNemar’s chi-squared = 20.9423, df = 1, p-value = 4.733e-06