ノモグラムを描いてみよう

プログラミング

このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.

Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.

今回はノモグラムをStataで描いてみよう!というテーマでお送りします。

1.ノモグラムとは

そもそもノモグラムって何?という話ですが、最も古いきちんとした記載は以下の通りだそうです.

Nomograms are one of the simplest, easiest and cheapest methods of mechanical calculus. (…) precision is similar to that of a logarithmic ruler (…). Nomograms can be used for research purposes (…) sometimes leading to new scientific results.

“Nomography and its applications” G.S.Jovanovsky, Ed. Naúka, 1977, USSR.

ノモグラムというのは、予測モデルによって計算された予測確率のアウトプットを可視化するためのツールです.計算式を紙に書いてせっせと計算するよりも、ノモグラムを使ってパッパッと大まかな予測確率が計算できる点で使い勝手が良いというのが特徴です.

今でこそアプリやWebブラウザが発達してさっと入力すればあっという間に計算できますが、その昔はとっても重宝したことでしょう.そして今でも便利な場面はたくさんあると思います.

それは何より、計算過程が可視化できるところにあると思います.

ノモグラムをみれば変数それぞれの重みが一目瞭然です.線が長ければ長いほどその因子が重要であることを示しています.

また、ノモグラムは教育的な効果もあります.線形回帰がイメージしやすいのと対照的に、ロジスティック回帰やCox回帰が直観的に理解しづらいので、それを可視化できるノモグラムには教育的な効果があるといえるわけです.

2.Stataコマンド”nomolog”

世の中には立派な人もいるもので、Logistic regressionとCox regressionをベースにしたノモグラムを自動的に作成してくれるプログラムを作ってくれた人がいます.おまけに無料です、もちろん.

Alexander Zlotnik (Technical University of Madrid & Ramón y Cajal University Hospital) と Dr. Víctor Abraira (IRICYS & Clinical Biostatistics Unit, Ramón y Cajal University Hospital)だそうです.深々と頭を下げつつ使わせてもらいましょう.

ただ残念ながら、Coxのほうはどうやら現在は入手できないようですので、nomologだけ使わせていただくことにします.

.findit nomolog

このうちの一番新しい、”st0391_1″の部分をクリックしてください.

INSTALLATION FILESのclick here to installをクリックすると自動的にado fileが追加されます.その下のAncillary filesはサンプルデータが入っているのでこれもついでにゲットしてしまいましょう.

無事にインストールが終了したら、nomolog_exのデータセットを開いてみましょう.

アウトカム変数がoutcome、 説明変数がage (16-81 years)、transfusions (0-50 transfusions)という範囲です.

そのままではageはゼロから始まってしまいますので、10~80の範囲として10歳刻みで表現し、transfusionについても値の範囲を0~50などとしてみます.

手順としては①ロジスティック回帰モデルを走らせ、②nomologコマンドを走らせる、というだけの簡単なものです.

logit outcome age transfusions
nomolog, title("Changed variable ranges") vli1(age,10,80,10,0) vli2(transfusions,0,50,10,0)
一番影響力の強い変数である年齢が最大10の強さを示し、他の変数は相対的な強さに従ってノモグラムの長さが決まる

次に交互作用項をいれてみましょう.

logistic outcome c.age#c.dialtime c.transfusions i.treatment b1.gender

連続変数同士の交互作用のときには、片方の変数をある程度カテゴリーに区切ってあげるとよいモデルができるようです.その場合は多少情報量が落ちることになると思います.

そこで、年齢を20歳、50歳、80歳と分けてそれぞれのdialtimeのノモグラムを追加してみましょう.

logistic outcome c.age#c.dialtime c.transfusions i.treatment b1.gender
nomolog, title(`"Variable ranges with "c#c" interaction"') k1(age,20,50,80) vli1(dialtime,0,200,50,0) /// vli2(transfusions,10,50,10,0)

まとめ

個人的にはnomocoxに興味があったのですが、問い合わせのメールもどうやら通じていないらしく、どうにも手に入れる方法がなさそうです.何があったのでしょうか….

コメント

タイトルとURLをコピーしました