wyamaka.files.wordpress.com  · web...

24
คคคคคคคคคคคคคคคคคคค R คคคคคคคคคคค 751305 Workshop 751301 กกกกกกกกกกกกก R กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกกก 3 กกกก กกก 1. กกกกก Code กกกกกกกกกกกกกกกกกกกกกกกกกกกกก 2. กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก R กกกก min() max() mean() sum() length() read.cv() file.choose() lm() กกก glm() กกกกกกก กกกกกกกกกกก กกกกกกกกกกกกก R กกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกก 100-200 กกกกกกกก กกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกก 3. กกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกก กกกกกกกกกกก กกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกก R กกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกก กกกก install package กกกกกกกกก กกกกกกกกก package กกกกกกกก function กกกกกกกกกกกกกกกกกกกก กกกก package “mctest” กกกกกกกกกกกกกกก multicollinearity, package “lmtest” กกกกกกกกกก กกกกก Heteroscedasticity กกก package “mfx” กกกกกกกกกกกกก marginal effect กกกกกกกกกกกกกกก กกก กกกกกกกก package กกกกกกกกกกก internet กกกก กกกกกกกกกก package กกกกกกกกกกกกกกกกกก 1,000 package กกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกก package กกก กกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกก google กกกกกกกกกกกกกกกกกกกกก กก workshop กกกกกกกกกกกกกกกกกกกก กกก 1. Linear regression 2. Binary regression (logit/probit) 3. Robustness check กกกก Goodness of fit 1) Multicollinearity test (Variance inflation factor: VIF test) 2) Omitted variable bias

Upload: others

Post on 22-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

คู่มอืการใชโ้ปรแกรม R สำาหรบัวชิา 751305

Workshop 751301การใชโ้ปรแกรม R ในการวเิคราะหข์อ้มูลหรอืประมาณแบบจำาลองในเศรษฐมติิสามารถทำาได้ 3 วธิ ีคือ

1. เขยีน Code คำาสัง่หรอืฟงัก์ชนัด้วยตัวเอง2. การใชฟ้งัก์ชนัท่ีมอียูแ่ล้วในโปรแกรม R เชน่ min() max() mean()

sum() length() read.cv() file.choose() lm() และ glm() เป็นต้น ซึ่งโดยปกติแล้วในโปรแกรม R จะมฟีงักชนัเหล่านี้เป็นพื้นฐานอยูป่ระมาณ 100-200 ฟงัก์ชนั เพื่อใชว้เิคราะหข์อ้มูลท่ีไมซ่บัซอ้นมากเกินไป

3. กรณีที่ต้องทำาการประมาณผล วเิคราะหผ์ล หรอืทดสอบผลท่ีค่อนขา้งซบัซอ้น และฟงัก์ชัน่พื้นฐานที่มอียูใ่นโปรแกรม R ไมส่ามารถทำาได้ เราจะต้องมกีารนำาเขา้ หรอื install package จากคนอ่ืน ซึ่งเราใน package นัน่จะม ีfunction ท่ีเราต้องการนัน่เอง เชน่ package “mctest” สำาหรบัการทดสอบ multicollinearity, package “lmtest” สำาหรบัการทดสอบ Heteroscedasticity และ package “mfx” สำาหรบัการทำา marginal effect ซึ่งโดยปกติแล้ว เราสามารถหา package เหล่านี้จาก internet ซึ่งปัจจุบนัม ีpackage ใหเ้ลือกใชม้ากกวา่ 1,000 package แล้ว คำาถามคือเราจะรูไ้ด้อยา่งไรวา่เราต้องใช ้package ไหน คำาตอบคือเราต้องค้นควา้ด้วยตัวเองจาก google หรอืถามอาจารยน์ัน่เอง

ใน workshop นี้จะมเีนื้อหาดังนี้ คือ

1. Linear regression2. Binary regression (logit/probit)3. Robustness check หรอื Goodness of fit

1) Multicollinearity test (Variance inflation factor: VIF test) 2) Omitted variable bias3) R-square และ Adjusted R-square4) Heteroscedasticity

4. การแก้ปัญหา Heteroscedasticity1) วธิ ีlog-log2) วธิ ีRobust estimator

Page 2: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

3) วธิ ีweighted lease squares5. Odd ratio และ Marginal effect สำาหรบั logit และ probit

การเขยีน Code

Part 1: Linear regressionในกรณีเราจะใชข้อ้มูล Data 1 จาก datalinear.xlsx โดยเราต้องทำาการสรา้งไฟลขอ้มูลของเราแยกออกมา โดยการเอาขอ้มูล Data1 แยกมาและ save ขอ้มูลน้ีให้อยูใ่นรูปของ file.csv (comma delimited) โดยสมการท่ีเราจะทำาการประมาณ คือ

(1)

โดยที่

คือ log รายจา่ยในการท่องเท่ียว

คือ log เงินเดือน

คือ จำานวนสมาชกิในครวัเรอืน

คือ เพศ

คือ ราคาตัว๋เครื่องบนิ

คือ log รายจา่ยของครอบครวั

ขัน้ตอนท่ี 1 การเอาขอ้มูลเขา้

ในการเอาขอ้มูลเขา้วธินีี้เราจะ save file ขอ้มูลของเราใหอ้ยูใ่นรูปของไฟล์ csv โดยเราจะใชส้ัง่ read.csv() สำาหรบัการเรยีกไฟล์ csv และใชค้ำาสัง่ file.choose() สำาหรบั browse หาไฟล์ขอ้มูลท่ีเรา save ไว ้ สำาหรบัคำาสัง่ attach() จะถกูใชเ้พื่อ

Page 3: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

ให ้R รจ็กัชื่อตัวแปรของเราทำาใหต่้อไปเราสามารถเรยีกชื่อตัวแปรท่ีเหมอืนชื่อท่ีเราตัง้ไวใ้นไฟล csv ได้เลย และคำาสัง่ head() คือเป็นการแสดงวา่ขอ้มูลสว่นหวัของขอ้มูลทำาใหเ้ราทราบวา่ขอ้มูลท่ีเราตัง้ชื่อมชีื่ออะไรบา้ง

data=read.csv(file.choose(), head=TRUE) attach(data) head(data)

ขัน้ตอนท่ี 2 การประมาณสมการถดถอยในสมการท่ี 1

ในขัน้ตอนน้ีเราจะใชฟ้งัก์ชนัท่ีชื่อวา่ lm() ซึง่เป็นฟงัก์ชนัการประมาณสมการ linear regression ด้วยวธิกีาร OLS นัน่เอง และคำาสัง่ summary() เป็นคำาสัง่เพื่อแสดงผลการประมาณทั้งหมด เชน่ T-test, F-test, p-value และ เป็นต้น

##========== linear modelm1=lm(lntravel~lnsalary+household+sex+price+lnexpense)summary(m1)## ผลการประมาณCall:lm(formula = lntravel ~ lnsalary + household + sex + price + lnexpense)

Residuals: Min 1Q Median 3Q Max -8.8093 -2.4629 -0.1349 2.4161 9.7358

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.20587 0.90048 -0.229 0.8193 lnsalary -3.42468 3.27456 -1.046 0.2963 household 0.52821 0.25111 2.103 0.0361 * sex 0.13113 0.40441 0.324 0.7459 price 0.87151 0.05792 15.046 <2e-16 ***lnexpense 5.41709 6.41236 0.845 0.3987 ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.651 on 394 degrees of freedomMultiple R-squared: 0.3739, Adjusted R-squared: 0.366

Page 4: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

F-statistic: 47.07 on 5 and 394 DF, p-value: < 2.2e-16

ขัน้ตอนท่ี 3 การเชค็ความน่าเชื่อถือของแบบจำาลอง

ในการเชค็ความน่าเชื่อถือของแบบจำาลองนี้มดัีงนี้ คือ

3.1) Multicollinearity test (Variance inflation factor: VIF test)

3.2) Omitted variable bias3.3) R-Squared และ Adjusted R-Squared3.4) Heteroscedasticity

3.1. Multicollinear (VIF)ในการทดสอบ Multicollinear นี้เราสามารถไมม่คีำาสัง่ท่ีหรอืฟงัก์ชัน่นี้อยูใ่น R เราจงึต้องไปหา package จากท่ีอ่ืนมา install ในโปรแกรม R ของเรา ซึ่ง package ท่ีสามารถทำาการทดสอบนี้ได้คือ “mctest” ดังนัน้เราต้องทำาการ install package นี้เขา้มาโดยใชค้ำาสัง่ install.packages() ซึ่งเวลาจะ install ต้องเลือก cran mirror วา่จะเป็นของประเทศใด ซึ่งในท่ีนี้แนะนำาใหใ้ชข้อง USA(CA1) เนื่องจากมฟีงัก์ชนั R ค่อนขา้งเยอะ ซึ่งถ้าเราเลือกประเทศอ่ืน อาจไมม่ ีpackage ท่ีเราต้องการได้ เมื่อ install ได้แล้ว ต่อไปนี้เราจะไมจ่ำาเป็นต้อง install ซำ้าเมื่อต้องใช ้package นี้อีก เราสามารถเรยีกมาใชได้เลยโดยใชค้ำาสัง่ library()install.packages("mctest")library(mctest)

Page 5: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

รูปท่ี 1 ภาพแสดงตัวอยา่งการเลือก cran mirror USA(CA1)

ต่อมาทำาการทดสอบ Multicollinear ซึ่งเราสามารถทำาได้ 2 วธิด้ีวยกัน คือ หาสมัประสทิธิส์หสมัพนัธข์องตัวแปรตาม (x) ทัง้หมดเพื่อเชค็ดวูา่ตัวแปร x ใดบา้งท่ีมีความสมัพนัธก์ัน โดยในขัน้ตอนน้ีเราจะทำาการรวมตัวแปร x ทกุตัวเขา้มาด้วยกันด้วยคำาสัง่ cbind() และใชฟ้งัก์ชนั cor() เพื่อหา correlation หรอืสมัประสทิธิส์หสมัพนัธ ์ของตัวแปร x ทกุตัว

# correlationX=cbind(lnsalary,household,sex,price,lnexpense)cor(X) ## ผลการประมาณ lnsalary household sex price lnexpenselnsalary 1.000000000 -0.007130033 0.060144089 -0.004418917 0.982583906household -0.007130033 1.000000000 0.102717885 0.035107541 -0.005187964sex 0.060144089 0.102717885 1.000000000 0.008208792 0.065290657price -0.004418917 0.035107541 0.008208792 1.000000000 -0.012135979lnexpense 0.982583906 -0.005187964 0.065290657 -0.012135979 1.000000000

จากผลการประมาณเบีอ้งต้นเราพบวา่ตัวแปร Insalary และ lnexpense มคีวามสมัพนัธก์ันถึง 0.9825 หรอื 98.25% ซึ่งปกติแล้วถ้าความสมัพนัธเ์กนกวา่ 60-70% เราจะมองวา่เกิดปัญหา multicollinearity ในแบบจำาลองแล้ว หรอือีกวธิีหนึ่งเราสามารถใชฟ้งัก์ชนั imcdiag() ซึ่งจะอยูใ่น package “mctest” มาใชใ้นการทดสอบ โดยคำาสัง่นี้จะทำาใหเ้ราคำานวณ VIF ได้นัน่เอง

# VIFimcdiag(x = X, y = lntravel)## ผลการประมาณCall:imcdiag(x = X, y = lntravel)

All Individual Multicollinearity Diagnostics Result

Page 6: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

VIF TOL Wi Fi Leamer CVIF Kleinlnsalary 29.0257 0.0345 2767.5342 3699.3874 0.1856 29.2976 1household 1.0121 0.9880 1.1952 1.5977 0.9940 1.0216 0sex 1.0156 0.9847 1.5385 2.0566 0.9923 1.0251 0price 1.0031 0.9969 0.3049 0.4075 0.9985 1.0125 0lnexpense 29.0472 0.0344 2769.6655 3702.2364 0.1855 29.3194 1

1 --> COLLINEARITY is detected by the test 0 --> COLLINEARITY is not detected by the test

lnsalary , sex , lnexpense , coefficient(s) are non-significant may be due to multicollinearity

R-square of y on all x: 0.3739

* use method argument to check which regressors may be the reason of collinearity===================================

จากผลการศึกษาเบื้องต้น ใหนั้กศึกษาพจิารณาตัวแปร VIF ซึ่งถ้าค่า VIF มากกวา่ 10 แสดงวา่ตัวแปรนัน้มปัีญหา multicollinearity ซึ่งจากผลการศึกษา พบวา่ ตัวแปร Insalary และ lnexpense เป็นตัวแปรท่ีมคี่า VIF มากกวา่ 10 ซีง่สอดคล้องกับผลในวธิท่ีี 1 ดังนัน้เราต้องตัดตัวแปรใดตัวแปรหนึ่งออกไป ปัญหาคือเราจะตัวตัวแปรใด คำาตอบคือเราต้องลองทดสอบ Omitted Variable bias ด ูคือเราต้องลองทดสอบวา่ถ้าตัวตัวแปร Insalary หรอื lnexpense ออกจากแบบจำาลองจะเกิดปัญหาหรอืไมน่ัน่เอง หรอืทดสอบวา่ตัวแปรสองตัวนี้มคีวามสมัพนัธก์ับตัวแปร Insalary หรอืไมน่ัน่เอง

3.2. Omitted variable bias ในการทดสอบนี้เรามกีารทดสอบได้หลายวธิด้ีวยกัน ซึ่งทีน้ีจะทำาการทดสอบโดยใช ้F-test มาทดสอบ โดยสตูรการคำานวณ F-test คือ

Page 7: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

จากสตูรเบื้องต้นเราพบวา่ และ

คือ sum square residual ของ restricted model และ unrestricted model นัน่เอง จากการทดสอบจาก multicollinearity เราพบวา่ตัวแปร Insalary และ lnexpense มคีวามสมัพนัธก์ัน ดังนัน้เรายงัไมรู่ว้า่จะตัดตัวแปรใด ดังนัน้เราต้องทดสอบด ูซึ่งในกรณีนี้จะทำาการทดสอบก่อนวา่ตัวแปร lnexpense ควรมใีนแบบจำาลองหรอืไม ่ดังนัน้สิง่ท่ีเราต้องทำาก็คือ ทดสอบแบบจำาลอง 2 แบบ คือ แบบท่ีมตัีว lnexpense และแบบท่ีไมม่ตัีวแปร lnexpense ซึ่งเราสามารถเขยีนสมการได้ดังนี้

กรณี ไมม่ตัีวแปร lnexpense เราจะเรยีกแบบจำาลองของเราวา่ restricted model คือ

(2)กรณี มตัีวแปรครบทกุตัวเราจะเรยีกแบบจำาลองของเราวา่ unrestricted model คือ

(3)สิง่ท่ีเราจะทำาต่อไปนี้คือทดสอบวา่ 2 แบบจำาลองนี้ต่างกันหรอืไม ่ถ้าไมต่่างกันแสดงวา่เราไมจ่ำาเป็นต้องใสตั่วแปร lnexpense ก็ได้นัน่เอง โดยสมมุติฐานของการทดสอบนี้ ก็คือ

restricted model (แบบจำาลองทั้ง 2 ไมแ่ตกต่างกัน)

unrestricted model (แบบจำาลองทั้ง 2 แตกต่างกัน)

## 3.2 F-test#----Step 1 Run restricted modelMr=lm(lntravel~lnsalary+household+sex+price)# estimate residual or errorEr=residuals(Mr)

Page 8: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

#----Step 2 Run unrestricted modelMu=lm(lntravel~lnsalary+household+sex+price+lnexpense)# estimate residual or errorEu=residuals(Mu)

# ---Step 3 compute SSR of two modelsSSR_r=sum(Er^2)SSR_u=sum(Eu^2)

# number of parameterk=6# number of observationn=400# number of parameter of unrestricted model minus restricted modelq=k-5

# test only x5 thus Fstat=((SSR_r-SSR_u)/q)/(SSR_u/(n-k))

## pf() is F probability pvalue=1 - pf(Fstat,k,n-k)## ผลการประมาณ[1] 0.6387781จากผลการศึกษา นักศึกษาสามารถ เปิดตาราง F test หรอืตรวจสอบจาก P-value เลยก็ได้ ซึ่งการแปลวา่ p-value คือ ถ้า p-value น้อยกวา่ 0.10 0.05 หรอื

0.01 เราจะปฎิเสธสมมุติฐานหลัก โดยความเชื่อมัน่ท่ี 90% 95% หรอื 95 % ตามลำาดับ ซึ่งจากการคำานวณ p-value ในกรณีนี้พบวา่มคี่าเท่ากับ 0.6387 ซึ่งมากกวา่ 0.01 0.05 0.10 ทัง้หมดดังนัน้เราจงึยอมรบัสมมติฐาน 0

ซึ่งก็คือตัวแปร lnexpense ไมม่คีวามสมัพนัธก์ับ Intravel ดังนัน้ เราจงึสรุปได้วา่เราไมจ่ำาเป็นต้องใสตั่วแปร lnexpense เขา้ไปนัน้เอง เพราะแบบจำาลองของเราไม่แตกต่างกับแบบจำาลองเดิมเลย ดังนัน้การตัดตัวแปรไมม่ผีลกระทบอะไรนัน่เอง สำาหรบัตัวแปร Insalary นักศึกษาลองไปตรวจสอบดเูอง วา่จะเป็นอยา่งไร

ซึ่งจากผลการศึกษานี้สมมุติวา่เราพบวา่ต้องตัด lnexpense ออกไปแบบจำาลองท่ีดีท่ีสดุของเราก็คือ

Page 9: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

(4)3.3. R-Squared และ adjusted R-Squared

R-Squared คือ ความสมัพนัธห์ระวา่งตัวแปร x ทัง้หมดกับตัวแปร y กล่าวคือ x สามารถอธบิาย y ได้กี่เปอรเ์ซน็ต์นัน่เอง สว่น adค่า R-Squared จะมคี่าอยูร่ะหวา่ง 0% - 100% - 0% แสดงใหเ้หน็วา่ ตัวแบบคณิตศาสาตรท่ี์ได้มานัน้ไมส่ามารถอธบิายความผันแปรของค่าตัวแปรตอบสนอง ต่างท่ีกระจายรอบค่าเฉล่ียได้เลย - 100% แสดงใหเ้หน็วา่ ตัวแบบคณิตศาสาตรท่ี์ได้มานัน้สามารถอธบิายความผันแปรของค่าตัวแปรตอบสนอง ต่างท่ีกระจายรอบค่าเฉล่ียได้เป็นอยา่งดีขอ้จำากัดของค่า R-Squared

1) ค่า R-Squared ไมส่ามารถบอกได้วา่ค่าท่ีคำานวณได้นัน้มคีวามเอนเอียงหรอืไม ่ซึ่งจำาเป็นต้องใชก้ารวเิคราะห ์แผนภาพเศษเหลือมาเป็นตัวชว่ย

2) ค่า R-Squared ไมส่ามารถบอกได้วา่ ตัวแบบคณิตศาสตรน้ี์มคีวามเหมาะสมดีแล้วหรอืไม ่ซึ่งบางครัง้ตัวแบบ คณิตศาสตรท์ี่ดีอาจใหค้่า R-Squared ตำ่าและบางกรณีท่ีมคี่า R-Squared สงูตัวแบบก็ไมเ่หมาะสมกับขอ้มูล

ดังนัน้เพื่อแก้ปัญหา R-Squared เราเลยต้องมกีารคำานวณ Adjusted R-Squared โดยที่สตูร R-Squared และ Adjusted R-Squared คือ

(5)

(6)

## 3.3.1 R2error=residuals(m2)SSR=sum(error^2)SST=sum((lntravel-mean(lntravel))^2)R2=1-SSR/SSTR2[1] 0.3739328

Page 10: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

## 3.3.2 Adjusted R2SSR=sum(error^2)SST=sum((lntravel-mean(lntravel))^2)k=6n=400AdjR2=1-((SSR/(n-k))/(SST/(n-1)))AdjR2[1] 0.3659878

3.4. Heteroscedasticityปัญหาขอ้สดุท้ายท่ีควรทำาการทดสอบในแบบจำาลอง linear regression คือ Heteroscedasticity หรอื การท่ีความแปรปรวนของตัวคลาดเคล่ือนในค่า

ความคลาดเคล่ือนหรอื error ไมน่ิ่งนัน่เอง หรอืก็คือ ซึ่งทำาไห้สมมุติฐานขอ้ท่ี 5 ของ Gauss Markov ไมเ่ป็นจรงิ โดยสาเหตขุอ้หน่ึงท่ีทำาใหค้วาม

แปรปรวนของค่าความคาดเคล่ือนนี้ไมนิ่่ง คือ สมัพนัธก์ับตัวแปร x นัน่เอง ดังนัน้เราสามารถตัง้สมมุติฐานได้ดังนี้

: ตัวแปร x ทกุตัว ไมส่มัพนัธก์ับ error (ไมม่ปีัญหา Heteroscedasticity)

: ไมเ่ป็นจรงิ (ไมม่ปีัญหา Heteroscedasticity)

โดยในการทดสอบนี้สามารถทำาได้หลายวธิ ีแต่ที่จะกล่าวในทีนี้คือการทดสอบของ white test และ Breusch–Pagan test ซึ่งในกรณีของ white test เราจะมวีธิีการประมาณดังนี้

ขัน้ตอนท่ี 1 ประมาณแบบจำาลองท่ีดีท่ีสดุของเรา

(7)

ขัน้ตอนท่ี 2 คำานวณค่าความคลาดเคลื่อนหรอื error จากสมการท่ี 7

(8)

จากนัน้ประมาณสมการ

Page 11: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

(9)

โดยที่ = .

ขัน้ตอนที่ 3 เราจะใช ้Multiple test ในการทดสอบ ซึ่งในท่ีนี้เราจะใช ้ Lagrange Multiplier (LM) test ดังนัน้เราจะจะตัง้สมมุติฐานขอ้นี้ คือ

: ( ไมส่มัพนัธกั์บ ดังนัน้ ไมม่ปัีญหา Heteroscedasticity)

: ไมเ่ป็นจรงิ (มปีัญหา Heteroscedasticity)

และสถิติ LM test คือ

โดยที่ คือ R-Squared ของสมการท่ี 9

จากนัน้เราสามารถเปิดตารางไควแสควร ์หรอืคำานวณหา p-value เพื่อแปลผลการศึกษา

#==== white test = R2 of whitemodel*nStep 1 # Run the best modelm2=lm(lntravel~lnsalary+household+sex+price)yhat=fitted(m2)whitemodel=lm(error^2~yhat+yhat^2)summary(whitemodel)

Call:lm(formula = error^2 ~ yhat + yhat^2)

Residuals: Min 1Q Median 3Q Max -15.699 -11.436 -6.719 3.261 81.653

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 18.8496 3.3106 5.694 2.42e-08 ***yhat -0.5668 0.3162 -1.793 0.0738 .

Page 12: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17.68 on 398 degrees of freedomMultiple R-squared: 0.00801, Adjusted R-squared: 0.005517 F-statistic: 3.214 on 1 and 398 DF, p-value: 0.07379# R-squared คือ 0.00801wteststat <- 0.00801 * n# k is number of parameters in whitemodelk=3df <- k - 1## pchisq() is chisqure probability to accept H1pvalue=1 - pchisq(wteststat, df)[1] 0.2014931 #=====Breusch–Pagan test bpmodel <- lm(error^2~lnsalary+household+sex+price)summary(bpmodel)Call:lm(formula = error^2 ~ lnsalary + household + sex + price)

Residuals: Min 1Q Median 3Q Max -18.033 -10.679 -6.198 3.848 81.025

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 21.38825 4.05037 5.281 2.13e-07 ***lnsalary -5.92887 2.94148 -2.016 0.0445 * household -0.08769 1.21291 -0.072 0.9424 sex 1.31994 1.95237 0.676 0.4994 price -0.55866 0.27953 -1.999 0.0463 * ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17.64 on 395 degrees of freedomMultiple R-squared: 0.02063, Adjusted R-squared: 0.01071 F-statistic: 2.08 on 4 and 395 DF, p-value: 0.08265bpteststat <- 0.02063 * ndf <-k - 1## pchisq() is chisqure probability to accept H1pvalue=1 - pchisq(bpteststat, df)

Page 13: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

[1] 0.08277126หรอืเราอาจใช ้package เพื่อทดสอบก็ได้ ซึ่ง package นัน้คือ “lmtest” ดังนัน้การใช ้package ต้อง install.packages() ก่อน

library(lmtest)bptest0 = bptest(m2) studentized Breusch-Pagan test

data: m2BP = 8.3157, df = 4, p-value = 0.08067

จากผลการศึกษาขา้งต้นผลการทดสอบของ white และ Breusch–Pagan ใหผ้ล p-value เท่ากับ 0.2014931 และ 0.08277126 ซึ่งทำาใหเ้ราได้ผลท่ีแตกต่างกัน โดย white ใหเ้รายอมรบัสมมุติฐานหลักสว่น Breusch–Pagan ใหเ้ราปิเสธสมมุติฐานหลักด้วยระดับนัยสำาคัญท่ี 0.10 ดังนัน้เราได้ผลท่ีขดัแยง้ ซึ่งในกรณีเราต้องทำาการทดสอบด้วย test วธิอ่ืีนวา่ใหผ้ลอยา่งไร เพื่อยนืยนัเป็นเสยีงท่ีสามนัน่เอง วา่เราควรจะเชื่อใคร

แต่ถ้าสมมุติวา่เราต้องสรุปปัญหานี้ เราอาจใชห้ลักเกณฑ์ระดับนัยสำาคัญท่ี 0.05 เราจะสรุปได้ทันทีเลยวา่ ค่า p-value ของ white และ Breusch–Pagan ใหป้ฎิเสธสมมุติฐานหลักทัง้คู่ และยอมรบัสมมุติฐานรองคือ ตัวแปร x บางตัวสมัพนัธก์ับ ค่า

ความคาดเคล่ือน error ดังนัน้ เกิดปัญหา ปัญหา Heteroscedasticity

เมื่อพบวา่แบบจำาลองเกิดปัญหา Heteroscedasticity เราจะแก้ปัญหาได้อยา่งไร เราสามารถได้ 3 วธิ ีคือ

1)วธิ ีlog-log

ซึ่งเป็นการ take log เขา้ไปในแบบจำาลองทกุตัวแปร ทัง้ y และ x แต่ในกรณีนี้จะใชไ้ด้ถ้า ตัวแปรของสมการมคี่ามากกวา่ 0 เท่านัน้ เพราะถ้าเรา log(0)=-Inf จะทำาใหเ้ราไปประมาณผลต่อไปไมไ่ด้

## 1) log-log modelm3=lm(log(lntravel)~log(lnsalary)+log(household)+log(sex)+log(price))Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :

Page 14: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

NA/NaN/Inf in 'x'In addition: Warning message:In log(lntravel) : NaNs produced

จากผลการศึกษาจะพบวา่เกิด Error ขึ้นก็เน่ืองจากตัวแปร sex มคี่า 0 อยูน่ัน่เอง ดังนัน้การแก้ปัญหาแบบนี้จงึทำาไมไ่ด้

2)วธิ ีRobust estimator

เนื่องจากปัญหา Heteroscedasticity นัน้จะทำาใหเ้กิดปัญหาการประมาณ ท่ีไมถ่กูต้องได้ ดังนัน้จะทำาใหเ้ราคำานวณ T-test F-test หรอื P-value ผิดไปด้วย ดังนัน้วธิกีารนี้คือการคำานวณ ท่ีมคีวามแมน่ยำามากขึ้นนัน่เอง โดยในกรณีเราจะใช ้package “MASS” มาชว่ยในการคำานวณ

## 2) Robust estimationlibrary(MASS)mod.huber <- rlm(lntravel~lnsalary+household+sex+price)summary(mod.huber)Call: rlm(formula = lntravel ~ lnsalary + household + sex + price)Residuals: Min 1Q Median 3Q Max -8.8071 -2.4482 -0.1499 2.4685 9.7841

Coefficients: Value Std. Error t value(Intercept) 0.1429 0.8577 0.1667lnsalary -0.8705 0.6229 -1.3975household 0.5394 0.2569 2.1002sex 0.1214 0.4134 0.2936price 0.8701 0.0592 14.6993

Residual standard error: 3.661 on 395 degrees of freedom

3)วธิ ีweighted lease squaresวธิสีดุท้ายเป็นวธิทีี่ได้รบัความนิยมมากท่ีสดุ คือเราจะทำาการขจดัปัญหา

Heteroscedasticity ซึ่งอยา่ลืมวา่ ซึ่งสาเหตกุ็คือมี

ฟงัก์ชนั Heteroscedasticity แฝงอยูใ่น

Page 15: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

หรอืก็คือ ดังนัน้วธิกีารน้ีคือเราต้องขจดั ใหไ้ด้นัน้เอง ดังนัน้

โดยที่

เราจะเหน็วา่ปัญหา Heteroscedasticity ทำาให้ตัวแปร y และ x ของเราม ี

แฝงหมดเลย ดังนัน้เราต้องขจดั ออกก่อนท่ีจะไปประมาณสมการด้วยวธิีการ OLS กล่าวคือสมการใหมข่องเราจะเป็น

(10)

ซึ่งในการเขยีน code เราสามารถใช ้lm() function ต่อไปนี้ แต่เราต้องมกีารถ่วงนำ้าหนัก weight เพื่อขจดั

ซึ่งในท่ีนี้เราจะสมมุติวา่

(11)

โดยที่

(12)

ดังนัน้เราต้องทำาการประมาณสมการท่ี 12 ก่อนเพื่อท่ีจะไปคำานวณสมการที่ 11 ต่อไป

เราสามารถเขยีน code ได้ดังนี้

## 5.3) Weighted least squaresm3=lm(lntravel~lnsalary+household+sex+price)error=residual(m3)hmodel=lm(log(error^2)~lnsalary+household+sex+price)h=exp(fitted(hmodel))glmodel <- lm(lntravel~lnsalary+household+sex+price, weight=1/sqrt(h))

Page 16: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

summary(glmodel)Call:lm(formula = lntravel ~ lnsalary + household + sex + price, weights = 1/sqrt(h))

Weighted Residuals: Min 1Q Median 3Q Max -6.0558 -1.7760 -0.1181 1.7143 7.5981

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.04960 0.83837 0.059 0.953 lnsalary -0.60969 0.60064 -1.015 0.311 household 0.49071 0.24957 1.966 0.050 * sex 0.08721 0.39230 0.222 0.824 price 0.87569 0.05666 15.454 <2e-16 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.573 on 395 degrees of freedomMultiple R-squared: 0.3851, Adjusted R-squared: 0.3789 F-statistic: 61.84 on 4 and 395 DF, p-value: < 2.2e-16

Page 17: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

Part 2: Binary linear regressionในกรณีเราจะใชข้อ้มูล Data 1 จาก databianry.xlsx โดยเราต้องทำาการสรา้งไฟลขอ้มูลของเราแยกออกมา โดยการเอาขอ้มูล Data1 แยกมาและ save ขอ้มูลน้ีใหอ้ยูใ่นรูปของ file.csv (comma delimited) โดยสมการท่ีเราจะทำาการประมาณ คือ

(13)

โดยที่

คือ การท่องเท่ียว ถ้าไปเท่ียว =1 และไมไ่ปเท่ียว =0

คือ log เงินเดือน

คือ จำานวนสมาชกิในครวัเรอืน

คือ เพศ

คือ ราคาตัว๋เครื่องบนิ

คือ log รายจา่ยของครอบครวั

ขัน้ตอนท่ี 1 การเอาขอ้มูลเขา้

ในการเอาขอ้มูลเขา้วธินีี้เราจะ save file ขอ้มูลของเราใหอ้ยูใ่นรูปของไฟล์ csv โดยเราจะใชส้ัง่ read.csv() สำาหรบัการเรยีกไฟล์ csv และใชค้ำาสัง่ file.choose() สำาหรบั browse หาไฟล์ขอ้มูลท่ีเรา save ไว ้ สำาหรบัคำาสัง่ attach() จะถกูใชเ้พื่อ

Page 18: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

ให ้R รจ็กัชื่อตัวแปรของเราทำาใหต่้อไปเราสามารถเรยีกชื่อตัวแปรท่ีเหมอืนชื่อท่ีเราตัง้ไวใ้นไฟล csv ได้เลย และคำาสัง่ head() คือเป็นการแสดงวา่ขอ้มูลสว่นหวัของขอ้มูลทำาใหเ้ราทราบวา่ขอ้มูลท่ีเราตัง้ชื่อมชีื่ออะไรบา้ง

data=read.csv(file.choose(), head=TRUE) attach(data) head(data)

ขัน้ตอนท่ี 2 การประมาณสมการถดถอยในสมการท่ี 13

ในขัน้ตอนนี้เราจะใชฟ้งัก์ชนัท่ีชื่อวา่ glm() ซึ่งเป็นฟงัก์ชนัการประมาณสมการ binary linear regression ด้วยวธิกีาร maximum likelihood estimator (MLE) นัน่เอง และคำาสัง่ summary() เป็นคำาสัง่เพื่อแสดงผลการประมาณทัง้หมด เชน่ T-test, F-test, p-value และ เป็นต้น

##========= linear model

logit=glm(travel~lnsalary+household+sex+price+lnexpense,family=binomial(link = "logit"))

summary(logit)

จาก code นี้แสดงวธิกีารทำา logit model ซึ่งถ้าอยากจะเปล่ียนเป็น probit model จะต้องแก้ link = "logit" ใหเ้ป็น link = "probit" แทนนัน่เอง

Call:glm(formula = travel ~ lnsalary + household + sex + price + lnexpense, family = binomial(link = "logit"))

Deviance Residuals: Min 1Q Median 3Q Max -1.07254 -0.13058 -0.06601 -0.03459 3.15200

Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -3.59858 3.12861 -1.150 0.2501 lnsalary -14.47857 9.39665 -1.541 0.1234 household -0.01777 0.82400 -0.022 0.9828 sex 0.95096 1.20605 0.788 0.4304 price -0.57624 0.23216 -2.482 0.0131 *lnexpense 34.56151 19.03783 1.815 0.0695 .---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Page 19: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

Null deviance: 53.758 on 399 degrees of freedomResidual deviance: 38.758 on 394 degrees of freedomAIC: 50.758

Number of Fisher Scoring iterations: 9

ขัน้ตอนท่ี 3 การเชค็ความน่าเชื่อถือของแบบจำาลอง

ในการเชค็ความน่าเชื่อถือของแบบจำาลองนี้มดัีงนี้ คือ

3.1) Multicollinearity test (Variance inflation factor: VIF test)

3.2) Omitted variable bias (Likelihood ratio test)

3.3) R-Squared และ Adjusted R-Squared3.4) Heteroscedasticity

แต่ในกรณีจะแสดง เฉพาะ Multicollinearity test, Omitted variable bias, และ R-Squared เท่านัน้

##========== Goodness of fit/ Robustness check## 1. Multicolinear (VIF)#install.packages("mctest")library(mctest)X=cbind(lnsalary,household,sex,price,lnexpense)imcdiag(x = X, y = travel)

## 2. Omitted variable bias (Likelihood ratio test)#H0=B5=0 #H1: H0 wronglogitr = glm(travel~lnsalary+household+sex+price,family=binomial(link = "logit"))logitu = glm(travel~lnsalary+household+sex+price+lnexpense,family=binomial(link = "logit"))

Lr=logLik(logitr)[1]Lu=logLik(logitu)[1]LRstat=2*(Lu-Lr)n=400ku=5 # number of parameters of restricted modelkr=4 # number of parameters of unrestricted modelq=ku-krpvalue=1 - pchisq(LRstat, q)pvalue

## 3. R-squaredlogit0 = glm(travel~1,family=binomial(link = "logit"))logit1 = glm(travel~lnsalary+household+sex+price,family=binomial(link = "logit"))

Page 20: wyamaka.files.wordpress.com  · Web viewการใช้ฟังก์ชันที่มีอยู่แล้วในโปรแกรม R เช่น min() max() mean()

L0=logLik(logit0)[1]L1=logLik(logit1)[1]R2=1-(L1/L0)

ขัน้ตอนท่ี 4 การแปลผลแบบจำาลอง

เนื่องจากเราไมส่ามารถแปลผลแบบจำาลอง logit หรอื probit ได้ในทันที เราจงึต้องทำาการแปลงผลการศึกษาโดยใชเ้ทคนิค ดังนี้

4.1 Marginal effects

## 4. Marginal effectlibrary("mfx")data=data.frame(travel,lnsalary,household,sex,price)mfx=logitmfx(formula=travel~lnsalary+household+sex+price,data=data)

4.2 Odd ratio

ในกรณีนี้เราสามารถเขยีน code โดยใชค้ำาสัง่ exp() เขา้ไปนี้ค่าพารามเิตอรท์ำาคำานวณมาได้นัน่เอง