← All posts

Propensity Score vs Prognosis Summary Score: สองคะแนนที่หน้าตาคล้ายกัน แต่ตอบคนละคำถาม & How to Matching

Clinical Epidemiology ResearchUniqcret doctor knowledges THData Analytics or StatisticsMethodology and Research Design TH
Propensity Score vs Prognosis Summary Score: สองคะแนนที่หน้าตาคล้ายกัน แต่ตอบคนละคำถาม & How to Matching
On this page

อ่านฉบับภาษาอังกฤษ (English version)

บทคัดย่อ

ในงานวิจัยเชิงสังเกต มีเครื่องมือสองตัวที่หน้าตาคล้ายกันมาก — ทั้งคู่ย่อตัวแปรหลายตัวให้เหลือเลขเดียวต่อคน และทั้งคู่ใช้ทำ matching ได้ — แต่กลับตอบคนละคำถาม Propensity Score ถามว่า "คนนี้มีโอกาสได้รับการรักษาแค่ไหน" และ fit บนทุกคนด้วยโมเดล logistic ของการรักษาบน covariates ส่วน Prognosis Summary Score ถามว่า "ถ้าคนนี้ไม่ได้รับการรักษา ค่า outcome ควรเป็นเท่าไร" และ fit เฉพาะกลุ่ม control แล้วนำไปทำนายให้ทุกคน เราใช้ผู้ป่วยจำลองล้วน ๆ 400 คนที่ฝัง confounding by indication ไว้ — อายุ เพศ และความรุนแรงล้วนผลักว่าใครได้รับการรักษา แต่ outcome ขึ้นกับอายุและความรุนแรงเท่านั้น ส่วนเพศไม่มีผลต่อ outcome เลย — แล้ว match ด้วยคะแนนแต่ละแบบ จุดชี้ขาดอยู่ที่ตัวแปรเดียวคือเพศ: การจับคู่ด้วย propensity score ดันเพศให้สมดุล (SMD จาก 0.12 เหลือราว −0.06) ส่วนการจับคู่ด้วย prognosis score ทิ้งเพศไว้ราว 0.13 เพราะเพศไม่เคยแตะ outcome เลย


Visual summary — propensity score versus prognosis summary score
Visual summary · ภาพสรุป

ในงานวิจัยเชิงสังเกต (observational studies) เรามักพูดถึงคำว่า "matching" เหมือนเป็นแค่เทคนิคทางสถิติขั้นหนึ่ง แต่ความจริงแล้ว matching ไม่ได้เริ่มจาก algorithm ก่อน มันเริ่มจากคำถามที่ลึกกว่านั้น:

เราต้องการทำให้คนสองกลุ่ม "เทียบกันได้" ในเรื่องอะไร?

ถ้าคำถามของเราคือ "ใครมีโอกาสได้รับการรักษาใกล้เคียงกัน?" เครื่องมือที่มักใช้คือ Propensity Score (PS)

แต่ถ้าคำถามของเราคือ "ถ้าคนนี้ปกติ ค่า outcome ควรได้เท่าไหร่?" หรือพูดให้ชัดขึ้นว่า "ถ้าคนนี้ไม่มีโรค เป็น control แต่ยังมีอายุ เพศ BSA HR เหมือนเดิม ค่า CMR ควรเป็นเท่าไร?" คำตอบจะขยับไปอยู่ฝั่ง Prognosis Summary Score (PSS)

แม้ทั้งสองวิธีจะย่อข้อมูลหลายตัวแปรให้กลายเป็น "เลขตัวเดียวต่อหนึ่งคน" เหมือนกัน แต่สิ่งที่เลขนั้นแทนความหมาย กลับต่างกันโดยสิ้นเชิง และในบทความนี้เราจะพาไปจากแนวคิดนั้น ไปจนถึงเทอร์มินัลที่รันได้จริง ซึ่งคุณจะได้เห็นคะแนนสองแบบทำงานต่างกันบนผู้ป่วยชุดเดียวกัน

ก่อนจะ match เราต้องเลือกก่อนว่า จะทำให้ "อะไร" comparable

ในภาษาของระบาดวิทยาและ causal inference เรามักคิดโจทย์ผ่านกรอบว่า outcome เกิดจาก exposure ร่วมกับ confounders และแหล่งอคติอื่น ๆ ไม่ใช่จาก exposure ลอย ๆ ตัวเดียว ดังนั้นการเปรียบเทียบคนสองกลุ่มให้แฟร์จึงต้องเริ่มจากการทำให้ปัจจัยพื้นฐานสมดุลกันก่อน

แต่คำว่า "สมดุล" มีได้มากกว่าหนึ่งแบบ

Propensity Score และ Prognosis Summary Score จึงเหมือนพี่น้องคนละฝา: หนึ่งคนมองไปที่กลไกการได้รับ exposure อีกคนมองไปที่กลไกการเกิด outcome


กลุ่มตัวอย่างที่จะใช้คิด: ผู้ป่วยจำลอง 400 คน

แทนที่จะถกกันแบบนามธรรม ลองสร้างโลกที่เราควบคุมได้ทั้งหมด ข้อมูลด้านล่างเป็น ข้อมูลสังเคราะห์ทั้งหมด — ผู้ป่วยสมมติ 400 คนที่สร้างจากโค้ด R ไม่กี่บรรทัด ไม่มีผู้ป่วยจริงและไม่เจาะจงโรคใด ทุกคนถูกป้ายชื่อเพียงว่าเป็น Case (ได้รับการรักษา) หรือ Control (ไม่ได้รับการรักษา)

เราจงใจใส่สถานการณ์ที่บทความอธิบายไว้ นั่นคือ confounding by indication ในโลกจำลองนี้ แพทย์รักษาผู้ป่วยที่อายุมากและป่วยหนักบ่อยกว่า กลุ่ม Case จึงป่วยหนักกว่ากลุ่ม Control ตั้งแต่ต้น อายุ เพศ และความรุนแรง ล้วนผลักให้คนคนหนึ่งกลายเป็น Case แต่ ผลลัพธ์ (เหตุการณ์ไม่พึงประสงค์) ถูกขับด้วยพยากรณ์โรคเท่านั้น คืออายุกับความรุนแรง บวกกับผลการรักษาเพียงเล็กน้อย ส่วน เพศไม่มีผลต่อผลลัพธ์เลย จงจำการออกแบบจุดเดียวนี้ไว้ เพราะมันคือสิ่งที่ทำให้คะแนนสองแบบเล่าคนละเรื่องในภายหลัง

set.seed(2026)
n   <- 400
age <- rnorm(n, mean = 60, sd = 10)          # baseline age
sex <- rbinom(n, 1, 0.45)                     # 1 = male, 0 = female
sev <- pmax(0, rnorm(n, mean = 5, sd = 2))    # severity score

# Treatment (Case) assignment: older + sicker + male -> more likely a Case
lp_treat <- -4.5 + 0.04*age + 0.40*sex + 0.30*sev
treat    <- rbinom(n, 1, plogis(lp_treat))    # 1 = Case, 0 = Control

# Outcome: driven by prognosis (age, sev) + a modest treatment effect.
# NOTE: sex is deliberately NOT in the outcome model.
lp_y <- -5.5 + 0.05*age + 0.40*sev - 0.50*treat
y    <- rbinom(n, 1, plogis(lp_y))            # 1 = adverse event

df  <- data.frame(age, sex, sev, treat, y)   # the working cohort

ในการรันครั้งนี้ กลุ่มตัวอย่างออกมาเป็น Control ราวสองในสามและ Case ราวหนึ่งในสาม โดยกลุ่ม Case มีเหตุการณ์ไม่พึงประสงค์มากกว่า ซึ่งก็คือ "ความป่วยที่มาก่อน" ตามที่เราตั้งใจใส่ไว้ ทีนี้เราจะย่อผู้ป่วยแต่ละคนให้เหลือเลขตัวเดียว ด้วยสองวิธีที่ต่างกัน


คะแนนที่ 1 — Propensity Score: ทำให้สองคน "มีโอกาสได้รับ treatment ใกล้กัน"

Propensity Score คือความน่าจะเป็นที่แต่ละคนจะได้รับ treatment หรือ exposure จาก covariates ที่สังเกตได้ เช่น อายุ เพศ โรคร่วม ความรุนแรงของโรค baseline labs หรือปัจจัยทางคลินิกอื่น ๆ ที่อาจทำให้แพทย์เลือกให้หรือไม่ให้การรักษา เขียนเป็นสมการง่าย ๆ ได้ว่า

PS i = P ( Treatment = 1 | Confounders i )

สิ่งสำคัญมากคือ PS ไม่ได้โมเดล outcome มันไม่ตอบว่าใคร "ควร" ได้ treatment และไม่ตอบว่า outcome จะเป็นอย่างไร มันตอบเพียงว่า

"จากข้อมูลพื้นฐานที่เห็น คนนี้มีแนวโน้มจะได้รับ treatment มากแค่ไหน"

ในทางปฏิบัติ เรามัก fit โมเดลนี้จาก ข้อมูลทั้งหมด คือทั้ง treated และ untreated เพราะเราต้องการเรียนรู้ "กลไกการได้รับ treatment" ตามที่เกิดขึ้นจริงใน dataset นั้น หลังจาก fit โมเดลแล้ว เราจะได้ propensity score หนึ่งค่าต่อหนึ่งคน ซึ่งมักเป็นเลขระหว่าง 0 ถึง 1 ในโค้ดก็คือ logistic regression บรรทัดเดียวบนทุกคน

# Propensity Score -- Pr(Case), fit on ALL subjects
ps_model <- glm(treat ~ age + sex + sev, family = binomial(), data = df)
df$ps    <- predict(ps_model, type = "response")

จากนั้นจึงนำเลขนี้ไปใช้หลายแบบ เช่น matching, weighting, stratification หรือ covariate adjustment แต่ถ้าพูดเฉพาะเรื่อง matching หลักคิดคือ:

จับคู่คนที่ได้รับ treatment กับคนที่ไม่ได้รับ treatment ซึ่งมี propensity score ใกล้กัน

ตัวอย่างเช่น ผู้ป่วย A ที่ได้รับ treatment มี PS = 0.72 อาจถูกจับคู่กับผู้ป่วย B ที่ไม่ได้รับ treatment แต่มี PS = 0.70 เพราะทั้งสองคน "มีแนวโน้มจะได้รับ treatment ใกล้กัน" ตาม covariates ที่วัดได้ แม้สุดท้ายคนหนึ่งได้รับ treatment แต่อีกคนไม่ได้รับ

นี่คือหัวใจของการลด confounding by indication หรือ confounding by contraindication ในงาน comparative effectiveness research เพราะถ้าไม่ทำแบบนี้ กลุ่มที่ได้รับ treatment อาจดูป่วยกว่าตั้งแต่ต้น หรือในบางกรณีอาจดูแข็งแรงกว่าเพราะคนที่เปราะบางถูกงด treatment ทำให้การเปรียบเทียบ outcome ตรง ๆ มี bias ได้ง่าย

แต่ Propensity Score ไม่ได้บอกว่า outcome "ควรเป็นเท่าไร"

นี่คือจุดที่คนจำนวนมากสับสน แม้ PS จะช่วยทำให้ treated และ untreated comparable ในแง่ treatment assignment mechanism แต่ PS ไม่ได้สนใจ outcome โดยตรง มันไม่รู้เลยว่า CMR, LV mass, T1, strain หรือ biomarker ของคุณ "ควร" เป็นเท่าไรในคนที่มีอายุ เพศ BSA HR แบบนี้

ดังนั้นในงานที่โจทย์จริงคือการเปรียบเทียบ ความเบี่ยงเบนจากสรีรวิทยาปกติ โดยเฉพาะงาน case-control หรือ disease-control comparisons ที่ outcome เป็น continuous physiologic phenotype การใช้ PS อย่างเดียวอาจยังไม่ตอบคำถามที่ลึกพอ นี่คือช่องว่างที่คะแนนตัวที่สองเข้ามาเติม


คะแนนที่ 2 — Prognosis Summary Score: ทำให้สองคน "ควรมี outcome เท่ากันถ้าปกติ"

Prognosis Summary Score หรือ PSS ขยับจุดโฟกัสจาก exposure ไปสู่ outcome แทนที่จะถามว่า "ใครมีโอกาสได้รับ treatment เท่าไร?" PSS ถามว่า

"ถ้าคนนี้ปกติ ไม่มีโรค เป็น control แต่ยังมี covariates เหมือนเดิม ค่า Y ควรได้เท่าไร?"

เขียนเชิงแนวคิดได้ว่า

PSS i = E ( Y | Confounders i , Group = Control )

นี่คือ outcome-side analogue ของ propensity score: PS สรุปความน่าจะเป็นของ exposure assignment ส่วน PSS สรุปค่าที่คาดหวังของ outcome ภายใต้สถานะ control

สิ่งสำคัญมากอีกอย่างคือ PSS ไม่ได้ fit จากทุกคน โดยทั่วไป PSS ควรถูกสร้างจาก control data only เพราะเราต้องการเรียนรู้ "ความสัมพันธ์แบบปกติ" ระหว่าง covariates กับ outcome ในคนที่ไม่มีโรค ถ้าเราเอา case เข้าไป fit ด้วย โรคจะปนเข้าไปในสมการ และสิ่งที่ควรเป็น "ค่าปกติ" ก็จะถูกทำให้ผิดรูป

ยกตัวอย่างในงาน CMR ถ้า outcome คือ LV mass เราอาจสร้างโมเดลดังนี้ใน controls:

LV  mass  age + sex + BSA + HR +

เมื่อ fit เสร็จแล้ว เราจึงนำโมเดลนี้ไป predict สำหรับ ทุกคน ทั้ง controls และ cases ค่า predicted ที่ได้คือคำตอบของคำถามว่า "ถ้าคนนี้ปกติ ค่า LV mass ควรเป็นเท่าไร?" นั่นแหละคือ PSS ในโค้ดของกลุ่มตัวอย่างจำลองของเรา (outcome เป็นความเสี่ยงต่อเหตุการณ์ไม่พึงประสงค์) เขียนได้ดังนี้ — สังเกตประโยคเดียวที่สำคัญที่สุดคือ data = df[df$treat == 0, ] คือ fit เฉพาะ control แล้วจึง predict ให้ทุกคน

# Prognosis Summary Score -- baseline outcome risk,
# fit on CONTROLS ONLY, then predicted for EVERYONE
pss_model <- glm(y ~ age + sex + sev, family = binomial(),
                 data = df[df$treat == 0, ])
df$pss    <- predict(pss_model, newdata = df, type = "response")

PSS ไม่ได้จับคู่จาก Y ที่สังเกตจริง แต่จับคู่จาก "Y ที่ควรเป็น (Expected Y)"

นี่เป็นอีกจุดที่ต้องแยกให้ออก PSS ไม่ใช่การเอา observed outcome ไป match ตรง ๆ เราไม่ได้จับคู่ case ที่ LV mass = 150 g กับ control ที่ LV mass = 150 g เพราะถ้าทำแบบนั้น เราอาจกำลัง match disease effect เข้าด้วยกันโดยไม่รู้ตัว

สิ่งที่ PSS ใช้ match คือ predicted healthy outcome หรือ Ŷ healthy​ เช่น ชายอายุ 60 ปี เพศชาย BSA 2.0 HR 90 อาจมี observed LV mass = 150 g ในกลุ่ม case แต่เมื่อใช้โมเดล control-only ทำนาย เราอาจได้ว่า "ถ้าเขาปกติ" ค่า LV mass ที่ควรเป็นคือ 110 g ดังนั้น PSS ของเขาคือ 110 ไม่ใช่ 150

จากนั้นเราจึงหา control ที่มี PSS ใกล้ 110 เช่น 108 หรือ 112 เพื่อให้ได้คนที่ "ควรมี physiology ตั้งต้นใกล้กัน" แล้วค่อยดูว่าคนที่เป็นโรคเบี่ยงเบนจากค่าที่ควรเป็นไปเท่าไร พูดให้ง่ายที่สุด:


ตัวแปรเดียวกัน สองบทบาท: แต่ละคะแนนทำอะไรกับ "เพศ"

ตอนนี้เราสร้างคะแนนสรุปตัวเลขเดียวทั้งสองแบบบนผู้ป่วย 400 คนชุดเดียวกันแล้ว วิธีที่เห็นชัดที่สุดว่าทั้งสองเป็นคนละสัตว์คนละชนิด คือดูว่าแต่ละโมเดลปฏิบัติต่อตัวแปรเดียว — เพศ — อย่างไร (สัมประสิทธิ์จากการรันจำลองครั้งนี้ set.seed(2026))

คะแนนfit อย่างไร (R)สัมประสิทธิ์ของ เพศ (sex)
Propensity scoreglm(treat ~ age + sex + sev) ใช้ทุกคน≈ 0.24
Prognosis summary scoreglm(y ~ age + sex + sev) เฉพาะ control≈ 0.01

เพศมีน้ำหนักจริงในโมเดล propensity เพราะมันช่วยกำหนดว่าใครได้รับการรักษา แต่ในโมเดล prognosis สัมประสิทธิ์ของเพศเกือบเป็นศูนย์ เพราะเราสร้างข้อมูลให้เพศไม่ส่งผลต่อผลลัพธ์ ตัวแปรเดียวกัน สองคะแนน สองบทบาทที่ต่างกันสิ้นเชิง จำจุดนี้ไว้ เพราะมันกำลังจะอธิบายทุกอย่างที่การจับคู่ทำ


ก่อนจับคู่: สองกลุ่มต่างกันแค่ไหน

ก่อนจะแตะคะแนนไหน กลุ่มดิบต่างกันแค่ไหน เครื่องมือมาตรฐานคือ standardized mean difference (SMD) คือช่องว่างระหว่าง Case กับ Control ในหน่วย SD รวม โดยเกิน 0.1 ถือเป็นสัญญาณเตือน นี่คือจุดตั้งต้น:

ตัวแปรSMD (ก่อนจับคู่)
age (อายุ)0.475
sev (ความรุนแรง)0.419
sex (เพศ)0.122

ทั้งสามตัวแปรต่างกันหมด เพราะทั้งสามอย่างกำหนดว่าใครกลายเป็น Case อายุกับความรุนแรงต่างกันมาก — กลุ่ม Case แก่กว่าและป่วยหนักกว่าจริง ส่วนเพศต่างกันเล็กน้อย นี่คือ confounding ที่เราต้องกำจัดก่อนจะเปรียบเทียบผลลัพธ์ให้แฟร์ คำถามคือจะกำจัดมันด้วยคะแนนไหน


ลองรันเอง

ก่อนจะอ่านคำเฉลย นี่คือการวิเคราะห์ทั้งหมดในรูปเทอร์มินัลที่รันได้จริง มันเล่นซ้ำเซสชัน R นี้ทีละบรรทัด พิมพ์ตามบรรทัดที่ไฮไลต์ (หรือกด Enter เพื่อเติมและรัน) แล้วแผง Stage ทางขวาจะแสดงตาราง ค่า หรือกราฟที่แต่ละขั้นสร้างขึ้น รวมถึงกราฟ overlap สองรูปที่แสดงเส้นของ Case กับ Control ค่อย ๆ เลื่อนมาทับกันเมื่อการจับคู่ทำงาน ทุกค่าถูกคำนวณด้วย R ไว้ก่อนแล้ว ไม่มีการคำนวณในเบราว์เซอร์

Propensity score (PS) และ prognosis summary score (PSS) ต่างก็เป็นคะแนนตัวเลขเดียวที่สรุปตัวแปรร่วมหลายตัว แต่ตอบคนละคำถาม จึงจัดสมดุลคนละอย่าง PS จำลอง ว่าใครได้รับการรักษา ส่วน PSS จำลอง ว่าผู้ป่วยจะป่วยหนักแค่ไหนหากไม่ได้รักษา เทอร์มินัลนี้รันการวิเคราะห์จริงทีละบรรทัดบนข้อมูล จำลองทั้งหมด (ไม่มีผู้ป่วยจริง) ที่อายุ เพศ และความรุนแรงล้วนผลักให้เป็น Case แต่มีเพียงอายุกับความรุนแรงที่ขับผลลัพธ์ ส่วนเพศตั้งใจไม่ให้มีผล ลองดูเส้นเรื่อง: การจับคู่ด้วย PSS จัดสมดุลตัวขับพยากรณ์โรค (อายุ ความรุนแรง) แต่ทิ้งเพศไว้เดิม ขณะที่จับคู่ด้วย PS จัดสมดุลเพศด้วย คุณเป็นคนลงมือเอง — พิมพ์ตามบรรทัดที่ไฮไลต์ (หรือกด Enter เพื่อเติมและรัน) กด Tab เพื่อรับคำที่ระบบเดาให้ แล้วแผง Stage ด้านขวาจะแสดงตาราง ค่า หรือกราฟที่แต่ละขั้นสร้างขึ้น ไม่มีการคำนวณในเบราว์เซอร์ ทุกค่าและกราฟถูกคำนวณด้วย R ไว้ก่อนแล้ว

A propensity score (PS) and a prognosis summary score (PSS) are both single-number summaries of many covariates, but they answer different questions — so they balance different things. PS models who got treated; PSS models how sick a patient would be anyway. This terminal runs the real analysis one line at a time on a fully simulated cohort (no real patients) where age, sex and severity all push toward being a Case, but only age and severity drive the outcome — sex deliberately does not. Watch the arc: matching on PSS balances the prognosis drivers (age, severity) while leaving sex untouched, whereas the same match on PS balances sex too. You drive it — type the highlighted line (or press Enter to autofill and run), press Tab to accept the ghost, and the Stage on the right shows the table, value, or plot each step produces. Nothing runs in your browser; every value and plot was computed in R beforehand.


จับคู่ Case แต่ละคนกับ Control ที่ใกล้ที่สุด

เพื่อเปรียบเทียบ Case กับ Control ให้แฟร์ เราจับคู่ Case แต่ละคนกับ Control ที่ ใกล้ที่สุด คือ Control ที่คะแนนใกล้กันที่สุด แบบหนึ่งต่อหนึ่งและไม่ใช้ Control ซ้ำ โดยเก็บเฉพาะคู่ที่อยู่ในระยะ caliper เล็ก ๆ (ที่นี่คือ 0.2 SD บนสเกล logit) การเลือกคู่เทียบที่คะแนนใกล้ที่สุดนี้แหละคือความหมายของ nearest-neighbour matching ส่วน caliper แค่ปฏิเสธการจับคู่เมื่อ Control ที่ใกล้ที่สุดยังไกลเกินไป ซึ่งช่วยตัด Case สุดขั้วที่ไม่มีคู่เทียบที่สมเหตุสมผลออกไปเงียบ ๆ

logit   <- function(p) log(p / (1 - p))
lp_pss  <- logit(df$pss)                 # match on the score's linear predictor
caliper <- 0.2 * sd(lp_pss)

# Walk each Case, take the closest still-unused Control within the caliper.
for (i in cases) {
  d <- abs(lp_pss[i] - lp_pss[ctrls]); d[used] <- Inf
  j <- which.min(d)
  if (is.finite(d[j]) && d[j] <= caliper) {
    pairs[[length(pairs) + 1]] <- c(i, ctrls[j]); used[j] <- TRUE
  }
}

ได้ผลไหม — ตรวจสมดุลอีกครั้ง

อย่าเพิ่งเชื่อว่าจับคู่แล้วดี ต้องตรวจ เราคำนวณ SMD ใหม่บนกลุ่มที่จับคู่แล้ว วางใต้แถว "ก่อนจับคู่":

ตัวแปรSMD ก่อนจับคู่SMD หลังจับคู่ด้วย PSS
age (อายุ)0.4750.095
sev (ความรุนแรง)0.419-0.040
sex (เพศ)0.1220.132

การจับคู่ด้วย prognosis score ทำให้ ตัวขับพยากรณ์โรค สมดุลขึ้นชัดเจน อายุและความรุนแรงลดจากที่ต่างกันมากลงมาต่ำกว่าเส้นอย่างสบาย ส่วนเพศแทบไม่ขยับ อยู่ที่ราว 0.12 ทั้งก่อนและหลัง นี่ไม่ใช่ความล้มเหลวของการจับคู่ แต่คือผลตรงไปตรงมาของสิ่งที่ PSS เป็น เพราะ prognosis score ไม่เคย "เห็น" เพศ (เพศไม่กระทบผลลัพธ์) การจับคู่ด้วยมันจึงไม่เสียแรงจัดสมดุลให้เพศ


แล้วควรจับคู่ด้วยคะแนนไหน

นี่คือใจความ "PS vs PSS" ทั้งหมดในสามตัวเลข เราทำการจับคู่แบบเดิมทุกอย่างบน ผู้ป่วย 400 คนชุดเดิม เปลี่ยนแค่คะแนนที่ใช้จับคู่ แล้วนำ SMD ของเพศมาวางเทียบกัน

SMD ของเพศ (sex)ค่า
ก่อนจับคู่0.122
หลังจับคู่ด้วย PSS0.132
หลังจับคู่ด้วย PS-0.059

การจับคู่ด้วยคะแนน propensity ดึงเพศเข้าสู่สมดุล (จากราว 0.12 ลงมาราว -0.06) ขณะที่การจับคู่ด้วยคะแนน prognosis ทิ้งเพศไว้ใกล้เดิม ทั้งสองผลไม่ใช่ความผิดพลาด เพราะมันตอบคนละคำถาม คะแนน propensity จัดสมดุล ตัวขับการรักษา (และเพศช่วยกำหนดว่าใครได้รับการรักษา PS จึงจัดสมดุลให้) ส่วนคะแนน prognosis จัดสมดุล ตัวขับผลลัพธ์ (และเพศไม่กระทบผลลัพธ์ PSS จึงปล่อยไว้) ข้อมูลชุดเดียวกัน สองนิยามของคำว่า "เทียบกันได้" ซึ่งคือใจความทั้งหมดของบทความนี้ ที่ตอนนี้เห็นเป็นตัวเลขแล้ว

วางเทียบกันชัด ๆ ทั้งสองคะแนนเป็นดังนี้:

ประเด็นPropensity Score (PS)Prognosis Summary Score (PSS)
คำถามหลักคนนี้มีโอกาสได้รับ treatment/exposure เท่าไร?ถ้าคนนี้ปกติ outcome ควรเป็นเท่าไร?
โมเดลอะไรExposure/Treatment modelOutcome/Prognostic model
สมการแนวคิดP(Treatment∣Confounders)E(Y∣Confounders,Control)
fit จากใครทุกคนใน dataset โดยทั่วไปcontrol only
ค่าที่ได้probability 0–1predicted outcome บน scale ของ Y
ใช้ outcome ในโมเดลไหมไม่ใช้ใช้ Y เป็นตัวแปรตาม
ใช้ match อะไรtreated vs untreated / exposed vs unexposedcase vs control หรือ disease vs reference
เหมาะเมื่อกังวล confounding by indication/contraindicationกังวล baseline prognosis/physiology difference

ตัวอย่างเชิงคลินิก: ทำไม PSS จึง intuitive มากในงาน CMR

ลองนึกถึงนักวิจัยที่สนใจเปรียบเทียบ CMR parameter ระหว่างผู้ป่วย cardiomyopathy กับ healthy controls ถ้าใช้ propensity score คำถามจะออกแนวว่า "ใครมีโอกาสอยู่ในกลุ่ม case มากกว่ากันจากอายุ เพศ BSA HR?" ซึ่งอาจมีประโยชน์ในบางสถานการณ์ แต่ยังไม่แตะหัวใจของโจทย์สรีรวิทยาโดยตรง ในทางกลับกัน PSS จะถามว่า "ชายอายุ 60 ปี เพศชาย BSA 2.0 HR 90 ถ้าไม่มีโรค ค่า native T1 หรือ LV mass ควรเป็นเท่าไร?"

เมื่อเราได้คำตอบนี้ เราไม่เพียงแค่จับคู่ case กับ control ให้คล้ายกันในระดับ covariates แต่เรายังได้ baseline physiologic expectation ที่นำไปใช้ต่อได้อีกหลายทาง เช่น

  1. ใช้ match จับคู่ case กับ control ที่มี expected normal outcome ใกล้กัน
  2. ใช้ adjust ใน regression เช่นเปรียบเทียบ observed outcome ระหว่างกลุ่ม โดยปรับ PSS เป็น covariate
  3. ใช้ residual analysis โดยคำนวณ
Observed   Y PSS

เพื่อแปลเป็น "disease-related deviation" ได้อย่างเป็นรูปธรรม นี่ทำให้ PSS มีความหมายทางคลินิกสูงมาก โดยเฉพาะเมื่อ outcome มีหน่วยที่ตีความได้จริง เช่น grams, ms, %, mL/m² ไม่ใช่แค่ probability

แล้วควรเลือกอะไร เมื่อไร?

คำตอบสั้น ๆ คือ เลือกตามคำถามวิจัย ไม่ใช่เลือกตามความคุ้นเคยของสถิติ ใช้ Propensity Score เมื่อโจทย์หลักคือการเปรียบเทียบ treatment/exposure groups และ bias สำคัญอยู่ที่การที่คนสองกลุ่มมีโอกาสได้รับ treatment ไม่เท่ากัน เช่น therapeutic หรือ etiologic observational studies ที่แพทย์เลือก treatment ตามความรุนแรง โรคร่วม หรือข้อห้ามใช้ยา ส่วน ใช้ Prognosis Summary Score เมื่อโจทย์หลักคือการเปรียบเทียบ case vs control หรือ disease vs reference โดยต้องการทำให้เทียบกันได้ในระดับ expected outcome under normal state โดยเฉพาะเมื่อ outcome เป็น continuous physiologic marker และคำถามมีลักษณะว่า "โรคทำให้ค่าที่ควรเป็นเบี่ยงไปเท่าไร" ที่สำคัญ PS และ PSS ไม่ใช่เครื่องมือแทนกันตรง ๆ ทั้งสองอาจดูคล้ายกันเพราะให้เลขตัวเดียวต่อหนึ่งคนเหมือนกัน แต่คนละตัวเลขนั้นมาจากคนละโลกของคำถามวิจัย


ความเข้าใจผิดที่พบบ่อย

ความเข้าใจผิดแรกคือคิดว่า propensity score คือ "probability ว่าใครควรได้ treatment" ความจริงมันคือ probability ว่าใครน่าจะได้รับ treatment ตามสิ่งที่เกิดขึ้นในข้อมูล ไม่ใช่คำตัดสินเชิงคลินิกว่าควรหรือไม่ควร

ความเข้าใจผิดที่สองคือคิดว่า PSS คือ observed outcome ความจริง PSS คือ predicted outcome ภายใต้ control state ไม่ใช่ค่าที่เกิดขึ้นจริงในผู้ป่วย

ความเข้าใจผิดที่สามคือ fit PSS จาก cases และ controls รวมกัน การทำเช่นนั้นทำให้ disease effect เข้าไปปนในสมการปกติ และทำลายความหมายของคำว่า "ถ้าคนนี้ปกติ"

ความเข้าใจผิดที่สี่คือใส่ตัวแปรที่เป็น mediator, collider หรือเป็นผลของ disease/treatment ลงในโมเดลโดยไม่คิด causal structure ก่อน ทั้ง PS และ PSS ต่างพึ่งพาคุณภาพของ covariate selection อย่างมาก ถ้าเลือกตัวแปรผิด score ก็พา analysis ผิดทิศได้เหมือนกัน


บทสรุป

ถ้าจะสรุปความต่างของสองวิธีนี้ในประโยคเดียว:

Propensity Score ทำให้คนสองกลุ่มมี "โอกาสได้รับ treatment" ใกล้กัน ส่วน Prognosis Summary Score ทำให้คนสองกลุ่มมี "ค่าที่ควรเป็นของ outcome" ใกล้กัน

PS จึงเหมาะกับคำถามแบบ treatment allocation ส่วน PSS เหมาะกับคำถามแบบ physiologic expectation และนี่คือเหตุผลที่ในงานระบาดวิทยา เราไม่ควรถามแค่ว่า "จะ match ด้วย score อะไร" แต่ต้องถามก่อนว่า

เรากำลังพยายามทำให้คนสองกลุ่ม comparable ในเรื่องไหนกันแน่?

เมื่อคำถามชัด วิธีการจะชัดเอง


Key takeaways

0
ถึงนักอ่านชาวไทยและต่างชาติทำความเข้าใจบริบททางการแพทย์ของผมอ่านต่อ →ถึงนักอ่านชาวไทยและต่างชาติทำความเข้าใจเนื้อหาของผมที่นอกเหนือจากการแพทย์อ่านต่อ →

ความคิดเห็น

ยังไม่มีความคิดเห็น มาเป็นคนแรกกันเลย

เข้าสู่ระบบเพื่อแสดงความคิดเห็น