Manuelle Berechnung des p-Werts für den t-Test: Wie vermeide ich Werte größer als ?

8

Diese beiden Methoden zur Berechnung des p-Werts sollten äquivalent sein:

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

Das Problem bei der zweiten Methode besteht darin, dass das Risiko besteht, dass Werte größer als (tatsächlich bis zu ) erhalten werden:12

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

Dies kann natürlich durch behoben werden

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

Meine Frage
Offensichtlich ist der Algorithmus der t-Test-Funktion intelligent genug, um diese beiden Fälle zu unterscheiden (unabhängig davon, ob der Stichprobenmittelwert größer oder kleiner als der angegebene Mittelwert ist). Gibt es eine einfache Methode, um die Berechnung des p-Werts manuell zu replizieren, wie dies durch die t-Test-Funktion erfolgt?

Meine derzeitige Lösung ist eine if-Anweisung, die prüft, ob der resultierende Wert größer als und in diesem Fall dieselbe Berechnung erneut mit der Option lower = F durchführt, aber vielleicht gibt es einen besseren Weg.1

vonjd
quelle
8
Schauen Sie sich den Code an : getAnywhere(t.test.default). Sie finden pval <- 2 * pt(-abs(tstat), df)dort.
Roland

Antworten:

7

Sie können absim Zähler verwenden (es ist also immer> 0) und die behalten lower.tail=FALSE.

Glen_b -Reinstate Monica
quelle
0

Glen_b hat absolut Recht mit dem abs, ich habe jedoch festgestellt, dass in bestimmten Datensätzen die Werte -absden gewünschten Effekt haben müssten . Ich kann nicht erklären, warum, aber ich lasse diese Codezeile hier, falls jemand, der ein ähnliches Problem hat, diesen Thread findet.

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

Erweiterte Antwort auf Anfrage von mdewey.

S Tomo
quelle
1
Können Sie näher erläutern, wie dies Ihrer Meinung nach zu den bereits vorhandenen Kommentaren und Antworten beiträgt?
Mdewey