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

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 tun:

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

Der damit berechnete t-Wert Die Methode entspricht der Ausgabe durch die Funktion t-test R. Der p-Wert beträgt jedoch 3.025803e-12.

Irgendwelche Ideen, was ich falsch mache?

Danke!

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) 

Antwort

Verwenden Sie pt und machen Sie es zweiseitig.

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

Kommentare

  • I. Ich denke, es fehlt ein Detail: Wann wird niedriger = F verwendet? – Siehe meine Frage hier: stats.stackexchange.com/questions/133091/…
  • Der Wert muss positiv sein. Wenn Sie ihn also mit einer Variablen verwenden, die negativ sein könnte, geben Sie abs ein.
  • Für einen zweiseitigen Test verwenden Sie ' sucht nach der Wahrscheinlichkeit, dass der Wert kleiner als -11,244 oder größer als +11,244 ist. 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önnten Sie auch 2 * pt (-11,244, 30) tun. Persönlich mache ich normalerweise 2 * pt (-abs (q), df = n-1), da R standardmäßig niedriger als T ist.

Antwort

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

Bearbeiten : Ihre Teststatistik und df sind korrekt. Die andere Antwort weist auf das Problem bei der Berechnung der Endfläche im Aufruf von pt() und die Verdoppelung für zwei Schwänze, die Ihren Unterschied behebt. Trotzdem werde ich meine frühere Diskussion / meinen früheren Kommentar verlassen, da dadurch allgemeinere relevante Punkte zu p-Werten in extremen Schwänzen gemacht werden:

Es ist möglich, dass Sie nichts falsch machen und trotzdem einen Unterschied feststellen. Wenn Sie jedoch ein reproduzierbares Beispiel veröffentlichen, können Sie möglicherweise weiter untersuchen, ob Sie einen Fehler haben (z. B. im df).

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

Wenn die beiden Dinge keine identischen Näherungen verwenden, stimmen sie möglicherweise nicht genau überein, aber diese mangelnde Übereinstimmung sollte keine Rolle spielen (für den genauen Schwanzbereich, der so weit wie möglich aussagekräftig ist, wären die erforderlichen Annahmen müssen mit erstaunlicher Genauigkeit halten). Haben Sie wirklich exakte Normalität, exakte Unabhängigkeit, genau konstante Varianz?

Sie sollten nicht unbedingt eine große Genauigkeit erwarten, wenn die Zahlen sowieso nichts bedeuten. Inwieweit spielt es eine Rolle, ob der berechnete ungefähre p-Wert $ 2 \ mal 10 ^ {- 12} $ oder $ 3 \ mal 10 ^ {- 12} $ ist? Keine der beiden Zahlen misst den tatsächlichen p-Wert Ihrer wahren Situation. Selbst wenn eine der Zahlen den realen p-Wert Ihrer wahren Situation darstellt, warum sollte es Sie interessieren, was dieser Wert tatsächlich ist, wenn er unter etwa 0,0001 $ liegt?

Antwort

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) 

Sie benötigen die abs () -Funktion, da Sie sonst das Risiko eingehen, p-Werte größer als $ 1 $ zu erhalten (wenn der Mittelwert der Daten größer als der angegebene Mittelwert ist)!

Antwort

Ich mag die Antwort von @Aaron zusammen mit den abs -Kommentaren sehr. Ich finde eine praktische Bestätigung,

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

auszuführen, was 0.04999607 ergibt.

Hier verwenden wir die bekannte Eigenschaft, dass 95% der Fläche unter der Normalverteilung bei ~ 1,96 Standardabweichungen auftreten, daher ergibt die Ausgabe von ~ 0,05 unseren p-Wert. Ich habe 1000000 verwendet da wenn N riesig ist, ist die t-Verteilung fast die gleiche wie die Normalverteilung. Das Ausführen gab mir Trost in der @ Aaron-Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.