MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

多重代入×IPTWのTable 1は何を平均する?Nは?mice・MatchThem・gtsummaryで作る背景比較表【R】

研究者: 欠損値のある臨床データで多重代入(mice)とIPTW(傾向スコア逆確率重み付け)を両方行う必要があるのですが、代入データをどう統合して患者背景比較表(Table 1)を作成し、Excelに貼ればいいのかわかりません……。

統計ER: mice + MatchThem(WeightIt)+ gtsummary + clipr を組み合わせれば、手計算や個別ループ処理を一切せず、1本のパイプラインコードで統合されたTable 1を作成し、そのままExcelのセルへ直接コピペできますよ!ポイントは「何を平均するか」と「Nをどう書くか」。さっそく手順を解説しましょう!

臨床研究や観察研究(リアルワールドデータ解析)において、交絡因子を調整するために傾向スコア逆確率重み付け(IPTW: Inverse Probability of Treatment Weighting)を実施するケースは非常に多い。

しかし、実際の臨床データには背景因子(年齢・BMI・検査値など)に「欠損値(Missing Data)」が含まれているのが常である。欠損値を単に除外する「完全ケース解析(Complete Case Analysis)」を行うと、サンプルサイズが大きく減少して選択バイアスが生じるため、査読者(Reviewer)から多重代入法(MI: Multiple Imputation)の併用を求められる場面が増えている。

ここで多くの研究者が直面するのが、「多重代入で補完された複数のデータセットに対してIPTWを適用し、どうやって統合して患者背景比較表(Table 1)を作成すればよいのか?」という実装上の分厚い壁である。

本記事では、まず統合の方法論(何を平均し、Nをどう表示し、SMDをどう出すか)を整理したうえで、mice・MatchThem(WeightIt)・cobalt・gtsummary・clipr という洗練されたRパッケージを組み合わせ、多重代入 ➔ IPTW ➔ 統合 ➔ Table 1作成 ➔ Excelコピペ までを一気通貫で完結させるパイプラインコードを解説する。

複雑な手計算や手入力を完全にゼロにし、確実かつ迅速に論文掲載レベルの背景因子表を作り上げよう。

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

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

目次

解析の全体像:なぜ「多重代入 ➔ IPTW ➔ 集計・統合」の順番なのか?

「多重代入とIPTWは、どちらを先に行うべきか?」という質問は非常に多い。結論から言えば、正解は「多重代入を先に行い、補完された各データセット内でIPTW重みを計算し、最後に集計・解析結果を統合する」という順序である。

  1. 多重代入(MI): 欠損値を含む元データから、$m$ 個(例: $m=5$ や $20$)の欠損値補完済みデータセットを作成する。
  2. IPTW重み計算: $m$ 個のデータセットそれぞれにおいて、共変量を用いて傾向スコア(Propensity Score)を推定し、IPTW重みを算出する。
  3. バランス評価・集計の統合: 各代入データで計算した重み付き集計値(背景因子の平均値や割合)や標準化平均差(SMD)を、$m$ 個の平均として統合する(Rubin’s rules の点推定と同じ考え方)。

欠損値があるままでは、その患者の傾向スコアを計算できない(完全ケースに限定されてしまう)ため、先に代入してから傾向スコアを推定する。さらに、代入データごとに傾向スコアと重みを計算する「within アプローチ」が、傾向スコアを代入間で平均してから重みを作る「across アプローチ」よりも偏りが小さいことが、シミュレーション研究で示されている(Granger et al., 2019; Leyrat et al., 2019)。

Table 1 の統合ルール:何を平均し、N はどう書くか?

Table 1 は「効果の推定」ではなく「背景の記述」なので、統合に必要なのは点の値だけである。標準誤差を合成する Rubin’s rules の分散の公式までは使わない。整理すると、次の4つのルールになる。

項目統合のしかたR での扱い
平均値・割合(%)代入データごとに重み付き値を計算し、$m$ 個を単純平均する代入データを縦に積み、重みを $1/m$ 倍して集計(survey + gtsummary)
N(列見出し)重み付け前は元データの実際の症例数。IPTW後は有効サンプルサイズ(ESS)の $m$ 個の平均を添えるtable(df_raw$treat) と cobalt::bal.tab() の ESS
SMD代入データごとに計算し、$m$ 個を平均する(最大値も確認)cobalt::bal.tab() の Mean.Diff
欠測の情報代入前のデータで、変数ごとの欠測数(%)を別に報告するtbl_summary(df_raw) または脚注

例えるなら、5人の採点者(5つの代入データ)がそれぞれ同じ答案に点数をつけ、最終成績はその平均点にする、というイメージである。重み付き平均を「さらに重み付けして」平均し直す必要はない。

N の扱いには注意が必要である。代入データを縦に積むと行数は $m$ 倍($m=5$ なら1,500行)になるが、症例が増えたわけではない。また、IPTW後の「重み付き人数」は疑似集団の人数であり、安定化していない ATE 重みでは各群が全体 N 近くまで膨らむ。そのため、重み付け前は実際の症例数、IPTW後は有効サンプルサイズ(ESS)を示すのが誠実である(ESS は重みのばらつきによって情報量がどれだけ目減りしたかを表す)。

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

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

使用する神パッケージ5選とパイプラインの役割

高度で複雑な処理をたった1本のコードでスマートに繋ぐため、本記事では以下の5つのパッケージ(+その土台となる2つ)を連携させる。

  • mice: 欠損値多重代入(MICE法)の標準パッケージ。mids と呼ばれる多重代入オブジェクトを出力する。
  • MatchThem(中身の計算は WeightIt): weightthem() 関数が代入オブジェクト(mids)を直接読み込み、$m$ 個のデータセットに一括でIPTW重みを割り当てる。WeightIt::weightit() 自体は mids を受け取れない点に注意。
  • cobalt: 傾向スコア解析におけるバランス評価(SMD等)を、代入データ間で統合・可視化するパッケージ。
  • gtsummary(土台は survey): 重み付きデータ(survey デザイン)から、tbl_svysummary() で論文品質の Table 1(背景比較表)を構築する。
  • clipr: 作成したTable 1を、Excelのセル分割状態のままクリップボードへ流し込む。

【ステップバイステップ】Rで多重代入×IPTWのTable 1を作成する実践コード

ここからは、実際に手元のR環境で動作するサンプルコードを用いて、Step 1からStep 5まで順番に解説する(R 4.5、mice 3.19.0、WeightIt 2.1.0、MatchThem 1.2.1、cobalt 5.0.0、survey 4.5、gtsummary 2.6.1 で動作確認)。

あらかじめ必要なパッケージをインストール・読み込んでおこう。

# 必要なパッケージの読み込み
library(tidyverse)
library(mice)
library(WeightIt)
library(MatchThem)
library(cobalt)
library(survey)
library(gtsummary)
library(clipr)

Step 1: 欠損値データの多重代入(mice)

まずは欠損値を含むサンプルデータを用意し、mice() 関数で多重代入を実施する。IPTWの効果が見えるように、高齢・高BMI・男性ほど治療を受けやすい(交絡がある)データにしている。

# 1. 動作確認用のサンプルデータを作成(欠損値あり)
set.seed(123)
n <- 300
df_raw <- tibble(
  age   = rnorm(n, mean = 65, sd = 10),
  sex   = factor(sample(c("Male", "Female"), n, replace = TRUE)),
  bmi   = rnorm(n, mean = 24, sd = 4),
  sbp   = rnorm(n, mean = 135, sd = 15),
  # 高齢・高BMI・男性ほど治療を受けやすい(=交絡がある)設定にする
  treat = rbinom(n, 1, plogis(-0.2 + 0.05 * (age - 65) + 0.10 * (bmi - 24) +
                                0.5 * (sex == "Male")))
)

# 意図的に欠損値(NA)を注入
df_raw$bmi[sample(1:n, 40)] <- NA
df_raw$sbp[sample(1:n, 25)] <- NA

# 2. mice による多重代入の実行(ここでは m = 5 とする)
imp_data <- mice(df_raw, m = 5, printFlag = FALSE, seed = 123)
m <- imp_data$m

これで、5つの補完済みデータセットを保持する imp_data(mids オブジェクト)が作成された。なお、本番の解析では $m$ を「欠測を含む症例の割合(%)」程度以上にする目安もある(White et al., 2011)。この例では約2割なので、$m = 20$ 程度にしてもよい。

Step 2: 代入データに対するIPTW重みの計算(MatchThem::weightthem)

通常であれば $m$ 個のデータをループ処理で1つずつ傾向スコア計算するところだが、MatchThem パッケージの weightthem() 関数は、mice の出力(mids オブジェクト)をそのまま受け取り、内部で WeightIt を呼び出して計算してくれる。

# 多重代入データに対して一括でIPTW重みを算出
W_imp <- weightthem(
  treat ~ age + sex + bmi + sbp,
  datasets  = imp_data,
  approach  = "within",   # 代入データごとに傾向スコアを推定する
  method    = "glm",      # ロジスティック回帰による傾向スコア推定
  estimand  = "ATE",      # 全体治療効果(ATE)をターゲット
  stabilize = TRUE        # 安定化重み(重みの合計が元の N 付近になる)
)

W_imp

このわずか1行で、5つの代入データセットそれぞれに対して個別に傾向スコアが計算され、適切なIPTW重み(ATE)が付与された統合オブジェクト W_imp(wimids オブジェクト)が完成する。stabilize = TRUE にしておくと、各群の重みの合計が元の症例数付近になり、Table 1 の重み付き人数が読みやすくなる。

Step 3: バランス評価の確認(cobalt::bal.tab)

IPTW適用後、治療群と対照群の間で共変量バランスが十分に保たれているか(一般に標準化平均差:SMD < 0.1 が目標)を評価する。

cobalt パッケージの bal.tab() 関数を使用すると、代入データごとに計算したSMDの平均・最大値を一括で出力できる。2値変数も SMD で表示するために binary = "std" を指定している(既定では割合の差がそのまま表示される)。

# 調整前後のバランス(SMD)を統合評価
bal <- bal.tab(W_imp, un = TRUE, binary = "std", abs = TRUE,
               thresholds = c(m = 0.1))
bal

# Table 1 に載せるため、SMD(代入データ間の平均)と有効サンプルサイズを取り出す
smd_tab <- bal$Balance.Across.Imputations |>
  rownames_to_column("key") |>
  select(key, smd_un = Mean.Diff.Un, smd_adj = Mean.Diff.Adj)
ess <- bal$Observations
## 出力(抜粋)
Balance summary across all imputations
               Type Mean.Diff.Un Max.Diff.Un Mean.Diff.Adj Max.Diff.Adj
prop.score Distance       0.5044      0.5272        0.0044       0.0100
age         Contin.       0.2990      0.2990        0.0064       0.0100
sex_Male     Binary       0.1985      0.1985        0.0020       0.0081
bmi         Contin.       0.3028      0.3478        0.0141       0.0183
sbp         Contin.       0.0662      0.0836        0.0184       0.0265
Average effective sample sizes across imputations
               0      1
Unadjusted 141.  159.  
Adjusted   130.3 150.09

統合された調整後SMD(Mean.Diff.Adj)だけでなく、代入データの中で最も悪い値(Max.Diff.Adj)もすべて 0.1 未満に収まっていることを確認できれば、交絡調整は成功である。この例では、調整前に 0.30 あった年齢やBMIのSMDが 0.02 未満まで下がっている。最下段の Average effective sample sizes が、Table 1 の見出しに使う有効サンプルサイズ(ESS)である。

Step 4: 統合サマリー表(Table 1)の作成(survey + gtsummary::tbl_svysummary)

いよいよ、調整後の背景因子比較表(Table 1)を作成する。ここが最大のつまずきポイントで、gtsummary::tbl_summary() に weightthem() の結果(wimids)を直接渡すと、「data 引数は data.frame でなければならない」というエラーで止まる。そこで、次の2段階で作る。

4-1. 代入データを縦に積み、重みを $1/m$ にする

# m 個の代入データを縦に積み、重みを 1/m にする
long <- complete(W_imp, action = "long") |>
  rename(ipw = weights) |>   # 列名 weights のままだと survey の集計が誤るため改名
  mutate(w_un  = 1 / m,      # 重み付け前:m 個の値の平均だけを取る
         w_adj = ipw / m)    # IPTW 後 :重み付き値の m 個の平均を取る

des_un  <- svydesign(ids = ~1, weights = ~w_un,  data = long)
des_adj <- svydesign(ids = ~1, weights = ~w_adj, data = long)

積み上げたデータで、重みを $1/m$ 倍して集計すると、「代入データごとの重み付き値を $m$ 個平均したもの」と同じになる(各代入データの重みの合計がほぼ同じであるため)。重み付き人数も $m$ 倍に膨らまず、1データセット分の大きさに戻る。

ここで列名 weights を必ず別名(ここでは ipw)に変えておく。complete() が返す重みの列名は weights だが、この名前の列があると、survey パッケージのカテゴリ変数の集計(svytable())が指定した重みではなくこの列を使ってしまい、エラーも出ないまま割合が誤った値になる(survey 4.5 で確認)。

4-2. tbl_svysummary() で表を作り、SMD と N を整える

# 重み付き Table 1 に cobalt の SMD を結合する関数
make_tbl <- function(des, smd_col) {
  tbl_svysummary(
    des,
    by      = treat, # 比較群(0: 対照群, 1: 治療群)
    include = c(age, sex, bmi, sbp),
    statistic = list(
      all_continuous()  ~ "{mean} ({sd})", # 連続変数は平均値 (標準偏差)
      all_categorical() ~ "{n} ({p}%)"     # カテゴリ変数は人数 (%)
    ),
    digits = list(all_continuous() ~ 1, all_categorical() ~ c(0, 1))
  ) |>
    modify_table_body(\(b) b |>
      mutate(key = if_else(row_type == "label", variable,
                           paste0(variable, "_", label))) |>
      left_join(select(smd_tab, key, SMD = all_of(smd_col)), by = "key") |>
      select(-key)) |>
    modify_header(SMD ~ "**SMD**") |>
    modify_fmt_fun(SMD ~ \(x) style_number(x, digits = 2))
}

# 列見出し:重み付け前は「実際の症例数 N」、IPTW後は「有効サンプルサイズ ESS」
n_obs <- table(df_raw$treat)
t_un <- make_tbl(des_un, "smd_un") |>
  modify_header(stat_1 = sprintf("**Control**  \nN = %d", n_obs[["0"]]),
                stat_2 = sprintf("**Treated**  \nN = %d", n_obs[["1"]]))
t_adj <- make_tbl(des_adj, "smd_adj") |>
  modify_header(stat_1 = sprintf("**Control**  \nESS = %.1f", ess["Adjusted", "0"]),
                stat_2 = sprintf("**Treated**  \nESS = %.1f", ess["Adjusted", "1"]))

# 重み付け前と IPTW 後を横に並べる
table1_obj <- tbl_merge(
  list(t_un, t_adj),
  tab_spanner = c("**Before weighting**", "**After IPTW**")
) |>
  modify_footnote_header(
    sprintf("Mean (SD) or n (%%), averaged over %d imputed datasets; weighted n rounded. ESS, effective sample size; SMD, absolute standardized mean difference averaged over imputations.", m),
    columns = all_stat_cols(), replace = TRUE
  )

table1_obj |> bold_labels() # 画面表示用に変数名を太字にする

この処理により、各代入データでの重み付き集計結果が統合され、論文にそのまま掲載できるフォーマットの背景比較表が出力される。実行結果は次のとおりである。

Before weightingAfter IPTW
CharacteristicControl N = 141Treated N = 159SMDControl ESS = 130.3Treated ESS = 150.1SMD
age63.9 (9.2)66.7 (9.5)0.3065.4 (9.4)65.4 (9.3)0.01
sex
Female76 (53.9%)70 (44.0%)67 (47.7%)76 (47.8%)
Male65 (46.1%)89 (56.0%)0.2074 (52.3%)83 (52.2%)0.00
bmi23.4 (4.0)24.6 (4.0)0.3024.0 (3.9)24.0 (4.1)0.01
sbp136.1 (15.2)135.0 (16.1)0.07135.2 (15.3)135.5 (16.5)0.02
Mean (SD) or n (%), averaged over 5 imputed datasets. ESS, effective sample size; SMD, absolute standardized mean difference averaged over imputations.

重み付け前は年齢・性別・BMIに差(SMD 0.20〜0.30)があったが、IPTW後はすべて SMD 0.02 以下になっている。IPTW後の重み付き人数(例: 対照群 67 + 74 = 141)は元の症例数とほぼ同じで、安定化重みの効果が確認できる。

念のため、「積み上げて $1/m$ 倍」と「代入ごとに計算して平均」が一致するかを確かめておこう。

# 代入データごとに重み付き値を計算してから m 個を平均
long |>
  group_by(.imp, treat) |>
  summarise(age  = weighted.mean(age, ipw),
            male = weighted.mean(sex == "Male", ipw), .groups = "drop") |>
  group_by(treat) |>
  summarise(across(c(age, male), mean))

# 積み上げデータでまとめて重み付き値を計算
long |>
  group_by(treat) |>
  summarise(age  = weighted.mean(age, ipw),
            male = weighted.mean(sex == "Male", ipw))

どちらも対照群の年齢 65.4 歳・男性割合 0.523、治療群の年齢 65.4 歳・男性割合 0.522 となり、一致する。

Step 5: clipr::write_clip() でExcelへ一発コピペ!

作成した gtsummary のオブジェクトをデータフレーム(tibble)へ変換し、clipr::write_clip() を使ってクリップボードへ転送する。見出しの太字記号(**)や改行、空欄の NA は、貼り付ける前に取り除いておく。

# Table 1 をデータフレーム化して直接クリップボードにコピー
tab_xl <- as_tibble(table1_obj, col_labels = TRUE)
names(tab_xl) <- names(tab_xl) |>
  str_remove_all("\\*\\*") |>        # 見出しの太字記号 ** を外す
  str_replace_all("\\s*\\n", " ")    # 見出しの改行をスペースに
tab_xl[is.na(tab_xl)] <- ""          # NA を空欄にする

write_clip(tab_xl)

このコードを実行したら、開いているExcelシートに切り替え、貼り付けたいセルで Ctrl + V(Macなら Cmd + V) を押すだけでよい。

各数値・項目が完全にセル分割された状態でExcelへ綺麗に貼り付けられる。なお、write_clip() は RStudio などの対話的なセッションで使う関数で、Rscript でバッチ実行するとエラーになる。また、「Before weighting / After IPTW」の見出し(スパナー)は貼り付けられないので、Excel上で1行追加して書き足そう。

臨床研究・査読者(Reviewer)対策のポイント

重み付け後の数値の解釈と表示マナー: IPTW適用後の Table 1 における連続変数の平均値やカテゴリ変数の割合(%)は、重み付けされた疑似集団(Pseudo-population)における調整後の推計値を、代入データ間で平均したものである。人数($N$や$n$)の表示については、重み付け前の「実際の症例数」(代入データを積み上げた $m$ 倍の数ではない)を明記し、IPTW後は有効サンプルサイズ(Effective Sample Size)を見出しや脚注に添えるのが誠実な作法となる。また、代入前の各変数の欠測数(%)も、本文・脚注・補足資料のいずれかで報告しておくと査読で指摘されにくい。

論文の Methods 欄に書く英文テンプレート例

投稿論文の統計解析手法(Statistical Analysis)セクションに記載する英文フレーズのテンプレートを以下に示す。

“Missing covariate values were imputed using multiple imputation by chained equations (MICE) with 5 imputed datasets. Within each imputed dataset, propensity scores were estimated using logistic regression, and stabilized inverse probability of treatment weights (IPTW) for the average treatment effect were calculated (the within approach). Weighted means, proportions, and standardized mean differences (SMDs) were calculated in each imputed dataset and averaged across the imputed datasets. Covariate balance was considered adequate when the absolute SMD was less than 0.1. Effective sample sizes after weighting were also averaged across the imputed datasets.”

(和訳)共変量の欠測値は、連鎖方程式による多重代入法(MICE)で5つの代入データセットを作成して補完した。各代入データセット内でロジスティック回帰により傾向スコアを推定し、平均処置効果を対象とした安定化逆確率重み(IPTW)を算出した(within アプローチ)。重み付き平均値・割合・標準化平均差(SMD)は代入データセットごとに計算し、代入データセット間で平均した。SMD の絶対値が 0.1 未満の場合にバランスが良好とみなした。重み付け後の有効サンプルサイズも代入データセット間で平均した。

【まとめ】1本で動くコピペ用一括テンプレートコード

今回紹介した一連の処理(多重代入 ➔ IPTW ➔ 統合 ➔ Table 1 ➔ Excel出力)を1本にまとめた一括コードを提示する。ご自身のデータフレーム名・変数名に置き換えて実行してほしい(治療変数は 0/1 で、"0"・"1" の部分は群の値に合わせて変更する)。

# === 多重代入 × IPTW ➔ Table 1 ➔ Excelコピペ 一括パイプライン ===
library(tidyverse)
library(mice)
library(WeightIt)
library(MatchThem)
library(cobalt)
library(survey)
library(gtsummary)
library(clipr)

# 1. 多重代入(ご自身のデータ df_raw と指定変数に変更)
imp <- mice(df_raw, m = 5, printFlag = FALSE, seed = 123)
m   <- imp$m

# 2. 代入データごとに IPTW 重みを一括計算(治療変数 ~ 共変量)
W <- weightthem(
  treat ~ age + sex + bmi + sbp,
  datasets  = imp,
  approach  = "within",
  method    = "glm",
  estimand  = "ATE",
  stabilize = TRUE
)

# 3. バランス評価(SMD < 0.1 の確認)と、Table 1 用の SMD・ESS の取り出し
bal <- bal.tab(W, un = TRUE, binary = "std", abs = TRUE, thresholds = c(m = 0.1))
bal
smd_tab <- bal$Balance.Across.Imputations |>
  rownames_to_column("key") |>
  select(key, smd_un = Mean.Diff.Un, smd_adj = Mean.Diff.Adj)
ess <- bal$Observations

# 4. 代入データを縦に積み、重み 1/m の survey デザインを作る
long <- complete(W, action = "long") |>
  rename(ipw = weights) |>
  mutate(w_un = 1 / m, w_adj = ipw / m)
des_un  <- svydesign(ids = ~1, weights = ~w_un,  data = long)
des_adj <- svydesign(ids = ~1, weights = ~w_adj, data = long)

# 5. 統合 Table 1 の作成
make_tbl <- function(des, smd_col) {
  tbl_svysummary(
    des, by = treat, include = c(age, sex, bmi, sbp),
    statistic = list(all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"),
    digits    = list(all_continuous() ~ 1, all_categorical() ~ c(0, 1))
  ) |>
    modify_table_body(\(b) b |>
      mutate(key = if_else(row_type == "label", variable, paste0(variable, "_", label))) |>
      left_join(select(smd_tab, key, SMD = all_of(smd_col)), by = "key") |>
      select(-key)) |>
    modify_header(SMD ~ "**SMD**") |>
    modify_fmt_fun(SMD ~ \(x) style_number(x, digits = 2))
}
n_obs <- table(df_raw$treat)
t_un  <- make_tbl(des_un, "smd_un") |>
  modify_header(stat_1 = sprintf("**Control**  \nN = %d", n_obs[["0"]]),
                stat_2 = sprintf("**Treated**  \nN = %d", n_obs[["1"]]))
t_adj <- make_tbl(des_adj, "smd_adj") |>
  modify_header(stat_1 = sprintf("**Control**  \nESS = %.1f", ess["Adjusted", "0"]),
                stat_2 = sprintf("**Treated**  \nESS = %.1f", ess["Adjusted", "1"]))
table1_obj <- tbl_merge(list(t_un, t_adj),
                        tab_spanner = c("**Before weighting**", "**After IPTW**"))
table1_obj |> bold_labels()

# 6. クリップボードへコピー
tab_xl <- as_tibble(table1_obj, col_labels = TRUE)
names(tab_xl) <- names(tab_xl) |> str_remove_all("\\*\\*") |> str_replace_all("\\s*\\n", " ")
tab_xl[is.na(tab_xl)] <- ""
write_clip(tab_xl)

# ➔ あとはExcelを開いて Ctrl + V (Cmd + V) で貼り付けるだけ!

複雑に見える高度な因果推論と欠損値処理も、「代入データごとに計算して平均する」「N は実際の症例数と ESS で示す」という2つの原則さえ押さえれば、最新のRパッケージ群を組み合わせて数十行のコードで自動化できる。

転記ミスや手作業の不安を排除し、信頼性の高い統計解析結果を論文へ組み込んでいこう。

参考文献

  • Granger E, Sergeant JC, Lunt M. Avoiding pitfalls when combining multiple imputation and propensity scores. Stat Med. 2019;38(26):5120-5132. doi:10.1002/sim.8355
  • Leyrat C, Seaman SR, White IR, et al. Propensity score analysis with partially observed covariates: How should multiple imputation be used? Stat Methods Med Res. 2019;28(1):3-19. doi:10.1177/0962280217713032
  • Pishgar F, Greifer N, Leyrat C, Stuart E. MatchThem:: Matching and Weighting after Multiple Imputation. The R Journal. 2021;13(2):292-305. doi:10.32614/RJ-2021-073
  • Austin PC, Stuart EA. Moving towards best practice when using inverse probability of treatment weighting (IPTW) using the propensity score to estimate causal treatment effects in observational studies. Stat Med. 2015;34(28):3661-3679. doi:10.1002/sim.6607
  • White IR, Royston P, Wood AM. Multiple imputation using chained equations: Issues and guidance for practice. Stat Med. 2011;30(4):377-399. doi:10.1002/sim.4067

おすすめ書籍

誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!

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

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

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

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

この記事を書いた人

医師、医学博士(専門は疫学および統計学)。10年以上の研究歴を有し、筆頭著者として10本の英文原著論文を執筆した実績を持つ。現在、外資系製薬企業にて15年以上にわたり、臨床開発やデータ解析、承認審査、薬価交渉戦略といった実務の最前線に従事。

「統計に悩むあなたを救いたい」をコンセプトに、ブログ「統計ER」やYouTube、SNSを通じて、医療従事者や研究者向けに「実務直結の統計ノウハウ」を配信。

学術的な厳密さと、製薬業界での高度な実務経験を融合させた独自の視点から、ブラックボックス化しない統計解析の普及を目指す。オンラインショップ「TKER SHOP」での計算ツール提供や、クラウドワークス等を通じた統計コンサルティング・解析代行(主にRを使用)も幅広く展開中。

コメント

コメントする

目次