โหลดแพ็คเกจที่จะต้องใช้ในแบบฝึกหัดนี้
library(psych)
library(car)
library(carData)
การวิเคราะห์ถดถอยพหุคูณนี้จะใช้ชุดข้อมูล Prestige
จากแพ็คเกจ
carData ข้อมูลชุดนี้มีอาชีพเป็น observation (แต่ละแถวแทนอาชีพหนึ่งอาชีพ
เคสเป็นระดับอาชีพ ไม่ใช่ระดับบุคคล) มีตัวแปรต่าง ๆ ดังนี้
education
= ระยะเวลาการศึกษาเฉลี่ยของผู้ประกอบอาชีพนั้น
income
= รายได้เฉลี่ยของผู้ประกอบอาชีพ หน่วยเป็นดอลลาห์
women
= ร้อยละของผู้หญิงในอาชีพ
prestige
= คะแนนมาตรความมีเกียรติ (Pineo-Porter prestige
score) ของอาชีพ
census
= รหัสอาชีพในสำมะโนประชากรของแคนาดา
type
= ประเภทของอาชีพ bc
= Blue Collar;
prof
= Professional, Managerial, and Technical;
wc
= White Collar
เราจะใช้คำสั่ง lm()
เพื่อสร้างโมเดลเชิงเส้นตรงทำนายความีเกียรติของอาชีพ prestige
ด้วย
education
, income
, และ women
# Import data
dat <- carData::Prestige
str(dat)
## 'data.frame': 102 obs. of 6 variables:
## $ education: num 13.1 12.3 12.8 11.4 14.6 ...
## $ income : int 12351 25879 9271 8865 8403 11030 8258 14163 11377 11023 ...
## $ women : num 11.16 4.02 15.7 9.11 11.68 ...
## $ prestige : num 68.8 69.1 63.4 56.8 73.5 77.6 72.6 78.1 73.1 68.8 ...
## $ census : int 1113 1130 1171 1175 2111 2113 2133 2141 2143 2153 ...
## $ type : Factor w/ 3 levels "bc","prof","wc": 2 2 2 2 2 2 2 2 2 2 ...
prestige.lm <- lm(prestige ~ education + income + women, data = dat)
summary(prestige.lm)
##
## Call:
## lm(formula = prestige ~ education + income + women, data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.8246 -5.3332 -0.1364 5.1587 17.5045
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.7943342 3.2390886 -2.098 0.0385 *
## education 4.1866373 0.3887013 10.771 < 2e-16 ***
## income 0.0013136 0.0002778 4.729 7.58e-06 ***
## women -0.0089052 0.0304071 -0.293 0.7702
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.846 on 98 degrees of freedom
## Multiple R-squared: 0.7982, Adjusted R-squared: 0.792
## F-statistic: 129.2 on 3 and 98 DF, p-value: < 2.2e-16
ค่า F ที่มีนัยสำคัญทางสถิติแสดงให้เห็นว่า ตัวแปร X ทั้ง 3 ตัว ร่วมกันทำนายตัวแปร Y ได้อย่างมีนัยสำคัญทางสถิติ (\(R^2 > 0\))
การวิเคราะห์นี้มี intercept 1 ตัว (\(b_0\)) และสัมประสิทธิ์ถดถอย 3 ตัว ได้แก่ \(b_{education}\), \(b_{income}\), \(b_{women}\) ดังนั้น \(df = N - k -1 = 102 - 3 -1 = 98\)
ในการวิเคราะห์นี้พบตัวแปรทำนายที่สัมพันธ์กับ Y อย่างมีนัยสำคัญทางสถิติ คือ
education
และ income
ในขณะที่ women
ไม่พบความสัมพันธ์อย่างมีนัยสำคัญ
ค่าสัมประสิทธิ์แต่ละตัวถูกทดสอบว่าแตกต่างจาก 0 หรือไม่ \(H_0: b ≠ 0\) โดยนำค่า b
(Estimate
) ไปหารด้วยความคลาดเคลื่อน Std. Error
จะได้ค่า t value
และค่า p-value Pr(>|t|)
ค่าสัมประสิทธิ์เหล่านี้เป็นอยู่ในหน่วยของคะแนนดิบ หากต้องการเปรียบเทียบนำ้หนักของแต่ละตัวแปรในโมเดลนี้ ต้องใช้ค่าสัมประสิทธิ์มาตรฐาน (standardized coefficients)
ค่า standardized coefficients จริง ๆ แล้วก็คือ การนำค่าตัวแปรทุกตัวไปแปลงเป็น standard score (z-scores) ก่อนแล้วนำมาใส่ในโมเดล ดังนั้นเราสามารถคำนวณค่า standardized coefficient เองได้ด้วย
prestige.zlm <- lm(scale(prestige) ~ scale(education) + scale(income) + scale(women), data = dat)
summary(prestige.zlm)
##
## Call:
## lm(formula = scale(prestige) ~ scale(education) + scale(income) +
## scale(women), data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.15229 -0.30999 -0.00793 0.29984 1.01744
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.258e-16 4.516e-02 0.000 1.00
## scale(education) 6.640e-01 6.164e-02 10.771 < 2e-16 ***
## scale(income) 3.242e-01 6.855e-02 4.729 7.58e-06 ***
## scale(women) -1.642e-02 5.607e-02 -0.293 0.77
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4561 on 98 degrees of freedom
## Multiple R-squared: 0.7982, Adjusted R-squared: 0.792
## F-statistic: 129.2 on 3 and 98 DF, p-value: < 2.2e-16
หากเรา plot(model)
โปรแกรม R
จะแสดงกราฟที่ใช้เพื่อวินิจฉัยโมเดลมาให้
กราฟ Residuals vs Fitted
ใช้ตรวจสอบ linearity assumption
กราฟจะแสดงค่า \(\hat{Y}\) (Fitted) และ
\(e\) (Residuals)
หากความสัมพันธ์ระหว่างผลรวมเชิงเส้นตรงของตัวแปร X สัมพันธ์ทางบวกกับ Y
เส้นสีแดงจะเป็นเส้นตรงตามเส้นประ
กราฟ Normal Q-Q
ใช้ดู normality ของ residuals
หากความคลาดเคลื่อนมีการกระจายตัวเป็นปกติ จุดคะแนนต่าง ๆ จะเรียงตัวอยู่บนเส้นแทยง
กราฟ Scale-Location
หรือ Spread-Location ใช้ตรวจสอบ
homoscedasticity (homogeneity of variance สำหรับ regression)
ความแปรปรวนของ residual ควรเท่ากันในทุกช่วงคะแนน \(\hat{Y}\) ดังนั้นการกระจายของจุดต่าง ๆ จะกว้างพอ
ๆ กันตลอดแกน X ทำให้ได้เส้นสีแดงที่เป็นเส้นตรงแนวนอน
กราฟ Residuals vs Leverage
แสดงถึงข้อมูลสุดโต่งหรือข้อมูลที่มีอิทธิพลต่อโมเดลอย่างมาก
ข้อมูลที่มีอิทธิพลสูงนี้สามารถทำให้ความชันของสมการเปลี่ยนแปลงไปได้ หากมีหรือไม่มีข้อมูลจุดนั้นอยู่
กรณีที่สุดโต่งจะมีค่า Leverage สูงแยกออกมาจากข้อมูลส่วนใหญ่
plot(prestige.lm)
คำสั่ง plot()
นี้ทำให้เราเห็น assumption ต่าง ๆ
ของโมเดลในภาพรวม แต่ยังไม่ช่วยบอกว่าตัวแปร X
ตัวใดที่อาจจะเป็นต้นเหตุของปัญหา
เราสามารถใช้คำสั่ง residualPlots()
ในแพ็คเกจ car เพื่อตรวจสอบ
linearity assumption เป็นรายตัวแปร X ได้ นอกจากนี้คำสั่งจะให้ค่าทดสอบของ
Tukey’s nonadditivity test มาด้วย หากมีนัยสำคัญทางสถิติแสดงว่าความสัมพันธ์ของตัวแปร
X นั้นกับ Y ไม่เป็นเส้นตรง
ลองพิจารณาค่าสถิติและกราฟดูว่าตัวแปรใดน่าจะต้นเหตุของ nonlinearity ในโมเดลนี้
residualPlots(prestige.lm)
## Test stat Pr(>|Test stat|)
## education 1.3268 0.1877
## income -4.2815 4.366e-05 ***
## women 1.4427 0.1523
## Tukey test -1.4169 0.1565
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
อย่างไรก็ดี การใช้ตาตรวจดูค่าความผิดปกติต่าง ๆ อาจมีอคติหรือข้อผิดพลาด ทำให้ตัดสินใจผิดพลาดได้ว่าข้อมูลที่เป็นปัญหา คือ จุดใด ดังนั้นวิธีการตรวจทางสายตาจึงควรใช้ควบคู่กับการทดสอบด้วย
เลฟเวอเรจ (leverage) คือ กรณีที่ค่าของตัวแปรทำนาย \(X_i\) นั้นมีระยะห่างจากค่าเฉลี่ย \(\bar{X}\) อย่างมาก (ไม่เกี่ยวกับค่า Y) ในแบบฝึกหัดที่ผ่าน ๆ มา เราได้ใช้วิธีแปลงคะแนนค่า X เป็นคะแนนมาตรฐาน (z score) เพื่อดูว่าค่านั้นสุดโต่งหรือไม่ นี่คือแนวคิดของการหา univariate outlier คือพิจารณาค่าสุดโต่งของตัวแปรเดียว (ไม่พิจารณาร่วมกับตัวแปรอื่น) หากเรานำค่า z ที่ได้ไปยกกำลังสอง เราจะได้สูตรดังนี้
\[ Z^2_{X_i} = \bigg{(}\frac{X_i - \bar{X}}{s_{X}^2}\bigg{)}^2 \]
เนื่องจากค่า \(Z^2\) เป็นค่าทางบวกเสมอที่แสดงถึงความห่างของค่าคะแนน \(X_i\) จากค่าเฉลี่ย \(\bar{X}\) โดยปกติแล้วเราจะใช้เกณฑ์ที่ ±3 SD เป็นจุดตัดของค่าสุดโต่ง
แต่ในกรณีของการถดถอยพหุคูณ (multiple regression; MR) ค่าตัวแปร X ที่สุดโต่งอาจต้องพิจารณาร่วมกับตัวแปร X อื่น ๆ ด้วย เช่น คนที่สูง 180 อาจจะไม่นับว่าเป็นค่าสุดโต่งในชุดข้อมูล แต่ผู้หญิงที่สูง 180 เป็นค่าที่มีเลฟเวอเรจสูง (พิจารณาตัวแปรเพศและความสูงร่วมกันแล้วมีโอกาสเกิดขึ้นน้อย) เนื่องจากต้องพิจารณาหลายตัวแปรร่วมกันจึงเรียกว่าเป็น multivariate outlier โดยค่าสถิติที่ใช้พิจารณาก็พัฒนาต่อเนื่องมาจากสูตรด้านบนโดยใช้พีชคณิตเมทริกซ์ ได้เป็นค่าที่เรียกว่า Mahalanobis distance
เราจะใช้คำสั่ง
outlier(x, plot = TRUE, bad = 5, na.rm = TRUE)
ในแพ็คเกจ
psych
x
คือ ชุดตัวแปร X
plot
คือต้องการให้สร้างกราฟ QQ หรือไม่ (ค่าตั้งต้น = TRUE)
bad
คือ ให้แสดงเคสที่มีปัญหาบนกราฟ (ค่าตั้งต้น = 5
ตัวที่มีปัญหามากที่สุด)
na.rm
คือ ให้ลบข้อมูลที่มี missing ทิ้ง (ค่าตั้งต้น = TRUE)
predictors <- dat[c("education", "income", "women")]
dat$maha_dis <- psych::outlier(predictors)
head(dat)
## education income women prestige census type maha_dis
## gov.administrators 13.11 12351 11.16 68.8 1113 prof 1.7323152
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.5731939
## accountants 12.77 9271 15.70 63.4 1171 prof 0.7825381
## purchasing.officers 11.42 8865 9.11 56.8 1175 prof 0.4787457
## chemists 14.62 8403 11.68 73.5 2111 prof 3.6997050
## physicists 15.64 11030 5.13 77.6 2113 prof 4.4454380
#calculate p value for Mahalanobis distance with Chi-square test with df = k- 1, where k = number of variables.
dat$maha_p <- pchisq(dat$maha_dis, df = 2, lower.tail = FALSE) # We only look for large MD. Therefore, only upper tail of distribution.
head(dat)
## education income women prestige census type maha_dis maha_p
## gov.administrators 13.11 12351 11.16 68.8 1113 prof 1.7323152 4.205644e-01
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.5731939 5.124761e-08
## accountants 12.77 9271 15.70 63.4 1171 prof 0.7825381 6.761982e-01
## purchasing.officers 11.42 8865 9.11 56.8 1175 prof 0.4787457 7.871214e-01
## chemists 14.62 8403 11.68 73.5 2111 prof 3.6997050 1.572604e-01
## physicists 15.64 11030 5.13 77.6 2113 prof 4.4454380 1.083142e-01
dat[dat$maha_p < .001, ] # cases with p < .001 are considered outliers.
## education income women prestige census type maha_dis maha_p
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.57319 5.124761e-08
## physicians 15.96 25308 10.56 87.2 3111 prof 23.60481 7.486533e-06
อย่างไรก็ดีค่าสถิติอีกตัวหนึ่งที่ทำหน้าที่เหมือนกับ Mahalanobis distance จะเป็นที่นิยมมากกว่า นั่นคือค่า h values หรือ hat values
ค่า h values จะอยู่ระหว่าง 0 ถึง 1 ทำให้อ่านค่าและกำหนดเกณฑ์ได้ง่ายกว่ามาก โดยมักจะกำหนดให้ค่า hat ต้องไม่เกิน \(2p/n\) โดย p คือ จำนวน parameters ของโมเดล (จำนวน coefficients) และ n คือ จำนวนกลุ่มตัวอย่าง
dat$hat <- hatvalues(prestige.lm)
head(dat)
## education income women prestige census type maha_dis maha_p hat
## gov.administrators 13.11 12351 11.16 68.8 1113 prof 1.7323152 4.205644e-01 0.02695556
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.5731939 5.124761e-08 0.34221178
## accountants 12.77 9271 15.70 63.4 1171 prof 0.7825381 6.761982e-01 0.01755182
## purchasing.officers 11.42 8865 9.11 56.8 1175 prof 0.4787457 7.871214e-01 0.01454398
## chemists 14.62 8403 11.68 73.5 2111 prof 3.6997050 1.572604e-01 0.04643466
## physicists 15.64 11030 5.13 77.6 2113 prof 4.4454380 1.083142e-01 0.05381816
p = 3
hat_cutoff <- 2*p/nrow(dat)
high_leverage_cases <- subset(dat, subset = hat > hat_cutoff)
high_leverage_cases
## education income women prestige census type maha_dis maha_p hat
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.573194 5.124761e-08 0.34221178
## lawyers 15.77 19263 5.13 82.3 2343 prof 8.992782 1.114916e-02 0.09884136
## ministers 14.50 4686 4.14 72.8 2511 prof 9.325301 9.441403e-03 0.10213364
## physicians 15.96 25308 10.56 87.2 3111 prof 23.604809 7.486533e-06 0.24351491
## osteopaths.chiropractors 14.71 17498 6.91 68.4 3117 prof 6.614742 3.661230e-02 0.07529642
## newsboys 9.62 918 7.00 14.8 5143 <NA> 5.530371 6.296442e-02 0.06456007
## sewing.mach.operators 6.38 2847 90.67 28.2 8563 bc 8.889789 1.173835e-02 0.09782163
แม้เราจะพบว่ามีกรณีที่ข้อมูลมี leverage สูง แต่ก็ไม่ได้หมายความว่า ค่าเหล่านั้นจะส่งผลต่อโมเดลเสมอไป การตรวจ leverage นี้อาจใช้เพื่อตรวจสอบความถูกต้องของข้อมูลในเบื้องต้น เพื่อดูว่ามีกรณีที่ผิดปกติหรือมีการกรอกข้อมูลผิดหรือไม่ หากข้อมูลไม่ได้มีความผิดปกติอะไร เราอาจเก็บข้อมูลนั้นไว้ก่อนเพื่อไปตรวจสอบ influence ในภายหลัง
Distance คือ ระยะห่างของค่า Y แต่ละตัวจากค่า \(\hat{Y}\) (ค่า Y ทำนาย; predicted Y) นั่นก็คือค่าที่ทำให้เกิดความคลาดเคลื่อนในการทำนายสูง (residual)
เคสที่มี distance สูงจะทำให้ความคลาดเคลื่อนของโมเดลสูงไปด้วย และทำให้โมเดลไม่ fit กับข้อมูล (เช่น \(R^2\) น้อยกว่าที่ควรจะเป็น)
วิธีตรวจสอบว่า residual นั้นมีขนาดใหญ่จนผิดปกติหรือไม่ ทำโดยการแปลง residual เป็น t-score แล้วเปรียบเทียบกับ t-distribution ค่านี้มีชื่อเรียกว่า Studentized residual (มาจากชื่อ Student’s t distribution) ซึ่งเหมาะสำหรับกลุ่มตัวอย่างที่ไม่ใหญ่มาก หากกลุ่มตัวอย่างใหญ่มากจะใช้วิธีแปลงเป็น z-score เทียบกับ normal distribution และเรียกว่า standardized residual
เมื่อแปลงเป็นค่าคะแนน t แล้ว หากทดสอบพบว่าระดับนัยสำคัญ ก็แสดงว่าเป็น outlier
แพ็คเกจ car มีคำสั่งที่ชื่อว่า outlierTest()
outlierTest(prestige.lm)
## No Studentized residuals with Bonferroni p < 0.05
## Largest |rstudent|:
## rstudent unadjusted p-value Bonferroni p
## newsboys -2.694442 0.0083101 0.84763
ในโมเดลนี้ newsboys เป็นอาชีพที่มี Studentized residual สูงที่สุด แต่ไม่ถึงระดับนัยสำคัญโดยดูจาก Bonferroni p จึงยังไม่ถือว่าเป็นข้อมูลสุดโต่งในตัวแปร Y
Influence คือ อิทธิพลที่เคสนั้นมีต่อสมการถดถอย นั่นคือ ถ้าเคสนี้หายไปค่า b จะเปลี่ยนไปเท่าใด
ค่าที่มี leverage หรือ distance สูงอาจจะไม่ได้ส่งผลต่อโมเดลการถดถอยพหุคูณเสมอไป ค่าเหล่านี้จะทำให้ผลการวิเคราะห์ผิดเพี้ยนไปได้ก็เมื่อค่าเหล่านั้นมีอิทธิพล (influence) ต่อสัมประสิทธิ์ถดถอย นั่นคือ ข้อมูลกรณีนี้ทำให้เกิดการเปลี่ยนแปลงของเส้น fitted line อย่างมาก
ค่า Cook’s distance ใช้บอกระดับอิทธิพลของเคสต่อผลการวิเคราะห์ถดถอย (ชื่ออาจทำให้สับสน เพราะเรียกว่า distance แต่ใช้วัด influence) โดยปกติแล้วค่า Cook’s d ที่มากกว่า 0.5 หรือ 1.0 จะถือว่าเป็นกรณีที่ต้องพิจารณาอย่างระมัดระวัง
dat$cook <- cooks.distance(prestige.lm)
head(dat)
## education income women prestige census type maha_dis maha_p hat
## gov.administrators 13.11 12351 11.16 68.8 1113 prof 1.7323152 4.205644e-01 0.02695556
## general.managers 12.26 25879 4.02 69.1 1130 prof 33.5731939 5.124761e-08 0.34221178
## accountants 12.77 9271 15.70 63.4 1171 prof 0.7825381 6.761982e-01 0.01755182
## purchasing.officers 11.42 8865 9.11 56.8 1175 prof 0.4787457 7.871214e-01 0.01454398
## chemists 14.62 8403 11.68 73.5 2111 prof 3.6997050 1.572604e-01 0.04643466
## physicists 15.64 11030 5.13 77.6 2113 prof 4.4454380 1.083142e-01 0.05381816
## cook
## gov.administrators 0.002428267
## general.managers 0.283269734
## accountants 0.001626121
## purchasing.officers 0.001082658
## chemists 0.013779919
## physicists 0.004882702
subset(dat, subset = cook > .5) # No Cook's D more than 0.5
## [1] education income women prestige census type maha_dis maha_p hat cook
## <0 rows> (or 0-length row.names)
plot(prestige.lm, 4:5) # plot 4-5 of the model shows Cook's D & leverage
คำสั่ง influenceIndexPlot()
ใน car จะช่วย plot
กราฟสำหรับตรวจสอบ influence, distance และ leverage
influenceIndexPlot(prestige.lm)
ในการวิเคราะห์นี้ กรณีอาชีพ general.managers มีทั้ง Cook’s distance (influence) และ hat-values (distance) สูงที่สุดทั้งคู่ แต่ทว่ายังไม่ถึงเกณฑ์ที่ควรจะต้องตัดข้อมูลทิ้ง
อย่างไรก็ดีเราลองลบอาชีพนี้ออกแล้ว วิเคราะห์ใหม่ดูว่าผลเปลี่ยนไปอย่างไร
re_dat <- dat[row.names(dat) != "general.managers", ]
re.lm <- lm(prestige ~ education + income + women, re_dat)
summary(re.lm)
##
## Call:
## lm(formula = prestige ~ education + income + women, data = re_dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18.2210 -4.9874 -0.0928 4.9497 17.7093
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.4582585 3.2273074 -2.001 0.0482 *
## education 3.9469041 0.4187139 9.426 2.33e-15 ***
## income 0.0016007 0.0003371 4.749 7.07e-06 ***
## women 0.0058119 0.0318057 0.183 0.8554
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.799 on 97 degrees of freedom
## Multiple R-squared: 0.7993, Adjusted R-squared: 0.7931
## F-statistic: 128.8 on 3 and 97 DF, p-value: < 2.2e-16
influenceIndexPlot(re.lm)
สังเกตว่าค่า \(R^2\) เพิ่มขึ้นเล็กน้อยเมื่อเทียบกับโมเดลก่อนที่จะตัดข้อมูล แสดงให้เห็นว่าการตัดข้อมูลดังกล่าวช่วยให้โมเดลอธิบายข้อมูลได้ดีขึ้น (better fit) แต่ก็เล็กน้อยมาก เพราะผลการวิเคราะห์ในภาพรวมไม่ได้มีอะไรเปลี่ยนแปลงไป ช่วยยืนยันว่าในข้อมูลชุดนี้ไม่มีเคสที่จำเป็นต้องตัดทิ้ง
ตรวจสอบข้อสมมติพื้นฐานของการวิเคราะห์ถดถอยแต่ละตัวด้วยคำสั่งดังต่อไปนี้
คำสั่ง crPlots()
จาก car ใช้ plot เพื่อสังเกต nonlinearity
ระหว่างตัวแปร X แต่ละตัวกับ Y
คำสั่ง ncvTest()
ใช้ทดสอบ nonconstant variance
ผลการทดสอบที่มีนัยสำคัญแสดงให้เห็นว่าความสัมพันธ์ไม่ได้คงที่เป็นเส้นตรง
#car
crPlots(prestige.lm)
ncvTest(prestige.lm)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 0.2490143, Df = 1, p = 0.61777
คำสั่ง qqPlot()
ของ car (สังเกตว่าใช้ P ตัวใหญ่
แตกต่างจากคำสั่งของ base R) ใช้ plot เพื่อดูว่า residual กระจายตัวเป็นปกติหรือไม่
โดยปกติแล้วสถิติ F นั้นแกร่งต่อการละเมิด normality assumption ถ้าผลไม่ได้ต่างไปจาก normal มากนัก ก็สามารถวิเคราะห์ด้วย regression ได้ตามปกติ แต่ถ้าหากมีการกระจายตัวไม่เป็น normal อาจจะต้อง transform ตัวแปรบางตัวก่อน
# Base R
plot(prestige.lm, 2)
# car
car::qqPlot(prestige.lm)
## newsboys farmers
## 53 67
การทดสอบค่าความแปรปรวนของ residual เท่าเทียมกันในทุกช่วงคะแนนทำนายหรือไม่
ใช้คำสั่ง spreadLevelPlot()
ของ car
# Base R
plot(prestige.lm, 3)
# car
spreadLevelPlot(prestige.lm)
##
## Suggested power transformation: 1.12183
กรณีที่ข้อมูลของกลุ่มตัวอย่างแต่ละคนไม่เป็นอิสระจากกัน การให้ regression ปกติจะไม่เหมาะสม ควรใช้สถิติที่โมเดลข้อมูลที่ไม่เป็นอิสระจากกันได้ เช่น multi-level modeling (MLM) เป็นต้น
อีกหนึ่ง assumption ของ regression คือ ตัวแปร X นั้นไม่สัมพันธ์กันเอง
เราสามารถตรวจสอบระดับความสัมพันธ์ระหว่างตัวแปร X ในโมเดลด้วยคำสั่ง
vif()
ซึ่งจะทำให้ได้ค่า variance inflation factors
เกณฑ์ VIF นั้นมีหลากหลายมาก ตั้งแต่ ควรมีค่า VIF น้อยกว่า 2.5, น้อยกว่า 3, น้อยกว่า 5, น้อยกว่า 10 เป็นต้น การพิจารณาเรื่อง multi-collinearity จึงต้องพิจารณาบริบทของตัวแปรทำนายด้วยว่า มีความทับซ้อนกันมากน้อยเพียงใด เหมาะสมที่จะตัดตัวหนึ่งตัวใดออกไปหรือไม่ หรือทฤษฎีระบุไว้ว่าต้องพิจารณาทั้งสองตัวควบคู่กัน
vif(prestige.lm)
## education income women
## 1.845165 2.282038 1.526593
Copyright © 2022 Kris Ariyabuddhiphongs