สอนทำ Anderson-Darling Test แบบทั้งใน SAS, Python และ Excel

Tutorial for Anderson-Darling Test in SAS, Python and Excel

Sasiwut Chaiyadecha
4 min readOct 5, 2022

ก่อนหน้านี้ได้รู้จักการทดสอบ Normality ด้วยวิธีการต่าง ๆ กันแล้ว Blog ตอนนี้เลยอยากหยิบ Statistical test ที่เอาไว้ใช้ทดสอบ Normality ของข้อมูลที่นิยมใช้งานกันมาคือ Anderson-Darling Test

เนื้อหาของ Blog ตอนนี้คือการใช้งานเครื่องมือที่หลากหลาย ในการทำ Anderson-Darling ใน Software อย่าง SAS หรือ Library ใน Python คงไม่ใช่เรื่องยากอะไร แต่ใน Software อย่าง Microsoft Excel อย่างมีขั้นตอนที่เพิ่มขึ้นมา Blog ตอนนี้จะนำเสนอเนื้อหากึ่ง ๆ Tutorial เพื่อนำไปใช้งานได้จริง

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

Model

ยังคงใช้ Model เดิม เพราะต้องการเปรียบเทียบผลลัพธ์ของ Anderson-Darling Test statistic ว่าเหมือนกันหรือไม่ ดังนั้นรายละเอียดของ Linear regression model สามารถย้อนอ่านได้ที่ Link ด้านล่าง

SAS

  • ขั้นตอนแรกต้องสร้าง Linear regression model ก่อนเป็นอย่างแรก ใน SAS ใช้เป็น proc reg จากนั้นกำหนด model ตัวแปร y และ X ตามลำดับ
  • output คือ SAS Dataset ให้ชื่อว่า outTest โดยมี Residual หรือ Error ของ Model อยู่ด้วย ในที่นี้ให้ชื่อว่า r
  • สำหรับการทดสอบ Anderson-Darling ให้ใช้ proc univariate โดยใส่ data คือผลลัพธ์จาก proc reg ด้านบนคือ outTest
  • จากนั้นประกาศ Option normaltest; เพื่อเป็นการทดสอบ Normality
  • ตัวแปรที่ต้องการทดสอบ var คือ Residual จาก Model คือ r
  • หากต้องการเก็บผลลัพธ์ไว้เป็น Dataset format สามารถใช้ ods output TestsforNormality จากนั้นตั้งชื่อ Table ตามที่ต้องการได้
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

ผลลัพธ์ที่ได้ออกมาเป็น Normality tests ด้วยวิธีก่ารต่าง ๆ ซึ่งสำหรับ Anderson-Darling Test ได้ค่า Test statistic ที่ 0.61482 และ p-value ที่ 0.1088

Python

ใน Python เริ่มจาก Fitting linear regression model จากนั้น Call array residual ของ Model ออกมาด้วย .resid ใช้ anderson() ผ่านค่าที่ Call จาก .resid เข้าไป ผลลัพธ์ที่ออกมาคือ Anderson-Darling Test statistic

Anderson-Darling statistic: 0.6105

หากต้องการหาค่าเป็น p-value สามารถใช้วิธีการเดิมจากตอนก่อนหน้านี้ เพื่อทำการคำนวณได้ ซึ่งรายละเอียดสามารถดูได้ที่ Paper ของ

R.B. D’Augostino and M.A. Stephens, Eds., 1986, Goodness-of-Fit Techniques, Marcel Dekker.

Anderson-Darling p-value: 0.1074

Excel

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

สำหรับ Microsoft Excel ให้เริ่มจากสร้าง Linear regression model ขึ้นมาด้วย Data Analysis → Regression จากนั้นให้เลือก Option ในการสร้าง Residual จาก Model ตามรูปด้านบน

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

ขั้นตอนแรกเริ่มต้นที่การ Sort residual จากน้อยไปมาก ถ้าเป็น Excel เวอร์ชั่นใหม่อย่าง 365 อาจใช้ฟังก์ชั่น =SORT() หรือถ้าเป็นเวอร์ชั่นที่เก่าลงมา อาจสร้างเป็น Column แยกขึ้นมาด้วย =RANK.EQ() จากนั้นใช้ =VLOOKUP() เพื่อสร้างเป็น Sorted column อีกที ทั้ง 2 วิธีให้ผลลัพธ์ออกมาเท่ากัน

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

ต่อมาเป็นการหา Cumulative value ของ Normal distribution ใช้ฟังก์ชั่น =NORM.DIST() โดยผ่าน Parameters ตามตัวอย่างด้านล่าง

=NORM.DIST(Sorted residual, Residual's mean, Residual's SD, TRUE)
  • Sorted residual ที่ได้มาจาก Step ก่อนหน้านี้
  • Residual’s mean ใช้ =AVERAGE() เพื่อหา Mean ออกมาได้ตรง ๆ
  • Residual’s SD ใช้ =STDEV.S() เพื่อหา SD ของ Residual
  • TRUE คือให้ Return ค่าเป็น Cumulative
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

F(Yn+1-i) เป็นการ Sort cumulative value ของ Normal distribution กลับด้าน อาจใช้ฟังก์ชั่น =VLOOKUP() ตามสูตรในรูปด้านบน หรือใช้ =SORT() หรือ =RANK.EQ() หรือฟังก์ชั่นอื่นนอกจากนี้ แต่ทั้งหมดเพื่อให้ได้ผลลัพธ์คือ Column ใหม่ที่เรียงกลับด้านจาก Step ก่อนหน้านี้

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

AD (S) สามารถหาได้ตามสูตรด้านบน โดยที่ i คือลำดับของ Observation ของ Residual

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

เมื่อรวมผลลัพธ์จาก Column AD (S) จะได้เป็นค่าของ S ที่เป็น 1 ในตัวแปรของสมการ Anderson-Darling

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

Anderson-Darling Test statistic หาได้จาก (-) ของจำนวน Observation ทั้งหมด ลบด้วย S ที่ได้จาก Step ก่อนหน้านี้ ผลลัพธ์ที่ได้คือ 0.6105 สำหรับการคำนวณหาค่า p-value ต้องทำการปรับ Anderson-Darling Test statistic ด้วยสูตรตามด้านล่าง

Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

หลังจากที่ได้ AD* แล้ว ให้ใช้เงื่อนไขตามล่างในการคำนวณหา p-value ต่อไป

If AD* => 0.6, then p = exp(1.2937 - 5.709(AD*) + 0.0186(AD*)^2)
If 0.34 < AD* < .6, then p = exp(0.9177 - 4.279(AD*) - 1.38(AD*)^2)
If 0.2 < AD* < 0.34, then p = 1 - exp(-8.318 + 42.796(AD*)- 59.938(AD*)^2)
If AD* <= 0.2, then p = 1 - exp(-13.436 + 101.14(AD*)- 223.73(AD*)^2)

p-value ที่ออกได้คือ 0.1074 ตามเงื่อนไขแรกที่ AD* มีค่ามากกว่าหรือเท่ากับ 0.6 สังเกตได้ว่าผลลัพธ์จากทั้ง Python และ Excel ไม่เท่ากับผลลัพธ์จาก SAS ทั้งนี้เป็นเพราะว่าใน SAS ใช้การ Round up เป็นทศนิยม 2 ตำแหน่งในการคำนวณหา p-value ดังนั้นเมื่อลอง Round up เป็นทศนิยม 2 ตำแหน่งให้เหมือน SAS

=EXP(1.30-5.70*0.6186+0.02*0.6186^2)
Histogram, Box plot, QQ Plot, Shapiro-Wilk and Anderson-Darling linear regression model assumption ifrs9 forward-looking model การทดสอบสมมติฐานของแบบจำลอง การวิเคราะห์ถดถอยเชิงเส้น normal distribution normality test python statistical test for normality sas python excel

ผลลัพธ์ที่ได้คือ 0.1088 ซึ่งเท่ากันแล้ว

Conclusion

ขั้นตอนใน Excel ถือว่ามีรายละเอียดเยอะพอสมควร เมื่อเทียบกับการทดสอบ Model assumption อื่น ๆ แต่ก็มีความเป็นไปได้ที่จะใช้ Excel ในการทำงานในลักษณะ เพราะการเขียน Code อาจไม่เป็นเรื่องของทุกคน การมี Excel เป็น 1 ในตัวเลือกอาจทำให้การทำงานสะดวกมากขึ้น

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet