Ich hatte noch nie einen Statistikkurs und hoffe, dass ich hier an der richtigen Stelle nachfragen kann.
Angenommen, ich habe nur zwei Daten, die eine Normalverteilung beschreiben: den Mittelwert und die Varianz . Ich möchte einen Computer verwenden, um zufällig eine Stichprobe aus dieser Distribution zu ziehen, sodass ich diese beiden Statistiken respektiere.
Es ist ziemlich offensichtlich, dass ich mit dem Mittelwert umgehen kann, indem ich einfach auf 0 normiere: Addiere einfach zu jedem Sample, bevor du das Sample ausgibst. Aber ich verstehe nicht, wie man programmatisch Samples erzeugt, um zu respektieren .
Mein Programm wird in einer konventionellen Programmiersprache sein; Ich habe keinen Zugriff auf statistische Pakete.
Antworten:
Wenn Sie aus einer gegebenen Verteilung mit dem Mittelwert 0 und der Varianz 1 abtasten können, können Sie leicht aus einer Skalenorttransformation dieser Verteilung abtasten, die den Mittelwert und die Varianz σ 2 hat . Wenn x eine Stichprobe aus einer Verteilung von Mittelwert 0 und Varianz 1 ist, dann ist σ x + μ eine Stichprobe mit Mittelwert μ und Varianz σ 2 . Sie müssen die Variable also nur um die Standardabweichung σ (Quadratwurzel der Varianz) skalieren, bevor Sie den Mittelwert μ addieren .μ σ2 x
Wie Sie tatsächlich eine Simulation aus einer Normalverteilung mit Mittelwert 0 und Varianz 1 erhalten, ist eine andere Geschichte. Es macht Spaß und ist interessant zu wissen, wie man solche Dinge implementiert, aber ob Sie ein Statistikpaket oder eine Programmiersprache verwenden oder nicht, ich empfehle Ihnen, eine geeignete Funktion oder Bibliothek für die Zufallszahlengenerierung zu erhalten und zu verwenden. Wenn Sie Ratschläge zur Verwendung der Bibliothek benötigen, möchten Sie möglicherweise spezifische Informationen zu den von Ihnen verwendeten Programmiersprachen hinzufügen.
Bearbeiten: Im Lichte der Kommentare, einiger anderer Antworten und der Tatsache, dass Fixee diese Antwort akzeptiert hat, werde ich einige Details dazu geben, wie man Transformationen von einheitlichen Variablen verwenden kann, um normale Variablen zu erzeugen.
Letztendlich ist eine korrekt implementierte Methode nicht besser als der verwendete einheitliche Pseudozufallszahlengenerator. Persönlich greife ich lieber auf Spezialbibliotheken zurück, die ich für vertrauenswürdig halte. Ich verlasse mich fast immer auf die in R implementierten Methoden, entweder direkt in R oder über die API in C / C ++. Natürlich ist dies nicht für alle eine Lösung, aber ich kenne andere Bibliotheken nicht gut genug, um Alternativen zu empfehlen.
quelle
Dies ist wirklich ein Kommentar zu Michael Lews Antwort und Fixees Kommentar, wird aber als Antwort gepostet, da ich auf dieser Site nicht den Ruf habe, einen Kommentar abzugeben.
quelle
In addition to the answer by NRH, if you still have no means to generate random samples from a "standard normal distribution" N(0,1), below is a good and simple way (since you mention you don't have a statistical package, the functions below should be available in most standard programming languages).
1. Generate u and v as two uniformly distributed random numbers in the range from -1 to 1 by
u = 2 r1 - 1
andv = 2 r2 - 1
2.calculate
w = u^2 + v^2
if w > 1 the go back to 13.return u*z and y= v*z with
z= sqrt(-2ln(w)/w)
A sample code would look like this:then use what MHR has suggested above to obtain the random deviates from
N(mu, sigma^2)
.quelle
The normal distribution emerges when one adds together a lot of random values of similar distribution (similar to each other, I mean). If you add together ten or more uniformly distributed random values then the sum is very nearly normally distributed. (Add more than ten if you want it to be even more normal, but ten is enough for almost all purposes.)
Say that your uniform random values are uniformly distributed between 0 and 1. The sum will then be between 0 and 10. Subtract 5 from the sum and the mean of the resulting distribution will be 0. Now you divide the result by the standard deviation of the (near) normal distribution and multiply the result by the desired standard deviation. Unfortunately I'm not sure what the standard deviation of the sum of ten uniform random deviates is, but if we are lucky someone will tell us in a comment!
I prefer to talk to students about the normal distribution in these terms because the utility of the assumption of a normal distribution in many systems stems entirely from the property that the sums of many random influences leads to a normal distribution.
quelle