「統計解析の結果を、もっと直感的に伝えたい」と思ったことはないだろうか。
複雑な回帰分析の結果を、定規1本で計算できるグラフに変換してくれるのが「ノモグラム(Nomogram)」である。本記事では、ノモグラムの基礎から、Rを使った具体的な作成方法、さらには実用的な読み方まで、初心者向けに解説する。
ノモグラムとは何か?
ノモグラムとは、統計的な予測モデルを視覚化した「計算図表」のことである。
通常、Cox回帰などの結果から個人のリスクを算出するには複雑な数式が必要だが、ノモグラムを用いれば、各因子のポイント(点数)を足し合わせるだけで、予測確率を導き出すことができる。
ノモグラムの目的と利点
メリット
- 直感的な理解: どの因子(例:年齢、腫瘍サイズ)が結果にどれくらい影響するか、目盛りの長さで一目で判別できる。
- 現場での実用性: コンピュータがない環境でも、グラフ上の点数を合計するだけで予測値を算出できる。
- 意思決定の支援: 医師や患者、あるいはクライアントに対し、「この因子の影響でリスクがこれだけ変動する」と視覚的に説明できる。
Rによるノモグラム作成:Cox回帰モデル編
Rのrmsパッケージを使用し、生存時間解析で標準的な「Cox回帰モデル」からノモグラムを作成する手順を解説する。
ステップ1:準備
パッケージを読み込み、データセットとしてcancer(肺がんデータ)を使用する。
# パッケージのインストール(未導入の場合のみ実行)
# install.packages("rms")
# install.packages("survival")
library(rms)
library(survival)
# データの準備(cancerデータセットを使用)
data(cancer)
df <- cancer
# 性別を因子型に変換(1:男性, 2:女性)
df$sex <- factor(df$sex, levels=c(1,2), labels=c("Male", "Female"))
ステップ2:データ分布の設定
rmsパッケージでノモグラムを描画する際は、事前にデータの分布情報を設定する必要がある。
# データ分布の定義
dd <- datadist(df)
options(datadist = "dd")
ステップ3:モデルの構築と描画
Cox回帰モデル(cph関数)を作成し、それをノモグラムに変換する。
# Cox回帰モデルの構築
# 生存期間(time)とイベント(status)を、年齢・性別・全身状態(ph.ecog)で予測
fit <- cph(Surv(time, status) ~ age + sex + ph.ecog,
data = df, x=TRUE, y=TRUE, surv=TRUE)
# 生存確率を計算する関数の設定(例:半年=180日、1年=365日)
surv <- Survival(fit)
surv180 <- function(x) surv(180, x)
surv365 <- function(x) surv(365, x)
# ノモグラムの描画
nom <- nomogram(fit,
fun = list(surv180, surv365),
funlabel = c("180-day Survival", "365-day Survival"))
plot(nom)

4. 作成したノモグラムの読み方:実践ガイド
ノモグラムの読み方のルールは非常にシンプルである。以下の手順で進めてほしい。
① 各因子から「Points」を割り出す
一番上にあるPointsという数直線(0〜100点)を基準にする。各因子の目盛りから真上に垂直な線を隠し、その交点の点数を読み取る。
- age(年齢): 例えば「75歳」の場合、ageの75から上に線を引くと、Points上で約32点となる。
- sex(性別): 男性の場合は「Male」の位置から上へ線を引くと約40点、女性(Female)なら0点となる。
- ph.ecog(全身状態): ECOG Performance Statusが「2」であれば、約67点を獲得する。
② 合計点を「Total Points」に合わせる
算出した各因子の点数をすべて合計する。(例:32点 + 40点 + 67点 = 139点)
次に、中ほどにあるTotal Pointsの数直線上で「139」の地点を探す。
③ 垂直線を下ろし、生存確率を読み取る
Total Pointsの「139」から、垂直に真下へ線を引く。その線が下部の数直線たちと交わる点が予測値である。
- 180-day Survival: 交点は約0.48となり、「180日生存確率は約48%」と判断できる。
- 365-day Survival: 一番下の目盛りを見ると、1年後の生存確率は約0.125(12.5%)となる。
補足:Linear Predictor(線形予測子)とは何か?
ノモグラムに現れるLinear Predictorとは、回帰方程式によって計算された生の値のことである。
- 役割: 統計学的な「リスクのスコア」そのもの。
- 読み方: これが右(プラス側)に行くほどイベント(死亡など)のリスクが高く、生存確率が低くなることを示している。
- 意義: 特定の時点の予測(生存確率)だけでなく、その人の全体的なリスク強度を数値化したものである。
さらに進んだ活用法:ShinyによるWebアプリ化
ノモグラムは紙ベースでも便利だが、さらに利便性を高める方法として「Shiny(シャイニー)」を用いたWebアプリ化がある。
Shinyとは?
RのコードだけでインタラクティブなWebアプリケーションを作成できるフレームワークである。
- スライダー操作: 画面上で年齢などの数値を動かすと、リアルタイムで生存確率のグラフが変化する。
- 精緻な計算: 目分量ではなく、システムが瞬時に正確な数値を算出する。
- 共有の容易さ: URLひとつで、チームの誰もが同じ予測モデルを利用できるようになる。
ノモグラムの限界と注意点
- 過学習の懸念: 作成に用いたデータには適合しても、別の集団(外部データ)では精度が落ちることがある。外部妥当性の検証は必須である。
- 変数の選定: 項目が多すぎると図が複雑になり、直感性が失われる。重要な因子を絞り込むセンスが求められる。
まとめ
ノモグラムは、高度な統計モデルを「誰もが使える実用的な道具」へと変換する優れた手法である。
- 目的: 予測モデルの可視化と共有。
- 方法: Cox 回帰の予測モデルの場合、Rの
rmsパッケージと生存時間データセットで容易に実装可能。 - 発展: より高度な共有にはShinyによるアプリ化が有効。
統計解析の結果がいかに現場の意思決定に貢献できるか。その「橋渡し」として、ぜひノモグラムを活用してみてほしい。
おすすめ書籍
誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!




コメント