ยังคง nerd กันต่อ ซึ่งผมอยากจบแล้ว จะไปอ่าน Geriatrics ต่อ 555+ แต่ต้องทำให้จบก่อนไม่งั้นตายตาไม่หลับ

จาก Part 1 เราได้เห็นแล้วว่า ถ้า ชุดข้อมูลอยู่ในรูป normal distribution แล้ว เราจะใช้ประโยชน์จากค่า z ซึ่งก็คือจำนวนเท่าของ sd ที่ออกห่างจาก mean ได้อย่างไรบ้าง วันนี้เราจะมาต่อยอดกันในประเด็นดังนี้
1. ทำไมข้อมูลส่วนใหญ่ในโลกความจริง จึงเป็น normal distribution
2. ถึงแม้ข้อมูลประชากร จะไม่ใช่ normal distribution เราก็ยังใช้ concept ของ 95% CI ได้อยู่ดี
3. แต่ข้อ 2. ไม่จริง! อ่าว ..

  1. ความจริงในโลก (ที่ไม่ selective bias) มักจะ normal distribution
    สมมติว่าเรามีเหรียญสี่เหรียญ หน้าก้อย=0 หัว=1 เราจะทอยเหรียญทั้งหมด แล้วนำแต้มจากทั้งสี่เหรียญมา บวกกัน แต้มรวมที่เป็นไปได้คือ 0,1,2,3,4 และคงเห็นได้ไม่ยากว่า ถ้าเราทอยเหรียญไปเรื่อยๆ แต้ม 2 จะออกบ่อยสุด รองลงมาคือ 1,3 และ 0,4 ตามลำดับ ซึ่ง histogram ของแต้มรวมนี้ จะเป็น normal distribution
    clt1.png

    คุณสมบัติต่างๆในสิ่งมีชีวิต เช่น ความสูง อาจจะขึ้นกับยีนส์หลาย 100 ยีนส์ และปัจจัยภายนอกมากมาย ซึ่งแต่ละปัจจัยก็เปรียบได้กับเหรียญ 1 เหรียญ (หรือลูกเต๋า หรือไพ่ ถ้ามีได้หลายค่า) ท้ายที่สุดแล้วความสูงก็จะออกมาเป็น normal distribution ถ้ามีปัจจัยบางอย่างโดน bias ไปทั้ง population เช่น เหรียญที่ 4 ออก 1 เสมอ ผลออกมาก็ยังคงเป็น normal distribution แต่จะมีค่า mean ที่มากขึ้น และ sd ที่แคบลง แต่ถ้าปัจจัยที่ bias นี้มีผลกับแต่ละส่วนของ population ไม่เท่ากัน ก็จะเกิดภาพที่ไม่สมดุลย์ขึ้นได้ ยกตัวอย่างเช่น กราฟความสูงของประชากรใน Middle Earth ซึ่งประกอบด้วย คนแคระ มนุษย์ และเอลฟ์    (ฮอบบิทดูไร้ความสำคัญเสียจนไม่ได้ถูกนำมาวัดด้วย)

    clt2ภาพนี้แสดงให้เห็นว่า ในหมู่คนแคระด้วยกันซึ่ง share พันธุกรรมบางอย่าง ความสูงของพวกเขาก็เป็น normal distribution แต่พอมองภาพรวมทั้งสามเผ่าพันธุ์ ก็จะกลายเป็นกราฟหน้าตาประหลาดไป

  2. ทีนี้ เราจะทำยังไงล่ะ ? ถ้าประชากรไม่ normal เสียแล้ว เราจะรู้ความสูงเฉลี่ยของชาว Middle Earth ได้อย่างไร ?
    สมมติเรารู้เฉลย mean ของประชากรนี้ = 152.5 (ซึ่งจริงๆ เรามักจะไม่รู้ และถ้าเรารู้ เราคงไม่ต้องมาศึกษา)
    ทีนี้เราลองทำการสุ่มคนมาทีละ 30 คน เราเรียกว่าการ sampling ด้วย sample size (n) = 30 โดยผมจะลองทำทั้งหมด 8 ครั้ง มาแสดงให้ดูดังนี้นะครับ
    จะเห็นว่าแต่ละ sample นั้น ไม่เป็น normal distribution เอาเสียเลย ส่วน mean นั้นถ้าเบิ่งซักนิด จะเห็นว่าอยู่ราว 150± 10 ก็พอไหว แต่ที่เรารู้ว่า”พอไหว” เพราะเราทราบเฉลยแล้ว ในความเป็นจริงเราไม่รู้เฉลย เราจะกล้าบอกได้อย่างไรว่า mean ของ sample เรามันใช้ “estimate” mean ของ population ได้กันล่ะ
    ตั้งสติดีๆทีนึงนะครับ ทีนี้ ผมจะสมมติว่า เราทำการ sampling ทีละ 30 คนนี่แหละ แต่ทำหลายๆรอบ สมมติทำซัก 10,000 รอบ แต่ละครั้งที่ sampling ก็จะมี mean ของมันเองใช่ไหมครับ ทีนี้เราจะเอา mean แต่ละครั้งมา plot histogram และคำนวณหา mean of means ดูว่าจะเป็นอย่างไรclt4.png

    แต่ แหน๊ ~~~ ออกมาเป็น normal distribution ครับ ! และ mean of means นั้นโคตรจะแม่น (แปลกใจมั้ยอ่ะ ผมตื่นเต้นมากเลยนะ 555+) และโค้งนี้มีค่า sd เช่นกัน sd ของ distribution of mean นั้นเรามีชื่อเก๋ๆ ให้มันว่า Standard Error of Means = SEM นั่นเอง (บางคนเรียก SE)
    และเมื่อมันเป็น normal distribution แล้ว เราก็สามารถเล่นกับค่า z ของมันได้ นั่นคือ ถ้าสมมติเรารู้ค่า mean of means และ SEM แล้ว เราจะบอกได้ว่า “ถ้าทำการสุ่มตัวอย่างแบบเดียวกันนี้ 100 ครั้ง จะมีอย่างน้อย 95 ครั้งที่ได้ค่าเฉลี่ยอยู่ในช่วงช่วงหนึ่ง” ช่วงนั้นก็คือ 95%CI นั่นเอง และสูตรก็คือ


    panda ตรูว่าแล้ว ต้องมามุกนี้ …. ยั้งงง !!!
    (ภาพจาก manager online)

    95%CI = Mean of means ± 1.96×SEM

    ขอสรุปอีกทีว่า แม้ population จะไม่เป็น normal distribution แต่ถ้าเราเก็บ sample size ≥30 sampling distribution ก็จะออกมาเป็น normal distribution อยู่ดี (พิสูจน์เลข 30 ด้วยการ simulation ของคอมพิวเตอร์ครับ)
    ซึ่งในชีวิตจริง เราจะทำการสุ่มแค่ครั้งเดียว แล้วเราก็จะทำการ estimate ค่า Mean of means และ SEM เพื่อนำมาคำนวณค่า 95%CI และเนื่องจาก mean จากแต่ละ sampling จะวนรอบๆ true mean ดังนั้นเราจึงพอจะอนุมานได้ว่า true mean ที่จริงแท้ ก็จะอยู่ใน 95%CI นี่แหละ
    ตรงนี้ผมอยากเน้นประเด็นที่ไม่ค่อยมีคนเน้นนิดนึงนะครับ 95%CI จริงๆแล้วคือช่วงความมั่นใจว่า ถ้าเราทำการศึกษาด้วยmethod เดิม ผลลัพธ์จากการศึกษาแต่ละครั้งจะตกอยู่ในช่วงนั้น แต่ไม่มีอะไรการันตีว่าผลการศึกษานั้นถูกต้อง! เช่น ผมอยากหาความสูงของคน Middle Earth แต่ดันไปเก็บข้อมูลบ้านทุกหลังในหมู่บ้านคนแคระ วิธีเก็บข้อมูลของผมดีมาก ดังนั้นส่งทีมงานมาเก็บกี่รอบก็จะได้ mean เท่าๆเดิมน่ะแหละ 95%CI ก็จะแคบมากด้วย แต่เป็น mean ของคนแคระนะ ไม่ใช่ mean ของ Middle Earth ! ฉันใดฉันนั้น ผลงานวิจัยใดใด จะดูแค่ 95%CI ไม่ได้ ต้องดู methods! ผมขอย้ำอีกครั้งว่า ต้องดู methods! (ไม่นับกรณีข้อมูลจอมปลอม ข้อมูลบิดเบือนที่เราวัดไม่ได้อีกมากมาย) ยกตัวอย่างง่ายๆ ก็พวกผลโพลต่างๆ นั่นแหละครับ

  3. ประเด็นถัดมา อ้าว! แล้วเราจะ estimate mean of means กะ SEM ได้ไงอะ
    ถ้า เน้นว่า ถ้า ประชากรเราเป็น normal distribution นะครับ เรานิยมเขียน mean และ sd ของ population ในรูป มิว (μ) และ ซิกมา (σ) ตามลำดับ ถามว่าทำไมต้องเป็นอักษรกรีก ก็เพราะมันเป็นสิ่งที่เป็นปริศนาเรามักจะไม่รู้(เรื่อง)ยังไงล่ะครับ (เอิ่ม เหตุผลของผมเองนะ อย่าเพิ่งเชื่อ) แล้วทีนี้พอเราสุ่มๆ ดึง sample size จำนวน n ออกมา เราจะเรียกว่า mean ว่า เอ็กซ์บาร์ (x มีขีดข้างบน ทำไม่ได้ แง้) และ sd ว่า sd ซึ่งสูตรคำนวณ σ กับ sd นั้นต่างกันนิดหน่อย เราจะไม่คุยในที่นี้ ซึ่งเรามัก assume ว่า x bar เป็น estimator ของ μ และ sd เป็น estimator ของ σ ซึ่งมันจะใกล้เคียงเมื่อ n เรามากพอ และข้อมูลเป็น normal distribution เท่านั้น
    หลังจากข้อสมมติข้างบนเป็นจริง แล้วเรา sampling หลายๆครั้ง แต่ละครั้งด้วย sample size =n เราจะพบว่า SEM = σ/sqrt(n) และทำให้ได้สูตรของ 95%CI ว่า
    95%CI = μ ± 1.96× σ/sqrt(n) และด้วยการ estimate  σ ด้วย sd, μ ด้วย xbar เราจะได้ว่า 95%CI = xbar ± 1.96× sd/sqrt(n)
    พูดได้ง่ายๆ (รึเปล่า) ว่าในชีวิตจริง เราทำ sampling ครั้งเดียว และใช้ mean กับ sd ของ sample เดียวนี้ มา estimate mean และ sd ของ population แล้วนำมาเข้าสูตรคิด 95%CI อีกที
    ดังนั้น แม้เราจะคุยฟุ้งในข้อ 2.) ว่า population ไม่ต้อง normal distribution เราก็คิด 95%CI ได้ แต่ในความเป็นจริง เราต้องการความเป็น normal distribution เพื่อ estimate mean และ sd ของ population อยู่ดี ข้อ2.) เลยแป้ก.. และทำให้เราต้องมี test สำหรับแต่ละกรณีไป

ผมอยากสรุปก่อนจากกันตรงนี้ โดยให้ลืมการวิจัยปกติของเราไปก่อน
สมมติ ผมอยากจะวัดความเข้มของสีดำโดยการมองแล้วกะตัวเลข 0-100 เมื่อผมมองหลายๆรอบ จะพบว่าตัวเลขที่ผมกะมีการกระจายแบบ normal distribution และมี mean กับ sd ค่าหนึ่ง concept ของ 95%CI คือการกะว่าถ้าผมมอง 100 ครั้ง จะมี 95 ครั้งที่ผมกะความเข้มสีได้ในช่วง 95%CI นั้น ดังนั้น 95%CI เป็นตัวบอกความ “เที่ยง” ของ methods (การกะสี) ของผม (แต่ถูกต้องหรือเปล่า ไม่รู้นะ)
ถ้าเราอยากหา [mean ของ population] วิธีการสุ่มคนมาหาค่าmean นั่นคือ [methods] และ sample mean คือผลลัพธ์จากการใช้ method 1 ครั้ง   [95%CI จึงบอกถึงความเที่ยงของ methods] ว่าทำไปเรื่อยๆ ส่วนใหญ่จะได้ผลอยู่ในช่วงนี้แหละ ไม่ใช่การันตีว่า true mean จะต้องอยู่ในช่วงนี้เสมอไป และหลายคนยังเข้าใจผิดว่า 95%CI (ที่เราใช้ส่วนใหญ่)คือ 95% จากค่าของประชากร (ซึ่งช่วง 95% ของ mean นั้นแคบกว่า 95% ของ population มาก)
อีกตัวอย่าง เราอยากหา [relative risk] ของ exposed กับ non-exposed group เราจึง design [methods] ขึ้นมา ซึ่งรวมตั้งแต่วิธีคัดเลือกคนเข้างานวิจัย การวัด exposure และ outcome จนได้ผลออกมาเป็น relative risk เป็นผลลัพธ์ของ method เรา จากจุดนี้แหละ ที่เราคิด [95%CI เพื่อจะบอกว่า เราทำการศึกษาวิธีเดิม 100 ครั้ง ก็จะได้ relative risk ออกมาอยู่ในช่วง 95%CI] นั้นเอง

สรุป หัวใจสำคัญของบทความนี้ ที่จริงคือ ต้องอ่าน methods! ต้องอ่าน method!


R code
– set.seed() เป็นวิธีการ set ให้การ random ของเราได้ผลเหมือนเดิม เหมาะใช้ในการสอนซึ่งเราอยากให้การทดลองของนักเรียนได้ผลเหมือนเราเป๊ะๆ
– runif(n,a,b) ใช้สร้าง random number n จำนวน ในช่วง a-b

set.seed(12-7+1988)

#prove normal distribution
#with 4 coins, 1,000 toss
record<-data.frame(c1=0,c2=0,c3=0,c4=0,sum=0)
for(i in 1:1000)
{record[i,1:4]<-floor(runif(4,0,50)%%2)
record[i,"sum"]<-sum(record[i,1:4])
}
#plot1 :: normal distribution of coins sum
hist(record[,"sum"],20,main="Distribution of Coins Point",
freq=FALSE,xlab="Coins Point",col="#FF4488")

#build middle earth
Dwarf <- rnorm(4000,130,30)
Human <- rnorm(3000,170,10)
Elf <- rnorm(1000,190,20)

#plot2 :: non-normally distributed population
MiddleEarth <- c(Dwarf,Human,Elf)
hist(MiddleEarth,50,freq=FALSE,xlab="Height",ylim=c(0,0.02),col="#222222")
lines(y=dnorm(0:250,130,30)*0.5,x=0:250,col="#44AA44",lwd=2)
lines(y=dnorm(0:250,170,10)*0.5,x=0:250,col="#8888DD",lwd=2)
lines(y=dnorm(0:250,190,20)*0.150,x=0:250,col="#DDDD55",lwd=2)
legend(col=c("#44AA44","#8888DD","#DDDD55"),lwd=3,legend=c("Dwarf","Man","Elf"),
x=30,y=0.015)
mean(MiddleEarth)

#sampling from middle earth
Rset <- ceiling(runif(30,1,8000))
hist(MiddleEarth[Rset],100,main="sampling with sample size = 30",
xlim=c(80,220),ylim=c(0,0.1),xlab="Height",freq=FALSE,col="yellow") #see, sample from non-normal result in non-normal
text(x=100,y=0.08,label=paste("Mean =",round(mean(MiddleEarth[Rset]),2)))

#multiple sampling
RRset <- array()
for(i in 1:10000){
Rset <- ceiling(runif(30,1,8000))
RRset[i] <- mean(MiddleEarth[Rset])
}
hist(RRset,100,col="#BBAA22",freq=FALSE, main="Distribution of Means",
xlab = "Mean of Sample's Height")
text(x=135,y=0.06,label=paste("Mean of means=",round(mean(RRset),2)))
text(x=135,y=0.05,label=paste("SEM =",round(sd(RRset),2)))

Advertisements