t検定のp値を手動で計算する:


8

p値を計算するこれらの2つの方法は同等である必要があります。

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

2番目の方法の問題は、より大きい値(実際には)を取得するリスクがあることです。212

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

これはもちろん修正できます

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

私の質問
明らかに、t検定関数のアルゴリズムは、これらの2つのケースを区別するのに十分にインテリジェントです(サンプルの平均が与えられた平均より大きいか小さいか)。t検定関数によって行われる、p値の計算を手動で複製する簡単な方法はありますか?

現在の私の解決策は、結果の値がより大きいかどうかをチェックするifステートメントであり、この場合、lower = Fオプションを使用して同じ計算を再度実行しますが、おそらくより良い方法があります。1


8
コードを見てくださいgetAnywhere(t.test.default)。あなたは見つけることができますpval <- 2 * pt(-abs(tstat), df)が。
Roland

回答:



0

Glen_bはについて完全に正しいですがabs、特定のデータセットでは、値が-abs望ましい効果を発揮するために必要であることを発見しました。理由は説明できませんが、同様の問題を抱えている人がこのスレッドを見つけた場合に備えて、これらのコード行はここに残しておきます。

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

mdeweyのリクエストに応じて拡張された回答。


1
これがすでにあるコメントと回答にどのように追加されると思いますか?
mdewey 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.