いくつかのグループ間(の平均値)に一定の順序性・傾向性がみられるとき、これらの群間において有意な差があるか検定したい。こんなときは、ヨンキー・タプストラのトレンドテスト(Jonckheere-Terpstra trend test, 単にJonckheere検定とも)が便利だ。こういう場面は、結構あると思う。薬剤の量に応じたある因子の反応データだとか、SNPのタイピング(例えば、AA型/AG型/GG型に傾向性がある場合とか)だとか、病期の重症度に応じた予後だとか。
一般的に、多群間の検定には、One-way ANOVAであったり、Kruskal-Wallis testがよく使われ、(post-hocとしての)多重比較には、Tuker-CramerやBonferroni/Dunn、あるいはSteel-Dwass検定が使われる。多群の検定というのは、検定に対する思想に左右される部分があり(個人的にはいきなり多重比較検定をしたい人)、適応に頭を悩ますこともある。
その点、トレンドテストというのは、一定の傾向性があるか否かを判定する、非常に分かりやすい検定法だ。薬剤量に応じた傾向性だとか、臨床病期に応じた傾向に対する情報というのは、実地において有用であろう。
Rでは、ヨンキー・タプストラ検定のためのライブラリがあるので、それを利用する。マニュアルはここ
。もっとも、インストールした後は、? JT.testで良いけど。
source("http://bioconductor.org/biocLite.R")
biocLite("SAGx") # パッケージのインストール
library(SAGx) #読み込み
ここで、添付しているようなサンプルデータがあるとしよう。35匹のマウスについて、24種類の遺伝子の発現を調べたものである。35匹のマウスは、とある重症度の指標に基づいて、3群に分けられている(第1群: 0, 第2群: I-II, 第3群: III-IV)。第1群にはMouse 1-11、第2群には Mouse 12-22、第3群にはMouse 23-35のマウスが属する。それぞれ24種類の遺伝子について、これら3群で一定の傾向性があるかどうか検定したい。
まずは、テキストファイル(データ間はタブ区切り)からデータの読み込み。
dat <- read.table("JT-sample.txt", header=TRUE, row.names=1, sep="¥t")
マウス3群に対して、適当にラベルを与える。ここでは1,2,3にした。
label <- ordered(c(rep(1, 11), rep(2, 11), rep(3, 13))) # それぞれ11匹、11匹、13匹
実際の検定は、JT.testでOK。 引数のalternativeについては、傾向性は、増加と減少、共に考えられるのでtwo-sidedにした。
jt <- JT.test(data = dat, class = label, labs = c("0", "I-II", "III-IV"), alternative = "two-sided")
この結果のP値を取り出すには、jt$p.valueでOK。結果をテキストファイルに落とすために、以下のように見やすいように適当にデータを作成しよう。
tmp <- cbind(as.matrix(colnames(dat), 1, 24), sprintf("%0.3g", jt$p.value), rank(jt$p.value))
最初に、元のテキストでは見出しの最初の行にあった遺伝指名(Gene 1~Gene 24)を取り出して、それを列にするための指定をしている。もっと簡単な方法がありそうだけど、知らないので。2番目に有効数字3桁ほどに丸めたP値、最後にP値のランク情報を付けておく。これをテキストに保存するには、
write.table(tmp, "JT-sample P.txt", sep = "¥t", append=F, quote=F, row.names=F)
でOK。この結果は、以下の通り。
| V1 | V2 | V3 |
| Gene.1 | 0.00181 | 9 |
| Gene.2 | 1.95e-05 | 5 |
| Gene.3 | 0.477 | 23 |
| Gene.4 | 0.0715 | 15 |
| Gene.5 | 0.000127 | 7.5 |
| Gene.6 | 0.0957 | 17 |
| Gene.7 | 2.05e-07 | 1 |
| Gene.8 | 0.134 | 19 |
| Gene.9 | 0.296 | 22 |
| Gene.10 | 0.00258 | 10 |
| Gene.11 | 0.0174 | 13 |
| Gene.12 | 0.000127 | 7.5 |
| Gene.13 | 0.0957 | 16 |
| Gene.14 | 0.209 | 20 |
| Gene.15 | 0.0205 | 14 |
| Gene.16 | 0.596 | 24 |
| Gene.17 | 0.22 | 21 |
| Gene.18 | 1.26e-06 | 2 |
| Gene.19 | 2.48e-06 | 3 |
| Gene.20 | 6.86e-06 | 4 |
| Gene.21 | 0.00462 | 11 |
| Gene.22 | 3.11e-05 | 6 |
| Gene.23 | 0.00641 | 12 |
| Gene.24 | 0.112 | 18 |
ランキング1位の遺伝子は、Gene.7で、そのP値は、2.05e-07とかなり小さい。この遺伝子の実際のデータ分布を視覚化してみよう。傾向を見せるには、いわゆる箱髭図が良いだろう。表示させて、PNGファイルに落とす。
boxplot(dat$Gene.7 ~ label, names=c("0", "I-II", "III-IV"))
dev.print(png, file="JT-Gene7.png", width=350, height=350)
こんな感じで、重症度に応じて、Gene7の発現も高いということが一目瞭然だ。
こんな感じで、簡単に使えます。ヨンキー・タプストラ検定は、どうも有意なP値が出やすい気がする。
-
最近のコメント