大阪で働くメディカルデータサイエンティストの日記

医療系dataをRを用いて解析します。古典統計学、ベイズ統計学など使えるものは何でも。

RとRstudioで機械学習

今日はRとRStudioで機械学習の備忘録

 

最近始めたRでの機械学習で医療系データを解析してみました。

データは健診データで目的変数はeGFRの悪化予測としました。

(R3.5.0を使用して、どんな程度できるかのお試しです。)

 

まずパッケージの読み込みで(e1071)と(kernlab)を指定します。

各説明変数を教師データと解析データに2分割していきます。

その後、単純ベイズモデルに適応しています。

感度特異度から予測精度を確認します。

実際のRの解析の流れはこんな感じです。

 

#パッケージの読み込み
library(e1071)
library(kernlab)
#健診データの読み込み
#(省略)
#教師データと評価データに分
n<-seq(1,nrow(Dataset),by=2)
eGFR.train<-Dataset[n,]
eGFR.test<-Dataset[-n,]
#単純ベイズで分類モデルを作成
nb.model<-naiveBayes(eGFR2低下群~.,data=eGFR.train)
#単純ベイズで作成した分類モデルを確認
nb.model

Naive Bayes Classifier for Discrete Predictors

Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)

A-priori probabilities:
Y
a      b
0.5357143 0.4642857

Conditional probabilities

#単純ベイズで作成した分類モデルを評価データに適応
nb.pred<-predict(nb.model,eGFR.test)
#単純ベイズによる予測結果を確認
head(nb.pred)

[1] b a a a b a
Levels: a b

#予測の正誤をまとめた表を作成

(nb.tab<-table(eGFR.test$eGFR2低下群,nb.pred))
nb.pred
 a  b
a 36  0
b 2   17

#予測精度の確認
sum(diag(nb.tab))/sum(nb.tab)

[1]  0.9636364

 

年齢・性別・血圧・ABI値・CAVI値など

すべて説明変数に入れ込んだらいい感じに

単純ベイズで96.3%の精度が出てます。

意外と臨床的意義があるかもしれないです。

機械学習ってすごいって思いますね。

次回はニューラルネットワークモデルや

サポートベクターマシンも試してみます。