MENU

R で IPTW カプランマイヤー曲線グラフに Number at Risk を書き入れる方法

IPTW カプランマイヤー曲線において、任意の時点における Number at Risk を書き入れる方法

R で作成する方法

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

IPTW カプランマイヤー曲線

IPTW は、逆確率重み付けとも呼ばれ、ランダム割り付けしていない群間の交絡因子を調整する方法の一つ

詳しくはこちらも参照

IPTW は、EZR を使うと簡単に作成できるが、後述のようなスクリプトでも作成可能

IPTW で調整したカプランマイヤー推定量を計算して、カプランマイヤー曲線を書く方法と、図の下に Number at Risk(何人イベントを起こさずに残っているか)を示す方法のスクリプトを紹介する

IPTW カプランマイヤー曲線の書き方

R の survival パッケージの、survfit を使って推定量を求めるときに、weight で IPTW を指定するという方法を取る

曲線自体を書くのは、survminer パッケージの ggsurvplot を使う

そうすると、Number at Risk を書き入れるのが簡単である

まず、必要なパッケージを読み込む

# 必要なパッケージを読み込み
library(survival)
library(survminer)

標準のカプランマイヤー曲線

ここでは、サンプルデータとして、ovarian データセットを用いる

survfit で カプランマイヤー推定量を求める

まずは、IPTW 調整なしで書いてみる

km_fit0 <- survfit(Surv(futime, fustat) ~ rx, data=ovarian)
plot(km_fit0, col=1:2)

IPTW で調整していない、rx 因子別のカプランマイヤー曲線が書かれる

傾向スコア及び IPTW の作成

# rx = 1,2 を rx1 = 0,1 に変換
rx1 <- ovarian$rx-1
# 傾向スコアの作成(EZR で作成しても可)
propensity <- glm(rx1 ~ age + resid.ds + ecog.ps,
family = binomial(link='logit'),
data = ovarian)$fitted.values
# IPTW の作成(EZR で作成しても可)
weights <- ifelse(rx1==1, 1/propensity, 1/(1-propensity))

IPTW カプランマイヤー曲線を書く

# カプランマイヤー曲線の作成
km_fit <- survfit(Surv(futime, fustat) ~ rx, data = ovarian,
weights = weights)
plot(km_fit, col=1:2)

IPTW カプランマイヤー曲線はこのようになる

未調整のカプランマイヤー曲線と比較して、ほんの少し黒と赤が近づいたように見える

Number at Risk 入りのグラフを書く

# グラフを作成
ggsurv <- ggsurvplot(km_fit, data = ovarian,
risk.table = TRUE,
risk.table.col = "strata",
ggtheme = theme_minimal())
# Number at risk を表示
ggsurv$table$variables$nrisk <-
paste("At risk:", ggsurv$table$variables$n.risk)
# グラフを表示
ggsurv

ggsurvplot で書いたグラフはこちら

いきなり本格派っぽくなる

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

まとめ

R で IPTW カプランマイヤー曲線を書いて、Number at Risk を書き入れる方法を解説した

survminer パッケージの ggsurvplot を使うと、とてもきれいなグラフが簡単にかける

参考になれば

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (4件)

  • ありがとうございます。大変勉強になります。もし可能であればIPTW後の2群に対してのスチューデントの t 検定、マンホイットニーの U 検定が可能なのかもご教授頂けますと幸いです。
    SPSSなどでは2群のnが145.3など小数点人数になってしまい、2群比較ができず困っておりました。
    以下の論文で解析が行われており、Rで可能なのか知りたいと考えております。ご検討いただけますと幸いです。
    Ann Rheum Dis. 2021 Sep;80(9):1130-1136.

  • コメントありがとうございます!
    論文を拝見しましたが、どのように計算したか記載がありませんでしたね
    R では、lm 関数や glm 関数の weights を使えば、重みをかけて計算できますので、同様の計算ができる気がします
    ただし、二値より多いカテゴリカルデータは MASS パッケージの polr 順序ロジスティックとか、nnet パッケージの multinom 多項ロジスティック(いずれも EZR で計算可能)などを使えばできないことはないような・・というところです
    でも、論文の表のような人数や%、標準偏差はどうやって計算するのか?よくわからないです

  • 迅速なお返事をいただきありがとうございました。
    ご教授いただいた関数を用いて計算できるか試行錯誤してみようと思います。
    論文によってはJMPという統計ソフトやStataを使用しているものがあり、それらならできるのかもしれません。
    ありがとうございます。いつも大変参考にさせていただいております。

コメントする

目次