Menghitung nilai-p secara manual untuk uji-t: Cara menghindari nilai yang lebih besar dari

8

Dua metode ini untuk menghitung nilai p harus setara:

t.test(rats.drug,mu=1.2)$p.value
2*pt((mean(rats.drug)-1.2)*sqrt(n)/sd(rats.drug),df=n-1)

Masalah dengan metode kedua adalah bahwa ada risiko mendapatkan nilai lebih besar dari 1 (sebenarnya hingga 2):

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1)
[1] 2

Ini tentu saja bisa diperbaiki oleh

2*pt((1.5-1.2)*sqrt(100)/.5,df=100-1,lower=F)
[1] 3.245916e-08

Pertanyaan saya
Jelas algoritma fungsi t-test cukup cerdas untuk membedakan kedua kasus ini (apakah rata-rata sampel lebih besar atau lebih kecil dari rata-rata yang diberikan). Apakah ada metode mudah untuk mereplikasi perhitungan nilai-p secara manual seperti yang dilakukan oleh fungsi uji-t?

Solusi saya saat ini adalah pernyataan if yang memeriksa apakah nilai yang dihasilkan lebih besar dari 1 dan dalam hal ini melakukan perhitungan yang sama lagi dengan opsi = F lebih rendah tapi mungkin ada cara yang lebih baik.

vonjd
sumber
8
Melihat kode: getAnywhere(t.test.default). Anda akan menemukannya di pval <- 2 * pt(-abs(tstat), df)sana.
Roland

Jawaban:

7

Anda dapat menggunakan abspembilang (jadi selalu> 0) dan menyimpan lower.tail=FALSE.

Glen_b -Reinstate Monica
sumber
0

Glen_b benar tentang abs, namun, saya telah menemukan bahwa dalam set data tertentu nilai akan membutuhkan -absuntuk memiliki efek yang diinginkan. Saya tidak dapat menjelaskan alasannya, tetapi saya akan meninggalkan baris kode ini di sini, memetikan siapa pun yang memiliki masalah serupa menemukan utas ini.

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

Jawaban diperluas atas permintaan mdewey.

S Tomo
sumber
1
Bisakah Anda memperluas bagaimana menurut Anda ini menambah komentar dan jawaban yang sudah ada di sana?
mdewey