เทคนิคที่ 100 · PYTHON / JAVASCRIPT

กราฟขนาดของผลEffect Size Plot

แยกคำถามว่าต่างจริงไหม ออกจากคำถามว่าต่างพอจะสำคัญไหม

4
ขั้นสูงควรรู้ก่อน · เข้าใจความต่างระหว่างนัยสำคัญทางสถิติกับความสำคัญเชิงปฏิบัติ
ลองเล่น

01ภาพรวมของกราฟนี้

Effect size plot แสดงขนาดของผลในหน่วยที่ตีความได้พร้อมช่วงความเชื่อมั่น และมีแถบกำกับช่วงที่ถือว่าเล็กเกินกว่าจะสำคัญในทางปฏิบัติ จุดแข็งคือมันแยกคำถามว่าต่างจริงไหมออกจากคำถามว่าต่างพอจะคุ้มกับต้นทุนไหม ซึ่งเป็นคนละคำถามกัน

เปรียบเทียบให้เห็นภาพ

เหมือนยาที่พิสูจน์ได้ว่าลดไข้ได้จริง แต่ลดได้แค่ศูนย์จุดสององศา ซึ่งจริงแต่ไม่คุ้มที่จะกิน

ใช้ที่ไหนบ้าง — ตัดสินใจว่าผลการทดลอง A/B คุ้มกับต้นทุนไหม ประเมินผลของนโยบาย หรือเปรียบเทียบประสิทธิผลของทางเลือกหลายทาง

สร้างอย่างไร

  1. ขั้นที่ 1★ กำหนดว่าผลเล็กแค่ไหนที่ถือว่าไม่สำคัญในทางปฏิบัติ ก่อนดูข้อมูล
  2. ขั้นที่ 2แปลงผลเป็นหน่วยที่ผู้อ่านตีความได้
  3. ขั้นที่ 3วาดค่าประมาณพร้อมช่วงความเชื่อมั่น
  4. ขั้นที่ 4ระบายแถบของช่วงที่ถือว่าไม่สำคัญ

ตัวอย่างคลาสสิก · การถกเถียงเรื่องนัยสำคัญทางสถิติกับความสำคัญเชิงปฏิบัติ

วารสารวิชาการหลายฉบับเริ่มบังคับให้รายงานขนาดของผลพร้อมช่วงความเชื่อมั่น แทนที่จะรายงานแค่ค่าพี เพราะพบว่าการรายงานแค่นัยสำคัญทำให้งานที่มีตัวอย่างใหญ่รายงานผลจิ๋วว่าเป็นการค้นพบ การแสดงขนาดผลในหน่วยจริงทำให้ผู้อ่านตัดสินความสำคัญได้เอง

Wikipedia · Effect size

02อธิบายภาษาคนเข้าใจง่าย ๆ

ความผิดพลาดที่พบบ่อยที่สุดในการอ่านผลการทดลองคือการสับสนระหว่างสองคำถามที่ต่างกันโดยสิ้นเชิง

คำถามแรกคือความต่างที่เห็นเป็นเรื่องจริงหรือแค่ความบังเอิญ ส่วนคำถามที่สองคือความต่างนั้นใหญ่พอจะคุ้มกับต้นทุนที่จะลงไปหรือไม่

ตัวอย่างที่ชัดที่สุดคือเมื่อตัวอย่างใหญ่มาก ความต่างเล็กจิ๋วก็จะกลายเป็นมีนัยสำคัญทางสถิติได้เสมอ ทั้งที่ไม่มีใครสนใจความต่างขนาดนั้นเลย

Effect size plot ตอบคำถามที่สองโดยตรง ด้วยการแสดงผลในหน่วยที่ตีความได้ เช่น เพิ่มขึ้นกี่บาทต่อคน แทนที่จะบอกแค่ว่ามีนัยสำคัญ

สิ่งที่ทำให้กราฟนี้มีพลังคือแถบที่กำกับช่วงซึ่งถือว่าเล็กเกินกว่าจะสำคัญ ซึ่งต้องกำหนดก่อนดูข้อมูลเสมอ

ถ้ากำหนดหลังเห็นผลแล้ว มันก็จะกลายเป็นการหาเหตุผลมารองรับข้อสรุปที่ตั้งไว้ในใจ ซึ่งทำให้ทั้งกราฟไร้ความหมาย

03ข้อมูลที่ต้องใช้

รูปทรงของข้อมูลตารางแบบยาว (หนึ่งแถวหนึ่งสังเกต)
จำนวนมิติที่เข้ารหัสได้3 มิติ
จำนวนแถวที่เหมาะ3–12 รายการขั้นต่ำ 2 แถว
เส้นฐานศูนย์ต้องเริ่มที่ศูนย์เส้นศูนย์คือเส้นที่แปลว่าไม่มีผล ซึ่งเป็นจุดอ้างอิงหลักของภาพ

คอลัมน์ที่ต้องเตรียม

คอลัมน์ทำหน้าที่ชนิดเข้ารหัสด้วยจำนวนค่าที่เหมาะหมายเหตุ
studyทางเลือกหรือการทดลองหมวดหมู่y2–15 รายการเรียงตามขนาดผล
estimateขนาดของผลตัวเลขต่อเนื่องxต่อเนื่อง★ ต้องอยู่ในหน่วยที่ตีความได้
lowขอบล่างของช่วงช่วงค่าxน้อยกว่า estimateช่วงความเชื่อมั่น
highขอบบนของช่วงช่วงค่าxมากกว่า estimateช่วงความเชื่อมั่น

ต้องเตรียมข้อมูลอย่างไรก่อนวาด

  1. ★ กำหนดเกณฑ์ความสำคัญเชิงปฏิบัติก่อนดูข้อมูล
  2. แปลงผลเป็นหน่วยที่ผู้อ่านตีความได้
  3. เรียงตามขนาดผลเพื่อให้อ่านง่าย

ค่าที่หายไป — รายการที่คำนวณช่วงไม่ได้ต้องแสดงแยกและไม่นำมาเทียบ

สเกลของแกน — แกนต้องแสดงหน่วยจริงที่ตีความได้ ไม่ใช่ค่าที่ไม่มีหน่วย และต้องครอบคลุมแถบความสำคัญทั้งแถบ

กราฟจะเริ่มพังเมื่อไร

เกิน 20 รายการ กลายเป็น forest plot ที่อ่านยากกว่า

หน้าตาไฟล์ที่ต้องเตรียม

study,estimate,low,high,n
การทดลองที่ 1,3.37,0.57,6.17,630
การทดลองที่ 2,9.91,4.94,14.88,647

04อ่านแล้วเห็นอะไร

สิ่งที่เห็นได้จากภาพ

  • ผลที่ใหญ่พอจะสำคัญในทางปฏิบัติจริง
  • ผลที่มีนัยสำคัญทางสถิติแต่เล็กเกินจะคุ้ม
  • ผลที่ยังสรุปไม่ได้เพราะช่วงกว้างคร่อมทั้งเกณฑ์

สิ่งที่กราฟนี้ตอบไม่ได้

  • ★ เกณฑ์ความสำคัญเป็นการตัดสินใจของคน ไม่ใช่ผลจากข้อมูล
  • ต้นทุนของการทำจริง ซึ่งต้องใช้ข้อมูลอื่นประกอบ

อ่านตามลำดับนี้

  1. ดูว่าช่วงทั้งช่วงอยู่นอกแถบความไม่สำคัญหรือไม่
  2. เทียบขนาดผลกับต้นทุนที่ต้องลง
  3. ระวังรายการที่ช่วงคร่อมทั้งแถบซึ่งแปลว่ายังสรุปไม่ได้

คำถามที่ตอบได้

  • ผลนี้ใหญ่พอจะคุ้มกับต้นทุนไหม
  • ทางเลือกไหนให้ผลมากที่สุดในหน่วยจริง
  • มีทางเลือกไหนที่สรุปไม่ได้เพราะข้อมูลยังไม่พอ

สัญญาณว่ามีอะไรผิด

  • ไม่แสดงแถบความสำคัญเชิงปฏิบัติ
  • ใช้หน่วยที่ตีความไม่ได้
  • กำหนดเกณฑ์หลังจากเห็นข้อมูลแล้ว

05เหมาะกับการนำเสนอแบบไหน

ผู้ชมที่เหมาะผู้ตัดสินใจที่ต้องชั่งผลกับต้นทุน
เวลาที่ผู้ชมต้องใช้ไม่กี่วินาที
ขนาดเล็กสุดที่ยังอ่านได้460×280 px
สไลด์ผู้บริหาร
รายงานเชิงวิเคราะห์
สิ่งพิมพ์
dashboard ที่อัปเดตตลอดเป็นภาพสำหรับการตัดสินใจครั้งเดียว ไม่ใช่การติดตาม

ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย

  1. ★ ระบายแถบของช่วงที่ถือว่าไม่สำคัญพร้อมป้ายอธิบาย
  2. เขียนหน่วยของผลให้ชัดที่แกน
  3. ระบุว่าเกณฑ์ความสำคัญกำหนดโดยใครและเมื่อไร

รูปแบบชื่อกราฟที่ควรใช้

<ทางเลือก> ให้ผล <ค่า> <หน่วย> ซึ่ง<เกินหรือไม่เกิน>เกณฑ์ความคุ้มค่า

06เอาไปใช้ต่อ

โค้ดทุกชิ้นอ่านไฟล์ effect-size-plot-sample.csv ชุดเดียวกับที่ Playground ใช้ และตัวเลขในโค้ดเปลี่ยนตามค่าที่คุณปรับด้านล่าง

# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด effect-size-plot-sample.csv จากหน้านี้ แล้ววางไว้ข้างสคริปต์
import matplotlib
matplotlib.use("Agg")   # รันแบบไม่มีหน้าจอ ถ้ารันในเครื่องตัวเองลบบรรทัดนี้ได้
import matplotlib.pyplot as plt
import pandas as pd

C1, C2, C3 = "#2a78d6", "#eb6834", "#1baf7a"   # palette ของคลัง เปลี่ยนเป็นสีองค์กรได้
INK, SURFACE = "#0b0b0b", "#fcfcfb"

df = pd.read_csv("effect-size-plot-sample.csv")
df["estimate"] = pd.to_numeric(df["estimate"], errors="coerce")
df["low"] = pd.to_numeric(df["low"], errors="coerce")
df["high"] = pd.to_numeric(df["high"], errors="coerce")
NOTE = "threshold"   # ← ค่าจาก Playground

fig, ax = plt.subplots(figsize=(7.6, 4.2), facecolor=SURFACE)
ax.set_facecolor(SURFACE)

THRESHOLD = 0.2                                  # ★ กำหนดก่อนดูข้อมูล
d = df.sort_values("estimate").reset_index(drop=True)
ax.axvspan(-THRESHOLD, THRESHOLD, color="#f2f1ed", zorder=0)   # แถบ "เล็กเกินจะสำคัญ"
ax.text(0, len(d) - 0.3, "เล็กเกินกว่าจะสำคัญในทางปฏิบัติ",
        ha="center", fontsize=8, color="#6b675e")
ax.errorbar(d["estimate"], d.index,
            xerr=[d["estimate"] - d["low"], d["high"] - d["estimate"]],
            fmt="o", color=C1, capsize=4, markersize=8, linewidth=2)
ax.axvline(0, color="#8c887e", linewidth=1)
ax.set_yticks(d.index, d["study"])
ax.set_xlabel("ขนาดของผล (หน่วยจริงของตัวแปร)")

ax.spines[["top", "right"]].set_visible(False)   # ลดเส้นที่ไม่ได้ให้ข้อมูล
fig.tight_layout()
fig.savefig("effect-size-plot.png", dpi=160)
print("เขียน effect-size-plot.png แล้ว ·", len(df), "แถว")

ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*" · ทดสอบกับเวอร์ชัน 3.10

07ลองเล่นเพื่อเข้าใจ

ข้อมูลตัวอย่าง · 7 แถว · seed 419● คำนวณใหม่ในเบราว์เซอร์ทันทีที่ปรับค่า
เล็กเกินกว่าจะสำคัญ
การทดลองที่ 3การทดลองที่ 4การทดลองที่ 2การทดลองที่ 7การทดลองที่ 1การทดลองที่ 5การทดลองที่ 6-5.000.005.0010.015.020.0ขนาดของผล (หน่วยของตัวแปร)ช่วงที่ถือว่าผลเล็กเกินกว่าจะสำคัญในทางปฏิบัติการทดลองที่ 3 · 11.4 [6.26, 16.5]การทดลองที่ 4 · 11.3 [7.10, 15.5]การทดลองที่ 2 · 9.91 [4.94, 14.9]การทดลองที่ 7 · 8.60 [4.55, 12.7]การทดลองที่ 1 · 3.37 [0.57, 6.17]การทดลองที่ 5 · 1.91 [-1.41, 5.23]การทดลองที่ 6 · 1.52 [-4.00, 7.04]

เกณฑ์ "ใหญ่พอที่จะสำคัญ" เป็นการตัดสินของสาขาวิชา ไม่ได้มาจากข้อมูล ต้องเขียนที่มาไว้เสมอ

ผลใหญ่พอที่จะสำคัญ7 จาก 7
ผลที่ใหญ่ที่สุด11.4
ช่วงกว้างเฉลี่ย8.57
ดูข้อมูลเป็นตาราง (7 แถว)
effect size plot 7 กลุ่ม
กลุ่มขนาดผลขอบล่างขอบบน
การทดลองที่ 311.46.2616.5
การทดลองที่ 411.37.1015.5
การทดลองที่ 29.914.9414.9
การทดลองที่ 78.604.5512.7
การทดลองที่ 13.370.576.17
การทดลองที่ 51.91-1.415.23
การทดลองที่ 61.52-4.007.04

ลองแล้วจะเห็นอะไร

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

ข้อควรระวัง

  1. ★ กำหนดเกณฑ์ความสำคัญหลังจากเห็นข้อมูลแล้ว ซึ่งทำให้ทั้งภาพไร้ความหมาย
  2. ใช้หน่วยที่ตีความไม่ได้ ทำให้ผู้ตัดสินใจเทียบกับต้นทุนไม่ได้
  3. ไม่แสดงแถบเกณฑ์ ซึ่งทำให้กลายเป็น error bars ธรรมดา
  4. สรุปว่ามีผลเพราะช่วงไม่คร่อมศูนย์ ทั้งที่ยังอยู่ในแถบที่เล็กเกินจะสำคัญ

เมื่อไหร่ไม่ควรใช้กราฟนี้

  • ยังไม่มีเกณฑ์ความสำคัญที่ตกลงกันได้ใช้แทน: error-bars พร้อมหน่วยจริง
  • มีการศึกษาหลายชิ้นที่ต้องสรุปรวมใช้แทน: forest-plot
  • ต้องตรวจความครบถ้วนของหลักฐานใช้แทน: funnel-plot

กราฟที่เกี่ยวข้อง

เทคนิคถัดไป · กราฟใยแมงมุม