附錄 1:回院之後的事


🩺 環境健檢:setup/validate_env.R

開課前 / 卡關時,跑一次:

source("setup/validate_env.R")     # RStudio Console
# 或
# Rscript setup/validate_env.R     # terminal

30 秒內檢查 5 件事: 1. R / Quarto 版本 2. 22 個套件都裝好且 load 得起來(含 v0.2 新增的 MatchIt / cobalt) 3. 5 個 data/faricimab_*.csv 都在、欄位 schema 正確 4. _freeze/ 預烤 cache + _book/index.html 已 render 5. 6 支 scripts/0[1-6]_*.R 齊全

回傳 PASS / WARN / FAIL 三色摘要、每個 FAIL 都附 💡 解法提示。CI 友善:FAIL > 0 會 exit 1。


🚀 完全不會寫程式:6 支腳本一行跑完

如果你完全不想跟 AI 對話、也不想看 R code, 打開 RStudio Terminal(或本機 terminal),確認你人在專案根目錄,依序執行:

# 第一次需要裝套件(5–10 分鐘);之後省略
Rscript setup/install.r

# 跟著順序跑,每支都會輸出對應檔案到 output/
Rscript scripts/01_table1.R              # → output/table1_standalone.html
Rscript scripts/02_mmrm_figure1.R        # → output/figure1_standalone.png  (BCVA + CST)
Rscript scripts/03_cmh_figure2.R         # → output/figure2_standalone.png  (IRF/SRF)
Rscript scripts/04_km_figure3.R          # → output/figure3_standalone.png  (KM + Cox)
Rscript scripts/05_psm_my_hospital.R     # → output/love_plot + figure1/2_my_hospital  (PSM 流程)

# 想把整本書(含 Part 5 的 PSM 教學)render 成可瀏覽 HTML:
Rscript scripts/99_render_report_for_my_data.R
# → _book/index.html
6 支腳本對應的章節
腳本 對應章節 跑出什麼
01_table1.R Part 2 Table 1(baseline characteristics)
02_mmrm_figure1.R Part 3 Figure 1:BCVA + CST 隨時間變化
03_cmh_figure2.R Part 4 Figure 2:IRF / SRF / 兩者皆無 三 panel
04_km_figure3.R Part 6 Figure 3:KM 曲線 + Cox HR
05_psm_my_hospital.R Part 5 Love plot(ASMD 前後)+ matched cohort 上的 Fig 1/2
99_render_report_for_my_data.R 全書 整本書 render 成 HTML(輸出到 _book/
⚠️ 三個必須先確認的前提
  1. CWD 在專案根目錄:腳本用 data/... 相對路徑,cd scripts/ 後跑會找不到資料。
  2. 套件已裝Rscript setup/install.r 一次裝齊 14 個套件(含 PSM 用的 MatchIt + cobalt)。
  3. 資料檔在 data/faricimab_baseline.csvfaricimab_followup.csvfaricimab_my_hospital_baseline.csvfaricimab_my_hospital_followup.csv,缺一支對應腳本就跑不起來。

A. 院內 csv schema(資料字典)

完整版在 data/data_dictionary.md。一頁懶人包:

baseline csv(一筆病人一列)

patient_id, arm, study, region, age, sex,
bcva_baseline, cst_baseline, irf_baseline, srf_baseline,
bcva_strat, lld_strat

followup csv(同一病人多列,每次回診一列)

patient_id, week, bcva, cst, irf, srf

規則

  • Boolean 用 0/1,不要 Yes/No、不要中文
  • Missing 留空(,,),不要 999/NULL
  • 欄位名小寫、底線、英文
  • UTF-8 encoding

跑這段 sanity check:

required_baseline <- c("patient_id","arm","study","region","age","sex",
                       "bcva_baseline","cst_baseline","irf_baseline","srf_baseline")
stopifnot(all(required_baseline %in% names(your_baseline)))

required_followup <- c("patient_id","week","bcva","cst","irf","srf")
stopifnot(all(required_followup %in% names(your_followup)))

B. AI 對話三原則

原則 1 — 給情境

❌ 「幫我寫 mmrm」

✅ 「我有 R data frame fu_long,欄位 patient_id、arm(faricimab/aflibercept)、visit(factor 4/8/12)、bcva_change(連續變項)、bcva_strat、lld_strat、study、region。請用 mmrm::mmrm()bcva_change ~ arm * visit + bcva_strat + lld_strat + study + region + us(visit | patient_id),然後用 emmeans 取 adjusted means。」

原則 2 — 給樣本

❌ 「我的資料怪怪的,幫我看」

✅ 「我的 followup 資料 head 長這樣:[貼 5 row]。執行 mmrm() 時跳這個錯:[貼錯誤訊息]。請告訴我可能原因。」

原則 3 — 要 reproducible

❌ 「給我畫圖」

✅ 「請給我可以直接複製貼到 RStudio Console 跑的 R code,加中文註解。如果用到任何套件,請在最上面加 library() 載入。」


C. 三個常見坑

🤖 用 AI 之前先讀這段
  • AI(ChatGPT / Gemini / Claude)對於「眼科專業」與「統計細節」仍會出錯——可能寫錯藥物分類、混用 Q4W 與 T&E、把 random effect 結構亂搭、把 CMH 權重公式套錯。
  • 對策:先翻教材的「📋 複製這段話」與下面「參考程式碼」對照;對方法概念不確定時,回頭查 references.bib 引到的論文(Cheung 2025、Heier 2022、Khanani 2024、Austin 2011、Stuart 2010、Ho 2011 MatchIt 等)。
  • 課堂現場:請統一複製教材的「參考程式碼」執行,AI 給的版本可能用不同套件、不同預設、產出和同學對不上的圖表。

坑 1:AI 幻想欄位

AI 不知道你的資料長什麼樣,會「假設」欄位名。例如它寫 df$bcva_letters 但你的欄位是 bcva,跑就 NULL。

解法:每次新對話一開始貼 glimpse(df) 的輸出。

坑 2:套件名拼錯 / outdated function

AI 訓練資料有時 cutoff 早,會給你 5 年前的寫法(例如 tidyr::gather() 已被 pivot_longer() 取代)。

解法:跑出 deprecation warning 時,把 warning 貼回去問「請用最新版的 tidyr / dplyr 改寫」。

坑 3:mmrm 套件裝不起來

# 錯誤:'mmrm' 不存在
install.packages("mmrm")
# Warning message: package ‘mmrm’ is not available for this version of R

解法:用 PPM binary:

options(repos = c(CRAN = "https://packagemanager.posit.co/cran/latest"))
install.packages("mmrm")
# 或用 pak
pak::pak("mmrm")

坑 4:mantelhaen.test 在 stratum 太空時報錯

Error in mantelhaen.test(x) :
  'x' must contain at least one positive entry per stratum

解法:drop 掉空 stratum,或合併成更粗的分層。

# 先檢查
xtabs(~ arm + outcome + stratum, data = d) |>
  apply(3, function(m) all(rowSums(m) > 0)) |>
  table()

坑 5:ggplot 中文亂碼 / □□□□

解法:每章 qmd 開頭都 source("_common.R"),裡面用 showtext + Noto Sans TC。

坑 6:long vs wide 弄錯

# 你以為這樣可以畫
ggplot(baseline, aes(x = visit, y = bcva)) ...  # 錯!baseline 沒有 visit 欄位

# 正確:用 followup 或 fu_long
ggplot(followup, aes(x = week, y = bcva, colour = arm)) ...

D. 把這份教材帶回院內:兩個路線

路線 A — Posit.Cloud(推薦)

  1. 在 Posit.Cloud 上 Save a Permanent Copy 把這個 project 存到你的帳號
  2. 把院內 csv 放進 data/,改 _quarto.yml 的 title
  3. quarto::quarto_render() 重 render
  4. _book/index.html 給共同作者 / 主任 / Shao 看

路線 B — 本機 RStudio / Positron

git clone <this repo>
cd roche-vabysmo-rwe-workshop
Rscript setup/install.r
# 把你的 csv 放進 data/
quarto render
open _book/index.html

E. ELI5:統計方法(給門外漢的中文白話)

這節用「眼科醫師的日常經驗」做比喻。比喻會犧牲精確度換可記性,請別拿來投 reviewer。

Repeated measures(重複測量)

同一隻眼睛被你量很多次(OCT 第 0、4、8、12 週各量一次)。 直覺上這 4 個數字「不是 4 個獨立病人」,因為他們本來就比較像,統計分析要承認這件事

MMRM(mixed model for repeated measures)

「同一隻眼的時間序列」+「兩組病人」混在一起的迴歸模型1,2比喻:把全部病人的 BCVA 時間曲線丟進一個漏斗,漏斗會自動扣掉「同一個人本來就比較像」這部分,最後剩下「這藥真的造成的差別」。

為什麼不用 paired t-test?只能比 2 個時間點,浪費了 4 個。 為什麼不用 ANOVA?把每個 visit 當獨立 group,沒有處理「同一個人」這事——這是 Gueorguieva & Krystal 2004 〈Move Over ANOVA〉的主張3。 Type I error / bias 行為見 Bell & Rabe 2020 simulation4

Unstructured covariance(非結構化共變數)

問題:4 個 visit 之間「相關有多強」? - structured(如 AR(1)):「越近越相關,越遠越不相關,照公式估」 - unstructured:「不假設規則,每對 visit 都自己估」← 最 flexible,paper 都用這個

比喻:你本來想假設「越近越相關」,但讓 model 自己估更老實。

Random effect / fixed effect / random intercept

  • fixed effect(固定效應):你關心的差別。例如「藥」、「visit」、「baseline severity」
  • random effect(隨機效應):你關心、但要承認它存在的差別。例如「這個人本來就視力比較好」
  • random intercept:給每個病人一個「自己的起點」,model 自動估每人 individual baseline noise

比喻:fixed = 你想討論的;random = 你想 control 掉的。

MAR / 隱式插補(implicit imputation)

MAR(missing at random):「missing 的原因和 missing 那個值無關」。 舉例:病人 8/15 沒回診是因為下大雨,跟他當天視力多少無關 → MAR 成立。 舉例:視力惡化的病人比較容易掉追蹤 → 這是 MNAR(missing not at random,難處理)。

MMRM 在 MAR 假設下會自動「隱式插補」——它不需要你補 NA,model 內部已經考慮 missing 對結果的修正。所以你直接丟 NA 進去就好1,5,6

想完整對齊 ICH E9 (R1) estimands framework?參考 Mehrotra 20167

Stratified analysis(分層分析)

「先把人分群、群內比一比、再加權平均」。 比喻:要比兩家醫院的存活率,不能直接比,因為一家收的都是嚴重病人。 正確:先「同樣嚴重度群」內比一比,再加權合併。

為什麼比例的比較要 stratify? RCT 隨機分組會配合「分層因子」做隨機(stratified randomisation),分析時要用同樣分層配合,才會 unbiased

CMH-weighted proportion / Cochran-Mantel-Haenszel 加權比例

把每個 stratum 算自己的「兩組差異」,再用 stratum 樣本數加權平均8,9比喻:班會主席選舉,先按系投票算各系候選人領先幅度,再用各系人數加權算全校總差異。

權重公式 \(w_k = \frac{n_{1k} \cdot n_{2k}}{n_{1k} + n_{2k}}\),是「兩 arm 樣本數的調和平均」——直觀意思是「這個 stratum 兩 arm 都夠多人才有發言權」。MH 在 RCT 中的角色與 stratification adjustment 的最新觀點見 Qiu 202510、Kahan & Morris 201311

95% confidence interval(95% 信賴區間)

「如果你重做這個試驗 100 次,估計值會落在這個區間 95 次」。 口訣:CI 越窄越有把握、越寬越是「拍胸脯說的話打折」。 n 變小、CI 會變寬約 \(\sqrt{n_{\text{old}} / n_{\text{new}}}\) 倍。

p value(nominal P)

「假設兩組真的沒差,這份資料剛好出現這麼大差異的機率」。 < 0.05 通常被當作「顯著」。

Nominal P 是「沒有為多重比較校正過的 p」——只看單一檢定,不能因為「整篇 paper 跑了 30 個 p、有一個 < 0.05」就大聲宣告。Paper 在 head-to-head exploratory analysis 用 nominal P 是合理的。

Power / 效能

「如果真的有 X 大的差異,你的試驗有多大機率抓得到(p < 0.05)」。 n 越大 power 越強。 RWE 院內 cohort n 通常 100–300,power 比 RCT 弱很多——所以「結果不顯著」不代表「沒效」,可能只是「人數不夠抓出來」。

Kaplan–Meier 曲線

橫軸時間、縱軸「直到 t 為止還沒事件的比例」(或反過來:cumulative incidence = 已發生比例)12,13。 階梯狀下降,每次有人發生事件就掉一階。

為什麼不用 mean / proportion? 因為到追蹤結束都還沒事件的人,你不能說「他的事件時間是無限大」,但也不能丟掉他——KM 的精神是「他已知活到 X 週」,剩下的不知道(censored)。Survival analysis 在臨床試驗的整體 review 見 Fleming & Lin 200014

Censoring(設限)

到觀察結束都沒發生事件、或失聯的人,不是事件、也不是「沒事件」,而是「我們只知道他活到 t」。 比喻:你問病人「會不會復發」,但他下個月就出國移民,你不能說他「沒復發」也不能說「復發」——他是 censored at 移民日。

Hazard ratio(HR)

「兩組事件發生的瞬間速率的比值」。 HR = 1 → 兩組一樣。HR > 1 → 第一組事件更快發生。HR < 1 → 反之。

注意:HR 不是 risk ratio,也不是 odds ratio。HR 是「在還沒發生事件的人之中,今天發生事件的機率比」——所以可以隨時間變化(PH 假設就是「不變」)。

Log-rank test

KM 兩條曲線「整體形狀有沒有顯著差異」的 p value。 比喻:兩個爬山隊伍誰先到山頂?log-rank 在問「兩條路徑曲線是不是看起來像同一條」。

Cox regression(Cox 比例風險模型)

時間序列版的迴歸。 比喻:在 KM 之外加 covariate(年齡、嚴重度、用藥),讓 HR 是「校正過其他因素之後的純藥效果」。 PH 假設違反時的處理(time-varying coefficient、splines、weighted log-rank、RMST)見 Hess 199515、Gregson 2019 JACC16

ITT(intention-to-treat)

「按隨機分組那一刻的 arm 來分析,不管後來換組、停藥、退出」。 保守、防止「治療換組偏向有效組」造成 bias。

Post-hoc analysis

「事後分析」——試驗結束之後才想到的問題。 注意:post-hoc 比 pre-specified 弱,因為「事後找的洞容易好像 chance findings」。Cheung 2025 是 post-hoc,所以 paper 寫 “exploratory” 而非 “confirmatory”,且 P 都標 nominal。

E-value(觀察性研究的 unmeasured confounding 敏感度分析)

VanderWeele & Ding 2017 Ann Intern Med17 提出的單一數字指標: 「要有多強的未測量混淆才能完全抹掉觀察到的關聯?」E-value 越大 → 結論越 robust。 注意:E-value 不是萬靈丹,誤用很常見,請對照 Ioannidis 2019 的限制清單18。 本書 PSM 章節(Part 5)討論 reviewer 質疑 unmeasured confounding 時,可在 sensitivity analysis 中報告 E-value + negative control outcome。

Target trial emulation

「假設 reviewer 要求你『假裝』隨機分派的 RCT 被我們拿院內資料 emulate,會長什麼樣?」 這個 framework 由 Hernán 等人推廣,目前是觀察性比較有效性研究的 gold-standard reporting: - TARGET Statement 2025 JAMA19 — 系統化的 reporting checklist - Hansford 2023 JAMA Netw Open — 目前文獻 adoption 程度的 systematic review20

寫 RWE paper 時,Methods 章節先描述對應的「假想 target trial」,再說「我們用院內資料 emulate 它」,能讓 reviewer 一秒看懂設計意圖。


F. ELI5:R / 程式(給沒寫過 code 的醫師)

R / RStudio / Posit.Cloud / Quarto 是什麼

名詞 是什麼 對應
R 一個程式語言,專門做統計 像「英文」
RStudio 寫 R 的編輯器(IDE) 像「Word」
Posit.Cloud 在瀏覽器裡跑的 RStudio 像「Google Docs」
Positron 新版 IDE(VS Code 系),桌面安裝 像「Notion」
Quarto 把 code、文字、圖、表合在一起的「會跑 code 的 Word」 像「Jupyter Notebook 的進化版」
.qmd Quarto 檔的副檔名 像「.docx
_book/ Quarto book render 之後的 HTML 輸出 像 PowerPoint 匯出的 PDF

變數(variable)

「一個盒子,裝資料」。

n <- 1329    # n 這個盒子裡裝著數字 1329
patient_id <- "PT-001"  # 字串

函數(function)/ 引數(argument)

「一台機器,吃材料、吐結果」。

mean(c(60, 62, 58))   # mean = 機器名;c(60, 62, 58) = 引數
# 結果:60

套件(package)/ library() / pak::pak()

套件就是「別人寫好的函數工具箱」。 - install.packages("ggplot2")pak::pak("ggplot2")第一次裝(像安裝 App) - library(ggplot2):每次用之前召喚(像打開 App)

Data frame / tibble

「Excel 表格進到 R 的版本」。 - 每欄是一個變項(column = variable) - 每列是一筆觀察(row = patient × visit 之類) - tibble 是 tidyverse 加強版的 data frame,print 出來比較漂亮

glimpse(baseline)   # 看欄位
head(baseline)      # 看前 6 列

Factor(類別變項)

「有限選項」的變項。例如 arm 只能是 faricimabaflibercept為什麼要轉 factor? 跑 model 時,R 會把 factor 自動展開成 dummy variables,並且第一個 level 是 reference

factor(arm, levels = c("aflibercept", "faricimab"))
# aflibercept 是 reference,model 跑出來的 coef 是「faricimab vs aflibercept」

NA(缺失值)

「這格沒資料」。R 對 NA 很敏感:

mean(c(1, 2, NA))         # 結果是 NA!
mean(c(1, 2, NA), na.rm = TRUE)   # 對:先把 NA 拿掉

MMRM / Cox 等 model 預設能處理 NA,不用你先補。

Pipe |>(管線符號)

「把左邊的東西餵給右邊」。

# 不用 pipe
filter(mutate(baseline, age_group = age > 70), arm == "faricimab")

# 用 pipe — 從左讀到右就是動作順序
baseline |>
  mutate(age_group = age > 70) |>
  filter(arm == "faricimab")

讀法:「拿 baseline,然後加一欄 age_group,然後篩 faricimab」。

dplyr 五大動詞

動詞 做什麼 比喻
filter() 留某些 row 篩選病人
select() 留某些 column 選欄位
mutate() 加 / 改一欄 算新欄
summarise() 把多列收成一列 總結
group_by() 分群(與上面四個合用) 分組做

pivot_longer() / pivot_wider()

格式轉換。Long format 用在 model;wide format 用在 table。

# wide → long
wide |>
  pivot_longer(cols = c(bcva_w0, bcva_w4, bcva_w8, bcva_w12),
               names_to = "visit", values_to = "bcva")

ggplot2 三件套

ggplot(data, aes(x = ..., y = ..., colour = ...)) +
  geom_line() +              # 圖層:折線
  theme_minimal()            # 風格
  • aes():「把資料的哪些欄位對應到圖的哪些位置」
  • geom_*:「畫什麼圖層」(line、bar、point、ribbon…)
  • theme_*:「整體風格」

Quarto chunk / echo / eval

.qmd 裡的 R code 區塊:

```{r}
#| label: my-chunk
#| echo: true   # 顯示 code(給人看)
#| eval: true   # 跑 code(產生結果)
mean(c(1, 2, 3))
```

echo: false:藏 code、只放結果。 eval: false:不跑、只當文件 reference。

Render / Knit

「把 .qmd 變成 HTML / PDF / docx」。

quarto render          # 命令列

或在 RStudio 按 Render 按鈕。


G. 名詞速查表

按主題分。對縮寫沒概念時翻這裡。

G.1 眼科 / 疾病

縮寫 全名 中文 / 速解
nAMD neovascular age-related macular degeneration 新生血管性年齡相關黃斑部退化
BCVA best-corrected visual acuity 最佳矯正視力(用 ETDRS letters)
ETDRS letter Early Treatment Diabetic Retinopathy Study chart 視力表計分制;總分 0–100,越高越好
CST central subfield thickness 中央視網膜厚度(μm)
IRF intraretinal fluid 視網膜「內」液
SRF subretinal fluid 視網膜「下」液
OCT optical coherence tomography 光學同調斷層掃描
VEGF / VEGF-A vascular endothelial growth factor 血管內皮生長因子(眼藥標的)
Ang-2 angiopoietin-2 血管生成素 2(faricimab 額外標靶)
anti-VEGF anti-VEGF therapy 玻璃體內注射的眼用 VEGF 抑制劑類藥
ILM internal limiting membrane 視網膜內界膜
RPE retinal pigment epithelium 視網膜色素上皮層
LLD low-luminance deficit 低光線視力差距(隨機分層因子之一)
CRC central reading center 中央影像判讀中心

G.2 給藥 / 試驗設計

縮寫 全名 中文 / 速解
Q4W / Q8W / Q12W / Q16W every X weeks 每 X 週給一次(Q = each)
T&E treat and extend 治療延伸式給藥(穩定就拉長間隔)
TENAYA / LUCERNE Roche faricimab 兩個 phase 3 RCT
head-to-head 兩藥同期同 dose 直接對打的 phase
noninferiority 非劣性(證明「不比對手差」,不需證明「贏」)

G.3 試驗 / 研究類型

縮寫 全名 速解
RCT randomized controlled trial 隨機對照試驗(藥證最高證據)
RWE real-world evidence 真實世界證據(院內 cohort、健保資料)
ITT intention-to-treat 按隨機那刻分組分析(不管後來換組)
PP per-protocol 按實際接受治療分析(補充 ITT 用)
post hoc 事後分析;保守、用 nominal P
pre-specified 事先註冊在 protocol 裡的分析
IRB institutional review board 倫理審查委員會
cohort 一群被追蹤的病人
PSM propensity score matching 用 baseline 共變項的傾向分數做 1:1 配對;本書 Part 5 用21,22
ASMD absolute standardized mean difference 兩組基線差距的標準化指標;PSM 後 < 0.1 視為平衡23

G.4 統計

縮寫 全名 速解
MMRM mixed model for repeated measures 重複測量混合模型;本書 Part 3
CMH Cochran-Mantel-Haenszel 分層加權檢定;本書 Part 4
KM Kaplan–Meier 存活曲線;本書 Part 6
Cox Cox proportional hazards 比例風險迴歸;產出 HR
HR hazard ratio 風險比(time-to-event 的「比值」)
OR odds ratio 勝算比(二分類 outcome)
RR risk ratio / relative risk 風險比(二分類 outcome)
SD standard deviation 標準差
SE standard error 標準誤(estimate 的不確定度)
CI confidence interval 信賴區間
SMD standardized mean difference 標準化均差(RWE Table 1 用)
MAR missing at random 缺失值與未測值無關(MMRM 預設)
MNAR missing not at random 缺失值跟數值有關;難處理
MCAR missing completely at random 完全隨機缺失;最理想但少見
ANOVA analysis of variance 變異數分析(多組均值比較)
ANCOVA analysis of covariance 共變量分析(ANOVA + adjust covariate)
emmeans estimated marginal means 校正過其他變項後的「邊際平均」
PH 假設 proportional hazards assumption Cox 模型核心假設;違反處理見 Hess 199515、Gregson 201916
NPH non-proportional hazards 兩條 KM 曲線交叉或後段拉開的情境
E-value 觀察性研究 unmeasured confounding 的單一數字 sensitivity17
TARGET Transparent Reporting of Observational Studies Emulating a Target Trial 2025 JAMA reporting standard19
ICH E9 (R1) International Council for Harmonisation E9 addendum on estimands RCT 估計量框架7

G.5 工具 / 工程

縮寫 全名 速解
R 統計程式語言
RStudio / Positron R 的 IDE
Posit.Cloud 雲端 RStudio(免安裝)
Quarto 整合 code + 文 + 圖的科學文件系統
PPM Posit Public Package Manager R 套件 binary 加速鏡像
CRAN Comprehensive R Archive Network R 官方套件庫
IDE integrated development environment 寫 code 的編輯器
CSV comma-separated values 純文字表格檔(Excel 也能開)
.qmd Quarto markdown 本書每章的副檔名
render .qmd 變 HTML/PDF
chunk qmd 裡的 R 程式碼區塊

H. 引用

如果這份教材對你的 paper 有用,引用 reference paper:

Cheung CMG, Lim JI, Priglinger S, et al. Anatomic Outcomes with Faricimab vs Aflibercept in Head-to-Head Dosing Phase of the TENAYA/LUCERNE Trials in Neovascular Age-related Macular Degeneration. Ophthalmology. 2025;132(5):519-526.

教材本身採用 CC BY 4.0,可自由修改與再散布。

1.
Mallinckrodt CH, Lane PW, Schnell D, Peng Y, Mancuso JP. Recommendations for the primary analysis of continuous endpoints in longitudinal clinical trials. Drug Information Journal. 2008;42(4):303-319.
2.
Mallinckrodt CH, Kaiser CJ, Watkin JG, Molenberghs G, Carroll RJ. The effect of correlation structure on treatment contrasts estimated from incomplete clinical trial data with likelihood-based repeated measures compared with last observation carried forward ANOVA. Clinical Trials. 2004;1(6):477-489. doi:10.1191/1740774504cn049oa
3.
Gueorguieva R, Krystal JH. Move over ANOVA: Progress in analyzing repeated-measures data and its reflection in papers published in the Archives of General Psychiatry. Archives of General Psychiatry. 2004;61(3):310-317. doi:10.1001/archpsyc.61.3.310
4.
Bell ML, Rabe BA. The mixed model for repeated measures for cluster randomized trials: A simulation study investigating bias and type I error with missing continuous data. Trials. 2020;21:148. doi:10.1186/s13063-020-4114-9
5.
Little RJ, D’Agostino R, Cohen ML, et al. The prevention and treatment of missing data in clinical trials. New England Journal of Medicine. 2012;367(14):1355-1360. doi:10.1056/NEJMsr1203730
6.
LaVange LM, Permutt T. A regulatory perspective on missing data in the aftermath of the NRC report. Statistics in Medicine. 2016;35(17):2853-2864. doi:10.1002/sim.6840
7.
Mehrotra DV, Hemmings RJ, Russek-Cohen E. Seeking harmony: Estimands and sensitivity analyses for confirmatory clinical trials. Clinical Trials. 2016;13(4):456-458. doi:10.1177/1740774516633115
8.
Mantel N, Haenszel W. Statistical aspects of the analysis of data from retrospective studies of disease. Journal of the National Cancer Institute. 1959;22(4):719-748.
9.
Greenland S, Robins JM. Estimation of a common effect parameter from sparse follow-up data. Biometrics. 1985;41(1):55-68. doi:10.2307/2530643
10.
Qiu X, Qian Y, Yi J, et al. Clarifying the role of the Mantel–Haenszel risk difference estimator in randomized clinical trials. Biometrics. 2025;81(4):ujaf142. doi:10.1093/biomtc/ujaf142
11.
Kahan BC, Morris TP. Adjusting for multiple prognostic factors in the analysis of randomised trials. BMC Medical Research Methodology. 2013;13:99. doi:10.1186/1471-2288-13-99
12.
Jager KJ, Dijk PC van, Zoccali C, Dekker FW. The analysis of survival data: The Kaplan–Meier method. Kidney International. 2008;74(5):560-565. doi:10.1038/ki.2008.217
13.
Rich JT, Neely JG, Paniello RC, Voelker CCJ, Nussenbaum B, Wang EW. A practical guide to understanding Kaplan–Meier curves. Otolaryngology–Head and Neck Surgery. 2010;143(3):331-336. doi:10.1016/j.otohns.2010.05.007
14.
Fleming TR, Lin DY. Survival analysis in clinical trials: Past developments and future directions. Biometrics. 2000;56(4):971-983. doi:10.1111/j.0006-341X.2000.0971.x
15.
Hess KR. Graphical methods for assessing violations of the proportional hazards assumption in Cox regression. Statistics in Medicine. 1995;14(15):1707-1723. doi:10.1002/sim.4780141510
16.
Gregson J, Sharples L, Stone GW, Burman CF, Öhrn F, Pocock S. Nonproportional hazards for time-to-event outcomes in clinical trials. Journal of the American College of Cardiology. 2019;74(16):2102-2112. doi:10.1016/j.jacc.2019.08.1034
17.
VanderWeele TJ, Ding P. Sensitivity analysis in observational research: Introducing the E-Value. Annals of Internal Medicine. 2017;167(4):268-274. doi:10.7326/M16-2607
18.
Ioannidis JPA, Tan YJ, Blum MR. Limitations and misinterpretations of E-Values for sensitivity analyses of observational studies. Annals of Internal Medicine. 2019;170(2):108-111. doi:10.7326/M18-2159
19.
Cashin AG, Hansford HJ, Hernán MA, et al. Transparent reporting of observational studies emulating a target trial—the TARGET statement. JAMA. 2025;334(12):1084-1093. doi:10.1001/jama.2025.13350
20.
Hansford HJ, Cashin AG, Jones MD, Swanson SA, Islam N, et al. Reporting of observational studies explicitly aiming to emulate randomized trials: A systematic review. JAMA Network Open. 2023;6(9):e2336023. doi:10.1001/jamanetworkopen.2023.36023
21.
Austin PC. An introduction to propensity score methods for reducing the effects of confounding in observational studies. Multivariate Behavioral Research. 2011;46(3):399-424. doi:10.1080/00273171.2011.568786
22.
Stuart EA. Matching methods for causal inference: A review and a look forward. Statistical Science. 2010;25(1):1-21. doi:10.1214/09-STS313
23.
Austin PC. Balance diagnostics for comparing the distribution of baseline covariates between treatment groups in propensity-score matched samples. Statistics in Medicine. 2009;28(25):3083-3107. doi:10.1002/sim.3697