Hướng dẫn phân tích số liệu và vẽ biểu đồ bằng R

Vietsciences- Nguyễn Văn Tuấn         29/04/2009

 

10

Phân tích hồi qui tuyến tính 
 

Phân tích hồi qui tuyến tính (linear regression analysis) có lẽ là một trong những phương pháp phân tích số liệu thông dụng nhất trong thống kê học. Có người từng viết “Cho con người 3 vũ khí – hệ số tương quan, hồi qui tuyến tính và một cây bút, con người sẽ sử dụng cả ba”!  Trong chương này, tôi sẽ giới thiệu cách sử dụng R để phân tích hồi qui tuyến tính và các phương pháp liên quan như hệ số tương quan và kiểm định giả thiết thống kê.  
 

Ví dụ 1. Để minh họa cho vấn đề, chúng ta thử xem xét nghiên cứu sau đây, mà trong đó nhà nghiên cứu đo lường độ cholestrol trong máu của 18 đối tượng nam. Tỉ trọng cơ thể (body mass index) cũng được ước tính cho mỗi đối tượng bằng công thức tính BMI là lấy trọng lượng (tính bằng kg) chia cho chiều cao bình phương (m2). Kết quả đo lường như sau:  
 

Bảng 1.  Độ tuổi, tỉ trọng cơ thể và cholesterol 

 
 Nhìn sơ qua số liệu chúng ta thấy người có độ tuổi càng cao độ cholesterol cũng càng cao. Chúng ta thử nhập số liệu này vào R và vẽ một biểu đồ tán xạ như sau:

> age <- c(46,20,52,30,57,25,28,36,22,43,57,33,

           22,63,40,48,28,49) 
 

> bmi <-c(25.4,20.6,26.2,22.6,25.4,23.1,22.7,24.9,

          19.8,25.3,23.2,21.8,20.9,26.7,26.4,21.2,

          21.2,22.8) 
 

> chol <- c(3.5,1.9,4.0,2.6,4.5,3.0,2.9,3.8,

            2.1,3.8,4.1,3.0, 2.5,4.6,3.2,

            4.2,2.3,4.0) 
 

> data <- data.frame(age, bmi, chol)

> plot(chol ~ age, pch=16) 

 
Biểu đồ 10.1.  Liên hệ giữa độ tuổi và cholesterol.

Biểu đồ 10.1 trên cho thấy mối liên hệ giữa độ tuổi (age) và cholesterol là một đường thẳng (tuyến tính). Để “đo lường” mối liên hệ này, chúng ta có thể sử dụng hệ số tương quan (coefficient of correlation).  
 

10.1  Hệ số tương quan  
 

Hệ số tương quan (r) là một chỉ số thống kê đo lường mối liên hệ tương quan giữa hai biến số, như giữa độ tuổi (x) và cholesterol (y). Hệ số tương quan có giá trị từ -1 đến 1. Hệ số tương quan bằng 0 (hay gần 0) có nghĩa là hai biến số không có liên hệ gì với nhau; ngược lại nếu hệ số bằng -1 hay 1 có nghĩa là hai biến số có một mối liên hệ tuyệt đối. Nếu giá trị của hệ số tương quan là âm (r <0) có nghĩa là khi x tăng cao thì y giảm (và ngược lại, khi x giảm thì y tăng); nếu giá trị hệ số tương quan là dương (r > 0) có nghĩa là khi x tăng cao thì y cũng tăng, và khi x giảm cao thì y cũng giảm theo.

Thực ra có nhiều hệ số tương quan trong thống kê, nhưng ở đây tôi sẽ trình bày 3 hệ số tương quan thông dụng nhất: hệ số tương quan Pearson r, Spearman r, và Kendall t.


 

10.1.1  Hệ số tương quan Pearson

            Cho hai biến số x y từ n mẫu, hệ số tương quan Pearson được ước tính bằng công thức sau đây:

 

Trong đó, như định nghĩa phần trên,  và  là giá trị trung bình của biến số x y. Để ước tính hệ số tương quan giữa độ tuổi age và cholesterol, chúng ta có thể sử dụng hàm cor(x,y) như sau:

 

> cor(age, chol)

[1] 0.936726

 

Chúng ta có thể kiểm định giả thiết hệ số tương quan bằng 0 (tức hai biến xy không có liên hệ). Phương pháp kiểm định này thường dựa vào phép biến đổi Fisher mà R đã có sẵn một hàm cor.test để tiến hành việc tính toán.

> cor.test(age, chol)

 

Pearson's product-moment correlation

data:  age and chol

t = 10.7035, df = 16, p-value = 1.058e-08

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

 0.8350463 0.9765306

sample estimates:

     cor

0.936726

 

Kết quả phân tích cho thấy kiểm định t = 10.70 với trị số p=1.058e-08; do đó, chúng ta có bằng chứng để kết luận rằng mối liên hệ giữa độ tuổi và cholesterol có ý nghĩa thống kê.  Kết luận này cũng chính là kết luận chúng ta đã đi đến trong phần phân tích hồi qui tuyến tính trên.

 

10.1.2  Hệ số tương quan Spearman r

Hệ số tương quan Pearson chỉ hợp lí nếu biến số x y tuân theo luật phân phối chuẩn. Nếu x y không tuân theo luật phân phối chuẩn, chúng ta phải sử dụng một hệ số tương quan khác tên là Spearman, một phương pháp phân tích phi tham số. Hệ số này được ước tính bằng cách biến đổi hai biến số x y thành thứ bậc (rank), và xem độ tương quan giữa hai dãy số bậc. Do đó, hệ số còn có tên tiếng Anh là Spearman’s Rank correlation. R ước tính hệ số tương quan Spearman bằng hàm cor.test với thông số method=”spearman” như sau:

 

> cor.test(age, chol, method="spearman")

 

Spearman's rank correlation rho

data:  age and chol

S = 51.1584, p-value = 2.57e-09

alternative hypothesis: true rho is not equal to 0

sample estimates: rho = 0.947205

Warning message:

Cannot compute exact p-values with ties in: cor.test.default(age, chol, method = "spearman")

 

Kết quả phân tích cho thấy giá trị rho=0.947, và trị số p=0.00000000257. Kết quả từ phân tích này cũng không khác với phân tích hồi qui tuyến tính: mối liên hệ giữa độ tuổi và cholesterol rất cao và có ý nghĩa thống kê.

 

10.1.3  Hệ số tương quan Kendall t

 

Hệ số tương quan Kendall (cũng là một phương pháp phân tích phi tham số) được ước tính bằng cách tìm các cặp số (x, y) “song hành" với nhau. Một cặp (x, y) song hành ở đây được định nghĩa là hiệu (độ khác biệt) trên trục hoành có cùng dấu hiệu (dương hay âm) với hiệu trên trục tung. Nếu hai biến số x y không có liên hệ với nhau, thì số cặp song hành bằng hay tương đương với số cặp không song hành.

 

Bởi vì có nhiều cặp phải kiểm định, phương pháp tính toán hệ số tương quan Kendall đòi hỏi thời gian của máy tính khá cao. Tuy nhiên, nếu một dữ liệu dưới 5000 đối tượng thì một máy vi tính có thể tính toán khá dễ dàng. R dùng hàm cor.test với thông số method=”kendall” để ước tính hệ số tương quan Kendall:

 

> cor.test(age, chol, method="kendall")

 

Kendall's rank correlation tau

data:  age and chol

z = 4.755, p-value = 1.984e-06

alternative hypothesis: true tau is not equal to 0

sample estimates:

      tau

0.8333333

Warning message:

Cannot compute exact p-value with ties in: cor.test.default(age, chol, method = "kendall")

 

Kết quả phân tích hệ số tương quan Kendall một lần nữa khẳng định mối liên hệ giữa độ tuổi và cholesterol có ý nghĩa thống kê, vì hệ số tau = 0.833 và trị số p = 1.98e-06.

 

Các hệ số tương quan trên đây đo mức độ tương quan giữa hai biến số, nhưng không cho chúng ta một phương trình để nối hai biến số đó với nhau. Do đó, vấn đề đặt ra là chúng ta tìm một phương trình tuyến tính để mô tả mối liên hệ này. Chúng ta sẽ ứng dụng mô hình hồi qui tuyến tính. 

 

10.2  Mô hình hồi qui tuyến tính đơn giản

 

10.2.1  Vài hàng lí thuyết

 

            Để tiện việc theo dõi và mô tả mô hình, gọi độ tuổi cho cá nhân ixi và cholesterol là yi. Ở đây i = 1, 2, 3, …, 18. Mô hình hồi qui tuyến tính phát biểu rằng:

         [1]

Nói cách khác, phương trình trên giả định rằng độ cholesterol của một cá nhân bằng một hằng số a cộng với một hệ số b liên quan đến độ tuổi, và một sai số ei. Trong phương trình trên, achặn (intercept, tức giá trị lúc xi =0), và  b là độ dốc (slope hay gradient). Trong thực tế, a b là hai thông số (paramater, còn gọi là regression coefficient hay hệ số hồi qui), và ei là một biến số theo luật phân phối chuẩn với trung bình 0 và phương sai s2.

 

Các thông số a, b s2 phải được ước tính từ dữ liệu. Phương pháp để ước tính các thông số này là phương pháp bình phương nhỏ nhất (least squares method). Như tên gọi, phương pháp bình phương nhỏ nhất tìm giá trị a, b sao cho  nhỏ nhất. Sau vài thao tác toán, có thể chứng minh dễ dàng rằng, ước số cho a b đáp ứng điều kiện đó là:

         [2]

                [3]

 

Ở đây,  và  là giá trị trung bình của biến số x y. Chú ý, chúng ta viết  và (với dấu mũ phía trên) là để nhắc nhở rằng đây là hai ước số (estimates) của a b, chứ không phải a b (chúng ta không biết chính xác a b, nhưng chỉ có thể ước tính mà thôi). 

 

            Sau khi đã có ước số, chúng ta có thể ước tính độ cholesterol trung bình cho từng độ tuổi như sau:

Tất nhiên,  ở đây chỉ là số trung bình cho độ tuổi xi, và phần còn lại (tức -) gọi là phần dư (hay residual). Và phương sai của phần dư có thể ước tính như sau:

 

        [4]

s2 chính là ước số của s2.

 

            Trong phân tích hồi qui tuyến tính, thông thường chúng ta muốn biết hệ số b = 0 hay khác 0. Nếu b bằng 0, thì , tức là những khác biệt giữa các đối tượng về cholesterol chỉ xoay quanh số trung bình và sai số ngẫu nhiên e, hay nói cách khác, không có mối liên hệ gì giữa x y; nếu b khác với 0, chúng ta có bằng chứng để phát biểu rằng x y có liên quan nhau. Để kiểm định giả thiết b = 0 chúng ta dùng xét nghiệm t sau đây:

           [5]

 có nghĩa là sai số chuẩn (standard error) của ước số . Trong phương trình trên, t tuân theo luật phân phối t với bậc tự do n-2 (nếu thật sự b = 0).

10.2.2  Phân tích hồi qui tuyến tính đơn giản bằng R

 

            Hàm lm (viết tắt từ linear model) trong R có thể tính toán các giá trị của  và, cũng như s2 một cách nhanh gọn. Chúng ta tiếp tục với ví dụ bằng R như sau:

> lm(chol ~ age)

 

Call:

lm(formula = chol ~ age)

 

Coefficients:

(Intercept)          age 

    1.08922      0.05779

Trong lệnh trên, “chol ~ age” có nghĩa là mô tả chol là một hàm số của age.  Kết quả tính toán của lm cho thấy =1.0892 và=0.05779.  Nói cách khác, với hai thông số này, chúng ta có thể ước tính độ cholesterol cho bất cứ độ tuổi nào trong khoảng tuổi của mẫu bằng phương trình tuyến tính:

 

= 1.08922 + 0.05779 x age

Phương trình này có nghĩa là khi độ tuổi tăng 1 năm thì độ cholesterol tăng khoảng 0.058 mmol/L. 

Thật ra, hàm lm còn cung cấp cho chúng ta nhiều thông tin khác, nhưng chúng ta phải đưa các thông tin này vào một object. Gọi object đó là reg, thì lệnh sẽ là: 

> reg <- lm(chol ~ age)

> summary(reg)

 

Call: lm(formula = chol ~ age)

 

Residuals:

     Min       1Q   Median       3Q      Max

-0.40729 -0.24133 -0.04522  0.17939  0.63040

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept) 1.089218   0.221466   4.918 0.000154 ***

age         0.057788   0.005399  10.704 1.06e-08 ***

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 

Residual standard error: 0.3027 on 16 degrees of freedom

Multiple R-Squared: 0.8775,     Adjusted R-squared: 0.8698

F-statistic: 114.6 on 1 and 16 DF,  p-value: 1.058e-08

Lệnh thứ hai, summary(reg), yêu cầu R liệt kê các thông tin tính toán trong reg. Phần kết quả chia làm 3 phần:

 

(a) Phần 1 mô tả phần dư (residuals) của mô hình hồi qui:

 

Residuals:

     Min       1Q   Median       3Q      Max

-0.40729 -0.24133 -0.04522  0.17939  0.63040

 

Chúng ta biết rằng trung bình phần dư phải là 0, và ở đây, số trung vị là -0.04, cũng không xa 0 bao nhiêu. Các số quantiles 25% (1Q) và 75% (3Q) cũng khá cân đối chung quanh số trung vị, cho thấy phần dư của phương trình này tương đối cân đối. 

(b) Phần hai trình bày ước số của  cùng với sai số chuẩn và giá trị của kiểm định t.  Giá trị kiểm định t cho  là 10.74 với trị số p=0.0000000106, cho thấy  b không phải bằng 0.  Nói cách khác, chúng ta có bằng chứng để cho rằng có một mối liên hệ giữa cholesterol và độ tuổi, và mối liên hệ này có ý nghĩa thống kê. 

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept) 1.089218   0.221466   4.918 0.000154 ***

age         0.057788   0.005399  10.704 1.06e-08 ***

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 

(c)  Phần ba của kết quả cho chúng ta thông tin về phương sai của phần dư (residual mean square). Ở đây, s2 = 0.3027. Trong kết quả này còn có kiểm định F, cũng chỉ là một kiểm định xem có quả thật  b  bằng 0, tức có ý nghĩa tương tự như kiểm định t trong phần trên. Nói chung, trong trường hợp phân tích hồi qui tuyến tính đơn giản (với một yếu tố) chúng ta không cần phải quan tâm đến kiểm định F.

 

Residual standard error: 0.3027 on 16 degrees of freedom

Multiple R-Squared: 0.8775,     Adjusted R-squared: 0.8698

F-statistic: 114.6 on 1 and 16 DF,  p-value: 1.058e-08

Ngoài ra, phần 3 còn cho chúng ta một thông tin quan trọng, đó là trị số R2 hay hệ số xác định bội (coefficient of determination). Hệ số này được ước tính bằng công thức:

                       [6]

Tức là bằng tổng bình phương giữa số ước tính và trung bình chia cho tổng bình phương số quan sát và trung bình. Trị số R2 trong ví dụ này là 0.8775, có nghĩa là phương trình tuyến tính (với độ tuổi là một yếu tố) giải thích khoảng 88% các khác biệt về độ cholesterol giữa các cá nhân. Tất nhiên trị số R2 có giá trị từ 0 đến 100% (hay 1). Giá trị R2 càng cao là một dấu hiệu cho thấy mối liên hệ giữa hai biến số độ tuổi và cholesterol càng chặt chẽ.

 

            Một hệ số cũng cần đề cập ở đây là hệ số điều chỉnh xác định bội (mà trong kết quả trên R gọi là “Adjusted R-squared”). Đây là hệ số cho chúng ta biết mức độ cải tiến của phương sai phần dư (residual variance) do yếu tố độ tuổi có mặt trong mô hình tuyến tính. Nói chung, hệ số này không khác mấy so với hệ số xác định bội, và chúng ta cũng không cần chú tâm quá mức.

10.2.3  Giả định của phân tích hồi qui tuyến tính

            Tất cả các phân tích trên dựa vào một số giả định quan trọng như sau:

(a) x là một biến số cố định hay fixed, (“cố định” ở đây có nghĩa là không có sai sót ngẫu nhiên trong đo lường);

(b) ei phân phối theo luật phân phối chuẩn;

(c) ei có giá trị trung bình (mean) là 0;

(d) ei có phương sai s2 cố định cho tất cả xi; và

(e) các giá trị liên tục của ei không có liên hệ tương quan với nhau (nói cách khác, e1 e2 không có liên hệ với nhau).

Nếu các giả định này không được đáp ứng thì mô hình mà chúng ta ước tính có vấn đề hợp lí (validity). Do đó, trước khi trình bày và diễn dịch mô hình trên, chúng ta cần phải kiểm tra xem các giả định trên có đáp ứng được hay không. Trong trường hợp này, giả định (a) không phải là vấn đề, vì độ tuổi không phải là một biến số ngẫu nhiên, và không có sai số khi tính độ tuổi của một cá nhân. 

 

Đối với các giả định (b) đến (e), cách kiểm tra đơn giản nhưng hữu hiệu nhất là bằng cách xem xét mối liên hệ giữa, , và phần dư  () bằng những đồ thị tán xạ. 

Với lệnh fitted() chúng ta có thể tính toán  cho từng cá nhân như sau (ví dụ đối với đối tượng số 1, 46 tuổi, độ cholestrol có thể tiên đoán như sau: 1.08922 + 0.05779 x 46 = 3.747). 

 

> fitted(reg)

1     2      3       4      5      6      7      8

3.7474 2.2449 4.0942 2.8228 4.3831 2.5339 2.7072 3.1696

9      10     11     12     13     14     15     16

2.3605 3.5741 4.3831 2.9962 2.3605 4.7298 3.4007 3.8630

17      18

2.7072  3.9208

Với lệnh resid() chúng ta có thể tính toán  phần dư  cho từng cá nhân như sau (với đối tượng 1, e1 = 3.5 – 3.74748 = -0.24748):

> resid(reg)

1        2       3       4      5      6

-0.2474 -0.3449 -0.0942 -0.2228 0.1168 0.4660

7       8       9      10      11     12

 0.1927 0.6304 -0.2605 0.2258 -0.2831 0.0037

13       14      15     16      17     18

 0.1394 -0.1298 -0.2007 0.3369 -0.4072 0.0791

Biểu đồ 10.2.  Phân tích phần dư để kiểm tra các giả định trong phân tích hồi qui tuyến tính.

Để kiểm tra các giả định trên, chúng ta có thể vẽ một loạt 4 đồ thị treân như sau:

> op <- par(mfrow=c(2,2))        #yêu cầu R dành ra 4 cửa sổ 

> plot(reg)                      #vẽ các đồ thị trong reg

(a) Đồ thị bên trái dòng 1 vẽ phần dư và giá trị tiên đoán cholesterol. Đồ thị này cho thấy các giá trị phần dư tập chung quanh đường y = 0, cho nên giả định (c), hay ei có giá trị trung bình 0, là có thể chấp nhận được.  

(b) Đồ thị bên phải dòng 1 vẽ giá trị phần dư và giá trị kì vọng dựa vào phân phối chuẩn. Chúng ta thấy các số phần dư tập trung rất gần các giá trị trên đường chuẩn, và do đó, giả định (b), tức  ei phân phối theo luật phân phối chuẩn, cũng có thể đáp ứng.

(c)  Đồ thị bên trái dòng 2 vẽ căn số phần dư chuẩn (standardized residual) và giá trị của . Đồ thị này cho thấy không có gì khác nhau giữa các số phần dư chuẩn cho các giá trị của , và do đó, giả định (d), tức ei có phương sai s2 cố định cho tất cả xi, cũng có thể đáp ứng.

 

Nói chung qua phân tích phần dư, chúng ta có thể kết luận rằng mô hình hồi qui tuyến tính mô tả mối liên hệ giữa độ tuổi và cholesterol một cách khá đầy đủ và hợp lí.

 

10.2.4     Mô hình tiên đoán

Sau khi mô hình tiên đoán cholesterol đã được kiểm tra và tính hợp lí đã được thiết lập, chúng ta có thể vẽ đường biểu diễn của mối liên hệ giữa độ tuổi và cholesterol bằng lệnh abline như sau (xin nhắc lại object của phân tích là reg):

> plot(chol ~ age, pch=16)

> abline(reg)

 

Biểu đồ 10.3.  Đường biểu diễn mối liên hệ giữa độ tuổi (age) và cholesterol.

Nhưng mỗi giá trị  được tính từ ước số  , mà các ước số này đều có sai số chuẩn, cho nên giá trị tiên đoán  cũng có sai số.  Nói cách khác,  chỉ là trung bình, nhưng trong thực tế có thể cao hơn hay thấp hơn tùy theo chọn mẫu.  Khoảng tin cậy 95% này có thể ước tính qua R bằng các lệnh sau đây: 

> reg <- lm(chol ~ age)

> new <- data.frame(age = seq(15, 70, 5))

> pred.w.plim <- predict.lm(reg, new, interval="prediction")

> pred.w.clim <- predict.lm(reg, new, interval="confidence")

> resc <- cbind(pred.w.clim, new)

> resp <- cbind(pred.w.plim, new)

> plot(chol ~ age, pch=16)

> lines(resc$fit ~ resc$age)

> lines(resc$lwr ~ resc$age, col=2)

> lines(resc$upr ~ resc$age, col=2)

> lines(resp$lwr ~ resp$age, col=4)

> lines(resp$upr ~ resp$age, col=4)

 

(Chú ý trong các lệnh trên, chúng ta những sử dụng biến số như resc$fit, resc$lwr,resc$upr,resp$lwr,resp$upr. Cách viết này có nghĩa là trích biến số fit từ đối tượng resc, hay lwr upr (khoảng tin cậy 95%) của resc). 


 

Biểu đồ 10.4.  Giá trị tiên đoán và khoảng tin cậy 95% 
 

Biểu đồ 10.4 vẽ giá trị tiên đoán trung bình  (đường thẳng màu đen), và khoảng tin cậy 95% của giá trị này là đường màu đỏ. Ngoài ra, đường màu xanh là khoảng tin cậy của giá trị tiên đoán cholesterol cho một độ tuổi mới trong quần thể.

10.3  Mô hình hồi qui tuyến tính đa biến (multiple linear regression)

 

            Mô hình được diễn đạt qua phương trình [1]  có một yếu tố duy nhất (đó là x), và vì thế thường được gọi là mô hình hồi qui tuyến tính đơn giản (simple linear regression model). Trong thực tế, chúng ta có thể phát triển mô hình này thành nhiều biến, chứ không chỉ giới hạn một biến như trên, chẳng hạn như:

 

[7]

Nói cụ thể hơn:

y1 = a + b1x11 + b2x21 + …+ bkxk1 e1

y2 = a + b1x12 + b2x22 + …+ bkxk2 e2

y3 = a + b1x13 + b2x23 + …+ bkxk3 e3

yn = a + b1x1n + b2x2n + …+ bkxkn en

 

Chú ý trong phương trình trên, chúng ta có nhiều biến x (x1, x2, … đến xk), và mỗi biến có một thông số  (j = 1, 2, …, k) cần phải ước tính. Vì thế mô hình này còn được gọi là mô hình hồi qui tuyến tính đa biến.

Phương pháp ước tính  cũng chủ yếu dựa vào phương pháp bình phương nhỏ nhất. Gọi  là ước tính của yi , phương pháp bình phương nhỏ nhất tìm giá trị  sao cho  nhỏ nhất.

Đối với mô hình hồi qui tuyến tính đa biến, cách viết và mô tả mô hình gọn nhất là dùng kí hiệu ma trận. Mô hình [7] có thể thể hiện bằng kí hiệu ma trận như sau:

Y = Xb + e

Trong đó: Y là một vector n x 1, X là một ma trận n x k phần tử, b và một vector k x 1, và e vector gồm n x 1 phần tử:

 

 ,       ,      

Phương pháp bình phương nhỏ nhất giải vector b bằng phương trình sau đây:

 

và tổng bình phương phần dư:

 

Ví dụ 2.  Chúng ta quay lại nghiên cứu về mối liên hệ giữa độ tuổi, bmi và cholesterol. Trong ví dụ, chúng ta chỉ mới xét mối liên hệ giữa độ tuổi và cholesterol, mà chưa xem đến mối liên hệ giữa  cả hai yếu tố độ tuổi và bmi và cholesterol. Biểu đồ sau đây cho chúng ta thấy mối liên hệ giữa ba biến số này:

 

> pairs(data)

Biểu đồ 10.5.  Giá trị tiên đoán và khoảng tin cậy 95%.

Cũng như giữa độ tuổi và cholesterol, mối liên hệ giữa bmi và cholesterol cũng gần tuân theo một đường thằng.  Biểu đồ trên còn cho chúng ta thấy độ tuổi và bmi có liên hệ với nhau.  Thật vậy, phân tích hồi qui tuyến tính đơn giản giữa bmi và cholesterol cho thấy như mối liên hệ này có ý nghĩa thống kê:

> summary(lm(chol ~  bmi))

Call: lm(formula = chol ~ bmi)

Residuals:

    Min      1Q  Median      3Q     Max

-0.9403 -0.3565 -0.1376  0.3040  1.4330

Coefficients:

            Estimate Std. Error t value Pr(>|t|)  

(Intercept) -2.83187    1.60841  -1.761  0.09739 .

bmi          0.26410    0.06861   3.849  0.00142 **

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 

Residual standard error: 0.623 on 16 degrees of freedom

Multiple R-Squared: 0.4808,     Adjusted R-squared: 0.4483

F-statistic: 14.82 on 1 and 16 DF,  p-value: 0.001418

 

BMI giải thích khoảng 48% độ dao động về cholesterol giữa các cá nhân.  Nhưng vì BMI cũng có liên hệ với độ tuổi, chúng ta muốn biết nếu hai yếu tố này được phân tích cùng một lúc thì yếu tố nào quan trọng hơn.  Để biết ảnh hưởng của cả hai yếu tố age (x1) và bmi (tạm gọi là x2) đến cholesterol (y) qua một mô hình hồi qui tuyến tính đa biến, và mô hình đó là:

hay phương trình cũng có thể mô tả bằng kí hiệu ma trận: Y = Xb + e  vừa trình bày ở trên. Ở đây, Y là một vector vector 18 x 1, X là một matrix 18 x 2 phần tử, b và một vector 2 x 1, và e vector gồm 18 x 1 phần tử. Để ước tính hai hệ số hồi qui, b1 b2 chúng ta cũng ứng dụng hàm lm()trong R như sau:

 

> mreg <- lm(chol ~ age + bmi)

> summary(mreg)

 

Call: lm(formula = chol ~ age + bmi)

 

Residuals:

    Min      1Q  Median      3Q     Max

-0.3762 -0.2259 -0.0534  0.1698  0.5679

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept) 0.455458   0.918230   0.496    0.627   

age         0.054052   0.007591   7.120 3.50e-06 ***

bmi         0.033364   0.046866   0.712    0.487   

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 

Residual standard error: 0.3074 on 15 degrees of freedom

Multiple R-Squared: 0.8815,     Adjusted R-squared: 0.8657

F-statistic: 55.77 on 2 and 15 DF,  p-value: 1.132e-07

Kết quả phân tích trên cho thấy ước số  = 0.455,  = 0.054 và  = 0.0333.  Nói cách khác, chúng ta có phương trình ước đoán độ cholesterol dựa vào hai biến số độ tuổi và bmi như sau:

Cholesterol = 0.455 + 0.054(age) + 0.0333(bmi)

Phương trình cho biết khi độ tuổi tăng 1 năm thì cholesterol tăng 0.054 mg/L (ước số này không khác mấy so với 0.0578 trong phương trình chỉ có độ tuổi), và mỗi 1 kg/m2 tăng BMI thì cholesterol tăng 0.0333 mg/L. Hai yếu tố này “giải thích” khoảng 88.2% (R2 = 0.8815) độ dao động của cholesterol giữa các cá nhân. 

Chúng ta chú ý phương trình với độ tuổi (trong phân tích phần trước) giải thích khoảng 87.7% độ dao động cholesterol giữa các cá nhân. Khi chúng ta thêm yếu tố BMI, hệ số này tăng lên 88.2%, tức chỉ 0.5%.  Câu hỏi đặt ra là 0.5% tăng trưởng này có ý nghĩa thống kê hay không. Câu trả lời có thể xem qua kết quả kiểm định yếu tố bmi với trị số p = 0.487. Như vậy, bmi không cung cấp cho chúng thêm thông tin hay tiên đoán cholesterol hơn những gì chúng ta đã có từ độ tuổi. Nói cách khác, khi độ tuổi đã được xem xét, thì ảnh hưởng của bmi không còn ý nghĩa thống kê. Điều này có thể hiểu được, bởi vì qua biểu đồ 10.5 chúng ta thấy độ tuổi và bmi có một mối liên hệ khá cao. Vì hai biến này có tương quan với nhau, chúng ta không cần cả hai trong phương trình. (Tuy nhiên, ví dụ này chỉ có tính cách minh họa cho việc tiến hành phân tích hồi qui tuyến tính đa biến bằng R, chứ không có ý định mô phỏng dữ liệu theo định hướng sinh học).

Biểu đồ 10.6.  Phân tích phần dư để kiểm tra các giả định trong phân tích hồi qui tuyến tính đa biến.

 

Tuy BMI không có ý nghĩa thống kê trong trường hợp này, Biểu đồ 10.6 cho thấy các giả định về mô hình hồi qui tuyến tính có thể đáp ứng.

10.4  Phân tích hồi qui đa thức (Polynomial regression analysis)

Một khai triển tất nhiên từ phân tích hồi qui đa biến độc lập là phân tích hồi qui đa thức. Mô hình hồi qui đa biến mô tả một biến phụ thuộc như là một hàm số tuyến tính (linear function) của nhiều biến độc lập, trong khi đó mô hình hồi qui đa thức mô tả một biến phụ thuộc là hàm số phi tuyến tính (non-linear function) của một biến độc lập.

Nói theo ngôn ngữ toán học, mô hình hồi qui đa thức tìm mối liên hệ giữa biến phụ thuộc y và biến độc lập x theo những hàm số sau đây:

yi = a + b1x + b2x2 + b3x3 + .. + bpxp + ei.

Trong đó các thông số bj (j = 1, 2, 3, … p) là hệ số đo lường mối liên hệ giữa y x; và ei là phần dư của mô hình, với giả định ei tuân theo luật phân phối chuẩn với trung bình 0 và phương sai s2. Cho một dãy cặp số (y1, x1), (y2, x2), (y3, x3), …, (yn, xn), chúng ta có thể áp dụng phương pháp bình phương nhỏ nhất để ước tính bj s2.

Trong mô hình trên, chúng ta có thể dễ dàng thấy rằng mô hình hồi qui đa thức còn là một phát triển trực tiếp từ mô hình hồi qui tuyến tính đơn giản. Tức là nếu b2 = 0, b3 = 0, …, và bp = 0, thì mô hình trên đơn giản thành mô hình hồi qui tuyến tính một biến mà chúng ta gặp trong phần đầu của chương này. Nếu yi = a + b1x + b2x2 + ei thì mô hình đơn giản là một phương trình bậc hai, v.v.

Ví dụ 3. Thí nghiệm sau đây tìm mối liên hệ giữa hàm lượng gỗ cứng (hardwoord concentration) và độ căng (tensile strength) của vật liệu. Mười chín vật liệu khác nhau với nhiều hàm lượng gỗ cứng được thử nghiệm để đo độ căng mạnh của vật liệu, và kết quả được tóm lược trong bảng số liệu sau đây:

 

 

Trước khi phân tích các số liệu này, chúng ta cần nhập số liệu vào R với những lệnh thông thường như sau:  
 

> id <- 1:19 
 

> conc <- c(1.0, 1.5, 2.0, 3.0, 4.0, 4.5,  5.0,  5.5,

            6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0,

           13.0, 14.0, 15.0)  
 

> strength <- c(6.3, 11.1, 20.0, 24.0, 26.1, 30.0,

                33.8, 34.0, 38.1, 39.9, 42.0, 46.1,

                53.1, 52.0, 52.5, 48.0, 42.8, 27.8,

                21.9) 
 

> data <- data.frame(id, conc, strength) 
 

Chúng ta thử xem mô hình hồi qui tuyến tính đơn giản bằng lệnh:  
 

> simple.model <- lm(strength ~ conc)

> summary(simple.model) 
 

Call: lm(formula = strength ~ conc) 
 

Residuals:

    Min      1Q  Median      3Q     Max

-25.986  -3.749   2.938   7.675  15.840  
 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)  

(Intercept)  21.3213     5.4302   3.926  0.00109 **

conc          1.7710     0.6478   2.734  0.01414 *

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 11.82 on 17 degrees of freedom

Multiple R-Squared: 0.3054,     Adjusted R-squared: 0.2645

F-statistic: 7.474 on 1 and 17 DF,  p-value: 0.01414 
 

Kết quả trên cho thấy mô hình hồi qui tuyến tính đơn giản này (strength = 21.32 + 1.77*conc) giải thích khoảng 31% phương sai của strength. Ước số phương sai của mô hình này là:   s2= (11.82)2 = 139.7.   
 

Bây giờ chúng ta xem qua biểu đồ và đường biểu diễn của mô hình trên:

> plot(strength ~ conc,

       xlab="Concentration of hardwood",

       ylab="Tensile strength",

      main="Relationship between hardwood concentration

             \n and tensile strengt", pch=16) 
 

  • abline(simple.model)
 


Biểu đồ 10.7. Mối liên hệ giữa hàm lượng gỗ cứng và độ căng mạnh của vật liệu. Đường thẳng là đường biểu diễn của mô hình hồi qui tuyến tính đơn giản.  
 

Qua biểu đồ này, chúng ta thấy rõ ràng mô hình hồi qui tuyến tính không thích hợp cho số liệu, bởi vì mối liên hệ giữa hai biến này không tuân theo một phương trình đường thẳng, mà là một đường cong.  Nói cách khác, một mô hình phương trình bậc hai có lẽ thích hợp hơn.  Gọi y là strength và x là conc, chúng ta có thể viết mô hình đó như sau:  
 

yi = a + b1x + b2x2 
 

Bây giờ chúng ta sẽ sử dùng R để ước tính ba thông số trên. 
 

> quadratic <- lm(strength ~ poly(conc, 2))

> summary(quadratic) 
 

Call:

lm(formula = strength ~ poly(conc, 2)) 
 

Residuals:

    Min      1Q  Median      3Q     Max

-5.8503 -3.2482 -0.7267  4.1350  6.5506  
 

Coefficients:

               Estimate Std. Error t value Pr(>|t|)   

(Intercept)      34.184      1.014  33.709 2.73e-16 ***

poly(conc, 2)1   32.302      4.420   7.308 1.76e-06 ***

poly(conc, 2)2  -45.396      4.420 -10.270 1.89e-08 ***

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 4.42 on 16 degrees of freedom

Multiple R-Squared: 0.9085,     Adjusted R-squared: 0.8971

F-statistic: 79.43 on 2 and 16 DF,  p-value: 4.912e-09 
 

Như vậy, mô hình mới:  
 

      y = 34.18 + 32.30*x – 45.4*x2  
 

giải thích khoảng 91% phương sai của y.  Phương sai của y bây giờ là   s2 = (4.42)2 = 19.5.  So với mô hình tuyến tính, mô hình này rõ ràng là tốt hơn rất nhiều. 
 

      Chúng ta thử xét một mô hình cubic (bậc ba): 
 

      yi = a + b1x + b2x2 + b3x 
 

Xem có mô tả y tốt hơn mô hình phương trình bậc hai hay không. 
 

> cubic <- lm(strength ~ poly(conc, 3))

> summary(cubic)

Call: lm(formula = strength ~ poly(conc, 3)) 
 

Residuals:

     Min       1Q   Median       3Q      Max

-4.62503 -1.61085  0.04125  1.58922  5.02159  
 

Coefficients:

               Estimate Std. Error t value Pr(>|t|)   

(Intercept)     34.1842     0.5931  57.641  < 2e-16 ***

poly(conc, 3)1  32.3021     2.5850  12.496 2.48e-09 ***

poly(conc, 3)2 -45.3963     2.5850 -17.561 2.06e-11 ***

poly(conc, 3)3 -14.5740     2.5850  -5.638 4.72e-05 ***

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 2.585 on 15 degrees of freedom

Multiple R-Squared: 0.9707,     Adjusted R-squared: 0.9648

F-statistic: 165.4 on 3 and 15 DF,  p-value: 1.025e-11 
 

Mô hình cubic này thậm chí có khả năng mô tả y tốt hơn hai mô hình trước, với hệ số xác định bội (R2) bằng 0.97, và tất cả các thông số trong mô hình đều có ý nghĩa thống kê. Biểu đồ sau đây so sánh 3 mô hình trên:  
 

# lặp lại các mô hình trên:

> linear <- lm(strength ~ conc)

> quadratic <- lm(strength ~ poly(conc, 2))

> cubic <- lm(strength ~ poly(conc, 3)) 
 

# tạo nên một biến x với nhiều số gần nhau

> xnew <- (0:160)/10  
 

# Tính giá trị tiên đoán (predictive values) của y

> y2 = predict(quadratic, data.frame(conc=xnew)) 

> y3 = predict(cubic, data.frame(conc=xnew))   
 

# Vẽ 3 đường thẳng, bậc hai và bậc 3 

> plot(strength ~ conc, pch=16,

       main=”Hardwood concentration and tensile strength”,

       sub=”Linear, quadratic, and cubic fits”)

> abline(linear, col=”black”)

> lines(xnew, y2, col=”blue”, lwd=3)

> lines(xnew, y3, col=”red”, lwd=4) 


 

10.5  Xây dựng mô hình tuyến tính từ nhiều biến 
 

Trong một nghiên cứu thông thường với một biến số phụ thuộc, nhiều biến số độc lập x1, x2, x3,…., xk, mà k có thể lên đến hàng chục, thậm chí hàng trăm. Các biến độc lập đó thường liên hệ với nhau. Có rất nhiều tổ hợp biến độc lập có khả năng tiên đoán biến phụ thuộc y. Ví dụ nếu chúng ta có 3 biến độc lập x1, x2, x3, để xây dựng mô hình tiên đoán y, chúng ta có thể phải xem xét các mô hình sau đây:  y = f1(x1),  y = f2(x2), y = f3(x3),  y = f4(x1, x2,), y = f5(x1, x3,), y = f6(x3, x3,),  y = f7(x1, x2, x3) là những hàm số được định nghĩa bởi hệ số liên quan đến các biến cụ thể. Khi k cao, số lượng mô hình cũng lên rất cao.  
 

Vấn đề đặt ra là trong các mô hình đó, mô hình nào có thể tiên đoán y một cách đầy đủ, đơn giản và hợp lí. Chúng ta sẽ quay lại ba tiêu chuẩn này trong chương phân tích hồi qui logistic. Ở đây, chúng ta chỉ muốn bàn đến một tiêu chuẩn thống kê để xây dựng mộ mô hình hồi qui tuyến tính. Trong trường hợp có nhiều mô hình như thế, tiêu chuẩn thống kê để chọn một mô hình tối ưu thường dựa vào tiêu chuẩn thông tin Akaike (còn gọi là AIC hay Akaike Information Criterion).  
 

     

Cho một mô hình hồi qui tuyến tính , chúng ta có k+1 thông số ), và có thể tính tổng bình phương phần dư (residual sum of squares, RSS):

Trong đó, n là số lượng mẫu. Công thức trên cho thấy nếu mô hình mô tả y đầy đủ thì RSS sẽ thấp, vì độ khác biệt giữa giá trị tiên đoán  và giá trị quan sát y  gần nhau. Một qui luật chung của phân tích hồi qui tuyến tính là một mô hình với k biến độc lập sẽ có RSS thấp hơn mô hình với k-1 biến; và tương tự mô hình với k-1 biến sẽ có RSS thấp hơn mô hình với k-2 biến, v.v… Nói cách khác, mô hình càng có nhiều biến độc lập sẽ “giải thích” y càng tốt hơn. Nhưng vì một số biến độc lập x liên hệ với nhau, cho nên có thêm nhiều biến không có nghĩa là RSS sẽ giảm một cách có ý nghĩa. Một phép tính để dung hòa RSS và số biến độc lập trong một mô hình là AIC, được định nghĩa như sau:

Mô hình nào có giá trị AIC thấp nhất được xem là mô hình “tối ưu”. Trong ví dụ sau đây, chúng ta sẽ dùng hàm step để tìm một mô hình tối ưu dựa vào giá trị AIC.

Ví dụ 4. Để nghiên cứu ảnh hưởng của các yếu tố như nhiệt độ, thời gian, và thành phần hóa học đến sản lượng CO2. Số liệu của nghiên cứu này có thể tóm lược trong bảng số 2. Mục tiêu chính của nghiên cứu là tìm một mô hình hồi qui tuyến tính để tiên đoán sản lượng CO2, cũng như đánh giá độ ảnh hưởng của các yếu tố này.

Bảng 2.  Sản lượng CO2 và một số yếu tố có thể ảnh hưởng đến CO2

 

Chú thíchy = sản lượng CO2;  X1 = thời gian (phút); X2 = nhiệt độ (C); X3 = phần trăm hòa tan; X4 = lượng dầu (g/100g); X5 = lượng than đá; X6 = tổng số lượng hòa tan; X7 = số hydrogen tiêu thụ.

Trước khi phân tích số liệu, chúng ta cần nhập số liệu vào R bằng các lệnh thông thường.  Số liệu sẽ chứa trong đối tượng REGdata.

> y <- c(36.98,13.74,10.08, 8.53,36.42,26.59,19.07,

        5.96,15.52,56.61,26.72,20.80,6.99,45.93,

         43.09,15.79,21.60,35.19,26.14, 8.60,

         11.63, 9.59, 4.42,38.89,11.19,75.62,36.03) 
 

> x1 <- c(5.1,26.4,23.8,46.4, 7.0,12.6,18.9,30.2,

          53.8,5.6,15.1,20.3,48.4,5.8,11.2,27.9,5.1,

          11.7,16.7,24.8,24.9,39.5,29.0, 5.5, 11.5,

          5.2,10.6) 
 

> x2 <- c(400,400, 400, 400, 450, 450, 450, 450, 450,

          400, 400, 400, 400, 425, 425, 425, 450, 450,

          450, 450, 450, 450, 450, 460, 450, 470, 470) 
 

> x3 <- c(51.37,72.33,71.44,79.15,80.47,89.90,91.48,

          98.60,98.05,55.69, 66.29,58.94,74.74,63.71,

          67.14,77.65,67.22,81.48,83.88,89.38,79.77,

          87.93, 79.50,72.73,77.88,75.50,83.15) 
 

> x4 <- c(4.24,30.87,33.01,44.61,33.84,41.26,41.88,

          70.79,66.82,8.92,17.98,17.79,33.94,11.95,

          14.73,34.49,14.48,29.69,26.33, 37.98,25.66,

          22.36,31.52,17.86,25.20, 8.66,22.39) 
 

> x5 <- c(1484.83, 289.94, 320.79, 164.76, 1097.26,

          605.06, 405.37, 253.70, 142.27,1362.24, 507.65,

         377.60,  158.05, 130.66, 682.59, 274.20,

          1496.51, 652.43,  458.42, 312.25, 307.08,

          193.61,155.96,1392.08, 663.09,1464.11, 720.07) 
 

> x6 <- c(2227.25, 434.90, 481.19, 247.14,1645.89,

          907.59,608.05, 380.55, 213.40,2043.36, 761.48,

          566.40,237.08,1961.49,1023.89, 411.30,2244.77,

          978.64,687.62, 468.38, 460.62, 290.42,233.95,

          2088.12,994.63,2196.17,1080.11) 
 

> x7 <- c(2.06,1.33,0.97,0.62,0.22,0.76,1.71,3.93,1.97,

          5.08,0.60,0.90, 0.63,2.04,1.57,2.38,0.32,

          0.44,8.82,0.02,1.72,1.88,1.43,1.35,1.61,

          4.78,5.88) 
 

> REGdata <- data.frame(y, x1,x2,x3,x4,x5,x6,x7)  
 

Trước khi phân tích số liệu, chúng ta cần nhập số liệu vào R bằng các lệnh thông thường.  Số liệu sẽ chứa trong đối tượng REGdata.  
 

Bây giờ chúng ta bắt đầu phân tích. Mô hình đầu tiên là mô hình gồm tất cả 7 biến độc lập như sau:  
 
 

> reg <- lm(y ~ x1+x2+x3+x4+x5+x6+x7, data=REGdata)

> summary(reg) 
 

Call: lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7, data = REGdata) 
 

Residuals:

    Min      1Q  Median      3Q     Max

-20.035  -4.681  -1.144   4.072  21.214  
 

Coefficients:

             Estimate Std. Error t value Pr(>|t|)

(Intercept) 53.937016  57.428952   0.939   0.3594 

x1          -0.127653   0.281498  -0.453   0.6553 

x2          -0.229179   0.232643  -0.985   0.3370 

x3           0.824853   0.765271   1.078   0.2946 

x4          -0.438222   0.358551  -1.222   0.2366 

x5          -0.001937   0.009654  -0.201   0.8431 

x6           0.019886   0.008088   2.459   0.0237 *

x7           1.993486   1.089701   1.829   0.0831 .

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 10.61 on 19 degrees of freedom

Multiple R-Squared: 0.728,      Adjusted R-squared: 0.6278

F-statistic: 7.264 on 7 and 19 DF,  p-value: 0.0002674 
 

Kết quả trên cho thấy tất cả 7 biến số “giải thích” khoảng 73% phương sai của y. Nhưng trong 7 biến đó, chỉ có x6 là có ý nghĩa thống kê (p=0.024). Chúng ta thử giảm mô hình thành một mô hình hồi qui tuyến tính đơn giản với chỉ biến x6
 

> summary(lm(y ~ x6, data=REGdata)) 
 

Call: lm(formula = y ~ x6, data = REGdata) 
 

Residuals:

    Min      1Q  Median      3Q     Max

-28.081  -5.829  -0.839   5.522  26.882  
 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept) 6.144181   3.483064   1.764     0.09 . 

x6          0.019395   0.002932   6.616 6.24e-07 ***

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 10.7 on 25 degrees of freedom

Multiple R-Squared: 0.6365,     Adjusted R-squared: 0.6219

F-statistic: 43.77 on 1 and 25 DF,  p-value: 6.238e-07

Chỉ với một biến x6 mà mô hình có thể giải thích khoảng 64% phương sai của y.  Chúng ta chấp nhận mô hình này? Trước khi chấp nhận mô hình này, chúng ta phải xem xét độ tương quan giữa các biến độc lập:  
 

> pairs(REGdata)

Your browser may not support display of this image. 
Kết quả trên cho thấy y có liên hệ với các biến như x1, x5 x6. Ngoài ra, biến x5 x6 có một mối liên hệ rất mật thiết (gần như là một đường thẳng) với hệ số tương quan là 0.88.  Ngoài ra, x5 x1 hay x6 x5 cũng có liên hệ với nhau nhưng theo một hàm số nghịch đảo. Điều này có nghĩa là biến x5 x6 cung cấp một lượng thông tin như nhau để tiên đoán y, tức là chúng ta không cần cả hai trong một mô hình.

Để tìm một mô hình tối ưu trong bối cảnh có nhiều mối tương quan như thế, chúng ta ứng dụng step như sau. Chú ý cách cung cấp thông số lm(y ~ .),dấu “.” có nghĩa là yêu cầu R xem xét tất cả biến trong đối tượng REGdata.   
 

> reg <- lm(y ~ ., data=REGdata) 
> step(reg, direction=”both”)

Start:  AIC= 134.07

y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7

       Df Sum of Sq     RSS     AIC

- x5    1      4.54 2145.37  132.13

- x1    1     23.17 2164.00  132.36

- x2    1    109.34 2250.18  133.42

- x3    1    130.90 2271.74  133.68

<none>              2140.83  134.07

- x4    1    168.31 2309.14  134.12

- x7    1    377.09 2517.92  136.45

- x6    1    681.09 2821.92  139.53

Step 1:  AIC= 132.13

y ~ x1 + x2 + x3 + x4 + x6 + x7  
 

       Df Sum of Sq    RSS    AIC

- x1    1      22.7 2168.1  130.4

- x2    1     113.8 2259.1  131.5

- x3    1     133.5 2278.9  131.8

<none>              2145.4  132.1

- x4    1     170.8 2316.2  132.2

+ x5    1       4.5 2140.8  134.1

- x7    1     375.7 2521.1  134.5

- x6    1    1058.5 3203.8  141.0

Step 2:  AIC= 130.42

y ~ x2 + x3 + x4 + x6 + x7  
 

       Df Sum of Sq    RSS    AIC

- x2    1      96.8 2264.9  129.6

- x3    1     122.0 2290.0  129.9

<none>              2168.1  130.4

- x4    1     187.4 2355.5  130.7

+ x1    1      22.7 2145.4  132.1

+ x5    1       4.1 2164.0  132.4

- x7    1     385.0 2553.1  132.8

- x6    1    1526.2 3694.3  142.8

Step 3:  AIC= 129.59

y ~ x3 + x4 + x6 + x7  
 

       Df Sum of Sq    RSS    AIC

- x3    1      25.4 2290.3  127.9

- x4    1      90.9 2355.8  128.7

<none>              2264.9  129.6

+ x2    1      96.8 2168.1  130.4

+ x5    1       8.3 2256.5  131.5

+ x1    1       5.7 2259.1  131.5

- x7    1     384.9 2649.7  131.8

- x6    1    2015.6 4280.5  144.8

Step 4:  AIC= 127.9

y ~ x4 + x6 + x7  
 

      Df Sum of Sq    RSS    AIC

- x4    1      73.5 2363.8  126.7

<none>              2290.3  127.9

+ x3    1      25.4 2264.9  129.6

+ x1    1      11.3 2279.0  129.8

+ x5    1       6.3 2284.0  129.8

+ x2    1       0.3 2290.0  129.9

- x7    1     486.6 2776.9  131.1

- x6    1    1993.8 4284.1  142.8

Step 5:  AIC= 126.75

y ~ x6 + x7  
 

       Df Sum of Sq    RSS    AIC

<none>              2363.8  126.7

+ x4    1      73.5 2290.3  127.9

+ x1    1      33.4 2330.4  128.4

+ x3    1       8.1 2355.8  128.7

+ x5    1       7.7 2356.1  128.7

+ x2    1       7.3 2356.6  128.7

- x7    1     497.3 2861.2  129.9

- x6    1    4477.0 6840.8  153.4

Call:

lm(formula = y ~ x6 + x7, data = REGdata) 
 

Coefficients:

(Intercept)           x6           x7 

    2.52646      0.01852      2.18575 

 
 
 

Quá trình tìm mô hình tối ưu dừng ở mô hình với hai biến x6 x7, vì mô hình này có giá trị AIC thấp nhất.  Phương trình tuyến tính tiên đoán y là:  y = 2.526 + 0.0185(x6) + 2.186(x7).    
 

> summary(lm(y ~ x6+x7, data=REGdata))

Call: lm(formula = y ~ x6 + x7, data = REGdata) 
 

Residuals:

     Min       1Q   Median       3Q      Max

-23.2035  -4.3713   0.2513   4.9339  21.9682  
 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept) 2.526460   3.610055   0.700   0.4908   

x6          0.018522   0.002747   6.742 5.66e-07 ***

x7          2.185753   0.972696   2.247   0.0341 * 

---

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1  
 

Residual standard error: 9.924 on 24 degrees of freedom

Multiple R-Squared: 0.6996,     Adjusted R-squared: 0.6746

F-statistic: 27.95 on 2 and 24 DF,  p-value: 5.391e-07 
 

Phân tích chi tiết (kết quả trên) cho thấy hai biến này giải thích khoảng 70% phương sai của y.   
 

10.6  Xây dựng mô hình tuyến tính bằng Bayesian Model Average (BMA) 
 

Một vấn đề trong cách xây dựng mô hình trên là mô hình với x6 x7 được xem là mô hình sau cùng, trong khi đó chúng ta biết rằng một mô hình x5 x7 cũng có thể là một mô hình khả dĩ, bởi vì x5 x6 có mối tương quan rất gần nhau.  Nếu nghiên cứu được tiến hành tiếp và với thêm số liệu mới, có lẽ một mô hình khác sẽ “ra đời”.  
 

Để đánh giá sự bất định trong việc xây dựng mô hình thống kê, một phép tính khác có triển vọng tốt hơn cách phép tính trên là BMA (Bayesian Model Average). Bạn đọc muốn tìm hiểu thêm về phép tính này có thể tham khảo vài bài báo khoa học dưới đây. Nói một cách ngắn gọn, phép tính BMA tìm tất cả các mô hình khả dĩ (với 7 biến độc lập, số mô hình khả dĩ là 27 = 128, chưa tính đến các mô hình tương tác!) và trình bày kết quả của các mô hình được xem là “tối ưu” nhất về lâu về dài. Tiêu chuẩn tối ưu cũng dựa vào giá trị AIC.  
 

Để tiến hành phép tính BMA, chúng ta phải dùng đến package BMA (có thể tải về từ trang web của R http://cran.R-project.org). Sau khi đã có cài đặt package BMA trong máy tính, chúng ta ra phải nhập BMA vào môi trường vận hành của R bằng lệnh:  
 

  • library(BMA)
 
 

Sau đó, tạo ra một ma trận chỉ gồm các biến độc lập. Trong data frame chúng ta biết REGdata có 8 biến, với biến số 1 là y. Do đó, lệnh REGdata[, -1] có nghĩa là tạo ra một data frame mới ngoại trừ cột thứ nhất (tức y).  
 

> xvars <- REGdata[,-1]

Kế tiếp, chúng ta định nghĩa biến phụ thuộc tên co2 từ REGdata:

> co2 <- REGdata[,1] 
 

Bây giờ chúng ta đã sẵn sàng phân tích bằng phép tính BMA. Hàm bicreg  được viết đặc biệt cho phân tích hồi qui tuyến tính. Cách áp dụng hàm bicreg như sau: 
 

> bma <- bicreg(xvars, co2, strict=FALSE, OR=20) 
 

Chúng ta sử dụng hàm summary để biết kết quả: 
 

> summary(bma)

Call:

bicreg(x = xvars, y = co2, strict = FALSE, OR = 20) 
 

16  models were selected

Best  5  models (cumulative posterior probability =  0.6599 ):  
 

           p!=0    EV       SD       model 1   model 2   model 3 

Intercept  100.0   5.75672  14.6244    2.5264    6.1441    8.6120

x1          12.4  -0.01807   0.1008      .         .         .   

x2          10.4  -0.00075   0.0282      .         .         .   

x3          10.7   0.00011   0.0791      .         .         .   

x4          20.2  -0.03059   0.1020      .         .      -0.1419

x5          10.5  -0.00023   0.0030      .         .         .   

x6         100.0   0.01815   0.0040    0.0185    0.0193    0.0164

x7          73.7   1.60766   1.2821    2.1857      .       2.1628

                                                                 

nVar                                     2         1         3   

r2                                     0.700     0.636     0.709 

BIC                                  -25.8832  -24.0238  -23.4412

post prob                              0.311     0.123     0.092   
 

            model 4   model 5

Intercept     7.5936    7.3537

x1           -0.1393      .  

x2              .         .  

x3              .      -0.0572

x4              .         .  

x5              .         .  

x6            0.0162    0.0179

x7            2.1233    2.2382

                               
 
 
 

nVar            3         3  

r2            0.704     0.701

BIC         -22.9721  -22.6801

post prob     0.072     0.063  
 

BMA trình bày kết quả của 5 mô hình được đánh giá là tối ưu nhất cho tiên đoán y (model 1, model 2, … model 5) 
 

  • Cột thứ nhất liệt kê danh sách các biến số độc lập;
 
 
  • Cột 2 trình bày xác suất giả thiết một biến độc lập có ảnh hưởng đến y.  Chẳng hạn như xác suất là x6 có ảnh hưởng đến y là 100%; trong khi đó xác suất mà x7 có ảnh hưởng đến y là 73.7%. Tuy nhiên xác suất các biến khác thấp hơn hay chỉ bằng 20%. Do đó, chúng ta có thể nói rằng mô hình với x6x7 có lẽ là mô hình tối ưu nhất. 
 
 
  • Cột 3 (EV) và 4 (SD) trình bày trị số trung bình và độ lệch chuẩn của hệ số cho mỗi biến số độc lập.
 
 
  • Cột 5 là ước tính hệ số ảnh hưởng (regression coefficient) của mô hình 1. Như thấy trong cột này, mô hình 1 gồm intercept (tức a), và hai biến x6x7. Mô hình này giải thích (như chúng ta đã biết qua phân tích phần trên) 70% phương sai của y. Trị số BIC (Bayesian Information Criterion) thấp nhất. Trong số tất cả mô hình mà BMA tìm, mô hình này có xác suất xuất hiện là 31.1%.
 
 
  • Cột 6 là ước tính hệ số ảnh hưởng của mô hình 2. Như thấy trong cột này, mô hình 2 gồm intercept (tức a), và biến x6. Mô hình này giải thích 64% phương sai của y. Trong số tất cả mô hình mà BMA tìm, mô hình này có xác suất xuất hiện chỉ là 12.3%.
 
 
  • Các mô hình khác cũng có thể diễn dịch một cách tương tự.
 
 

Một cách thể hiện kết quả trên là qua một biểu đồ như sau:  
 

> imageplot.bma(bma) 
 
 
 

Your browser may not support display of this image.

 
 
 

 

Tài liệu tham khảo cho BMA 
 

Raftery, Adrian E. (1995). Bayesian model selection in social research (with Discussion). Sociological Methodology 1995 (Peter V. Marsden, ed.), pp. 111-196, Cambridge, Mass.: Blackwells. 
 

Một số bài báo liên quan đến BMA có thể tải từ trang web sau đây:

www.stat.colostate.edu/~jah/papers.


_____________________________________________________________

Trích từ quyển Phân Tích Số Liệu và Tạo Biểu Đồ bằng - Hướng Dẫn Thực Hành

Nhà xuất bản Đại Học Quốc gia

© http://vietsciences.org   và  http://vietsciences.free.fr Nguyễn Văn Tuấn