Internal Validation with Bootstrap, kNN Imputation, and Fractional Polynomial Models [Thai]
- Mayta
- 1 day ago
- 3 min read
(กรณี kNN imputation หลายชุด + Fractional Polynomial + Bootstrap)
บทนำ: เรากำลังพยายามตอบคำถามอะไร?
ในการพัฒนา prediction model คำถามสำคัญไม่ใช่แค่ว่า
“โมเดล fit กับข้อมูลเราได้ดีแค่ไหน?”
แต่คือ
“โมเดลนี้ overfit แค่ไหนและถ้าเอาไปใช้กับคนใหม่ประสิทธิภาพจะลดลงเท่าไร?”
การตอบคำถามนี้เรียกว่า Internal Validation
บริบทของงานนี้ (Your exact problem)
งานนี้มีความซับซ้อน 3 ชั้นพร้อมกัน:
Missing data จำนวนมาก→ ใช้ Boostrap before kNN single imputation ซ้ำหลายครั้ง→ ได้ imputed datasets = 500ชุด (imp_id 1–500)
Continuous predictors มี non-linearity → ใช้ Multivariable Fractional Polynomial (MFP)→ เลือก FP powers ตอน development
ต้องประเมิน performance ของโมเดลสุดท้าย → AUC→ Calibration slope→ Calibration-in-the-large (CITL)
แนวคิดหลักที่ต้องเข้าใจก่อน (หัวใจของ internal validation)
🔑 Internal validation ไม่ใช่การดูว่า “model เปลี่ยนหรือไม่”
แต่คือการดูว่า
โมเดลสุดท้ายที่เราจะ deploy มี optimism (ความลำเอียงจาก overfitting) เท่าไร
ดังนั้น:
✅ ต้อง validate “model เดียวกัน” เสมอ
“Model เดียวกัน” แปลว่าอะไร?
คำว่า model เดียวกัน หมายถึง
ตัวแปรชุดเดิม
Fractional polynomial powers เดิม
link function เดิม (logit)
โครงสร้าง linear predictor เดิม
📌 ไม่ได้หมายความว่า
ค่าคงที่ต้องเหมือนกัน
centering ต้องเหมือนกัน
coefficient ต้องเหมือนกัน
แยก 2 ขั้นตอนให้ชัด (Development vs Validation)
1️⃣ Model Development (อนุญาตให้ใช้ MFP)
คำถามที่ตอบ:
“ควรใช้ตัวแปรอะไรและความสัมพันธ์ควรโค้งแบบไหน?”
สิ่งที่ทำ:
run MFP
เลือก FP1 / FP2
เลือก powers (เช่น −2, 2)
ผลลัพธ์:👉 Final model specificationเช่น
age → FP2 (−2, 2)
plt_100k → FP2 (2, 3)
หลังจากนี้👉 ห้ามเปลี่ยน powers อีก
2️⃣ Internal Validation (ห้ามเลือก model ใหม่)
คำถามที่ตอบ:
“โมเดลนี้ overfit แค่ไหน?”
สิ่งที่ ห้ามทำ:
❌ rerun MFP
❌ เปลี่ยน FP powers
❌ เพิ่ม/ตัดตัวแปร
สิ่งที่ ทำได้:
✅ bootstrap
✅ refit coefficient
✅ ประเมิน optimism
ทำไม “bootstrap ต้องไม่ rerun MFP”
อาจารย์มักพูดว่า:
“bootstrap แต่ละครั้งข้อมูลไม่เหมือนกันถ้าไม่ rerun MFP model จะไม่เปลี่ยน”
คำตอบที่ถูกต้องคือ:
✅ จริง: bootstrap ทำให้ข้อมูลเปลี่ยน
❌ แต่ internal validation ไม่ต้องการให้ model เปลี่ยน
เพราะ internal validation ต้องการเปรียบเทียบ
performance ของ model เดียวกันระหว่างข้อมูลที่เห็น vs ข้อมูลใหม่
ถ้า rerun MFP:
แล้วเอาไป test
❗ เท่ากับ train model A แต่ test model B→ calibration, slope, optimism ตีความไม่ได้
แล้ว imputation หลาย dataset ล่ะ?
คำถาม:
“แต่ละ imputed dataset ไม่เหมือนกันทำไมไม่ rerun MFP?”
คำตอบ:
imputation → จัดการ missing data uncertainty
bootstrap → จัดการ overfitting
แม้ข้อมูลจะต่าง👉 เรายังต้อง validate model เดียวกัน
ไม่งั้น:
ไม่มี final model
ไม่มี optimism ที่นิยามได้
Bootstrap before kNN imputation ไม่เพียงพอ
ทำไมต้อง Bootstrap หลังจากได้ 500 data set มาแล้ว
If your final model specification is derived from all 500 imputed datasets, then the bootstrap used to generate those datasets does NOT estimate model optimism.
ตอนทำ Final model ทำจาก 500 dataset นั้น ถ้าไม่ bootstrap มันอีกมันก็จะไม่ช่วย evaluate model optimism
ประเด็นลึก: Fractional Polynomial กับ re-centering
FP power = ตัวตนของ model
centering constant = parameterization
สมการ:
c ทำอะไร?
c ทำหน้าที่ขยับกราฟขึ้นลง
ไม่เปลี่ยนหย้าตาของกราฟ
📌 ความชันจึงเท่ากันทุกจุด 📌 ความโค้งเลยเท่ากัน β ทำอะไร?
ขยาย / ย่อ “ความสูง” ของเส้น
แต่ ไม่เปลี่ยนรูปทรง
เหมือนคุณเอารูปวาดไปซูมเข้า–ออก
📌 ความชันไม่เท่ากัน แต่รูปร่างเหมือน 📌 ซูม ≠ เปลี่ยนรูป แปลว่า:
รูปร่างเส้นโค้งเหมือนเดิม
intercept ดูดความต่าง
prediction ไม่เปลี่ยน
📌 re-centering ไม่ได้เปลี่ยน model
ความโค้งมาจากฟังก์ชันที่ขึ้นกับ X vars
ค่าคงที่แค่เลื่อนเส้นขึ้น–ลง
เลยไม่เปลี่ยนความโค้ง
ทำไม “fix centering constant” ถึงผิด
ถ้าคุณเอา constant จาก dataset หนึ่งไปใช้กับอีก dataset:
intercept จะเพี้ยน
CITL จะ bias
calibration เสีย
ดังนั้น:
centering ต้อง recompute ตาม sample
Rule:
FP powers → fix
ไม่มี rerun MFP → no new FP
re-centering → ทำใหม่ในทุก sample
bootstrap → train ใหม่ / test บน original for each impute set
performance → AUC, slope, CITL
ทั้งหมดนี้ = TRIPOD-correct internal validation
ขั้นตอน Internal Validation
Example ระดับ imputation (m = 1…140)
A) Apparent performance (Aₘ)
fit final model บน imputation m
คำนวณ:
AUCₘ
slopeₘ
CITLₘ
B) Bootstrap test performance
bootstrap B = 50 ครั้ง
ในแต่ละ bootstrap:
train model บน bootstrap sample
test บน original imputation
ได้ Tₘ₁ … Tₘᴮ
คำนวณ T̄ₘ
C) Optimism
Optimismₘ = Aₘ - T̄ₘ
Correctedₘ = Aₘ - Optimismₘ
T̄ₘ = Correctedₘ
รวมทุก imputation
Ā = median / mean ของ A₁…A₁₄₀
T̄ = median / mean ของ T̄₁…T̄₁₄₀
Optimism = Ā − T̄
สรุปประเด็นสำคัญ
ประเด็น | คำตอบ |
rerun MFP ใน bootstrap | ❌ ไม่ควร |
FP powers ต้อง fix | ✅ ใช่ |
re-center FP ใหม่ | ✅ ถูก |
copy constant ข้าม dataset | ❌ ผิด |
internal validation ยัง valid | ✅ แน่นอน |
Re-centering is not a new model
“Internal validation ต้องใช้ functional form เดิมไม่ใช่ numeric parameterization เดิมการ re-centering FP เป็นเพียงการเขียนสมการใหม่ซึ่งไม่เปลี่ยน model และไม่ละเมิด internal validation”




