農学生命情報科学実習I −マイクロアレイ解析−


  1. はじめに
  2. DNAマイクロアレイ(DNAチップ)とは
  3. 公共遺伝子発現データベース
  4. 実習で用いるマイクロアレイデータ
  5. 実習で行うマイクロアレイ解析手法
  6. Rを用いたマイクロアレイデータ解析
  7. 参考文献およびマイクロアレイデータベース

0. 予めチェック!

1. はじめに




2. DNAマイクロアレイ(DNAチップ)とは




3. 公共遺伝子発現データベース




4. 実習で用いるマイクロアレイデータ

ヒトの様々な正常組織から得られた遺伝子発現プロファイルデータ(22,283 clones×36 tissues)。



5. 実習で行うマイクロアレイ解析手法

本実習では、機能ゲノム学の第5回講義で紹介した「階層的クラスタリング」と「パターンマッチング法」を行います。

 5-1. 階層的クラスタリング
 5-2. パターンマッチング法



6. Rを用いたマイクロアレイデータ解析

【データの前処理】
GDS1096.txt(GDS1096.soft.txtファイルを加工したものです)

6-1. 階層的クラスタリング
  1. Rを起動。

  2. 「ファイル」−「ディレクトリの変更」で解析したいファイル(GDS1096.txt)を置いてあるデスクトップに移動。

  3. R Console画面上で、"getwd()"と打ち込み、ディレクトリがデスクトップになっていることを確認。

  4. GDS1096.soft.txtを加工したファイル(GDS1096.txt)をRで読み込み、階層的クラスタリングを行ってみましょう。このとき、発現ベクトル間の類似度は1-相関係数(method.dist="correlation")で定義し、方法は群平均法(method.hclust="average")で実行することにします。
    以下をコピー&ペーストするだけで樹形図まで描いてくれます:
    ------    ここから    ------
    library(pvclust)          #クラスタリングを行うpvclust関数が含まれているpvclustパッケージの読み込み
    GDS1096 <- read.table("GDS1096.txt", header=TRUE, row.names=1) #ファイルの読み込み
    dim(GDS1096)              #行数と列数を表示
    colnames(GDS1096)         #列名を表示(IDENTIFIERという余分な列があることが分かる)
    GDS1096$IDENTIFIER <- NULL#余分なカラム「IDENTIFIER」の消去
    colnames(GDS1096)         #列名を表示(IDENTIFIER列が消去されていることが分かる)
    colnames(GDS1096) <- substring(colnames(GDS1096), 8, nchar(colnames(GDS1096)))   #列名の最初の8文字分(つまり "Normal_")を削除
    colnames(GDS1096)         #列名を表示("Normal_"が消去されていることが分かる)
    GDS1096.pv <- pvclust(GDS1096, method.hclust="average", method.dist="correlation", nboot=5) #クラスタリングの実行
    plot(GDS1096.pv)          #樹形図(デンドログラム)の表示
    
    ------    ここまで    ------
    
    参考1:マルチスケール・ブートストラップ法について
    参考2:マルチスケール・ブートストラップ法に関する下平先生の講演PDFファイル
    参考3:文献(Suzuki and Shimodaira, Bioinformatics, 2006)
    参考4:pvclustについて
    参考5:得られた樹形図を保存したい場合には、R Graphics画面をアクティブにして「ファイル」−「別名で保存」とすることで、任意の形式で保存することができます。

    【練習2】 機能ゲノム学第5回で講義した「最長距離法(complete)」で階層的クラスタリングを行い、「群平均法(average)」で得られる樹形図との違いを比較してみましょう。

    参考1:「最長距離法(complete)」で行った結果をGDS1096.complete.pvとするなど別の名前で保存しておけば、あとで何度でも結果にアクセスすることができるので便利です。
    参考2:クラスタリングの方法(method.hclust; クラスター間の距離を定義する方法)はaverageのほかにsingle, complete, ward, mcquitty, median, centroidが選択可能です。詳細はこちら
    参考3:発現ベクトル間の類似度(method.dist; 組織間の類似性指標)はcorrelationのほかにuncentered, abscorが選択可能です。数式など詳細はこちら
    参考4:average, single, complete-linkage clusteringなど様々な方法の比較を行っている論文(de Brevern et al., BMC Bioinformatics, 2004

    「群平均法」のクラスタリング結果(PDF)
    「最長距離法」のクラスタリング結果(PDF)

  5. 先ほどは全データを生データのままでクラスタリングしましたが、通常クラスタリングを行う際は、以下のような様々なフィルタリングやスケーリングを予めおこなっておきます:
    以下をコピー&ペーストして遺伝子のフィルタリングおよびスケーリングを行ってみましょう:
    ------    ここから    ------
    library(som)                   #遺伝子フィルタリングのためのfiltering関数が含まれているパッケージsomの読み込み
    GDS1096.f <- filtering(GDS1096, lt=50, ut=max(GDS1096), mmr=2, mmd=100)#フィルタリングを実行し、結果をGDS1096.fに格納
    dim(GDS1096)                   #行列GDS1096の行数と列数を表示
    dim(GDS1096.f)                 #行列GDS1096.fの行数と列数を表示(22283行から12559行になっていることが分かる)
    GDS1096.f.log <- log(GDS1096.f)#log変換し、結果をGDS1096.f.logに格納
    library(genefilter)            #Z scaling用の関数genescaleが含まれているパッケージgenefilterの読み込み
    GDS1096.f.log.z <- genescale(GDS1096.f.log, axis=1, method="Z")#遺伝子方向にZ scalingした結果をGDS1096.f.log.zに格納
    
    ###  Z scaling前後の数値を比較(参考まで)  ###
    rownames(GDS1096.f)[3]                        #filtering後の行列GDS1096.fの3行目のクローンIDを表示
    GDS1096["1255_g_at",]                         #"1255_g_at"クローンのfiltering前のシグナル強度を表示
    GDS1096[rownames(GDS1096.f)[3],]              #filtering後の行列GDS1096.fの3行目のクローンID(i.e., "1255_g_at")のfiltering前のシグナル強度を表示
    GDS1096.f[rownames(GDS1096.f)[3],]            #"1255_g_at"クローンのfiltering後のシグナル強度を表示
    GDS1096.f.log[rownames(GDS1096.f)[3],]        #"1255_g_at"クローンのfiltering後のシグナル強度をlog変換した数値を表示
    GDS1096.f.log.z[rownames(GDS1096.f)[3],]      #"1255_g_at"クローンのfiltering後のシグナル強度をlog変換した数値に対してZ scalingした値を表示
    mean(GDS1096.f.log.z[rownames(GDS1096.f)[3],])#Z scalingすると平均値が0になる
    sd(GDS1096.f.log.z[rownames(GDS1096.f)[3],])  #Z scalingすると標準偏差が1になる
    
    ------    ここまで    ------
    
    これで一連の処理を経た結果がGDS1096.f.log.zに保存(格納)されました。
    GDS1096.f.log.zを"GDS1096.f.log.z.txt"というファイル名で保存するには以下のようにします:
    ------    ここから    ------
    tmp <- cbind(rownames(GDS1096.f.log.z), GDS1096.f.log.z)                           #遺伝子IDの列を行列GDS1096.f.log.zの左端に挿入し、結果をtmpに格納
    write.table(tmp, "GDS1096.f.log.z.txt", sep = "\t", append=F, quote=F, row.names=F)#結果をファイル(ファイル名:GDS1096.f.log.z.txt)に保存。
    
    ###  なぜ以下のようにやらないのか(参考まで)  ###
    write.table(GDS1096.f.log.z, "GDS1096.f.log.z2.txt", sep = "\t", append=F, quote=F, row.names=T)#結果をファイル(ファイル名:GDS1096.f.log.z2.txt)に保存。
    
    ------    ここまで    ------
    
    頑健なクラスターをより正確に見積もるため、少しブートストラップのリサンプリング回数を増やして(nboot=20)クラスタリングを行ってみましょう:
    ------    ここから    ------
    GDS1096.f.log.z.pv <- pvclust(GDS1096.f.log.z, method.hclust="average", method.dist="correlation", nboot=20) #クラスタリングの実行
    plot(GDS1096.f.log.z.pv)                        #樹形図(デンドログラム)の表示
    pvrect(GDS1096.f.log.z.pv, alpha=0.95, pv="au") #頑健なクラスター(approximately unbiased p-value > 95%)を四角で囲む
    pvpick(GDS1096.f.log.z.pv, alpha=0.95, pv="au") #得られた頑健なクラスター(approximately unbiased p-value > 95%)を構成するサンプル名を表示
    
    ------    ここまで    ------
    
    参考:得られた樹形図を保存したい場合には、R Graphics画面をアクティブにして「ファイル」−「別名で保存」とすることで、任意の形式で保存することができます。
    クラスタリング結果(PDF)

【課題1】
以下の条件でフィルタリングやスケーリングを行ったサブセット(22283行 --> 8937行)に対して、組織間クラスタリングを行い、得られた樹形図について考察(400字程度以上)してください。考察については、生物学的な側面またはバイオインフォマティクス的な側面からの考察のいずれ(両方も可)でも結構です。
提出物1:結果出力に用いた一連のRコマンドファイル(kadai1_command.txt)。コマンドファイル作成は「WordPad」で行うと便利です。kadai1_command_sample.txtをテンプレートとして用意しました。
提出物2:得られた樹形図のPDFファイル(ファイル名:kadai1.pdf)
提出物3:考察などの文書ファイル(kadai1.txt or kadai1.doc)


6-2. パターンマッチング法
例題として、22,283遺伝子の中から「心臓(heart)」で特異的に発現している遺伝子上位10個をリストアップする作業を行います。作業の大まかな流れは以下の通りです:
@ 目的組織(この場合、心臓)で1、それ以外の組織で0とした「テンプレートパターン」を用意
A22,283行(遺伝子)×36列(組織)からなる遺伝子発現行列の一行一行について、「テンプレートパターン」との類似度を計算
B指定した数(この場合、10個)の遺伝子IDなどを類似度の高い順にリストアップ
CアノテーションファイルGPL96.annot.txtから、得られた心臓特異的遺伝子のIDに対応するアノテーション情報を抽出し考察
  1. 目的組織(心臓)で1、それ以外の組織で0とした「テンプレートパターン」を含んだファイル(GDS1096_cl_heart.txt)を予め作成。(“cl”はclass labelの意です。)
    注意点:22,283行(遺伝子)×36列(組織)からなる遺伝子発現行列を含んだファイルGDS1096.txt中の組織の並びと、GDS1096_cl_heart.txt中の組織の並びは同じにしておく必要があります。

  2. 22,283遺伝子の中から心臓で特異的に発現している遺伝子の上位10個をリストアップします。
    リストアップ
    まず、以下をコピー&ペーストして、パターンマッチングを行って候補遺伝子群を抽出したいファイル(GDS1096.txt)と「テンプレートパターン」を含んだファイル(GDS1096_cl_heart.txt)を読み込みます。
    ------    ここから    ------
    library(genefilter)                   #パッケージの読み込み
    GDS1096_tmp <- read.table("GDS1096.txt", header=TRUE, row.names=1)#GDS1096.txtファイルを読み込んでGDS1096_tmpに格納(これをそのまま使うわけではないので"_tmp"を付加している)
    GDS1096_tmp$IDENTIFIER <- NULL        #余分なカラム「IDENTIFIER」の消去
    colnames(GDS1096_tmp) <- substring(colnames(GDS1096_tmp), 8, nchar(colnames(GDS1096_tmp)))   #列名の最初の8文字分(つまり "Normal_")を削除
    GDS1096_tmp[GDS1096_tmp < 1] <- 1     #1未満の値を1に置換
    GDS1096_tmp <- log(GDS1096_tmp, 2)    #log変換し、結果を再びGDS1096_tmpに格納
    GDS1096 <- as.matrix(GDS1096_tmp)     #as.matrixの意味は、「データの型を"行列として(as matrix)"GDS1096に格納せよ」です。(read.tableで読み込んで得られたGDS1096_tmpのデータの型は"データフレーム"なので、そのままではこの場合は使用不可なのでやる必要があります)
    GDS1096_cl_heart <- read.table("GDS1096_cl_heart.txt")#GDS1096_cl_heart.txtファイルを読み込んでGDS1096_cl_heartに格納
    template_heart <- GDS1096_cl_heart[,2]#バイナリ(0 or 1)情報(2列目)のみ抽出し、template_heartに格納
    template_heart                        #バイナリ(0 or 1)情報の確認
    
    ------    ここまで    ------
    
    genefinder()関数を使ってテンプレートパターンに最も似た発現パターンをもつ上位10個を抽出します。この際、データのスケール化は行わず(scale="none";生の発現データをそのまま使用)、類似度は1−相関係数(method=”correlation”)で評価することにします。
    ------    ここから    ------
    dim(GDS1096)                         #行列GDS1096の行数と列数を表示
    tmp <- rbind(GDS1096, template_heart)#template_heartというテンプレートパターンを行列GDS1096の最後の行に追加
    dim(tmp)                             #行列GDS1096にテンプレートパターンが追加された行列tmpの行数と列数を表示
    ID_REF <- rownames(tmp)              #行のラベル情報(つまり遺伝子IDに関する情報)をID_REFに格納
    template_posi <- which(ID_REF == "template_heart")#行のラベル情報が"template_heart"に相当する行情報をtemplate_posiに格納
    gene_num <- 10                       #上位10個という情報をgene_numに格納
    closeg <- genefinder(tmp, template_posi, gene_num, scale="none", method="correlation")#行列tmpの中で、template_posi行目の遺伝子発現プロファイルと近い上位gene_num個の情報をclosegに格納
    closeg[[1]]$indices                  #上位10個の行番号を表示
    rownames(tmp[closeg[[1]]$indices,])  #上位10個の"ID_REF"(遺伝子ID)を表示。underline部分が上位10個の遺伝子発現データに相当する。
    closeg[[1]]$dists                    #上位10個の類似度を表示
    
    ------    ここまで    ------
    
    参考:一連の計算はExcelでもできます。計算を行ったExcelファイルはここに置いてあります。

    ファイルに保存
    上位10個の遺伝子発現プロファイル情報を取り出し、ファイル(ファイル名:GDS1096_best10_heart.txt)に保存します:
    ------    ここから    ------
    GDS1096_best10_heart <- tmp[closeg[[1]]$indices,]                        #上位10個の遺伝子発現データを抽出し、GDS1096_best10_heartに格納
    tmp2 <- cbind(rownames(tmp[closeg[[1]]$indices,]) , GDS1096_best10_heart)#上位10個の"ID_REF"(遺伝子ID)情報とGDS1096_best10_heartを列方向で結合(column方向でbind)し、結果をtmp2に格納
    write.table(tmp2, "GDS1096_best10_heart.txt", sep = "\t", append=F, quote=F, row.names=F)#結果をファイル(ファイル名:GDS1096_best10_heart.txt)に保存。
    
    ------    ここまで    ------
    
    遺伝子ID情報のみ取り出してファイル(ファイル名:GDS1096_best10_heart_ID.txt)に保存したい場合には以下のようにします:
    ------    ここから    ------
    write.table(rownames(tmp[closeg[[1]]$indices,]), "GDS1096_best10_heart_ID.txt", sep = "\t", append=F, quote=F, row.names=F, col.names=F)   #遺伝子IDに関する情報のみ、ファイル(ファイル名:GDS1096_best10_heart_ID.txt)に保存したい場合。
    
    ------    ここまで    ------
    
    作図(pseudo-color image)
    上位10個の遺伝子発現データの入ったファイルGDS1096_best10_heart.txtを読み込み、pseudo-color imageを作成します。このとき、読み込んだそのままの数値情報(scale="none")を用い、暖色20段階(col = heat.colors(20))で表すことにします。
    ------    ここから    ------
    data <- read.table("GDS1096_best10_heart.txt", header=TRUE, row.names=1)#ファイルの読み込み
    heatmap(as.matrix(data), Rowv =NA, Colv=NA, scale="none", col = heat.colors(20), main="Best 10", xlab="Tissue", ylab="Clone ID", margin=c(8,10))#ヒートマップ(pseudo-color image)の作成
    
    ###  「data」と「GDS1096_best10_heart」は同じなので以下でも可(参考まで)  ###
    heatmap(as.matrix(GDS1096_best10_heart), Rowv =NA, Colv=NA, scale="none", col = heat.colors(20), main="Best 10", xlab="Tissue", ylab="Clone ID", margin=c(8,10))#ヒートマップ(pseudo-color image)の作成
    
    ------    ここまで    ------
    
    pseudo-color imageのpdf

    (このままでもいいのですが)遺伝子(row)ごとにスケール化(平均=0, 分散=1)したものがよく用いられるので、それもやってみます。
    ------    ここから    ------
    data <- read.table("GDS1096_best10_heart.txt", header=TRUE, row.names=1)#ファイルの読み込み
    heatmap(as.matrix(data), Rowv =NA, Colv=NA, scale="row", col = heat.colors(20), main="Best 10", xlab="Tissue", ylab="Clone ID", margin=c(8,10))   #ヒートマップ(pseudo-color image)の作成
    
    ###  「data」と「GDS1096_best10_heart」は同じなので以下でも可(参考まで)  ###
    heatmap(as.matrix(GDS1096_best10_heart), Rowv =NA, Colv=NA, scale="row", col = heat.colors(20), main="Best 10", xlab="Tissue", ylab="Clone ID", margin=c(8,10))#ヒートマップ(pseudo-color image)の作成
    
    ------    ここまで    ------
    
    pseudo-color imageのpdf

    参考1:得られたpseudo-color imageを保存したい場合には、R Graphics画面をアクティブにして「ファイル」−「別名で保存」とすることで、任意の形式で保存することができます。
    参考2:ここでは、暖色20段階のみで作図してみましたが、寒色(cm.colors)や虹色(rainbow)など様々な色を任意の階調(12段階や256段階など)で指定することができます(色調に関する参考URL)。

  3. アノテーションファイルGPL96.annot.txtから、得られた心臓特異的遺伝子のIDに対応するアノテーション情報を抽出し考察します。(ここでの作業はRを使用しません)

    【練習3】aかbのどちらかを行って、得られた心臓特異的遺伝子群が妥当であるかアノテーション情報をもとに考察してみましょう。
    1. エクセルでアノテーションファイルGPL96.annot.txtを開き、上位10個の遺伝子IDを一つ一つ検索してアノテーション情報を抽出し、GPL96_best_10_heart_annot.txtという名前でデスクトップに保存。その後、保存したファイルを再びエクセルで開いて心臓でよく発現していることが知られているmyosinやtroponinが含まれているかなどを確認。
    2. http://www.iu.a.u-tokyo.ac.jp/~kadota/tips.html#geo_annotationの実行例を参考にして、geo_gpl_annot.plというPerlプログラムをノートPCに保存し、プログラムを実行。得られた上位10個のアノテーション情報を含むファイル(GPL96_best_10_heart_annot.txt)をエクセルで開き、既知遺伝子(myosinやtroponin)の確認。 (バイオインフォマティクスリテラシーIIで習ったハッシュを利用してます。)

    参考webページ:NCBI RefSeqNCBI UniGene

    確認例:心臓特異的発現パターン検出用テンプレートに最も近いパターンをもつクローンは、”219942_at”であり、GPL96.annot.txt中でそのGenBank Accessionを調べてみると”NM_021223”であった。NCBI UniGeneでNM_021223を検索すると”Hs.75636”に対応することが分かった。GENE EXPRESSION欄を眺めてみると「Restricted Expression: heart normal fetus」などと書いてあったので妥当な結果と判断された(他には、例えばGENE EXPRESSION欄中のExpression Profileをクリックして確かめる、など)。

【課題2】
a〜dの中から一つ興味ある課題を行ってください(複数行い、それらを合わせて考察するのでも結構です)。いずれも上位10個をリストアップし、結果の考察(400字程度以上)を行ってください。課題1と同様、得意分野(生物寄り・バイオインフォマティクス寄り)での考察でも結構です。GEOデータベースの中から、自分の興味あるデータセットをダウンロードして同様な解析を行ってもかまいません。
  1. 自分の興味ある一組織(「心臓」以外)で特異的に発現している遺伝子(テンプレートパターンファイルを自分で用意)
  2. 複数組織で選択的に高発現している遺伝子(テンプレートパターンファイルを自分で用意)
  3. アノテーションファイルGPL96.annot.txtから興味ある遺伝子の遺伝子IDを調べ、その発現プロファイルをテンプレートとして発現パターンの類似している遺伝子(興味ある遺伝子の発現プロファイルをテンプレートとして使用)
  4. 二つのアノテーションファイル(GPL96.annot.txtGPL96.annot2.txt)間の違いは、アノテーションの日付である。任意の遺伝子セット(あるいは全部)を比較することにより、最新のアノテーション情報を使うことの重要性について考察せよ
  5. リテラシーIのGene Ontology解析
提出物1:結果出力に用いた一連のRコマンドファイル(kadai2_command.txt)。コマンドファイル作成は「WordPad」で行うと便利です。
提出物2:得られたpseudo-color imageのPDFファイル(kadai2.pdf)
提出物3:考察などの文書ファイル(kadai2.txt or kadai2.doc)

a〜cのどれをやったのか、どの組織について行ったのか明記し、簡単に考察を行ってください。リテラシーIのGene Ontology解析を行えば、より理解が深まるかもしれません。dに関しては、どの遺伝子セットについて比較を行いどれだけ違いがあったのかなどについて考察してください。最後に感想やコメントを書いてください。尚、提出物3については、課題1,2をまとめてもかまいません。





7. 参考文献およびマイクロアレイデータベース

ヒトの様々な正常組織の発現プロファイルデータ解析に関する論文
マウスの様々な正常組織の発現プロファイルデータ解析に関する論文
ラットの様々な正常組織の発現プロファイルデータ解析に関する論文
データベース

Last updated on 2008.7.31