01ภาพรวมของกราฟนี้
Effect size plot แสดงขนาดของผลในหน่วยที่ตีความได้พร้อมช่วงความเชื่อมั่น และมีแถบกำกับช่วงที่ถือว่าเล็กเกินกว่าจะสำคัญในทางปฏิบัติ จุดแข็งคือมันแยกคำถามว่าต่างจริงไหมออกจากคำถามว่าต่างพอจะคุ้มกับต้นทุนไหม ซึ่งเป็นคนละคำถามกัน
เปรียบเทียบให้เห็นภาพ
เหมือนยาที่พิสูจน์ได้ว่าลดไข้ได้จริง แต่ลดได้แค่ศูนย์จุดสององศา ซึ่งจริงแต่ไม่คุ้มที่จะกิน
ใช้ที่ไหนบ้าง — ตัดสินใจว่าผลการทดลอง A/B คุ้มกับต้นทุนไหม ประเมินผลของนโยบาย หรือเปรียบเทียบประสิทธิผลของทางเลือกหลายทาง
สร้างอย่างไร
- ขั้นที่ 1★ กำหนดว่าผลเล็กแค่ไหนที่ถือว่าไม่สำคัญในทางปฏิบัติ ก่อนดูข้อมูล
- ขั้นที่ 2แปลงผลเป็นหน่วยที่ผู้อ่านตีความได้
- ขั้นที่ 3วาดค่าประมาณพร้อมช่วงความเชื่อมั่น
- ขั้นที่ 4ระบายแถบของช่วงที่ถือว่าไม่สำคัญ
ตัวอย่างคลาสสิก · การถกเถียงเรื่องนัยสำคัญทางสถิติกับความสำคัญเชิงปฏิบัติ
วารสารวิชาการหลายฉบับเริ่มบังคับให้รายงานขนาดของผลพร้อมช่วงความเชื่อมั่น แทนที่จะรายงานแค่ค่าพี เพราะพบว่าการรายงานแค่นัยสำคัญทำให้งานที่มีตัวอย่างใหญ่รายงานผลจิ๋วว่าเป็นการค้นพบ การแสดงขนาดผลในหน่วยจริงทำให้ผู้อ่านตัดสินความสำคัญได้เอง
02อธิบายภาษาคนเข้าใจง่าย ๆ
ความผิดพลาดที่พบบ่อยที่สุดในการอ่านผลการทดลองคือการสับสนระหว่างสองคำถามที่ต่างกันโดยสิ้นเชิง
คำถามแรกคือความต่างที่เห็นเป็นเรื่องจริงหรือแค่ความบังเอิญ ส่วนคำถามที่สองคือความต่างนั้นใหญ่พอจะคุ้มกับต้นทุนที่จะลงไปหรือไม่
ตัวอย่างที่ชัดที่สุดคือเมื่อตัวอย่างใหญ่มาก ความต่างเล็กจิ๋วก็จะกลายเป็นมีนัยสำคัญทางสถิติได้เสมอ ทั้งที่ไม่มีใครสนใจความต่างขนาดนั้นเลย
Effect size plot ตอบคำถามที่สองโดยตรง ด้วยการแสดงผลในหน่วยที่ตีความได้ เช่น เพิ่มขึ้นกี่บาทต่อคน แทนที่จะบอกแค่ว่ามีนัยสำคัญ
สิ่งที่ทำให้กราฟนี้มีพลังคือแถบที่กำกับช่วงซึ่งถือว่าเล็กเกินกว่าจะสำคัญ ซึ่งต้องกำหนดก่อนดูข้อมูลเสมอ
ถ้ากำหนดหลังเห็นผลแล้ว มันก็จะกลายเป็นการหาเหตุผลมารองรับข้อสรุปที่ตั้งไว้ในใจ ซึ่งทำให้ทั้งกราฟไร้ความหมาย
03ข้อมูลที่ต้องใช้
คอลัมน์ที่ต้องเตรียม
| คอลัมน์ | ทำหน้าที่ | ชนิด | เข้ารหัสด้วย | จำนวนค่าที่เหมาะ | หมายเหตุ |
|---|---|---|---|---|---|
study | ทางเลือกหรือการทดลอง | หมวดหมู่ | y | 2–15 รายการ | เรียงตามขนาดผล |
estimate | ขนาดของผล | ตัวเลขต่อเนื่อง | x | ต่อเนื่อง | ★ ต้องอยู่ในหน่วยที่ตีความได้ |
low | ขอบล่างของช่วง | ช่วงค่า | x | น้อยกว่า estimate | ช่วงความเชื่อมั่น |
high | ขอบบนของช่วง | ช่วงค่า | x | มากกว่า estimate | ช่วงความเชื่อมั่น |
ต้องเตรียมข้อมูลอย่างไรก่อนวาด
- ★ กำหนดเกณฑ์ความสำคัญเชิงปฏิบัติก่อนดูข้อมูล
- แปลงผลเป็นหน่วยที่ผู้อ่านตีความได้
- เรียงตามขนาดผลเพื่อให้อ่านง่าย
ค่าที่หายไป — รายการที่คำนวณช่วงไม่ได้ต้องแสดงแยกและไม่นำมาเทียบ
สเกลของแกน — แกนต้องแสดงหน่วยจริงที่ตีความได้ ไม่ใช่ค่าที่ไม่มีหน่วย และต้องครอบคลุมแถบความสำคัญทั้งแถบ
กราฟจะเริ่มพังเมื่อไร
เกิน 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อ่านแล้วเห็นอะไร
สิ่งที่เห็นได้จากภาพ
- ผลที่ใหญ่พอจะสำคัญในทางปฏิบัติจริง
- ผลที่มีนัยสำคัญทางสถิติแต่เล็กเกินจะคุ้ม
- ผลที่ยังสรุปไม่ได้เพราะช่วงกว้างคร่อมทั้งเกณฑ์
สิ่งที่กราฟนี้ตอบไม่ได้
- ★ เกณฑ์ความสำคัญเป็นการตัดสินใจของคน ไม่ใช่ผลจากข้อมูล
- ต้นทุนของการทำจริง ซึ่งต้องใช้ข้อมูลอื่นประกอบ
อ่านตามลำดับนี้
- ดูว่าช่วงทั้งช่วงอยู่นอกแถบความไม่สำคัญหรือไม่
- เทียบขนาดผลกับต้นทุนที่ต้องลง
- ระวังรายการที่ช่วงคร่อมทั้งแถบซึ่งแปลว่ายังสรุปไม่ได้
คำถามที่ตอบได้
- ผลนี้ใหญ่พอจะคุ้มกับต้นทุนไหม
- ทางเลือกไหนให้ผลมากที่สุดในหน่วยจริง
- มีทางเลือกไหนที่สรุปไม่ได้เพราะข้อมูลยังไม่พอ
สัญญาณว่ามีอะไรผิด
- ไม่แสดงแถบความสำคัญเชิงปฏิบัติ
- ใช้หน่วยที่ตีความไม่ได้
- กำหนดเกณฑ์หลังจากเห็นข้อมูลแล้ว
05เหมาะกับการนำเสนอแบบไหน
ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย
- ★ ระบายแถบของช่วงที่ถือว่าไม่สำคัญพร้อมป้ายอธิบาย
- เขียนหน่วยของผลให้ชัดที่แกน
- ระบุว่าเกณฑ์ความสำคัญกำหนดโดยใครและเมื่อไร
รูปแบบชื่อกราฟที่ควรใช้
<ทางเลือก> ให้ผล <ค่า> <หน่วย> ซึ่ง<เกินหรือไม่เกิน>เกณฑ์ความคุ้มค่า
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), "แถว")07ลองเล่นเพื่อเข้าใจ
เกณฑ์ "ใหญ่พอที่จะสำคัญ" เป็นการตัดสินของสาขาวิชา ไม่ได้มาจากข้อมูล ต้องเขียนที่มาไว้เสมอ
ดูข้อมูลเป็นตาราง (7 แถว)
| กลุ่ม | ขนาดผล | ขอบล่าง | ขอบบน |
|---|---|---|---|
| การทดลองที่ 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 |
ลองแล้วจะเห็นอะไร
- สังเกตอะไร: รายการที่ช่วงทั้งช่วงอยู่ในแถบคือรายการที่พิสูจน์ได้ว่าผลเล็กเกินกว่าจะคุ้ม ซึ่งเป็นข้อสรุปที่มีประโยชน์ไม่แพ้ผลบวก
ข้อควรระวัง
- ★ กำหนดเกณฑ์ความสำคัญหลังจากเห็นข้อมูลแล้ว ซึ่งทำให้ทั้งภาพไร้ความหมาย
- ใช้หน่วยที่ตีความไม่ได้ ทำให้ผู้ตัดสินใจเทียบกับต้นทุนไม่ได้
- ไม่แสดงแถบเกณฑ์ ซึ่งทำให้กลายเป็น error bars ธรรมดา
- สรุปว่ามีผลเพราะช่วงไม่คร่อมศูนย์ ทั้งที่ยังอยู่ในแถบที่เล็กเกินจะสำคัญ
เมื่อไหร่ไม่ควรใช้กราฟนี้
- ยังไม่มีเกณฑ์ความสำคัญที่ตกลงกันได้→ใช้แทน: error-bars พร้อมหน่วยจริง
- มีการศึกษาหลายชิ้นที่ต้องสรุปรวม→ใช้แทน: forest-plot
- ต้องตรวจความครบถ้วนของหลักฐาน→ใช้แทน: funnel-plot