Menu

Kiểm định t trong R: một mẫu, hai mẫu và t.test() ghép cặp

Chạy kiểm định t một mẫu, hai mẫu và ghép cặp bằng t.test(), và quan trọng hơn cả: đọc hiểu từng dòng kết quả, gồm t, df, p-value, khoảng tin cậy.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Kiểm định t hỏi điều gì

Mọi kiểm định t (t-test) đều trả lời cùng một câu hỏi nền tảng: chênh lệch trung bình này là thật, hay chỉ là nhiễu? Mẫu luôn dao động: đo thời gian phản xạ của mười người hai lần, bạn sẽ có hai trung bình khác nhau dù chẳng có gì thay đổi. Kiểm định t so sánh chênh lệch bạn quan sát được với mức dao động bạn có thể chờ đợi do ngẫu nhiên, và cho biết dữ liệu của bạn sẽ đáng ngạc nhiên đến mức nào nếu chênh lệch thật bằng 0.

Ba dạng, một hàm:

  • Một mẫu: trung bình của nhóm này có khác một giá trị cố định không?
  • Hai mẫu: hai nhóm độc lập này có trung bình khác nhau không?
  • Ghép cặp: cùng các đối tượng có thay đổi giữa hai lần đo không?

Một mẫu: t.test(x, mu = ...)

Giả sử một quy trình được kỳ vọng mất trung bình 5,0 giây, và bạn bấm giờ mười lần chạy:

Trung bình mẫu là 5,61, nhưng cao hơn mục tiêu 0,61 với chỉ mười lần chạy có ý nghĩa không, hay vẫn nằm trong mức dao động bình thường? Đó chính là điều kết quả trả lời.

Đọc kết quả từng dòng

Đây là phần đáng giá nhất: kết quả của mọi biến thể t.test() đều có cùng một dạng, nên hãy học cách đọc một lần. Chạy khối code ở trên và đối chiếu từng dòng:

  • t = 4.26: thống kê kiểm định, bằng chênh lệch quan sát được (5,61 − 5 = 0,61) chia cho sai số chuẩn của trung bình (khoảng 0,143). Nó cho biết trung bình mẫu nằm cách giá trị giả thuyết hơn bốn sai số chuẩn một chút. |t| càng lớn thì càng đáng ngạc nhiên dưới giả thuyết không.
  • df = 9: bậc tự do, ở đây là n − 1. df nhỏ nghĩa là mẫu nhỏ, và khi đó kiểm định đòi t lớn hơn mới bị thuyết phục.
  • p-value ≈ 0.002: nếu trung bình thật đúng là 5, xác suất rút được một mẫu có trung bình cách 5 ít nhất chừng này (theo bất kỳ chiều nào) là khoảng 0,2%. Đó là toàn bộ ý nghĩa. Nó không phải xác suất trung bình thật bằng 5, và một p-value nhỏ không chứng minh lời giải thích bạn ưng ý: nó chỉ nói "khó đổ cho ngẫu nhiên". Với ngưỡng thông dụng 0,05, ở đây bạn bác bỏ giả thuyết không.
  • alternative hypothesis: nhắc lại "bác bỏ" sẽ có nghĩa là gì. not equal to 5 xác nhận đây là kiểm định hai phía.
  • 95 percent confidence interval: 5.29 to 5.93: khoảng các giá trị trung bình thật phù hợp với dữ liệu. Để ý rằng 5 nằm ngoài khoảng này: đó là cùng kết luận với p < 0,05, được nói bằng đơn vị của chính dữ liệu, và nó còn cho biết độ lớn hợp lý của hiệu ứng, điều p-value không bao giờ cho biết.
  • sample estimates: trung bình quan sát được, để người đọc thấy sự thật thô đang được kiểm định.

Nếu cần lấy từng phần bằng code: result <- t.test(times, mu = 5), rồi result$p.value, result$conf.int, result$estimate.

Hai mẫu: so sánh các nhóm độc lập

Với hai nhóm độc lập, cách viết bằng công thức đọc lên giống hệt câu hỏi. ToothGrowth ghi lại độ dài răng của chuột lang được cho uống vitamin C dưới dạng nước cam (OJ) hoặc axit ascorbic (VC):

Hãy đọc là "kiểm định len chia theo supp". Kết quả giờ có hai giá trị ước lượng (trung bình mỗi nhóm, khoảng 20,7 so với 17,0), và khoảng tin cậy là cho chênh lệch giữa chúng. Ở đây p ≈ 0,061 và khoảng tin cậy chạy từ khoảng −0,17 đến 7,57: nó cắt qua 0, nên ở mức 0,05 bạn không loại trừ được khả năng "không có chênh lệch", dù một khoảng kéo dài đến +7,6 cũng cảnh báo bạn đừng tuyên bố chênh lệch không tồn tại. "Không có ý nghĩa thống kê" nghĩa là chưa được chứng minh, không phải đã chứng minh là không có.

Welch là mặc định, và điều đó tốt

Nhìn vào dòng tiêu đề của kết quả: Welch Two Sample t-test, với df là số lẻ (khoảng 55,3). Kiểm định t Student cổ điển giả định hai nhóm có phương sai bằng nhau; phiên bản Welch bỏ giả định đó và điều chỉnh bậc tự do để bù lại. Khi phương sai thật sự bằng nhau, Welch cho kết quả về cơ bản y hệt; khi chúng khác nhau, kiểm định Student có thể lệch chuẩn nghiêm trọng trong khi Welch vẫn trung thực. Vì vậy mặc định của R là lựa chọn an toàn, hiếm khi có lý do để thay đổi nó.

Thói quen "kiểm tra phương sai bằng nhau trước rồi mới chọn kiểm định" là lời khuyên đã lỗi thời; cứ dùng Welch.

Ghép cặp: trước và sau

Khi cả hai lần đo đến từ cùng các đối tượng, hai nhóm không độc lập, và coi chúng là độc lập sẽ làm mất sức mạnh của kiểm định. Điểm của tám người trước và sau một khóa đào tạo:

paired = TRUE kiểm định trung bình của chênh lệch trong từng người (ở đây trung bình 2,75 điểm, p ≈ 0,001). Vì sao ghép cặp thay đổi mọi thứ: mọi người khác nhau nhiều hơn hẳn so với mức khóa học làm thay đổi bất kỳ ai, nên độ phân tán giữa các đối tượng từ 65 đến 80 sẽ nhấn chìm mức cải thiện 2 đến 3 điểm trong một kiểm định không ghép cặp. Lấy hiệu số sẽ trừ đi mức nền của từng người, chỉ còn lại phần thay đổi. Quy tắc: nếu dữ liệu có cấu trúc tự nhiên "cùng một đơn vị đo hai lần", hãy ghép cặp. (Và đừng bao giờ dùng paired = TRUE khi các nhóm thật sự độc lập: việc ghép cặp khi đó là hư cấu.)

Kiểm định một phía: cẩn thận khi dùng

Mặc định kiểm định là hai phía: nó coi chênh lệch theo bất kỳ chiều nào cũng là bằng chứng. Nếu, trước khi xem dữ liệu, giả thuyết của bạn chỉ có nghĩa theo một chiều, bạn có thể nói rõ điều đó:

p-value giảm một nửa so với kiểm định hai phía, đó chính là lý do có sự cám dỗ: chuyển sang một phía sau khi đã ngó dữ liệu là p-hacking. Chỉ dùng alternative = "greater" hoặc "less" khi chiều kiểm định thật sự được xác định từ trước; khi còn nghi ngờ, hãy giữ hai phía.

Giả định và phương án dự phòng

Kiểm định t giả định các quan sát độc lập và trung bình mẫu có phân phối xấp xỉ chuẩn, điều này đúng khi bản thân dữ liệu gần chuẩn hoặc mẫu đủ lớn (định lý giới hạn trung tâm gánh phần việc nặng; từ khoảng 30 trở lên mỗi nhóm, việc lệch chuẩn ở mức vừa phải không còn là vấn đề). Kiểm tra hình dạng bằng một histogram hoặc boxplot nhanh. Còn tính độc lập thì không kiểm định nào cứu được: nó đến từ cách dữ liệu được thu thập.

Với mẫu nhỏ có dữ liệu lệch rõ rệt hoặc điểm ngoại lai cực đoan, phương án phi tham số tiêu chuẩn chỉ là một dòng: wilcox.test(len ~ supp, data = ToothGrowth), so sánh các phân phối qua thứ hạng thay vì trung bình.

Điều cần nhớ

  • t.test(x, mu = ) cho một mẫu, t.test(y ~ group, data = ) cho hai mẫu, paired = TRUE cho trước và sau.
  • p-value là "dữ liệu này đáng ngạc nhiên đến mức nào nếu chênh lệch thật bằng 0", không hơn; khoảng tin cậy cho biết độ lớn hợp lý của hiệu ứng bằng đơn vị thật.
  • Mặc định hai mẫu của R là kiểm định Welch (df lẻ): hãy giữ nguyên.
  • Ghép cặp loại bỏ nhiễu giữa các đối tượng; dùng nó bất cứ khi nào cùng các đơn vị được đo hai lần.
  • Chỉ dùng giả thuyết một phía khi chiều đã được cam kết từ trước; wilcox.test() là phương án dự phòng dựa trên thứ hạng.

Tiếp theo: so sánh trung bình của ba nhóm trở lên cùng lúc, ANOVA với aov().

Câu hỏi thường gặp

Làm sao để chạy kiểm định t trong R?

Dùng t.test(). Một mẫu so với một giá trị cố định: t.test(x, mu = 5). Hai nhóm độc lập: t.test(value ~ group, data = df). Số đo trước và sau trên cùng đối tượng: t.test(after, before, paired = TRUE).

Đọc p-value của kiểm định t trong R thế nào?

Đó là xác suất thấy một chênh lệch ít nhất lớn bằng chênh lệch của bạn nếu chênh lệch thật bằng 0. Một p-value nhỏ (theo quy ước là dưới 0,05) nghĩa là khó giải thích dữ liệu như nhiễu ngẫu nhiên, nên bạn bác bỏ giả thuyết không. Nó không phải xác suất giả thuyết không đúng, và không nói gì về độ lớn hay tầm quan trọng của chênh lệch: hãy đọc khoảng tin cậy để biết điều đó.

Vì sao R mặc định báo cáo kiểm định t Welch?

t.test() hai mẫu của R mặc định dùng phiên bản Welch, không giả định hai nhóm có phương sai bằng nhau, vì thế bậc tự do ra số lẻ. Welch cho kết quả gần như y hệt kiểm định Student cổ điển khi phương sai bằng nhau và an toàn hơn khi chúng khác nhau, nên mặc định này là lựa chọn đúng. Chỉ dùng var.equal = TRUE khi bài tập yêu cầu rõ kiểm định gộp cổ điển.

Khi nào nên dùng kiểm định t ghép cặp trong R?

Khi hai bộ số đo đi theo từng cặp tự nhiên: cùng một đối tượng đo trước và sau, cùng một vật được chấm bằng hai phương pháp. t.test(after, before, paired = TRUE) kiểm định trung bình của các chênh lệch trong từng cặp, loại bỏ biến thiên giữa các đối tượng và thường mạnh hơn nhiều so với việc coi hai nhóm là độc lập.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu