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

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

今日はニューラルネットワークです。

といっても3層パーセプトロンをnnetの構築です。

ユニット層は3としています。

 

昨日と同様に教師データと評価データを分けて開始です。

#乱数のもとを固定します。

 set.seed(1)

#ニューラルネットワークのモデルを構築します。 

nn.model<nnet(eGFR2低下群~.,data=eGFR.train,size=3,maxit=300)

# weights: 160
initial value 38.368978
iter 10 value 36.379955
iter 20 value 27.414648
iter 30 value 22.653967
iter 40 value 17.436598
iter 50 value 16.306668
iter 60 value 15.248421
iter 70 value 8.661530
iter 80 value 4.821300
iter 90 value 4.418075
iter 100 value 4.417687
final value 4.417682
converged

#80回を超えたあたりから収束しています。

#ニューラルネットワークで作成した分類モデルを評価データに適応

 nn.pred<-predict(nn.model,eGFR.test,type="class")

#ニューラルネットワークによる予測結果を確認

head(nn.pred)

[1] "a" "a" "a" "a" "b" "b"

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

(nn.tab<-table(eGFR.test$eGFR2低下群,nn.pred) )
nn.pred
a    b
a 35  1
b 9  10

#予測精度の確認
sum(diag(nn.tab))/sum(nn.tab)
[1] 0.8181818

 

このモデルでは81.8%でした。

意外と単純ベイズの精度がよかった。