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 (sebenarnya hingga ):
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 dan dalam hal ini melakukan perhitungan yang sama lagi dengan opsi = F lebih rendah tapi mungkin ada cara yang lebih baik.
getAnywhere(t.test.default)
. Anda akan menemukannya dipval <- 2 * pt(-abs(tstat), df)
sana.Jawaban:
Anda dapat menggunakan
abs
pembilang (jadi selalu> 0) dan menyimpanlower.tail=FALSE
.sumber
Glen_b benar tentang
abs
, namun, saya telah menemukan bahwa dalam set data tertentu nilai akan membutuhkan-abs
untuk 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.Jawaban diperluas atas permintaan mdewey.
sumber