DiagrammeRを使ってモデルを可視化する
以前ロジスティック回帰の結果を整形して表示するという記事を書きました。
今回は整形した結果をDiagrammeRを用いて可視化してみます。
まずはモデルを作ります。前回と同じロジスティック回帰のモデルです。
> res_glm <- glm(data=MASS::birthwt, low~age+smoke, family="binomial")
次にbroom::tidy関数で整形します。
> library("broom") > (res_glm_tidy <- tidy(res_glm, exponentiate = TRUE, conf.int = TRUE)) term estimate std.error statistic p.value conf.low conf.high 1 (Intercept) 1.0627985 0.75731970 0.08042249 0.93590124 0.2426549 4.780114 2 age 0.9514394 0.03197195 -1.55696724 0.11947826 0.8918117 1.011394 3 smoke 1.9974047 0.32180606 2.14989327 0.03156366 1.0641120 3.770397
このモデルをDiagrammeRで描画します。
create_nodes/edgesは単にノードとエッジのデータフレームを作っているだけなので、data.frame関数でも代用できます。
エッジを作る際、res_glm$formula2で目的変数のlowを取り出し、文字列に変換しています。
2と指定しているのが気持ち悪いですね。
モデル式(formula)からもっと簡単に(formula["lhs"]みたいな感じ)目的変数を取り出す方法をご存じの方がいらっしゃたら教えてください。
さて、作成したノードとエッジをcreate_graphに渡して、グラフオブジェクトを作成し、render_graphに渡すことでグラフを描画します。
今回はRStudio上で描画し、Viewerに表示されたグラフをExportでpng画像で出力しています。
> library("DiagrammeR") > nodes <- create_nodes(nodes = res_glm_tidy$term) > edges <- create_edges(from = res_glm_tidy$term, + to = rep(as.character(res_glm$formula[[2]]), nrow(nodes)), + label=round(res_glm_tidy$estimate, 2) + ) > graph <- create_graph(nodes_df = nodes, + edges_df = edges) > render_graph(graph)
今回は簡単な例で流れを示してみました。
未確認ですがパス図を使うようなsemパッケージとかlavaanパッケージには関数が実装されていそうです。
次回はより複雑な例を試してみます。
さて、全然関係ないですが以前より紹介していたAdvanced Rの邦訳の発売日が決まっていましたね!
1月24日発売だそうです。楽しみですね!
- 作者: Hadley Wickham,石田基広,市川太祐,高柳慎一,福島真太朗
- 出版社/メーカー: 共立出版
- 発売日: 2016/02/10
- メディア: 単行本
- この商品を含むブログ (29件) を見る
Enjoy!!!