FAQ

実践力の養成4

回答

 

その理解で問題ありません。3群以上のログランク検定で有意なら、少なくとも1つの群が他と異なる(=全群の生存曲線が同一ではない)ことを示す検定の結果です。
どの組み合わせが違うかでの検定では、以下が一番楽かな、と思います。
pw <- pairwise_survdiff(Surv(time, status) ~ group, data = df, p.adjust.method = “holm”)
pw$p.value

回答

IPTWは「重み付けで疑似ランダム化」を作り、母平均の差(周辺効果)を直接推定します。したがってアウトカムの線形・交互作用・分散構造などを仮定しないため、アウトカムモデルの誤特定の影響は受けません。ただし一方で、必要なのはPSモデル(治療~共変量のロジスティック等)。ここが誤るとバイアス、極端なPS(0/1に近い)で分散爆発が起こります。

 

eval(family$initialize)は、glm()で family の初期化処理中に出る警告の前置きです。IPTWではPS推定で family = binomial() を使うため、 “おなじみの”警告となっています。これは、二項で成功数が整数でないという警告です。原因としては、family=binomial()でyが0未満や1超の値を含む場合、weightsで0の行がある場合です。チェック段階ででる警告です。

回答

 

AICでCoxモデルを比較するのは妥当です。ただし補助的指標として使いのが無難です。emmeansで群の調整比較は可能ですが、得られるのは線形予測子=logハザード上の比較(=指数を取ればハザード比)となり、生存確率そのもののEMMは Cox だけでは出せません。係数(log-HR)の群間比較なら簡単で、multcomp::glht()が良いかと思います。

回答

分かりやすいようにt検定としましたので、おっしゃることはよく分かります。二値アウトカムに対応あり t 検定を使うのは、近似的には可ですが、標準的には McNemar 検定(または同等の条件付きロジスティック回帰clogit)を使うのがより妥当性が高いです。また、glmmTMB はマッチ集合の相関を正しく扱う妥当な選択です。

 

回答

おっしゃる通りでMSTを通常検定することはありません。理由は以下の通りです。


①中央値は「生存率=0.5」になる時点のみを反映するため、情報が著しく少ない。
②検定を行っても検出力(power)が低い。
③片方の群で中央値が未到達(生存率が0.5未満に至っていない)場合、比較自体が成立しない。


ただし、理論的にはMSTを検定する方法も存在はします。Brookmeyer-Crowle法による中央値の信頼区間を計算し、その重なりの有無を確認する、という方法です。ただこれも探索的な解析にとどまり、正式な群間比較には不適とされます。あとはあり得たとして、MSTに対してならばブートストラップ法でしょうか。Brookmeyer–Crowle法は「1群のMSTの信頼区間」を出す方法で、Bootstrap法は「2群間のMST差を検定する」ための柔軟な手法です。
時点生存率の場合は、カイ二乗検定で差を評価することは可能です。ただし、打ち切りの影響が大きいと信頼性が下がるため、臨床研究では時点比較を主解析に用いることは稀です。

回答

 

基本的にはlog-rank検定は各イベント時点における観測数と期待数のズレに基づく検定であるため、P値で違いがある、となった場合は、期待値との違いが大きい項目が、違いがある項目であると判断して良いかと思います。その項目間でのP値まで必要になるということであれば、そのペアに対してlog-rank検定を再度実施するという補法になると思います。

回答

 

通常こういう時は、カイ二乗検定となりそうですが、それは人数の度数を比べる場合であり、おっしゃる通り、個人の回数データを比べる場合は別の手法(非パラメトリック検定やポアソン回帰など)が適切です。ご指摘の通り、カウントデータ(非負整数)は連続量ではないため、t検定の前提(正規分布、等分散性など)が成り立ちません。2群が独立(例:介入群 vs 対照群)しているならば、ポアソン回帰(または負の二項回帰)が良いと思います。平均の差ではなく「率比(Rate Ratio)」で評価してくれるのはポアソン回帰だと思います。もし過分散(分散>平均)の場合は負の二項回帰が良いと思います。

回答

 

ウィルコクソン検定は連続量を想定していますが、離散値でも順位がつけられる範囲であれば使用可能です。実務的にも、排便回数のように「整数値だが取れる値の幅が広い」場合は広く用いられています。

ただし、値の同点(ties)が多いと検出力が下がる点、分布が極端に偏る場合(例:ほとんど0か1)は、妥当が低くなる点が注意点です。もし多くの被験者で回数が類似しているならば、ウィルコクソンよりも符号検定(Sign test)を使う方が安全です。

回答

 

おっしゃる通りで、カウントデータをモデル化する場合、代表的なのはポアソン回帰および負の二項回帰です。「介入後の排便回数を目的変数、介入前の回数を説明変数+介入有無を追加」というポアソン回帰の考え方は妥当な発想です。

さらに「被験者内相関」を考慮したい場合は、一般化線形混合モデル(GLMM)を用いて個人をランダム効果とすることも可能です。

回答

 

とても良い質問で、おっしゃる通り、マッチングとIPTWの結果が異なることは珍しくありません。
そのときにどちらを採用すべきかを判断するかは、本当に難しい問題です。
ここで大切なのは、二つの背景をしっかりと理解することです。

 

・マッチングでは「似た者同士」を抽出するため、対象データの一部が捨てられる。
・IPTWでは全データを使うが、重みづけから仮想母集団とでもいうべきものが作られる。

 

したがって、結果の違いが「逆」になることもありえます。つまり処置群に効くが、全体ではそうでもない、
というようなものです。
この場合、おっしゃる通り、ストーリーに合わせると恣意性が高まります。
理論的整合性+統計的安定性で選ぶことが公正につながりますが、ここはかなり難しい部分です。
そういう意味で、全部出しをすることが多いように思います。
つまり、マッチングで処置群への効果にフォーカスをあてた結果を報告し、
IPTWで全体的な効果や一般化を重視しての結果を報告し、考察をする、
というのが一番誠実であると思います。

回答

 

手順、というのが申し訳ありません、イマイチ私が分かっておらず見当違いの回答かもしれませんが以下のような感じでしょうか。

1.目的・仮説の設定
2.目的に応じて分析手法確定(ログランク検定・Coxなど)
3.効果量の事前設定(HRが効果量)
4.追跡期間の設定(18か月など)
5.必要イベント数を決める
6.サンプルサイズを求める

という流れになります。

回答

 

パッケージはrpactが一番割安いかと思います。以下に簡単にコードを書いておきます。

 

# install.packages(c(“rpact”, “gsDesign2”))

library(rpact)

library(gsDesign2)

 

# ——————————-

# 設定

# ——————————-

alpha <- 0.05     # 有意水準(両側)

power <- 0.80     # 検出力

HR <- 0.75        # ハザード比

alloc_ratio <- 1  # 割付比(1:1)

median_c <- 12    # 対照群中央値(月)

lambda_c <- log(2) / median_c

accrual_m <- 18   # 登録期間(月)

follow_m  <- 6    # 追跡期間(月)

total_m   <- accrual_m + follow_m

drop_annual <- 0.10

drop_month  <- drop_annual / 12

p <- alloc_ratio / (1 + alloc_ratio)

 

# ——————————-

# 1) Schoenfeld近似による必要イベント数

# ——————————-

z_alpha <- qnorm(1 – alpha/2)

z_beta  <- qnorm(power)

D <- (z_alpha + z_beta)^2 / ((log(HR))^2 * p * (1 – p))

D  # 必要イベント数

 

# ——————————-

# 2) rpactによる必要サンプルサイズ

# ——————————-

fit <- getSampleSizeSurvival(

  sided = 2,

  alpha = alpha,

  beta = 1 – power,

  hazardRatio = HR,

  lambda2 = lambda_c,

  allocationRatioPlanned = alloc_ratio,

  accrualTime = accrual_m,

  followUpTime = follow_m,

  piecewiseDropoutTime = 12,

  dropoutRate1 = drop_annual,

  dropoutRate2 = drop_annual

)

 

fit$maxNumberOfSubjects # 必要サンプルサイズ N