top of page

Marginal vs Conditional Models: Repeated measures is a subset of Correlation

Updated: Jul 8

🧠 บริบทของปัญหา: ข้อมูลแบบ "วัดซ้ำ" หรือ "สัมพันธ์กัน"

ข้อมูลที่เรามักเจอในงานวิจัยคลินิกมีลักษณะ ไม่เป็นอิสระ (non-independent) เช่น:

  • คนไข้คนเดียววัด FBS หลายครั้ง

  • คนไข้ที่อยู่ในโรงพยาบาลเดียวกัน

  • วัดค่าซ้าย-ขวาของตา หรือหู

  • เด็กในห้องเรียนเดียวกัน

ถ้าใช้สถิติทั่วไป (Naïve model) ที่ สมมุติว่าแต่ละข้อมูลเป็นอิสระ ผลจะ ผิด ทันที (เช่น SE ต่ำไป สูงไป, 95% Ci ผิด, p-value ผิด)

📌 เป้าหมายของโมเดล: รับมือกับ "correlation"

เราต้องเลือกว่าจะวิเคราะห์ด้วย:

  1. Marginal model → คำนวณค่าเฉลี่ยของทั้งกลุ่ม (Population-Averaged)

  2. Conditional model → สนใจแต่ละรายหรือกลุ่ม (Subject-Specific)

ดูแผนภาพด้านล่าง:


🔹 ครึ่งบน: Marginal Model (โมเดลค่าเฉลี่ยประชากร)

📍 คำอธิบาย

  • เป็น โมเดลชั้นเดียว (Single-level) ไม่สนว่าใครเป็นใคร

  • คิดแบบ “ทุกคนรวมกัน เฉลี่ยว่าเกิดอะไรขึ้น”

  • ไม่สร้างตัวแปรเฉพาะคนไข้

🔧 วิธีจัดการความสัมพันธ์ในข้อมูล

แบ่งเป็น 2 แบบตามการคำนวณ ความแปรปรวน (Variance):

ประเภท

วิธีคิด

จุดเด่น

Empirical-based

ใช้ข้อมูลจริงมาคำนวณ SE (เรียก robust SE หรือ sandwich estimator)

ไม่ต้องเดาว่าความสัมพันธ์เป็นแบบไหน

Model-based variance

สมมุติว่าโครงสร้างความสัมพันธ์เป็นแบบหนึ่ง เช่น AR(1), exchangeable

แม่นยำกว่าเมื่อสมมุติถูกรูปแบบ

✅ ใช้ใน GEE (Generalized Estimating Equations)


🔸 ครึ่งล่าง: Conditional Model (โมเดลเฉพาะราย/กลุ่ม) 📍 คำอธิบาย

  • เป็น โมเดลหลายชั้น (Multilevel model) หรือ Hierarchical model

  • คิดว่า “คนไข้แต่ละคนเริ่มต้นไม่เหมือนกัน” → ใส่ความแปรปรวนระดับกลุ่มเข้าไป

  • เหมาะกับข้อมูลที่มี คลัสเตอร์ เช่น คนไข้ในแพทย์ต่างคน, โรงพยาบาลต่างกัน

🔧 มี 2 ทางเลือก:

ประเภท

รายละเอียด

ใช้เมื่อ

Fixed effect

ใส่ตัวแปร "ชื่อกลุ่ม" เช่น แพทย์ A, B, C

ถ้ากลุ่มมีน้อย

Random effect

ไม่ใส่ชื่อกลุ่ม แต่บอกให้โมเดล "เรียนรู้ว่ากลุ่มต่างกันแค่ไหน"

ถ้ากลุ่มมีจำนวนมาก

✅ ใช้ใน Mixed-effects model เช่นใน Stata: ใช้คำสั่ง mixed WSSMAXaorta i.section##i.group_bin sex Age || id:


📊 คำทับศัพท์ที่ควรรู้:

ศัพท์

ความหมาย

Random intercept

จุดเริ่มต้นเฉพาะของแต่ละกลุ่ม (baseline ต่างกัน) จุดตัดแกน Y

Random slope

ความชันของแนวโน้มต่างกันในแต่ละกลุ่ม

Fixed effect

ใส่ชื่อกลุ่มชัด ๆ ลงในโมเดล

Marginal model

โมเดลที่คิดเฉลี่ยภาพรวมของทุกคน

Conditional model

โมเดลที่แยกเฉพาะกลุ่ม/รายบุคคล

GEE

วิธีวิเคราะห์แบบ Marginal model โดยใช้ correlation

Mixed-effect model

วิธีวิเคราะห์แบบ Conditional model โดยใช้ random effect

Random intercept ทุกตัวมี model ของตัวเอง แต่ ความชันเท่า

Random intercept with Random slope ทุกตัวมี model ของตัวเอง และ ความชันต่าง

Fixed effect เอา Random intercept with Random slope แต่ละคนมาคิดเลย

📊 ลำดับโมเดลวิเคราะห์ข้อมูลวัดซ้ำ: ดีที่สุด → ถอยตามข้อมูล

อันดับ

โมเดล

คำอธิบาย

🥇 1

Conditional Model — Multi-level — Random Effect

โมเดลเฉพาะราย รองรับผลแตกต่างทั้ง intercept และ slope

🥈 2

Conditional Model — Multi-level — Fixed Effect

เฉพาะกลุ่มที่มีในข้อมูล ใช้ dummy ไม่สามารถทำนายกลุ่มใหม่

🥉 3

Marginal Model — Single-level — Model-Based Variance

ค่าเฉลี่ยประชากร สมมุติโครงสร้างความสัมพันธ์

🪙 4

Marginal Model — Single-level — Empirical (Robust SE)

ใช้ sandwich SE ไม่ต้องสมมุติโครงสร้างใดๆ


Conditional Model = “Subject-Specific”

  • เราไม่ได้สนใจแค่ “คนโดยเฉลี่ย”

  • แต่เราบอกว่า: “คนแต่ละคนไม่เหมือนกัน”

  • จึงต้อง model intercepts and/or slope เฉพาะราย

➡️ เพื่อให้ทำเช่นนี้ได้ เราต้อง มีหลายระดับ (Multi-level) ที่ซ้อนอยู่ในข้อมูล

Multi-level

แนวทางระบุ Cluster หลัก vs ย่อย (Nested Structure)

ถ้ามีหลายระดับ เช่น:ตาซ้าย-ขวา ในแต่ละช่วง follow-up ของแต่ละคน

ให้ดูตามนี้:

ระดับ 1 (หลัก): คน (id)
ระดับ 2: ดวงตา (eye)
ระดับ 3: เวลา (visit/month)

→ Stata syntax:

mixed outcome predictors || id: || eye: || month:

หรือถ้า "eye" เป็น within-subject factor (ไม่ใช่คลัสเตอร์), ก็จัดแบบนี้:

mixed outcome i.eye i.month || id:

📌 Tips: ระบุ Cluster

ลักษณะข้อมูล

Cluster คืออะไร?

Model อย่างไร?

วัดซ้ำในคนเดิม

คน

`mixed y x

วัดตาซ้าย-ขวา

คน (eye = within factor)

`mixed y i.eye

คนในโรงพยาบาล

รพ. > คน

`mixed y x

คนในหลายแพทย์

แพทย์ > คน

`mixed y x

คนก่อน-หลัง COVID

คน (time = covariate)

`mixed y i.period

🥇 1. Conditional Model — Random Effects (Mixed-Effects Model)

  • ใช้:

    mixed outcome predictors || id:

  • รองรับ: • Random intercept • Random slope • Nested/complex structure

  • เหมาะเมื่อ: • มี ID / cluster • กลุ่ม ≥ 5 • สนใจการพยากรณ์เฉพาะรายบุคคล

  • ❌ ถอยเมื่อ: • กลุ่มน้อย • ข้อมูลไม่พอ estimate slope • โมเดลไม่ converge

🥈 2. Conditional Model — Fixed Effects

  • ใช้:

    xtreg outcome predictors, fe reg outcome i.group

  • เหมาะเมื่อ: • กลุ่มน้อย • ต้องการควบคุมเฉพาะกลุ่มในข้อมูล

  • ❌ ถอยเมื่อ: • ไม่มี ID / cluster • ต้องการผลแบบ population-average

"Mixed" = Fixed + Random

mixed = fixed effects + random effects

📌 ส่วนที่ “Fixed” = ตัวแปรทั่วไป (predictors)

เหมือนใช้ใน regress, xtreg, เช่น:

  • เพศ

  • อายุ

  • ชนิดยา

  • เวลา

📌 ส่วนที่ “Random” = ความแปรปรวนของกลุ่ม (cluster-specific variation)

  • intercept/slope ที่แตกต่างกันในแต่ละ ID

  • nested structure: คนในรพ., เด็กในห้องเรียน, ข้อมูลวัดซ้ำในคนเดียวกัน

📘 ตัวอย่างสมการเบื้องหลัง mixed

สมมุติ: วัด HbA1c หลายครั้งในแต่ละคน

HbA1c_ij = β0 + β1*time_ij + u0j + ε_ij
  • β0, β1 = Fixed effects

  • u0j = Random intercept (แต่ละคน j เริ่มต้นต่างกัน)

  • ε_ij = residual error

→ ใน Stata:

mixed HbA1c i.time || id:

🧪 สาระสำคัญของ mixed

Feature

อธิบาย

“Fixed effect”

ใช้ตีความทั่วไป (e.g. ยาลด HbA1c)

“Random effect”

สะท้อน variation เฉพาะบุคคล/กลุ่ม

ใช้กับ data ซ้ำในคน

✔️ รองรับ repeat/reclustered

Prediction เฉพาะคน

✔️ ได้ curve รายคน

Marginal Model

เพราะ Marginal Model สนใจ “ผลรวมเฉลี่ย” ของประชากร → ไม่ model กลุ่ม/บุคคล→ จึงไม่ต้อง (และไม่สามารถ) แยกชั้นข้อมูล → ไม่มีโครงสร้าง multilevel


Single-level

📌 Correlation ไม่จำเป็นต้อง Multilevel

🔹 Multilevel = มีชั้น (e.g. รพ. > คน)

  • ใช้ mixed … || hospital: || id:

  • มี structure hierarchy ชัดเจน

🔸 Single-level ก็มี correlation ได้ ถ้า…

  • มี ข้อมูลซ้ำในกลุ่มเดียวกัน เช่น:

    • ตาซ้าย-ขวา → ซ้ำในคน

    • เด็กในห้องเรียนเดียวกัน

    • หลายคนจากคลินิกเดียวกัน

  • ใช้ xtgee … i(cluster), corr(...)

🥉 3. Marginal Model — Model-Based Variance (GEE with correlation)

🎯 เป้าหมาย

  • วิเคราะห์ ผลเฉลี่ยของประชากร (Population-Averaged)

  • สนใจว่า “ในภาพรวม ทุกคนตอบสนองต่อ X อย่างไร”

📦 วิธีคิด

  • Model สมมุติว่า: ข้อมูลมีการวัดซ้ำ → เกิด correlation

  • แต่ ไม่ได้ model แบบ subject-specific (ไม่มี uⱼ เหมือนใน mixed)

  • ใช้ correlation matrix เพื่อระบุว่าข้อมูลใน subject เดียวกันมีความสัมพันธ์กันแค่ไหน

🧩 ต้องระบุ correlation structure (working correlation)

corr()

ความหมาย

เหมาะเมื่อ...

ind

ไม่มีความสัมพันธ์เลย (ρ = 0)

❌ ห้ามใช้ถ้าเป็น repeated measures

exchangeable

ทุกคู่สัมพันธ์เท่ากัน

เวลาห่างกันไม่เท่ากัน หรือซ้ำไม่เยอะ

ar1

ความสัมพันธ์ลดตามเวลา (ρ^lag)

เวลาห่างเท่ากัน เช่น 0,3,6 เดือน

sta1

มีเฉพาะ lag 1 (neighbor เท่านั้น)

ข้อมูลถี่ เช่น hourly

uns

ไม่สมมุติอะไรเลย

N ใหญ่ + วัดหลายรอบ (≥6)

🧪 Clinical Use Case:

ตัวอย่าง

corr() ที่ควรใช้

HbA1c วัดทุก 3 เดือน

ar1

BP วัด admit, discharge, f/u

exchangeable

CRP วัดรายวัน

sta1

Biomarker ทุกสัปดาห์ 8 ครั้ง

uns

❌ ข้อจำกัด:

  • ถ้า เลือก structure ผิด → SE จะผิด → p-value ไม่แม่น

  • ถ้า กลุ่มน้อย → การประมาณ correlation จะไม่นิ่ง

🔴 corr(independent)

สมมุติว่าไม่มีความสัมพันธ์เลย (ρ = 0)

T1

T2

T3

T4

T5

T1

1.00

0.00

0.00

0.00

0.00

T2

0.00

1.00

0.00

0.00

0.00

T3

0.00

0.00

1.00

0.00

0.00

T4

0.00

0.00

0.00

1.00

0.00

T5

0.00

0.00

0.00

0.00

1.00

🟢 corr(exchangeable)

สมมุติว่า ทุกคู่สัมพันธ์เท่ากัน (ρ = 0.80)

T1

T2

T3

T4

T5

T1

1.00

0.80

0.80

0.80

0.80

T2

0.80

1.00

0.80

0.80

0.80

T3

0.80

0.80

1.00

0.80

0.80

T4

0.80

0.80

0.80

1.00

0.80

T5

0.80

0.80

0.80

0.80

1.00

🟡 corr(ar1)

ความสัมพันธ์ลดลงตามระยะเวลา (ρ = 0.90)

T1

T2

T3

T4

T5

T1

1.00

0.90

0.81

0.73

0.66

T2

0.90

1.00

0.90

0.81

0.73

T3

0.81

0.90

1.00

0.90

0.81

T4

0.73

0.81

0.90

1.00

0.90

T5

0.66

0.73

0.81

0.90

1.00

🔵 corr(sta1)

ความสัมพันธ์เฉพาะระยะติดกัน (lag 1), ρ = 0.80

T1

T2

T3

T4

T5

T1

1.00

0.80

0.00

0.00

0.00

T2

0.80

1.00

0.80

0.00

0.00

T3

0.00

0.80

1.00

0.80

0.00

T4

0.00

0.00

0.80

1.00

0.80

T5

0.00

0.00

0.00

0.80

1.00

🟣 corr(uns)

ไม่สมมุติใด ๆ → ให้แต่ละค่ามี correlation ของตัวเอง

T1

T2

T3

T4

T5

T1

1.00

0.86

0.74

0.55

0.33

T2

0.86

1.00

0.71

0.49

0.40

T3

0.74

0.71

1.00

0.69

0.50

T4

0.55

0.49

0.69

1.00

0.66

T5

0.33

0.40

0.50

0.66

1.00


🪙 4. Marginal Model — Empirical (Robust SE)

🎯 เป้าหมาย

  • ปรับ SE ให้ ถูกต้องแม้ model correlation ผิด

  • ตีความแบบ population-average เช่นเดียวกับ GEE ปกติ

📦 วิธีคิด

xtgee y x1 x2, corr(anything) vce(robust)
  • vce(robust) = ใช้ sandwich estimator แทนการพึ่ง working correlation

  • จะ ignore structure ในการหา SE → ใช้ข้อมูลจริงเป็นหลัก

✅ ข้อดี:

  • แม้คุณสมมุติว่า correlation เป็น exchangeable หรือ ar1

  • ถ้า model ผิด → SE ยังคง robust ถูกต้อง

🔐 เหมาะกับ:

  • ข้อมูลไม่สมบูรณ์ (missing visit, spacing ไม่เท่ากัน)

  • กลุ่มน้อย

  • ไม่มั่นใจว่าโครงสร้าง correlation แบบไหน

  • ต้องการ safe fallback ที่ไม่ overstate ความแม่นยำ

🧪 Clinical Use Case:

สถานการณ์

ทำไมต้องใช้ vce(robust)?

Visit 0, 3, 9 เดือน (uneven time)

ar1 ใช้ไม่ได้ → ต้อง robust

มีคนไข้แค่ 15 คน

SE จาก exchangeable จะไม่นิ่ง

ไม่รู้ว่า time spacing สม่ำเสมอไหม

Structure uncertain → robust ปลอดภัยสุด

🧭 Marginal Model Decision Tree

START →
→ มีข้อมูลวัดซ้ำหรือกลุ่มที่สัมพันธ์กัน? →
   → ไม่ → regress ปกติ
   → ใช่ →
     → สนใจภาพรวมกลุ่ม (population-avg)? →
         → ใช่ →
             → รู้ structure? →
                 → ใช่ → GEE model-based (xtgee, corr(ar1/exch))
                 → ไม่แน่ใจ → GEE robust (xtgee, vce(robust))
         → ไม่สนใจภาพรวม → ใช้ conditional model (mixed)

✅ หลักการ: Model-Based SE > Empirical SE

  • ถ้าคุณ ระบุ corr() ได้ถูกต้องจริง (เช่น ar1 กับข้อมูล 0-3-6 เดือน)

  • GEE Model-Based จะให้ SE ที่มี efficiency สูงกว่า

  • → แปลว่า พลังทางสถิติดีกว่า (statistical power ↑)

📈 นี่คือเหตุผลที่ textbook บอกว่า Model-based “preferred when structure known”


❌ แต่ในโลกจริง: Structure มัก “ไม่รู้แน่ชัด” → Empirical ในตารางล่างเลยดูดีกว่า 📊 เปรียบเทียบสุดท้าย: GEE แบบ Model-based vs Empirical

Feature

Model-Based (GEE)

Empirical (Robust SE)

ต้องกำหนด corr()?

✔️ ใช่

❌ ไม่จำเป็น

ถ้า structure ผิด → SE ผิดไหม?

❌ ใช่

✅ SE ยังถูกต้อง

เหมาะกับข้อมูลกลุ่มน้อย?

❌ ไม่เหมาะ

✅ เหมาะมาก

ใช้ sandwich SE?

❌ ไม่ใช้

✅ ใช้

เหมาะกับภาพรวมประชากร?

✅ ใช่

✅ ใช่

ตัวอย่างใน Stata

xtgee y x, corr(ar1)

xtgee y x, vce(robust)



Recent Posts

See All

Comentários

Avaliado com 0 de 5 estrelas.
Ainda sem avaliações

Adicione uma avaliação
Post: Blog2_Post

​Message for International and Thai Readers Understanding My Medical Context in Thailand

Message for International and Thai Readers Understanding My Broader Content Beyond Medicine

bottom of page