t_kahi’s blog

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

【KNIME】単回帰分析をKNIME Workflowで行う:「R snippet」&「Liner Regression Learner」

こんにちは,@PKです.

今回はKNIMEで単回帰分析を行うWorkflowについて紹介します.
散布図・回帰直線の作成,回帰分析結果を出力し,どのノードを使うのが良いかを考えてみます.

KNIME Worlkflowの概要

今回紹介するWorkflowは以下の通りです.
f:id:t_kahi:20190621231902p:plain
上図のデータを使って,散布図や回帰直線の作成,回帰分析結果の出力を行いたいと思います.

サンプルデータやRの解析については以下を参考にしております.
フリーソフトによるデータ解析・マイニング 第14回 Rと回帰分析

このWorkflowでは,単回帰分析について,データの可視化を「R view」で,それぞれの分析を「R snippet」と「Liner Regression Learner」で行います.

R View (Table) — NodePit
R Snippet — NodePit
Linear Regression Learner — NodePit

*このWorkflowでは統計解析向けのR言語を使用するノードを使います. KNIMEでRを使用する際の基本的な部分は以下を参照ください.
【KNIME】Tukeyの多重検定を「R node」で処理・可視化する - t_kahi’s blog

「R view」で散布図と回帰直線の作成

まずは「R Source」でデータを作成します.

#R Sorce
taikei = matrix(0,10,2) 
taikei[,1]<-c(165,170,172,175,170,172,183,187,180,185) 
taikei[,2]<-c(50,60,65,65,70,75,80,85,90, 95) 
colnames(taikei)<- c("height","weight") 
taikei.F<- data.frame(taikei) 
knime.out <- taikei.F

このデータは体重と身長の関係を表しています.
このデータの関係性を見るために,散布図と回帰直線を「R View」で表示します.

#R View
library(ggplot2)
library(gridExtra) #ggplot2の図を複数表示するため
taikei <- knime.in
data.lm<- lm(weight~height,taikei) #lm関数で回帰分析
plot1 <- ggplot(taikei, aes(x = height, y = weight)) +
  geom_point() + 
  geom_abline(slope = data.lm$coefficients[2], intercept = data.lm$coefficients[1])  #ggplot2で散布図と回帰直線をマニュアルで作成

plot2 <- ggplot(taikei, aes(x = height, y = weight)) +
  geom_point() + 
  geom_smooth(method = "lm") #geom_smoothで回帰直線作成
grid.arrange(plot1, plot2, ncol = 2, nrow = 1)

f:id:t_kahi:20190621233618p:plain 単回帰分析はRのlm関数を使用しました.
lm function | R Documentation
また,図の作成はggplot2を使用しています.
ggplot2による可視化入門

上図のような回帰直線はggplot2のgeom_abline(左図)やgeom_smooth(右図)で簡単に作成することができます.

単回帰分析の回帰診断図

続いて,回帰分析の残差を回帰診断図(Regression Diagnosis Plots)で表示します.
回帰診断図の作成については以下で紹介しております.

www.t-kahi.com

今回は結果のみを以下に示します.
f:id:t_kahi:20190621235227p:plain

単回帰分析の結果を出力する

「Liner Regression Learner」

まずはKNIMEの線形回帰分析ノードである「Liner Regression Learner」で回帰分析を行います.
設定画面と結果を以下に示します.
f:id:t_kahi:20190622001235p:plain
設定画面では,ターゲット列(被説明変数)を指定します.今回はWeightです.
Valuesの部分では説明変数のカラムを入れます.
また,このノード単体で散布図表示もできます.表示するデータはScatter Plot Viewsで設定できます.
「Liner Regression Learner」右クリック⇒Viewボタンをクリックで,下記の結果を見ることができます.
図はggplot2を使ってR viewsで表示させたほうがきれいですね…
f:id:t_kahi:20190622103724p:plain

「R snippet」

続いて,「R snippet」でRのlm関数を使って,単回帰分析の結果(回帰直線の切片,係数,t値,p値)を表示させます.

taikei <- data.frame(knime.in) 
taikei.lm<- lm(weight~height,data=taikei) 

summary(taikei.lm)

taikei.lm$coefficients

summary(taikei.lm)$coefficients

knime.out <- summary(taikei.lm)$coefficients

出力結果は以下となります.
f:id:t_kahi:20190622000826p:plain

Rではsummary関数で結果を表示させますが,KNIMEでデータを出力するために,data.frame形式で値を取り出しています.

liner regressionのt値とp値を取得するのは以下の記事を参考にしました.
regression - Extracting t-stat p values from lm in R - Stack Overflow

「Liner Regression Learner」と「R snippet」の結果は(もちろん)一致しています.

まとめ

単回帰分析をKNIMEで行う場合ですが,

  • 散布図,回帰直線の表示は「R views」のほうがきれい.
  • 回帰分析結果の表示は「Liner Regression Learner」のほうが楽

というのが個人的な感想でした.
回帰診断図を書くノードは無いので,「R views」を使いましょう.