logo xDuLieu.com

Trang trướcPhân tích sự khác biệtTrang sau

Khái quát về phân tích sự khác biệt

 

Trong phân tích sự khác biệt, các nhóm đã được hình thành sẵn, như các nhà máy được phân nhóm theo sản phẩm như nhà máy thực phẩm, nhà máy dệt, nhà máy sản xuất hàng nhựa. Sự tạo nhóm thường được tạo ra từ một biến, được gọi là biến phân nhóm. Biến này thường có kiểu định danh hay chuyển thành kiểu định danh. Vấn đề của chúng ta làm thế nào để đặc trưng cho sự khác biệt của nhóm ấy từ các biến khác của dữ liệu.

Như vậy ta có thể xem dữ liệu gồm hai loại biến, biến phụ thuộc là biến phân nhóm, biến độc lập là các biến được dùng để xem xét sự khác biệt.


Nguyên tắc phân nhóm

 

Trước hết, để dễ nắm bắt cơ sở của phân tích sự khác biệt, ta xem xét dữ liệu đơn giản như sau:

  • chỉ gồm hai biến độc lập `X_1` và `X_2`,
  • trong dữ liệu chỉ gồm hai nhóm A và B, nghĩa là biến phụ thuộc chỉ có hai giá trị là A và B,
  • các biến độc lập trong cả hai nhóm đều có phân phối chuẩn.

Dữ liệu này được biểu diễn trên hệ trục tọa độ `X_1X_2` như ở Hình 1a.

X1X2X1(1a)(1b) BB AA

Hình 1 Các phần tử được phân nhóm bằng chỉ tiêu `X_1`

Nếu ta dùng một trong hai biến, chẳng hạn `X_1` để làm chỉ tiêu phân loại, thì sự phân phối của các phần tử trong hai nhóm được trình bày trên Hình 1b. Khi ấy, yêu cầu phân nhóm không đạt được, do sự khác biệt giữa hai nhóm không đủ lớn so với sự khác biệt trong từng nhóm.

Tuy nhiên nếu ta sử dụng trục `Z` (Hình 2a) để phân nhóm thì ta có kết quả trên Hình 2b.

X1X2(1a)(1b) BB AA ZZ

Hình 2 Phân nhóm bằng trục `Z`

Ta nhận thấy khi sử dụng chỉ tiêu phân nhóm được biểu diễn bằng trục `Z`, hiệu quả phân nhóm tốt hơn đáng kể: khoảng cách giữa hai nhóm lớn hơn so với sự khác biệt trong từng nhóm.

Từ đó ta rút ra nguyên tắc chung để phân nhóm là ta phải tìm ra hệ tọa độ (là các chỉ tiêu), mà khi các phần tử được biểu diễn bằng một hay một số chỉ tiêu này thì khoảng cách giữa các nhóm lớn hơn đáng kể so với khoảng cách giữa các phần tử trong một nhóm. Về ứng dụng thực tế, số chỉ tiêu được dùng để phân nhóm (gọi tắt là chỉ tiêu phân nhóm) phải ít hơn số nhóm, nghĩa là số chỉ tiêu phân nhóm tối đa là (số nhóm - 1)


Một số cơ sở

 

Để dễ nắm bắt được cơ sở dùng trong phân nhóm, trước hết ta xét trường hợp hai nhóm, sau đó mở rộng cho trường hợp nhiều hơn hai nhóm.

Trường hợp hai nhóm

Xét dữ liệu (thu từ mẫu) gổm một biến phân nhóm và n biến độc lập (`X_1,X_2, . . . , X_n`). Biến phân nhóm có hai giá trị nên ta chia dữ liệu làm hai nhóm A và B, có vectơ trung bình là `bar mb(x)_A` và `bar mb(x)_B`. Ta giả sử rằng ma trận hiệp phương sai `mb(Sigma)` của hai tổng thể chứa hai nhóm bằng nhau. Trong trường hợp tổng quát, số phân tử `p_A` và `p_B` của hai nhóm khác nhau nên ta có ma trận hiệp phương sai gộp `mb(S)_p` của mẫu.

Như đã trình bày ở trên, với hai nhóm, ta chỉ cần 1 chỉ tiêu phân nhóm. Ta ký hiệu chỉ tiêu này là `Z`. Khi ma trân hiệp phương sai của hai nhóm bằng nhau, ta xem `Z` như tổ hợp tuyến tính của các biến độc lập (linear discriminant analysis hay LDA). Vậy:

`Z=a_1X_1+a_2X_2+...+a_iX_i+...+a_nX_n`(1)

Hay dưới dạng vectơ :

`Z=mb(a)^T mb(X)`(2)

`a_i` chính là các hệ số mà ta phải tìm để `Z` thỏa yêu cầu về phân nhóm.

Xét phần tử u thuộc nhóm A, giá trị `z_u` của phần tử này theo trục `Z` được xác định từ các công thức (1) và (2), nghĩa là:

`z_u=a_1X_(1u)+a_2X_(2u)+...+a_iX_(iu)+...+a_nX_(nu) = mb(a)^T mb(x)_u`(3)

Vậy với `p_A` phần tử của nhóm A, ta có trung bình `bar z_A` và phương sai `s_A^2` của `p_A` giá trị `z_u` ấy.

Tương tự, với phần tử `v` thuộc nhóm B, giá trị `z_v` của phần tử này theo trục `Z` cũng được xác định từ các công thức (1) và (2), nghĩa là:

`z_v=a_1X_(1v)+a_2X_(2v)+...+a_iX_(iv)+...+a_nX_(nv) = mb(a)^T mb(x)_v`(4)

Vậy với `p_B` phần tử của nhóm B, ta có trung bình `bar z_B` và phương sai `s_B^2` của `p_B` giá trị `z_v` ấy.

Ngoài ra, do số phân tử `p_A` và `p_B` của hai nhóm khác nhau nên ta có phương sai gộp `s_p^2` của mẫu.

Khoảng cách tương đối suy rộng `D` (khoảng cách Mahalanobis) giữa hai nhóm được xác định như sau:

`D^2=(bar z_A-bar z_B)^2/s_p^2 = [mb(a)^T (bar mb(x)_A - bar mb(x)_B)]^2/(mb(a)^T mb(S)_p mb(a))`(5)

Để đạt yêu cầu về phân nhóm, `D` phải có giá trị cực đại. Điều này xảy ra khi:

`mb(a)=c\ mb(S)_p^(-1) (bar mb(x)_A - bar mb(x)_B)`(6)

Trong đó, `c` là một số bất kỳ. Như vậy ta có thể tìm được nhiều vectơ `mb(a)` đáp ứng công thức (6), nhưng tất cả các vectơ này đều song song nhau, nghĩa là phương của trục `Z` là duy nhất.


Trường hợp nhiều nhóm

Khi dữ liệu gồm `K` nhóm (`K>2`), ta sẽ suy rộng sự khảo sát ở trên, nghĩa là ta cần tìm vectơ `mb(a)` sao cho khoảng cách giữa `bar z_1, bar z_2, . . . , bar z_k, . . . , bar z_K` là cực đại.

Trước hết, ta nhận xét rằng công thức (5) có thể viết lại dưới dạng:

`D^2=(bar z_A-bar z_B)^2/s_p^2 = [mb(a)^T (bar mb(x)_A - bar mb(x)_B)]^2/(mb(a)^T mb(S)_p mb(a))= ( mb(a)^T (bar mb(x)_A - bar mb(x)_B) (bar mb(x)_A - bar mb(x)_B)^T mb(a) ) / (mb(a)^T mb(S)_p mb(a))`(7)

Khi ta mở rộng thành `K` nhóm thì ta thay `(bar mb(x)_A - bar mb(x)_B)(bar mb(x)_A - bar mb(x)_B)^T` bằng ma trận `mb(H)` và `mb(S)_p` bằng ma trận `mb(E)`. Hai ma trận này là sự mở rộng của tổng phương sai nhóm `SS_A` và tổng phương sai sai số `SS_E` (xem thêm phần phân tích phương sai nhiều đáp ứng). Khi ấy, nếu ta gọi `lambda` là tỷ số giữa khoảng cách giữa các nhóm và khoảng cách giữa các phần tử trong một nhóm thì ta có:

`lambda=(mb(a)^T mb(Ha)) / (mb(a)^T mb(Ea))`(8)

Người ta chứng minh được rằng để đạt yêu cầu phân nhóm, `lambda` là các giá trị riêng của ma trận `mb(E)^(-1) mb(H)`. Ma trận này có `s` giá trị được xếp theo thứ tự giảm dần là `lambda_1,lambda_2, . . . , lambda_s`. Với mỗi giá trị ta có một vectơ `mb(a)`, đó chính là vectơ riêng của ma trận `mb(E)^(-1) mb(H)`.


Trường hợp phi tuyến

Trong trường hợp phương sai không đồng nhất, ma trận hiệp phương sai của các nhóm không bằng nhau, mô hình tuyến tính ở công thức (1) không đưa đến kết quả hợp lý, ta phải chuyển sang mô hình phi tuyến. Cho đến nay, mô hình bậc hai (quadratic discriminant analysis hay QDA) được sử dụng phổ biến hơn cả.


Thí dụ

 

Trong thí dụ này ta sẽ dùng R để phân tích sự khác biệt về kích thước đầu của 3 nhóm người. Dữ liệu này thu thập bởi Bryce và Barker để chuẩn bị nghiên cứu về tương quan giữa nón bảo hiểm của vận động viên bóng bầu dục với các chấn thương về cổ trong môn thể thao này. Dữ liệu này lưu trong tập tin non-bao-hiem.csv.

Khảo sát sơ bộ

Trước hết ta chuyển dữ liệu vào R với tên nbh, sau đó dùng lệnh str để xem qua cấu trúc bảng dữ liệu này. Kết quả thu được là:

> str(nbh)
'data.frame':	90 obs. of  7 variables:
 $ Nhom: Factor w/ 3 levels "CP","HP","NP": 2 2 2 2 2 2 2 2 2 2 ...
 $ WID : num  13.5 15.5 14.5 15.5 14.5 14 15 15 15.5 15.5 ...
 $ CIR : num  57.1 58.4 55.9 58.4 58.4 ...
 $ FBE : num  19.5 21 19 20 20 21 19.5 21 20.5 20.5 ...
 $ EYT : num  12.5 12 10 13.5 13 12 13.5 13 13.5 13 ...
 $ EAT : num  14 16 13 15 15.5 14 15.5 14 14.5 15 ...
 $ JAW : num  11 12 12 12 12 13 13 13 12.5 13 ...

Bảng kết quả trên cho thấy :

  • bảng này gồm 90 phần tử,
  • biến phụ thuộc là "Nhom" có 3 giá trị tương ứng với 3 nhóm phần tử là CP (college player: vận động viên đại học cộng đồng), HP (highschool player: vận động viên học sinh trung học), NP (non player: không phải là vận động viên),
  • 6 biến độc lập tương ứng với 6 kích thước của đầu: WID (chiều ngang đầu), CIR (chu vi đầu), FBE (khoảng cách trước - sau đo tại mắt), EYT (khoảng cách từ mắt đến đỉnh đầu), EAT (khoảng cách từ tai đến đỉnh đầu), JAW (chiều ngang của hàm).

Để có một cái nhìn trực quan hơn về toàn bộ dữ liệu, ta vẽ biểu đồ với lệnh sau:

 plot(nbh, col = nbh$Nhom, pch = 20, cex = 1.1)

Và thu được Hình 3.

Hình 3 Tương quan giữa các biến


Phân tích sự khác biệt

Để phân tích sự khác biệt của dữ liệu trên, ta sử dụng lệnh lda (linear discriminant analysis) của phụ kiện MASS. Hai đối số quan trọng của lệnh này là tên bảng dữ liệu và quan hệ giữa biến phụ thuộc và các biến độc lập. Vậy để xử lý dữ liệu trên ta dùng đoạn lệnh sau:

 library(MASS)
 kq <- lda(Nhom ~ ., data = nbh)

Kết quả là một danh sách với 10 thành phần (dùng lệnh names):

> names(kq)
 [1] "prior"   "counts"  "means"   "scaling" "lev"     "svd"     "N"      
 [8] "call"    "terms"   "xlevels"

Để xem xét kết quả, ta dùng lệnh kq và thu được kết quả sau:

> kq
Call:
lda(Nhom ~ ., data = nbh)

Prior probabilities of groups:
       CP        HP        NP 
0.3333333 0.3333333 0.3333333 

Group means:
     WID      CIR      FBE      EYT      EAT      JAW
CP 15.42 57.37967 19.80333 10.08000 13.45333 11.94333
HP 15.20 58.93700 20.10833 13.08333 14.73333 12.26667
NP 15.58 57.77000 19.81000 10.94667 13.69667 11.80333

Coefficients of linear discriminants:
             LD1           LD2
WID -0.948423100  1.4067750094
CIR  0.003639865 -0.0005126312
FBE  0.006439599 -0.0286176430
EYT  0.647483088  0.5402700415
EAT  0.504360916 -0.3839132257
JAW  0.828535064 -1.5288556226

Proportion of trace:
  LD1   LD2 
0.943 0.057

Kết quả trên cho thấy ta có hai chỉ tiêu là LD1 và LD2, mối tương quan giữa hai chỉ tiêu này với các biến độc lập được cho trong phần "Coefficient of linear discriminant". Dựa vào các hệ số trong phần này, ta có thể phán đoán được mối tương quan giữa chỉ tiêu và biến độc lập. Thí dụ chiều ngang đầu (WID) có tương quan chặt chẽ với LD1 và LD2.


Biểu đồ kết quả

Để có cái nhìn trực quan hơn về kết quả phân nhóm bằng các chỉ tiêu LD1 và LD2, ta vẽ biểu đồ xy của các phần tử trên hệ trục LD1 và LD2 này với sự hỗ trợ của phụ kiện ggplot2 và đoạn lệnh sau:

 library(ggplot2)
kqP <- cbind(scale(as.matrix(nbh[,-1]), scale = FALSE) %*% kq$scaling,
nbh[,1,drop = FALSE]) ggplot(data = kqP, aes(x = LD1, y = LD2, col = Nhom, shape = Nhom)) +
geom_point() + geom_text(aes(label = Nhom), size = 3)

Trong ba lệnh trên, lệnh thứ hai để tạo một bảng dữ liệu kqP cung cấp cho lệnh thứ ba ggplot. Ta thu được Hình 4.

Hình 4 Kết quả phân nhóm bằng LD1 và LD2

Qua Hình 4, ta thấy LD1 tách riêng nhóm HP, sau đó LD2 tách riêng hai nhóm CP và NP.



Trang trướcVề đầu chươngTrang sau


Trang web này được cập nhật lần cuối ngày 26/11/2018