Die folgende Abbildung (Abbildung 1 aus S. 646 dieses Papiers ) vergleicht die beobachteten Werte mit den erwarteten Werten unter der Poisson-Verteilung. Anschließend wird ein Chi-Quadrat-Test durchgeführt, um festzustellen, ob die beobachteten Werte von den erwarteten Werten unter der Poisson-Verteilung abweichen.
Wie ist es mit R möglich, erwartete Werte unter Poisson-Verteilung zu generieren und beobachtete Werte mit einem Chi-Quadrat-Test zu vergleichen?
BEARBEITEN:
Hier ist mein Versuch, das zu tun, was sie in Papierform getan haben. Ich möchte wissen, ob sich die beobachtete Verteilung von variable
von einer Poisson-Verteilung unterscheidet. Ich möchte auch wissen, ob das, was ich unten getan habe, das gleiche Verfahren ist wie das, was sie in Papierform getan haben. Da der P-Wert> 0,05 ist, habe ich unten festgestellt, dass die Verteilung von variable
einer Poisson-Verteilung folgt - könnte jemand dies bestätigen?
df <- data.frame(variable = 0:5, frequency = c(20, 10, 5, 3, 2, 1))
# estimate lambda
mean_df_variable <- mean(df$variable)
# calculate expected values if df$frequency follows a poisson distribution
library(plyr)
expected <- laply(0:5, function(x) dpois(x=x, lambda=mean_df_variable, log = FALSE))
# calculate actual distribution of df$frequency
observed <- df$frequency/sum(df$frequency)
# does distribution of df$frequency differ from a poisson distribution? Apparently
# not because P-value is > 0.05
chisq.test(expected, observed)
Antworten:
Die Art und Weise, wie Sie den Chi-Quadrat-Test durchgeführt haben, ist nicht korrekt. Es gibt mehrere Probleme. Zunächst sieht Ihr Datenrahmen folgendermaßen aus:
Wenn du also rennst
mean(df$variable)
, bekommst du2.5
, was nur der Mittelwert von ist0:5
. Das heißt, es ist ungewichtet. Erstellen Sie stattdessen Ihre Variable wie folgt:Der
table()
Aufruf zeigt, dass der Code uns das gibt, was wir wollten, undmean()
schätzt Lambda daher korrekt.Als nächstes gehen Ihre geschätzten Wahrscheinlichkeiten nur auf
5
, aber die Poisson-Verteilung geht auf unendlich. Sie müssen also die Wahrscheinlichkeiten der Werte berücksichtigen, die Sie nicht in Ihrem Datensatz haben. Dies ist nicht schwer zu tun, Sie berechnen nur die Ergänzung:Schließlich sind in und
R
'schisq.test()
die Argumentex=
undy=
nicht genau für die erwarteten und beobachteten Werte in der Art und Weise, wie Sie dies einrichten. Zum einen nennen Sie "erwartet" tatsächlich Wahrscheinlichkeiten (dh die Ausgabe vondpois()
). Um diese erwarteten Werte zu erhalten, müssten Sie diese Wahrscheinlichkeiten (und das Kompliment) mit der Gesamtzahl multiplizieren. Aber selbst dann würden Sie diese nicht verwendeny=
. Auf jeden Fall müssen Sie das eigentlich nicht tun, Sie können demp=
Argument einfach die Wahrscheinlichkeiten zuweisen . Darüber hinaus müssen Sie0
Ihrem beobachteten Wertevektor einen hinzufügen , um alle möglichen Werte darzustellen, die in Ihrem Datensatz nicht angezeigt werden:Die Warnmeldung deutet darauf hin, dass wir möglicherweise lieber simulieren möchten, also versuchen wir es erneut:
Dies ist vermutlich ein genauerer p-Wert, wirft jedoch die Frage auf, wie er interpretiert werden sollte. Sie fragen: "Da der P-Wert> 0,05 ist, habe ich unten festgestellt, dass die Verteilung der Variablen einer Poisson-Verteilung folgt - könnte jemand dies bestätigen?" Bei Verwendung des richtigen Ansatzes stellen wir fest, dass der erste p-Wert nur <0,05 war, der zweite (simulierte) p-Wert jedoch nur> 0,05. Obwohl der letztere p-Wert genauer ist, würde ich nicht schnell zu dem Schluss kommen, dass die Daten aus einer Poisson-Verteilung stammen. Hier sind einige Fakten zu beachten:
quelle
Wenn ich verstanden habe, was Sie meinten, sollten Sie:
quelle