O-721

O-721

自己満足を形にします。大学院生だったり薬剤師だったり。

Prism と JMP 間での生存時間解析の違い

絶対一般受けしない内容ですが、自身の覚書のために書きます。

まずこの違いに気づいた経緯について。生存時間解析で Kaplan-Meier plot を描画しますが、JMP(SASも?)では打ち切りの「ヒゲ」が描かれません。

www.jmp.com

そこで、グラフの描画は GraphPad Prism に任せることにしました。こっちではきちんとヒゲが描かれます。

ヒゲが描かれないだけで、曲線の形としては両者で同じになるはずです。コピペのミスが無いように、Prismでのグラフ形状をJMPのそれと見比べながらの作業でした。そして気がついたのです。

おいなんか微妙にグラフ違うぞ。

形が違うので Median Survival Time とかも変わってきます。これはまずい。何が原因か、データの細部まで見てみたところ、一つの違いに気がつきました。

T=0 でのイベントの扱いです。

適当に作ったサンプルデータで違いを見てみます。医薬品Xを服用後、何日で副作用が生じたか、ってデータだと思ってください。服用した日を Day 0 として、0, 1, 3, 5, 6, 7, 10日後に副作用が出たとします。簡単のため、Number at risk は7人で、打ち切りはないものとします。

0日後、すなわち飲んだその日に副作用が起こったという情報の扱いが、Prism と JMP で異なります。

まずJMPでは、T=0のイベントもイベントとして扱われます。

f:id:SKNHKN:20200418163605p:plain

図の赤枠で囲った部分ですが、最初の生存率を100%として、T=0でイベントが発生したためすぐに85.71%(6/7)に下がっています。グラフを見ても、T=0ですぐに下降しています。

一方Prism、T=0でイベント発生した症例は母集団から除かれて解析されます。

f:id:SKNHKN:20200418164122p:plain

さっきと入力フォーマットは異なりますが、内容は一緒です。ちなみにJMPの初期設定では打ち切りにフラグを立て"1"(イベント発生は"0")としますが、Prismではイベント発生に"1"フラグを立てます。単純なコピペではイベント発生と打ち切りがてれこになるので注意が必要です。僕はJMPで「列の再コード化」から0と1を入れ替えました。

さてグラフを見ますと

f:id:SKNHKN:20200418164523p:plain

明らかにさっきと形違いますよね。T=0でグラフが下降せず横ばいです。

f:id:SKNHKN:20200418164657p:plain

生存率の表を見てみますと、JMPと異なりT=0での生存率は100%のまま、T=1で83.33%(5/6)になっています。そう、5/6、母集団の人数が6人で解析されています。T=0でイベント発生した1人は、母集団から除かれてしまっています。

もしかするとT=0でイベントが発生することは一般的ではないのかもしれませんが、僕の解析ではそういう症例もあったため困りました。今回の例に準えるなら、投与のその日に起こる可能性のあるような副作用、例えばアナフィラキシーインフュージョンリアクション、抗がん剤の吐き気などを解析対象とする際には注意が必要ですね。

ちなみに僕は、Prismでの T=0 を T=0.1 とすることで誤魔化対応しました。JMPが打ち切りのヒゲを描いてくれるようになったら一番なのですが…。SASの皆様どうかご検討を!!