Generalized Linear Models

Chúng ta đã làm quen với các model hồi qui tuyến tính trong thống kê khi mà các biến output là biến định lượng và sai số có phân phối chuẩn. Tuy nhiên trong trường hợp các biến output là biến rời rạc và sai số không tuân theo phân phối chuẩn chẳng hạn như hồi qui logistic hoặc hồi qui Poisson thì sẽ không sử dụng được các giả định của model hồi qui tuyến tính. Cả 2 trường hợp này đều thuộc về họ các model hồi qui được gọi là hồi qui tổng quát (generalized linear models).

Generalized linear models là mở rộng của model hồi qui truyền thống cho phép trung bình phụ thuộc vào biến giải thích thông qua một hàm liên kết (link function) và giá trị trả về là bất kì một phần tử nào của một tập hợp các phân phối được gọi là họ các lũy kế (chẳng hạn Normal, Poisson, Binormial).

Trong R chúng ta có thể sử dụng hàm glm() để hồi qui các model theo phương pháp hồi qui tổng quát. Cách sử dụng hoàn toàn tương tự như hàm lm() nhưng có thêm một phần tử family để mô tả phân phối của sai số và hàm liên kết được sử dụng trong model. Chẳng hạn như bên dưới là ví dụ cụ thể về cách sử dụng đối với hồi qui logistic, hồi qui poisson và hồi qui binomial.

Logistic Regression

Hồi qui logistic phù hợp với các bài toán khi biến target là các biến phân loại gồm 2 khả năng. Về hồi qui logistic chúng ta có thể tìm hiểu tại logistic regression.

Bài toán: Giả sử chúng ta có số liệu về 100 hộ gia đình gồm các thông tin cơ bản như income, no_child để dự báo khả năng sử hữu xe của hộ gia đình đó.

Khi đó chúng ta có thể sử dụng hàm glm() với family = binomial.

income_0 <- runif(50, 2000, 4000)
income_1 <- runif(50, 3000, 8000)
income <- c(income_0, income_1)
no_child_0 <- round(runif(50,2,5),0)
no_child_1 <- round(runif(50,1,3),0)
no_child <- c(no_child_0, no_child_1)
own_car <- c(rep(0, 50), rep(1, 50))
df <- data.frame(income, no_child, own_car)
head(df)
##     income no_child own_car
## 1 2979.138        3       0
## 2 3478.782        2       0
## 3 2633.582        3       0
## 4 3160.947        2       0
## 5 3619.324        2       0
## 6 3358.170        2       0

Fitting model

results = glm(own_car~no_child + income, family = binomial)
summary(results)
## 
## Call:
## glm(formula = own_car ~ no_child + income, family = binomial)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -1.56137  -0.12962  -0.00121   0.02244   2.14755  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)   
## (Intercept) -9.36551    4.66501  -2.008  0.04469 * 
## no_child    -2.11008    0.83219  -2.536  0.01123 * 
## income       0.00365    0.00126   2.896  0.00378 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 138.629  on 99  degrees of freedom
## Residual deviance:  34.874  on 97  degrees of freedom
## AIC: 40.874
## 
## Number of Fisher Scoring iterations: 8

Trong một số trường hợp ta cần trích xuất các hệ số của phương trình hồi qui:

coef(results)
## (Intercept)    no_child      income 
## -9.36550470 -2.11007474  0.00364991

Dự báo cho một observation mới:

predict.glm(results, data.frame(income = 2500, no_child = 2), type = 'response')
##          1 
## 0.01142028

Xác xuất để một gia đình có thu nhập là 2500$ và 2 con sở hữu xe là 0.048

Poisson Regression

Khi dữ liệu của chúng ta được tổng hợp theo số lượng (chẳng hạn như số lần tung một đồng xu thu được mặt ngửa, số lượt xe vượt đèn đỏ, ….) chúng ta sẽ sử dụng hồi qui poisson. Rất nhiều những biến rời rạc có số đếm như là đầu ra. Binomial counts là số lượng các lần thành công trong n thử nghiệm cố định. Poisson count đếm số lượng các khả năng xảy ra của một sự kiện trong một khoảng thời gian nào đó. Trong khi Binomial counts sẽ chỉ đếm giá trị giữa 0 và n, Poission count không có cận trên.

Chúng ta sẽ xét một mô hình hồi qui phi tuyến trong đó các biến trả về là phép đếm rời rạc tuần theo qui luật phân phối Poisson. Hồi qui poisson sẽ xây dựng một model giải thích trung bình biến target \(\muy\) thay đổi bao nhiêu như là một hàm của một hoặc nhiều biến giải thích.

Bài toán: Nghiên cứu 100 trường hợp đợi xe bus cho thấy thời gian đợi xe bus càng lâu thì khả năng rời đi càng lớn. Chúng ta giả định thời gian chờ xe bus tuân theo qui luật phân phối poisson và số lượng rời đi phụ thuộc vào thời gian chờ.

Chúng ta có thể tạo ra được model dự báo số lượng rời đi phụ thuộc vào thời gian chờ xe thông qua hồi qui Poisson Regression.

time <- c(runif(50, 0, 20), runif(50, 10, 50))
wait <- c(rep(1, 50), rep(0, 50))
df <- data.frame(time, wait)
head(df)
##       time wait
## 1 9.868461    1
## 2 9.628976    1
## 3 7.703424    1
## 4 7.106134    1
## 5 6.385597    1
## 6 2.409977    1

Fitting model

results1 = glm(wait~time, family = poisson, data = df)
summary(results1)
## 
## Call:
## glm(formula = wait ~ time, family = poisson, data = df)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.0663  -0.5219  -0.2409   0.1939   1.0778  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.53435    0.21473   2.489   0.0128 *  
## time        -0.09602    0.01891  -5.079  3.8e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 69.315  on 99  degrees of freedom
## Residual deviance: 28.629  on 98  degrees of freedom
## AIC: 132.63
## 
## Number of Fisher Scoring iterations: 5