統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

EZRで逆確率重み付けFine-Gray回帰はできるか?

EZRでFine-Gray回帰を行うときに、逆確率重み付けは使えるか?

Fine-Gray回帰とは?

Fine-Gray回帰とは、競合リスクがある場合の多変量調整回帰モデルの一つ。詳しくは以下をどうぞ。

toukeier.hatenablog.com

逆確率重み付けとは?

逆確率重み付けとは、逆確率という重みを付けて回帰分析を行うことを言っている。

重みを付けることで、1例の人数が、重みの分だけかさましされたことになる。

逆確率というのは、傾向スコアの逆数である。

こちらもどうぞ。

toukeier.hatenablog.com

傾向スコアは、治療薬など、エンドポイントに影響を与える変数の発現確率を多変量で推定したもの。

詳しくは、こちらを参照。

toukeier.hatenablog.com

傾向スコアをpとして、ある治療薬で治療を受けた人は  1/p 、治療を受けなかった人は  1/(1-p)とする重みを付ける。

実際は治療を受けたのに、傾向スコア  p は小さく、あたかも治療を受けなかった人のような傾向スコアを持っている人は、基本的には少ないため、その逆数、つまり大きい重みを与えて、人数を多くする。

逆に、治療を受けていないのに、傾向スコア  p が大きく、あたかも治療を受けた人のような傾向傾向スコアを持っている人も少ないため、その場合は、傾向スコアを1から引いて、その逆数の重みを付けて、人数をかさましする。

EZRでは、さらに治療を受けた人、受けなかった人の割合をそれぞれにかけた、安定化を行った重みを計算してくれる。

詳しくはこちらの書籍で確認できる。

EZRで逆確率重み付けを使ったFine-Gray回帰

EZRで、Rスクリプトを使って、逆確率重み付けを使ったFine-Gray回帰が実施可能である。

具体的には、timeregパッケージの comp.risk() 関数を使うと実行できる。

手順は以下の通り。

1.timeregパッケージをインストール

EZRのRスクリプト画面に install.packages("timereg") と入力し実行する。

出てきた窓内のJapanを選択しインストールする。

2.timeregパッケージの呼び出し

EZRのRスクリプト画面に library(timereg) と入力し、実行。

3.解析データを準備して、以下のような感じにRスクリプト窓に書いて実行

fg5 <- comp.risk(Event(DaysDFS, CompRisk)~const(Group1),
data=Data3, cause=1, weights=Data3$weight.ATE.GLM.4)
summary(fg5)

この例の場合は、観察時間変数がDaysDFS、競合イベント変数がCompRisk、比較したい群がGroup1、データセット名がData3、競合イベントのうち今計算したいイベントが1( cause=1)、重みがData3の中のweight.ATE.GLM.4という設定である。

調整したい変数が他にもある場合は +const() を増やしていく。

~const(Group1)+const(Covariate1)+const(Covariate2) などという具合である。

ちなみに、逆確率重み付けの重み weight.ATE.GLM.4(最後の番号は実行した状況で異なるので、あなたの実行環境では異なると思う) は、ロジスティック回帰を用いて事前に作成しておく。

EZR公式マニュアルのサンプルデータ ALL_RIC.rda を使って、実際にやってみる。

逆確率の重みを計算したあと、2つのステップが必要になった。

1つめは、一つでも欠損値があるケースを削除する必要があった。

2つめは、イベントまでの時間が0のケースを削除する必要があった。

以下がRスクリプトである。

#NAがある行を削除する
ALL_RIC <- na.omit(ALL_RIC)

#####指定した条件を満たす行だけを抽出したデータセットを作成する#####
ALL_RIC <- subset(ALL_RIC, subset=DaysPFS>0)

あとは前述のようにRスクリプトに書いて実行する。

これが解析結果である。

対数表示になっているので、真数表示にしたい場合は、以下のようにすればよい。

まず、結果オブジェクト内のgammaが対数ハザード比(係数)である。

同様にvar.gammaが係数の分散である。

ちなみに、説明変数が複数ある場合は、分散共分散行列が表示される。

独立変数一つ一つの分散は、diag()で取り出す必要がある。

全然違う例だが、例えば以下のようにして分散を取り出す。

話を戻して、分散の平方根が標準誤差である。

標準誤差に1.96(標準正規分布の上側2.5パーセンタイル)をかけて、係数から引くと95%信頼区間下限値、足すと95%信頼区間上限値になる。

係数と信頼区間限界値をともに自然対数の肩に乗せて指数変換すると、真数のハザード比と95%信頼区間になる。

unlist(list()) を使うと、比較的きれいに表示できる。

まとめ

逆確率重み付けを用いて競合リスクのFine-Gray回帰を実行したい場合、EZRでは、timeregパッケージのcomp.risk()関数を使うと実行可能である。

EZR公式マニュアル