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.Antworten:
Sie können
abs
im Zähler verwenden (es ist also immer> 0) und die behaltenlower.tail=FALSE
.quelle
Glen_b hat absolut Recht mit dem
abs
, ich habe jedoch festgestellt, dass in bestimmten Datensätzen die Werte-abs
den 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.Erweiterte Antwort auf Anfrage von mdewey.
quelle