t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】Tukeyの多重検定を「R node」で処理・可視化する

こんにちは,@PKです.

今日はTukeyの多重検定をKNIMEの「R node」で処理・可視化するワークフローを紹介したいと思います.

はじめに

以前,用量反応曲線 (dose-response curve) をKNIMEの「Dose-Response (R) node」を使って処理することを紹介しました.

www.t-kahi.com

上記dose-response curveのフィッティングや,t検定などはKNIME上で専用のノードが用意されています.

Dose Response (R) — NodePit
Independent groups t-test — NodePit

しかし,生物学の実験では,これら以外にも様々な統計的な検定手法を使うことが頻繁にあります.

例えば,3郡以上の比較対象に対して,有意差を検出する多重検定などは.自分も実務で良く使用する検定手法です.
しかし,多重検定専用のノードはKNIMEには用意されていません…

しかし,KNIMEのR node pluginを使用することで,KNIME上で多重検定を簡単に行うことができます.
今日は多重検定の一種であるTukeyの方法をR nodeを使って紹介したいと思います.

(Rだけで完結するだろ!という意見があると思いますが,他のKNIMEのワークフローと組み合わせたい!ということで紹介しています…)

KNIME R-Project nodesのインストール

まず初めに,KNIME上でRを動かすノードをインストールしましょう.

KNIME Interactive R Statistics Integration [Feature] — NodePit

KNIMEのFile > install KNIME Extensions...を開いて,「KNIME Interactive R Statistics Integration」と検索し,インストールします. f:id:t_kahi:20190514233137p:plain

上手くインストールができれば,以下のようにScripting > Rの下に「R projects nodes」が入ります!

R projects nodesには様々な種類があります.
それぞれのノードの意味は以下のサイトを参考にしてください.
KNIME R-Project nodes [Plugin] — NodePit

KNIME上でRを動かすときの注意点

上記RノードをインストールをしただけではKNIME上でRを動かすことはできません.以前のブログで「Dose-Response (R) node」を動かすときに紹介したように,KNIME上からRを動かす際は,R serverを使います.

以下の手順でR serverをセットアップします.

R server for knime · knime-mpicbg/knime-scripting Wiki · GitHub

あとは,File > Preferenceから,Rのパスが通っているか確認しておきます. f:id:t_kahi:20190514235211p:plain

KNIME上でRを立ち上げる際は,Rで下記コマンドを実行しておきます.

#R
library(Rserve); Rserve(args = "--vanilla --RS-enable-remote");

KNIME Workflowの紹介

それでは実際にWorkflowを紹介していきます.
とはいえ,下準備が少し大変なだけで,以下のように,非常に簡単なノード処理です.
f:id:t_kahi:20190515000631p:plain

まずは「Excel Reader」でテストファイルを読み込みます.
テストファイルは以下のように,A~Dのグループとそれぞれの値を入力しました.

それでは,「R Snippet」ノードでTukey検定を実行し,検定結果を出力します.
RでのTukey検定は以下を参考にしました.
r - Exporting TukeyHSD results - Stack Overflow
TukeyHSDはRの「multcomp」というパッケージを使うので,事前にRにインストールをしておきます.
https://cran.r-project.org/web/packages/multcomp/multcomp.pdf

「R Snippet」の設定画面で,R scriptを書いて実行します.
f:id:t_kahi:20190515002317p:plain

R script

#R snippet
library(multcomp)

test <- knime.in
group <- knime.in$"group"
value <- knime.in$"value"

ANOVA_test<-aov(value~group, data=test)

summary(ANOVA_test)

TKHSD_test <- TukeyHSD(ANOVA_test)

TK<-(TKHSD_test)

TK_data<-as.data.frame(TK[1:1])

knime.out <- TK_data

KNIME独特なのは入力と出力でknime.in, knime.outを使うことくらいだと思います…

実行した後に,右クリック > view R Std outputでANOVA検定の結果を確認します.
Tukey多重検定の結果は,Data Outputで確認することができます.

f:id:t_kahi:20190515003641p:plain

無事検定ができていますね…!

続いて,「R view (Table)」でTukeyHSDの結果を可視化しましょう. ここではggplot2を使って可視化しているので,パッケージをインストールしておきます.

可視化の部分はこちらを参考にしました.
r - How to visualize pairwise comparisons with `ggplot2`? - Stack Overflow

f:id:t_kahi:20190515003946p:plain

R script

# R View
library(multcomp)
library(ggplot2)

test <- knime.in
group <- knime.in$"group"
value <- knime.in$"value"

ANOVA_test<-aov(value~group, data=test)

summary(ANOVA_test)

TKHSD_test <- TukeyHSD(ANOVA_test)

TK<-(TKHSD_test)

TK_data<-as.data.frame(TK[1:1])

TK_data$pair = rownames(TK_data)

# Plot pairwise TukeyHSD comparisons and color by significance level
ggplot(TK_data, aes(colour=cut(`group.p.adj`, c(0, 0.01, 0.05, 1), 
                           label=c("p<0.01","p<0.05","Non-Sig")))) +
  geom_hline(yintercept=0, lty="11", colour="grey30") +
  geom_errorbar(aes(pair, ymin=group.lwr, ymax=group.upr), width=0.2) +
  geom_point(aes(pair, group.diff)) +
  labs(colour="")

実行した後に画像を確認してみると,Tukey多重検定の結果が図示できています!

f:id:t_kahi:20190515004154p:plain

終わりに

ここまでくると,最初からRでやろうかな…という気もしてきました.
KNIMEを使う利点は,データの前処理や,出力データの解析をプログラミング初心者でもたやすく行うことができることかな,思います.

まだまだ知らないことだらけなので,引き続きKNIMEやRの勉強していきます.