Hai phương pháp tính giá trị p phải tương đương nhau:
t.test(rats.drug,mu=1.2)$p.value
2*pt((mean(rats.drug)-1.2)*sqrt(n)/sd(rats.drug),df=n-1)
Vấn đề với phương pháp thứ hai là có nguy cơ nhận được các giá trị lớn hơn (thực tế lên đến ):
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2
Điều này tất nhiên có thể được khắc phục bằng
2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08
Câu hỏi của tôi
Rõ ràng thuật toán của hàm kiểm tra t đủ thông minh để phân biệt hai trường hợp này (cho dù giá trị trung bình mẫu lớn hơn hay nhỏ hơn giá trị trung bình đã cho). Có một phương pháp dễ dàng để sao chép thủ công tính toán giá trị p khi nó được thực hiện bởi chức năng kiểm tra t?
Giải pháp của tôi tại thời điểm này là một câu lệnh if kiểm tra xem giá trị kết quả có lớn hơn hay không và trong trường hợp này thực hiện lại phép tính tương tự với tùy chọn low = F nhưng có lẽ có cách tốt hơn.
getAnywhere(t.test.default)
. Bạn sẽ tìm thấypval <- 2 * pt(-abs(tstat), df)
ở đó.