Ich betrachte die Stichproben-Kurtosis einer ziemlich verzerrten Zufallsvariablen, und die Ergebnisse scheinen inkonsistent zu sein. Um das Problem einfach zu veranschaulichen, habe ich mir die Beispielkurtose eines logarithmisch normalen Wohnmobils angesehen. In R (was ich langsam lerne):
library(moments);
samp_size = 2048;
n_trial = 4096;
kvals <- rep(NA,1,n_trial); #preallocate
for (iii in 1:n_trial) {
kvals[iii] <- kurtosis(exp(rnorm(samp_size)));
}
print(summary(kvals));
Die Zusammenfassung, die ich bekomme, ist
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.87 28.66 39.32 59.17 61.70 1302.00
Laut Wikipedia sollte die Kurtosis für dieses logarithmisch normale Wohnmobil bei 114 liegen. Die Kurtosis der Probe ist eindeutig voreingenommen.
Bei einigen Nachforschungen stellte ich fest, dass die Probenkurtose bei kleinen Probengrößen voreingenommen ist. Ich habe den 'G2'-Schätzer verwendet, wie er im e1071
Paket in CRAN bereitgestellt wird , und habe für diese Stichprobengröße sehr ähnliche Ergebnisse erhalten.
Die Frage : Welche der folgenden Aussagen charakterisieren, was los ist:
- Diese Implementierungen von Probe Kurtosis leiden unter numerischen Problemen , die durch korrigiert werden könnten , zB Terriberry Methode (in die gleichen Weise , dass Welford Methode bessere Ergebnisse als die naive Methode zur Stichprobenvarianz gibt).
- Ich habe die Populationskurtose falsch berechnet. (Autsch)
- Die Probenkurtose ist von Natur aus voreingenommen und kann bei so kleinen Probengrößen niemals behoben werden.
quelle
;
an den Enden Ihrer Aussagen. Sie haben richtig vorab zugewiesen, aber keine Notwendigkeit zu füllenNA
,kvals <- numeric(length = n_trial)
hätte genügt. Mitrep
benötigen Sie nur die Argumente 1 und 3 aus Ihrem Aufruf (zBrep(NA, 10)
). In derfor
Schleifeneinstellung1:n_trial
kann beim Programmieren gefährlich sein; besser istseq_along(kvals)
oderseq_len(n_trial)
in diesem Fall. Wenn Sie das Drucken nicht erzwingen müssen, lassen Sie dieprint()
Runde fallensummary()
- Sie brauchen sie nur, wenn Sie nicht interaktiv mit R. HTH arbeiten.print
. Die Argumenterep
waren sicherlich falsch.Antworten:
Es gibt eine Bias-Korrektur . Es ist nicht riesig. Ich glaube, dass die Stichprobenvarianz der Kurtosis proportional zum achten (!) Zentralmoment ist, was für eine logarithmische Normalverteilung enorm sein kann. Sie würden Millionen von Versuchen (oder weit mehr) in einer Simulation benötigen, um Verzerrungen zu erkennen, es sei denn, der Lebenslauf ist winzig. (Zeichnen Sie ein Histogramm von kvals, um zu sehen, wie außergewöhnlich schief sie sind.)
Die richtige Kurtosis liegt in der Tat bei 113.9364.
In Bezug auf den R-Stil kann es praktisch sein, die Simulation in eine Funktion zu kapseln, damit Sie die Stichprobengröße oder die Anzahl der Versuche leicht ändern können.
quelle
e1071
gibt die 'Standard'-Vorspannungskorrektur an; Siehe cran.r-project.org/web/packages/e1071/e1071.pdf . Die Verwendung dieses Schätzers anstelle von g2, der vommoments
Paket implementiert wurde , hatte wenig Wirkung, wie ich im Q festgestellt habe. Die Abhängigkeit vom achten Moment würde tatsächlich bedeuten, dass die Stichprobengröße hier zu klein ist.[Nur auf dem R-Stil - @whuber hat die Kurtsosis Q beantwortet]
Dies war etwas zu kompliziert, um in einen Kommentar einzusteigen. Für solche einfachen Schleifen wie die von Ihnen verwendete können wir den Vorschlag von @ whuber kombinieren, die Simulation in einer Funktion mit der
replicate()
Funktion zu kapseln .replicate()
kümmert sich um die Zuordnung und führt die Schleife für Sie aus. Ein Beispiel ist unten angegeben:Wir benutzen es so:
Beachten Sie, dass ich die
rlnorm()
Funktion verwende, um die logarithmische normale Zufallsvariable zu generieren. Es entsprichtexp(rnorm())
in Ihrer Schleife, verwendet jedoch das richtige Werkzeug, und wir erlauben unserer Funktion, benutzerdefinierte Parameter der Protokollnormalverteilung weiterzugeben.quelle
set.seed
, was in solchen Beispielen helfen würde. Gibt es einen wesentlichen Grund für die Kapselung in einer Funktion ( z. B. kompiliert der R-Interpreter Funktionen vor, daher gibt es eine gewisse Beschleunigung) oder ist er stilistisch ( z. B. ist die Kapselung von Funktionen wie Brokkoli gut für Sie) oder irgendwo dazwischen ( zB gibt es zum Beispiel viele Operatoren in R, die auf Funktionen einwirken, also sollte man sich an die funktionale Programmierung gewöhnen)?source('foo.r')
;)