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:
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.
getAnywhere(t.test.default). Sie findenpval <- 2 * pt(-abs(tstat), df)dort.