Microarrayの解析

とりあえず、NCBI GEOで公開されているMicroarrayのデータを使って、特徴的な遺伝子のリストを得るための、覚え書き。
例題は、GSE16515として公開されている、膵臓癌のデータを使うことにする。

library(GEOquery)
gse16515.eset <- getGEO("GSE16515")[[1]]
gse16515.eset.exp <- exprs(gse16515.eset)

で、このデータはTumorとNormalが整然と並んでいないので、面倒だが、何番目のデータがTumorなのかNormalなのかを保持する変数を持つ。なんか上手い方法があれば良いんだけれど、思いつかないので、地道に手で打つ。ちなみに、Tumorサンプルは、Tumor Positiveの略でTpos、逆にNormalサンプルはTnegということにする。

Tpos <- c(1,2,3, 4, 6, 8, 10, 12, 13, 14, 16, 18, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 33, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 50, 51)
Tneg <- c(5, 7, 9, 11, 15, 17, 19, 24, 30, 32, 34, 40, 43, 47, 49, 52)

Tpos群とTneg群で全プローブセットについて、発現量の差を検定する。まあ、なんとなく、ここはWilcoxonの検定で。

pval.w <- apply(gse16515.eset.exp, 1, function(x)
 wilcox.test(x[Tpos], x[Tneg])$p.value)

Tpos群、Tneg群ごとに、各プローブの平均値を算出した上で、その倍差(Fold-change)を求める(fc)。logなので、比の算出は引き算で出る。

Fc <- 2^(rowMeans(gse16515.eset.exp[,Tpos]) - rowMeans(gse16515.eset.exp[,Tneg]))

発現差のあるプローブをピックアップする。ピックアップする基準は、p値が0.01以下で、かつFold-changeが5倍以上のもの。

gse16515.selected_probe.fc <- names(pval.w[pval.w < 0.01 & abs(log2(fc)) > log2(5)])

あるいは、siggensを使う。

gse16515.eset.cl <- c(rep(1,52))
for (i in Tpos) { gse16515.eset.cl[Tpos[i]] <- 0 }
sam_res <- sam(gse16515.eset.exp, gse16515.eset.cl, B=1000)
gse16515.selected_probe.siggenes <- list.siggenes(sam_res, 4.5)

それぞれのプローブが何なのか?の情報を得る。

getBioC("hgu133plus2.db")
library(hgu133plus2.db)
get(gse16515.selected_probe.fc[1], env=hgu133plus2SYMBOL) # プローブセットの遺伝子名
get(gse16515.selected_probe.fc[1], env=hgu133plus2GENENAME) # プローブセットの遺伝子名
get(gse16515.selected_probe.fc[1], env=hgu133plus2GO) # プローブセットの機能註釈
get(gse16515.selected_probe.fc[1], env=hgu133plus2ENTREZID) # プローブセットのENTREZID

heatmapも描いちゃう。

gse16515.scaled.sig <- t(scale(t(gse16515.eset.exp[gse16515.selected_probe.sig,])))
heatmap(gse16515.scaled.sig, scale="none", col=cm.colors(20))

以上のような作業のの結果、selected_probeの中にprobe「1554436_a_at」があり、これはREG4という遺伝子の発現量が特異的であることを示しているようだ。なるほど。

実際に、「REG4タンパク質を用いて膵癌を診断する方法」という公開特許もあるようなので、それなりに正しそうな結果が得られたようだ。