Professional Documents
Culture Documents
Lê Tấn Phùng*
1. Khái niệm
Repeated ANOVA tương đương với One way ANOVA, nhưng khác nhau ở chỗ các
nhóm không độc lập với nhau mà có một mối liên quan nào đó. Vì thế, repeated ANOVA còn
gọi là within-subjects ANOVA.
Trong thực tế khá thường gặp các thiết kế nghiên cứu đòi hỏi kỹ thuật phân tích
repeated ANOVA. Có 2 tình huống về thiết kế nghiên cứu minh họa cho kỹ thuật phân tích
này như sau:
(1) Các nghiên cứu nhằm khảo sát sự thay đổi về giá trị trung bình tại nhiều thời điểm
khác nhau.
(2) Các nghiên cứu nhằm khảo sát sự thay đổi về giá trị trung bình theo các điều kiện
khác nhau.
Các ví dụ sau đây minh họa cho 2 tình huống này:
Tình huống (1): Một nghiên cứu về đau do viêm mõm trên lồi cầu xương cánh tay sử
dụng thang đo QuickDASH gồm 11 tiểu mục để đánh giá mức độ đau, được cho điểm từ 1 –
5. Giá trị thu được sau đó sẽ được chuẩn hóa về thang đo 100. Nghiên cứu trên 50 bệnh nhân
sử dụng phương pháp tiêm huyết tương giàu tiểu cầu (Platelet Rich Plasma: PRP) và theo dõi
sự thay đỗi của QuickDASH tại 4 thời điểm khác nhau: tuần 0 (ngay trước khi điều trị), tuần
4, tuần 12 và tuần 26 sau khi điều trị. Giá trị trung bình của QuickDASH được so sánh qua 4
thời điểm này trên cùng một bệnh nhân để đánh giá hiệu quả của phương pháp điều trị PRP.
Đây là tình huống có thể sử dụng One Way Repeated ANOVA để phân tích sự thay đổi này.
Tình huống (2): Cùng một người, cho họ sử dụng 3 loại cafe khác nhau và đếm mạch
của họ sau khi uống 15 phút. So sánh giá trị trung bình của mạch do tác dụng của 3 loại cafe
nói trên. Các điều kiện khác nhau của tình huống ngày chính lá 3 loại cafe khác nhau đó.
Như vậy, one way repeated ANOVA dùng để phân tích sự khác nhau về giá trị trung
bình đo được trên cùng một người (chứ không phải ở những ngưởi khác nhau) tại các thời
điểm khác nhau hoặc ở các “hoàn cảnh” khác nhau.
Bảng dưới đây minh họa cho tình huống 1 đã nêu ở trên:
*
Tiến sĩ, Bác sĩ; Sở Y tế Khánh Hòa, letanphung@yahoo.com
1
Bệnh nhân Giá trị QuickDASH theo thời gian (tuần)
Tuần 0 Tuần 4 Tuần 12 Tuần 26
Nguyễn A 70 60 55 41
Lê B 81 75 67 44
... ... ... ... ...
Huỳnh D 90 82 76 59
... ... ... ... ...
Trung bình μ1 μ2 μ3 μ4
2
Bộ số liệu chứa các thông tin của 50 bệnh nhân, bao gồm 25 biến số như hình bên
dưới. Các bệnh nhân được phân biệt bằng biến “id”. Giá trị QuickDASH tại 4 thời diểm khác
nhau trong bộ số liệu này được lưu trữ với tên biến lần lượt là qd1, qd2, qd3, và qd4.
Để bắt đầu phân tích, click chọn Analyze trên thanh menu, sau dó chọn General
Linear Model và chọn tiếp Repeated Measures
3
(a) Xác định tên yếu tố được đo lường lặp lại: Hộp thoại “Repeated Measures Define
Factor(s)” xuất hiện sau khi đã thực hiện thao tác trên. Trong khung “Within-Subject
Factor Name” đã có sẵn từ “factor1”. Đây là tên yếu tố mặc định. Ta thay đổi tên này
thành Time (Thời gian theo tuần ghi nhận điểm QuickDASH, gồm 4 mốc thời gian
như đã nói trên), bằng cách nhập trực tiếp vào khung này. Tại khung “Numbers of
Levels”, nhập 4, tức là có 4 mốc thời gian khác nhau. Chi tiết xem hình bên dưới.
4
Sau đó, click vào nút “Add”, dòng Time(4) sẽ tự động nhảy vào khung này. Kết thúc
bước (a).
(b) Nhập các biến đo lường lặp lại vào yếu tố “Time”: Tiếp tục hộp thoại trên, click
“Define” sẽ xuất hiện hộp thoại mới để nhập các biến đo lường lặp lại mà trong ví dụ
này, đó là các biến qd1, qd2, qd3, và qd4. Chọn 4 biến này, sau đó click vào mũi tên
trên cùng để chuyển 4 biến này vào khung Within-Subjects Variables (Time) như
hình bên dưới để kết thúc bước (b).
5
(c) Xác định các thông số thống kê cần phân tích: Tại hộp thoại ở trên, chọn “Options...”
để chuyển sang hộp thoại mới: “Repeated Measures Options”. Tại hộp thoại mới này,
click chọn “Time” trong khung bên trái “Factor(s) and Factor Interactions” và click
mũi tên để chuyển “Time” sang khung bên phải “Display Means for”. Ngay bên dưới
khung này, click chọn “Compare main effects”, sau đó chọn “Bonferroni” trong
khung xổ xuống. Tại khung Display bên dưới, click chọn “Descriptive statistics” và
“Estimates of effect size”. Cuối cùng, chọn “Continue” rồi chọn “OK’ để kết thúc.
Màn hình output được thể hiện một phần như hình bên dưới:
6
Sử dụng và giải thích output của SPSS lần lượt như sau:
7
Hình trên mô tả 2 thống kê cơ bản: Within-Subjects Factors và Descriptive
Statistics.
Within-Subjects Factors định nghĩa lại yếu tố (factor) được đo lường lặp lại
với tên yếu tố (Time) và số lần được đo lường (4 lần) và tên các biến liên quan đến 4
lần đo lường đó (qd1, qd2, qd3, và qd4).
Descriptive Statistics trình bày trung bình (Mean), độ lệch chuẩn (Std,
Deviation) và số quan sát (N) của 4 biến qd tại 4 thời điểm đo khác nhau.
Bảng tiếp theo (Multivariate Tests) như hình bên dưới là không cần thiết cho
phân tích này cho nên có thể bỏ qua
Bảng Mauchly’s Test of Sphericity cung cấp kết quả của Mauchly Test về
tính chất Sphericity của số liệu. Sphericity trong trường hợp này tương tự như
Homogenity, tức là sự giống nhau về phương sai của các biến độc lập. Trong trường
hợp của Repeated Measures, Sphericity hàm ý sự biến thiên của từng cặp là không
khác nhau. Do đó, trong test Mauchly người ta mong muốn Test này sẽ không có ý
nghĩa thống kê, tức là p > 0.05, nhằm thỏa mãn điều kiện này trong phân tích
ANOVA.
Bảng kết quả này cho thấy p = 0.065 > 0.05. Do đó điều kiện về Sphericity
được thỏa mãn để tiếp tục phân tích. Để báo cáo kết quả này, người ta phải viết trị số
của Chi bình phương kèm độ tự do và giá trị của p. Với ví dụ này, có thể viết như sau:
Kết quả phân tích cho thấy test sphericity đã được thỏa với χ2(5) = 10.399 và
p = 0.065.
8
Bảng tiếp theo: Tests of Within-Subjects Effects chính là bảng ANOVA, là
bảng chính của phân tích (hình bên dưới) bao gồm 4 cột quan trọng với các thông tin
và ý nghĩa của những thông tin này như sau:
Cột df là độ tự do. Đối với phân tích ANOVA cần có 2 độ tự do: một độ tự do
cho biến độc lập (trong ví dụ này nằm trong hàng “Time”) và một độ tự do cho sai số
(trong ví dụ này là nằm trong hàng “Error (Time)”). Nếu gọi n là số quan sát (trong ví
dụ này n = 50) và k là số lần đo (trong ví dụ này k = 4) thì 2 độ tự do theo thứ tự này
là (k – 1) và (k – 1) (n – 1).
Cột F là giá trị thống kê được tính toán của ANOVA.
Cột Sig (viết tắt của từ significance level) tương đương với giá trị p
Cột Partial Eta Squared: Trong khi p value cho biết có sự khác nhau có ý
nghĩa thống kê hay không giữa các lần đo hay giữa các điều kiện khác nhau thì partial
eta squared (ηp2) là số đo của effect size, tương tự như R2 trong hồi quy tuyến tính,
cho chúng ta biết mức độ ảnh hưởng, mức ý nghĩa của thiết kế mẫu. Effect size càng
lớn thì mức ý nghĩa của phân tích ANOVA càng tốt. Các ngưỡng sau đây được áp
dụng cho giá trị của ηp2:
≥ 0.14: Mức ý nghĩa cao (large effects)
≥ 0.06: Mức ý nghĩa trung bình (medium effects)
≥ 0.01: Mức ý nghĩa thấp (small effects)
Với bảng trên, câu hỏi đặt ra là chọn con số thống kê nào trong rất nhiều số ở
nhiều hàng khác nhau thể hiện trong bảng. Với ví dụ này, do Mauchly test cho tính
chất sphericity đã được thỏa (p > 0.05) cho nên các số thống kê sẽ chọn là những số
thuộc hàng có Sphericity Assumed. Nếu Mauchly test không được thỏa, các điều
chỉnh (correction) được áp dụng với việc sử dụng các số thống kê ở một trong các
điều chỉnh ở 3 hàng bên dưới: Greenhouse-Geisser, Huynh-Feldt và Lower-bound.
Như trên đã nói, có 4 thống kê cần được báo cáo là df, F, sig. và Partial Eta
Squared cho nên trong ví dụ trên có thể báo cáo như sau:
Có sự thay đổi theo thời gian có ý nghĩa thống kê đối với giá trị trung bình của
Quick DASH tại 4 thời điểm khi sử dụng PRP để điều trị: F (3, 147) = 117.033 ; p =
0.000... ; ηp2 = 0.705.
9
Các bảng tiếp theo: Test of Within-Subjects Contrasts và Test of Between
Subjects Effects có thể bỏ qua.
Bảng cuối cùng cần chú ý và báo cáo phân tích là bảng Pairwise
Comparisons. Bảng này gọi là post hoc test sử dụng phương pháp của Bonferroni, so
sánh sự khác biệt giữa từng cặp với nhau với 2 cột đáng chú ý: Sự sai khác số trung
bình (Mean Difference) và mức ý nghĩa (Sig.)
Kết quả phân tích cho thấy tất cả các cặp đều tồn tại sự khác biệt có ý nghĩa
thống kê do toàn bộ mức ý nghĩa (Sig.) đều < 0.001.
Tóm lại, trong phân tích repeated ANOVA, các thông tin cần phải báo cáo bao
gồm:
- Xác định tính chất sphericity được thỏa với test Mauchly.
- Bảng ANOVA
- Báo cáo ý nghĩa thống kê với các số liệu F (df1, df2), p value, partial eta squared
ηp2
- So sánh từng cặp (post hoc, có thể sử dụng phương pháp Bonferroni)
10
4. One way repeated với R
Đối với R, có khá nhiều cách tiếp cận để phân tích repeated measures ANOVA thông
qua các packages khác nhau. Trong bài viết này sẽ trình bày phương pháp sử dụng package
“car” và một số package liên quan để thu thập các thống kê liên quan đến Mauchly’s
sphericity test, bảng ANOVA, effect sizes và phân tích post hoc để so sánh từng cặp.
Trở lại với bộ số liệu trong ví dụ trên (chuyển đổi từ file “prp2019.sav” và được đặt
tên là “data_prp”), ta có các cột liên quan bao gồm id (mã bệnh nhân), qd1 đến qd4 biểu hiện
điểm QuickDASH tại 4 thời diểm khác nhau.
head(data_prp[,c("id","qd1","qd2","qd3","qd4")])
id qd1 qd2 qd3 qd4
1 1 61.36 47.73 36.36 13.64
2 2 54.54 45.45 34.09 13.64
3 3 45.45 31.81 25.00 9.09
4 4 61.36 45.45 29.54 13.64
5 5 31.81 29.54 6.81 0.00
6 6 13.63 9.09 4.54 4.54
Để phân tích repeated ANOVA bằng package “car”, thực hiện các bước sau đây:
- Tạo yếu tố về mức độ (thời gian hoặc điều kiện) dưới dạng factor, tương ứng với
số thời điểm hoặc số điều kiện đã cho. Ví dụ theo dõi số liệu theo 4 thời điểm
khác nhau thì yếu tố tạo ra sẽ bao gồm danh mục 4 mức độ khác nhau, chẳng hạn
xếp theo 1, 2, 3, 4.
- Tạo khung yếu tố dưới dạng data.frame
- Tạo matrix số liệu không chứa subject (tức là không chứa biến id trong ví dụ này
mà chỉ chứa các biến qd1 – qd4), ví dụ tạo thành matrix đặt tên là qdMatrix
- Chạy mô hình lm cho matrix vừa tạo được, ví dụ đặt tên là qdModel <- lm
(qdMatrix ~ 1)
- Load package “car” để sử dụng hàm Anova (mod, idata = , idesign = ~ ), ví dụ tạo
thành object qdANOVA; trong đó mod là tên object tạo được dựa trên lệnh lm ở
trên (là object qdModel), các tham số theo sau idata là data frame và theo sau
idesign là factor tạo được ở trên, có dấu ~ đi trước.
- Chạy summary (qdANOVA, multivariate = F)
- Tính giá trị partial eta squared sử dụng package “heplots” với lệnh etasq ()
- So sánh cặp sử dụng phương pháp bonferroni
Sau đây là các bước thực hiện trên R:
11
> # Tao matrix so lieu khong co id, dat ten matrix la qdMatrix
> qdMatrix <- cbind(data_prp$qd1,data_prp$qd2,data_prp$qd3,data_prp$qd4)
> # Phan tich repeated ANOVA băng lenh Anova cua package car, tao ra object
qdAnalysis:
> qdAnalysis <- Anova(qdModel,idata = qdFrame, idesign = ~qdTime)
Note: model has only an intercept; equivalent type-III tests substituted.
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 p = 2.2e-16
GG eps Pr(>F[GG])
qdTime 0.89753 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
HF eps Pr(>F[HF])
qdTime 0.9547084 3.877699e-37
Kết quả phân tích repeated ANOVA cho kết quả tương tự SPSS, trừ giá trị test
Mauchly có khác nhau do sử dụng phương pháp khác nhau.
Tính giá trị partial eta squared để xác định effect sizes sử dụng package “heplots”:
12
# Tinh gia tri partial eta squared su dung package heplots
> library(heplots)
> etasq(qdAnalysis,anova = TRUE,partial = TRUE)
Giá trị ηp2 thu được là 0.87343, hơi lớn hơn so với phân tích bằng SPSS do phương
pháp khác nhau.
Như vậy, với package “car”, 3 yêu cầu báo cáo của repeated ANOVA đã được đáp
ứng: Mauchly test, bảng ANOVA và effect sizes (hệ số ηp2).
Để so sánh từng cặp, R đòi hỏi phải chuyển đổi bộ số liệu từ dạng “wide” (như hiện
tại) sang dạng “long”. Khái niệm “wide” và “long” được diễn tả theo bảng biểu với 3 bệnh
nhân đầu tiên như sau:
Dạng long
Dạng wide
Như vậy, với yêu cầu này, sau khi chuyển đổi sang dạng “long”, bộ số liệu trong ví dụ
trên sẽ chỉ còn 3 biến: id, time (biểu thị số lần đo ở tuần thứ mấy) và qd (giá trị của Quick
DASH tương ứng với tuần đó).
Sử dụng package reshape2 để thực hiện chuyển đổi từ “wide” sang “long” data.
Trước tiên hãy tạo bộ số liệu con dạng “wide” chỉ có 4 biến: id, qd1, qd2, qd3, qd4
bằng lệnh subset, đặt tên là qd_wide. Sau đó sẽ biến đổi qd_wide thành qd_long sử dụng lệnh
“melt” trong package reshape2. Lưu ý đổi tên các biến “var” và “value” mặc định khi sử
dụng lệnh “melt” sang tên “time” và “qd” sau khi chuyển đổi.
13
# Tao bo so lieu con ten la qd_wide tu bo so lieu goc: data_prp:
> qd_wide <- subset(data_prp, select = c(id,qd1,qd2,qd3,qd4))
> # Chuyen doi tu dang "wide" sang dang "long" cho bo so lieu qd_wide
> library(reshape2)
> qd_long <- melt(qd_wide, id.vars = c("id"))
> # Doi ten var va value trong bo so lieu qd_long sang ten time va qd
> names(qd_long)[2] <- "time"
> names(qd_long)[3] <- "qd"
> head(qd_long)
id time qd
1 1 qd1 61.36
2 2 qd1 54.54
3 3 qd1 45.45
4 4 qd1 61.36
5 5 qd1 31.81
6 6 qd1 13.63
Sau đó, thực hiện so sánh áp dụng phương pháp “Bonferroni” như sau:
with(qd_long,pairwise.t.test(qd,time,paired=TRUE,method="bonferroni"))
Kết quả cho thấy tất cả các cặp đều khác nhau có ý nghĩa thống kê.
14