[R program]bnlearnの続き
Rでベイジアンネットの第二弾。
bnlearnでは基本的に条件付回帰を行っているので、その回帰係数もbn.fit関数で出力できます。
その回帰係数を、グラフに無理やり出力させるとこうなります。
これくらいの出力はパッケージに組み込まれてたら親切だったのになぁ(あとnnetみたいに矢印の太さが係数に比例するとか)。
igraphパッケージもパスを描くのに向いてそうなので、そのうちこっちも調べてみます。
コードはこちら(前半は以前のせた記事と同じコード。後半から係数を描いてます。)↓
library(bnlearn) norm <- rnorm(4000) Data <- matrix(norm, nrow=1000, ncol=4, byrow=T) colnames(Data) <- c("Height", "BMI", "SBP", "FBS") Data <- data.frame(Data) Data2 <- Data Data2$Height <- 170 + Data$Height*10 Data2$SBP <- 120 + Data$SBP*10 Data2$BMI <- 22 + Data$Height*2 + Data$BMI*2 + Data$SBP*2 Data2$FBS <- 90 + (Data2$BMI-22)*5 + Data$FBS*10 Data2 <- data.frame(Data2) res.Data2 = gs(Data2) plot(res.Data2) res.arc2 <- set.arc(res.Data2, "FBS", "BMI") #←HeightをFBSに修正 arc.strength(res.arc2, Data2) #---回帰係数を求める fitted = bn.fit(res.arc2, Data2) (Coef <- coefficients(fitted)) #---絵に上書き XMax <- max(axTicks(1)) YMax <- max(axTicks(2)) #---手動で位置を設定する plot(res.Data2) #切片 text(XMax*0.05, YMax*0.6, round(Coef$Height, digits=2), adj=0) text(XMax*0.85, YMax*0.6, round(Coef$SBP, digits=2), adj=0) text(XMax*0.35, YMax*0.9, round(Coef$FBS, digits=2), adj=0) text(XMax*0.35, YMax*0.05, round(Coef$BMI[1], digits=2), adj=0) #回帰係数 text(XMax*0.3, YMax*0.3, round(Coef$BMI[2], digits=3), adj=0) text(XMax*0.65, YMax*0.3, round(Coef$BMI[3], digits=3), adj=0) text(XMax*0.45, YMax*0.5, round(Coef$BMI[4], digits=3), adj=0)