2010年11月25日木曜日

Rでヒートマップ 適当メモ (せせけんwikiからも引用)

x <- read.table("x.txt",header=TRUE,sep="¥t",row.names=1)

⇒getwd()で今いる作業フォルダを確認してその位置からのx.txtを使います。

⇒ファイルの1行目がデータではなくサンプル名等の場合、
header=TRUE とし、1行目からデータが始まっている場合、
header=FALSE と指定する。
⇒sep=" "の部分で、読み込むデータファイルが何で区切られている
のか指定する。
⇒ファイルの1列目がデータではなく遺伝子名等の場合、
row.names=1 とし、1列目からデータが始まっている場合、
特に何も記述しない。
(もちろんR内でtableを自分で作っている場合には、この手順は必要ないです。)

 * 読み込んだデータを、numericクラスに変換する。数値に変換する必要があるためです。

x_numeric <- apply(x,c(1:2),as.numeric)

⇒行列の形をしたデータの全体をnumericにしたい場合、
apply関数の2番目の要素はc(1:2)とし、
全体に作用させたい関数をapply関数の3番目の要素とする。このapply関数はよく使います。
 


> x_numeric
           a   b   c   d
weight    55  60  42  70
height   150 173 148 180
body fat  28  12  22  15

*データ間距離を計算

x_euclid <- dist(x_numeric,method="euclid")

⇒numericに変換したデータ間のユークリッド距離を
求め、距離行列をx_euclidに代入している。
method=" "の部分は"euclid","manhattan","minkovski","canberra"が指
定できる。

*クラスタリングの方法を選択

x_ward_hclust <- hclust(x_euclid,method="ward")

⇒method=" "の部分は
"single","complete","average","centroid","ward"が指定できる。
(ちなみにここで
plclust(x_ward_hclust,hang=-1)
とするとデンドログラムがかけます。)

 ** ヒートマップの作成

heatmap(x_numeric,hclustfun= function(x_euclid) hclust(x_euclid,method="
ward"))


      ⇒numericとはxをnumericクラスに変換したデータ
      ⇒x_euclidとはxをユークリッド距離行列に変換したデータ
      ⇒function()とは関数の定義で、hclustfunのパッケージ内の
       ある関数を呼び出している。ここでは関数hclustをよびだして、
       xのユークリッド距離行x_euclidを引数としている。
(もっときれいな書き方があったようにも思うのですが、ちょっと思い出せなく
てすみません;;)

ちなみに
    * 行と列のクラスタリング方法を変えたい場合

      例として行をaverage法、列をward法でクラスタリングする

      x_average<-hclust(x_euclid,method="average")
      x_row<-as.dendrogram(x_average)
      heatmap(x_numeric, Rowv=x_row, hclustfun=function(x_euclid) hclust
(x_euclid,method="ward"))

      ⇒x_rowはx_euclidをaverage法でクラスタリングしたデータ
⇒heatmapにおいてRowvで行のデンドログラムを指定する
      ⇒列のクラスタリング法は heatmap()のhclust()で指定する。

です。

また保存する場合は
    * 保存するファイルを作成する

pdf("___.pdf",paper="a4r")#ファイル名と大きさを指定
heatmap(x_numeric,hclustfun= function(x_euclid) hclust(x_euclid,method="
ward"))
dev.off()

0 件のコメント:

コメントを投稿