Tính toán thủ công giá trị p cho kiểm tra t: Làm thế nào để tránh các giá trị lớn hơn ?


8

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 ):12

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.1


8
Nhìn vào mã : getAnywhere(t.test.default). Bạn sẽ tìm thấy pval <- 2 * pt(-abs(tstat), df)ở đó.
Roland

Câu trả lời:



0

Glen_b hoàn toàn đúng về abs, tuy nhiên, tôi đã thấy rằng trong một số bộ dữ liệu nhất định, các giá trị sẽ yêu cầu -absphải có hiệu ứng mong muốn. Tôi không thể giải thích tại sao, nhưng tôi sẽ để những dòng mã này ở đây, khiến bất cứ ai gặp vấn đề tương tự đều tìm thấy chủ đề này.

  t.value <- betacoeff/standard error of the beta coefficients
  p.value <- 2 * pt(-abs(t.value), df = nrow(data)-2)

Câu trả lời mở rộng theo yêu cầu của mdewey.


1
Bạn có thể mở rộng về cách bạn nghĩ điều này thêm vào nhận xét và câu trả lời đã có không?
mdewey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.