Manuelles Berechnen des P-Werts aus dem t-Wert im t-Test


49

Ich habe einen Beispieldatensatz mit 31 Werten. Ich habe einen zweiseitigen t-Test mit R durchgeführt, um zu testen, ob der wahre Mittelwert gleich 10 ist:

t.test(x=data, mu=10, conf.level=0.95)

Ausgabe:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Jetzt versuche ich dasselbe manuell zu machen:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

Der mit dieser Methode berechnete t-Wert entspricht der Ausgabe der Funktion t-test R. Der p-Wert ergibt sich jedoch zu 3.025803e-12.

Irgendwelche Ideen, was ich falsch mache?

Vielen Dank!

BEARBEITEN

Hier ist der vollständige R-Code, einschließlich meines Datensatzes:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Antworten:


43

Verwenden Sie ptund machen Sie es zweiseitig.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Ich denke, es fehlt ein Detail: Wann sollte lower = F verwendet werden? - Bitte sehen Sie meine Frage hier: stats.stackexchange.com/questions/133091/…
vonjd

3
Der Wert muss positiv sein. Wenn Sie ihn also mit einer Variablen verwenden, die negativ sein könnte, setzen Sie einen Zeilenumbruch abs.
Aaron - Setzen Sie Monica am

3
Bei einem zweiseitigen Test suchen Sie nach der Wahrscheinlichkeit, dass der Wert unter -11,244 oder über +11,244 liegt. lower = F weist R an, die Wahrscheinlichkeit zu berechnen, dass der Wert größer als der erste Parameter ist. Andernfalls erhalten Sie die Wahrscheinlichkeit, dass der Wert kleiner als der erste Parameter ist. Als solches können Sie auch 2 * pt (-11.244, 30) ausführen. Persönlich mache ich normalerweise 2 * pt (-abs (q), df = n-1), da R standardmäßig niedriger als T ist.
Ashic

9

Ich habe dies als Kommentar gepostet, aber als ich beim Bearbeiten etwas mehr hinzufügen wollte, wurde es zu lang, sodass ich es hierher verschoben habe.

Edit : Deine Teststatistik und df sind korrekt. In der anderen Antwort wird das Problem mit der Berechnung der Schwanzfläche im Anruf für pt()und der Verdopplung für zwei Schwänze zur Kenntnis genommen, wodurch Ihre Differenz behoben wird. Trotzdem werde ich meine frühere Diskussion / Bemerkung verlassen, weil sie relevante Punkte allgemeiner über p-Werte in extremen Schwänzen macht:

Es ist möglich, dass Sie nichts falsch machen und trotzdem einen Unterschied machen, aber wenn Sie ein reproduzierbares Beispiel posten, ist es möglich, weiter zu untersuchen, ob Sie einen Fehler haben (sagen wir im df).

Diese Dinge werden aus Näherungen berechnet, die im extremen Heck möglicherweise nicht besonders genau sind.

Wenn die zwei Dinge nicht identische Näherungen verwenden, stimmen sie möglicherweise nicht genau überein, aber das Fehlen einer Übereinstimmung sollte keine Rolle spielen (für den exakten Heckbereich, der für eine aussagekräftige Zahl ausschlaggebend ist, müssten die erforderlichen Annahmen erstaunlich hoch sein Richtigkeit). Haben Sie wirklich exakte Normalität, exakte Unabhängigkeit, genau konstante Varianz?

2×10-123×10-120,0001


7

Die beste Methode zur manuellen Berechnung ist:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1


0

Mir gefällt die Antwort von @Aaron sehr gut, zusammen mit den absKommentaren. Ich finde eine handliche bestätigung zum laufen

pt(1.96, 1000000, lower.tail = F) * 2

was ergibt 0.04999607.

Hier verwenden wir die bekannte Eigenschaft, dass 95% der Fläche unter der Normalverteilung bei ~ 1,96 Standardabweichungen auftreten und die Ausgabe von ~ 0,05 unseren p-Wert ergibt. Ich habe 1000000 verwendet, da wenn N sehr groß ist, die t-Verteilung fast dieselbe ist wie die Normalverteilung. Wenn ich das laufen lasse, habe ich mich in der @ Aaron-Lösung wohl gefühlt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.