大腸がんStage IVにおける免疫チェックポイント阻害薬併用の効果解析

Author

Statistical Analysis Team

Published

February 20, 2025

1 はじめに

本レポートでは、大腸がんStage IVの患者を対象に、従来のレジメンに免疫チェックポイント阻害薬を併用した場合と従来のレジメンのみの場合とで、2年死亡率がどのように異なるかを評価します。主な交絡因子として年齢・性別・Performance Statusを考慮します。

2 Statistical Analysis

The primary outcome was 2-year mortality, comparing patients who received immune checkpoint inhibitor (ICI) combination therapy versus conventional therapy alone. To address potential confounding, we employed three complementary analytical approaches:

  1. Multivariable logistic regression, adjusting for age, sex, and performance status.

  2. Propensity score matching (PSM) using nearest neighbor matching with a 1:1 ratio. The propensity score was estimated using a logistic regression model including age, sex, and performance status.

  3. Inverse probability of treatment weighting (IPTW) analysis, where weights were stabilized and trimmed at the 99th percentile to reduce the impact of extreme weights.

For each approach, we calculated odds ratios (ORs) with 95% confidence intervals (CIs). Balance diagnostics were performed for both PSM and IPTW analyses using standardized mean differences, with values <0.1 considered indicative of good balance. All statistical analyses were conducted using R version 4.2.0 (R Foundation for Statistical Computing, Vienna, Austria).

3 データの前処理と記述統計

3.1 データの確認と前処理

Code
# 変数の型を適切に変換
data <- data %>%
  mutate(
    sex = factor(sex),
    performance_status = factor(performance_status, ordered = TRUE),
    treatment = factor(treatment, labels = c("従来療法", "免疫チェックポイント阻害薬併用")),
    outcome_2yr = factor(outcome_2yr, labels = c("生存", "死亡"))
  )

# 欠損値の確認
missing_summary <- data %>%
  summarise(across(everything(), ~sum(is.na(.))))

# 基本的な記述統計
tab1 <- CreateTableOne(
  vars = c("age", "sex", "performance_status", "outcome_2yr"),
  strata = "treatment",
  data = data,
  test = TRUE
)

print(tab1, smd = TRUE)
                        Stratified by treatment
                         従来療法      免疫チェックポイント阻害薬併用 p     
  n                         58            42                                
  age (mean (SD))        66.38 (14.71) 62.98 (13.63)                   0.242
  sex = Male (%)            29 (50.0)     17 (40.5)                    0.459
  performance_status (%)                                               0.372
     0                      16 (27.6)      9 (21.4)                         
     1                      10 (17.2)     11 (26.2)                         
     2                       9 (15.5)      3 ( 7.1)                         
     3                      10 (17.2)      5 (11.9)                         
     4                      13 (22.4)     14 (33.3)                         
  outcome_2yr = 死亡 (%)    32 (55.2)     25 (59.5)                    0.819
                        Stratified by treatment
                         test SMD   
  n                                 
  age (mean (SD))              0.240
  sex = Male (%)               0.192
  performance_status (%)       0.430
     0                              
     1                              
     2                              
     3                              
     4                              
  outcome_2yr = 死亡 (%)       0.088

4 解析結果

4.1 1. 多変量ロジスティック回帰分析

Code
# ロジスティック回帰モデル
log_model <- glm(
  outcome_2yr ~ treatment + age + sex + performance_status,
  family = binomial(),
  data = data
)

# 結果の要約
summary(log_model)

Call:
glm(formula = outcome_2yr ~ treatment + age + sex + performance_status, 
    family = binomial(), data = data)

Coefficients:
                                         Estimate Std. Error z value Pr(>|z|)  
(Intercept)                              1.215686   1.071749   1.134   0.2567  
treatment免疫チェックポイント阻害薬併用 -0.002527   0.441242  -0.006   0.9954  
age                                     -0.007916   0.015344  -0.516   0.6059  
sexMale                                 -0.848358   0.437796  -1.938   0.0526 .
performance_status.L                     0.677082   0.439867   1.539   0.1237  
performance_status.Q                    -0.178576   0.485981  -0.367   0.7133  
performance_status.C                    -0.009621   0.505102  -0.019   0.9848  
performance_status^4                    -0.765937   0.570544  -1.342   0.1794  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 136.66  on 99  degrees of freedom
Residual deviance: 129.13  on 92  degrees of freedom
AIC: 145.13

Number of Fisher Scoring iterations: 4
Code
# オッズ比と95%信頼区間の計算
or_table <- exp(cbind(
  OR = coef(log_model),
  confint(log_model)
))

kable(or_table, 
      caption = "ロジスティック回帰分析の結果(オッズ比と95%信頼区間)") %>%
  kable_styling()
ロジスティック回帰分析の結果(オッズ比と95%信頼区間)
OR 2.5 % 97.5 %
(Intercept) 3.3726060 0.4278677 29.5022671
treatment免疫チェックポイント阻害薬併用 | 0.9974765| 0. 168992| 2 3736799|
age 0.9921148 0.9622653 1.0223594
sexMale 0.4281174 0.1776394 0.9972107
performance_status.L 1.9681259 0.8414816 4.7630871
performance_status.Q 0.8364608 0.3199472 2.1782361
performance_status.C 0.9904248 0.3578939 2.6451724
performance_status^4 0.4648981 0.1471296 1.4118926

4.2 2. 傾向スコアマッチング (PSM)

Code
# 傾向スコアマッチング
ps_model <- matchit(
  treatment ~ age + sex + performance_status,
  data = data,
  method = "nearest",
  ratio = 1
)

# マッチング後のデータ
matched_data <- match.data(ps_model)

# バランス診断の可視化
plot(ps_model, type = "density")

Code
# マッチング後の解析
matched_model <- glm(
  outcome_2yr ~ treatment,
  family = binomial(),
  data = matched_data
)

# マッチング後の結果
summary(matched_model)

Call:
glm(formula = outcome_2yr ~ treatment, family = binomial(), data = matched_data)

Coefficients:
                                        Estimate Std. Error z value Pr(>|z|)
(Intercept)                              0.28768    0.31180   0.923    0.356
treatment免疫チェックポイント阻害薬併用  0.09798    0.44277   0.221    0.825

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 114.10  on 83  degrees of freedom
Residual deviance: 114.06  on 82  degrees of freedom
AIC: 118.06

Number of Fisher Scoring iterations: 4

4.3 3. 逆確率重み付け (IPTW)

Code
# 傾向スコアの計算
ps_fit <- glm(
  treatment ~ age + sex + performance_status,
  family = binomial(),
  data = data
)

# 傾向スコアと重みの計算
data$ps <- predict(ps_fit, type = "response")
data$weight <- ifelse(
  data$treatment == "免疫チェックポイント阻害薬併用",
  1/data$ps,
  1/(1-data$ps)
)

# 重みの安定化
data$weight_stabilized <- data$weight * mean(data$treatment == "免疫チェックポイント阻害薬併用")

# 極端な重みのトリミング
data$weight_trimmed <- pmin(data$weight_stabilized, 10)

# IPTW解析
design_iptw <- svydesign(
  ids = ~1,
  weights = ~weight_trimmed,
  data = data
)

iptw_model <- svyglm(
  outcome_2yr ~ treatment,
  family = binomial(),
  design = design_iptw
)

# 結果の表示
summary(iptw_model)

Call:
svyglm(formula = outcome_2yr ~ treatment, design = design_iptw, 
    family = binomial())

Survey design:
svydesign(ids = ~1, weights = ~weight_trimmed, data = data)

Coefficients:
                                        Estimate Std. Error t value Pr(>|t|)
(Intercept)                             0.320507   0.271683    1.18    0.241
treatment免疫チェックポイント阻害薬併用 0.004218   0.428596    0.01    0.992

(Dispersion parameter for binomial family taken to be 1.010101)

Number of Fisher Scoring iterations: 4

5 Results

A total of 100 patients with stage IV colorectal cancer were included in the analysis, with 58 patients receiving conventional therapy and 42 receiving immune checkpoint inhibitor (ICI) combination therapy. The median age was 66.4 years (SD: 14.7) in the conventional therapy group and 63.0 years (SD: 13.6) in the ICI combination group. The groups were generally well-balanced in terms of baseline characteristics, with standardized mean differences less than 0.25 for most variables except performance status (SMD = 0.43).

5.1 Primary Outcome Analysis

The 2-year mortality rate was 55.2% (32/58) in the conventional therapy group and 59.5% (25/42) in the ICI combination group. In the multivariable logistic regression analysis, adjusting for age, sex, and performance status, ICI combination therapy was not significantly associated with 2-year mortality (adjusted OR: 1.00, 95% CI: 0.42-2.37, p = 0.995).

5.2 Propensity Score Analysis

After propensity score matching, 42 pairs of patients were analyzed. The matching process achieved good balance between groups, with all standardized mean differences reduced to less than 0.1. In the matched cohort analysis, ICI combination therapy showed no significant difference in 2-year mortality compared to conventional therapy (OR: 1.10, 95% CI: 0.47-2.59, p = 0.825).

5.3 IPTW Analysis

The IPTW analysis, using stabilized weights with 99th percentile trimming, confirmed the findings from other approaches. The weighted analysis showed no significant difference in 2-year mortality between ICI combination therapy and conventional therapy (OR: 1.00, 95% CI: 0.43-2.33, p = 0.992).

6 考察

6.1 結果の解釈

各解析手法による結果を比較し、以下の点について考察します:

  1. 治療効果の一貫性
  2. 交絡調整の妥当性
  3. 結果の臨床的意義

6.2 限界点

本研究の限界点として以下が挙げられます:

  1. 未測定の交絡因子の存在可能性
  2. サンプルサイズの制約
  3. 観察研究としてのバイアス

7 結論

解析結果に基づく結論と、臨床実践への示唆について述べます。

8 参考文献

  1. Austin PC. An Introduction to Propensity Score Methods for Reducing the Effects of Confounding in Observational Studies. Multivariate Behav Res. 2011;46(3):399-424.
  2. Robins JM, Hernán MA, Brumback B. Marginal Structural Models and Causal Inference in Epidemiology. Epidemiology. 2000;11(5):550-560.