Ich bin ein Neuling in stat. Ich beende meine Diplomarbeit in Evolutionsalgorithmus. Ich muss einige Zufallszahlen aus der T-Verteilung oder Laplace-Verteilung generieren. Wie kann ich das tun?
Eine einfache Erklärung wäre willkommen.
Ich bin ein Neuling in stat. Ich beende meine Diplomarbeit in Evolutionsalgorithmus. Ich muss einige Zufallszahlen aus der T-Verteilung oder Laplace-Verteilung generieren. Wie kann ich das tun?
Eine einfache Erklärung wäre willkommen.
So geht's in Matlab mit TINV aus dieser Statistik-Toolbox:
% # Wählen Sie den Freiheitsgraddf = 4; % # Beachten Sie, dass Sie bei Bedarf auch ein Array von dfs auswählen können.% # Erstellen Sie einen Vektor mit 100.000 gleichmäßig verteilten zufälligen Variablen. sini = rand (100000,1) / code>
Mit einer neueren Version von Matlab können Sie auch einfach TRND verwenden, um die Zufallszahlen direkt zu erstellen.
out = trnd (100000, df);
Hier ist das Histogramm von out
EDIT Re: zusammengeführte Frage
Matlab verfügt über keine integrierte Funktion zum Zeichnen von Zahlen aus einer Laplace-Distribution. Es gibt jedoch die Funktion LAPRND aus dem Matlab File Exchange, die eine gut geschriebene Implementierung bietet.
Einfache Antwort: Verwenden Sie R und erhalten Sie n
-Variablen für eine $ t $ -Verteilung mit df
Freiheitsgraden von rt (n, df)
. Wenn Sie R nicht verwenden, können Sie möglicherweise schreiben, welche Sprache Sie verwenden, und andere können möglicherweise genau sagen, was zu tun ist.
Wenn Sie für die $ t $ -Verteilung kein R oder eine andere Sprache mit integriertem Zufallszahlengenerator verwenden, aber Zugriff auf die Quantilfunktion haben, $ Q. $, für die $ t $ -Verteilung und Sie können eine einheitliche Zufallsvariable $ U $ auf $ [0,1] $ erzeugen, dann folgt $ Q (U) $ einer $ t $ -Verteilung.
Andernfalls werfen Sie einen Blick auf diesen kurzen Abschnitt auf der Wikipedia-Seite.
Mit Blick auf den Wikipedia-Artikel habe ich eine Funktion zum Generieren von Zufallsvariablen aus der Laplace-Verteilung geschrieben. Hier ist es:
Funktion x = laplacernd (mu, b, sz)% LAPLACERND Laplace-Zufallsvariablen generieren %% x = LAPLACERND (mu, b, sz) generiert Zufallsvariablen aus einem Laplace% Verteilung mit den Parametern mu und b. sz steht für die Größe der% zurückgegebenen Zufallsvariablen. Siehe [1] für die Laplace-Verteilung. %% [1] http://en.wikipedia.org/wiki/Laplace_distribution%% von Ismail Ari, 2011if nargin < 1% Entspricht der exponentiellen Verteilung, skaliert um 1/2 mu = 0; endif nargin < 2 b = 1; endif nargin < 3 sz = 1; endu = rand (sz) - 0,5; x = mu - b * Zeichen (u). * log (1-2 * abs (u));
Und hier ist ein Code-Snippet, um es zu verwenden
clc, clearmu = 30; b = 2; sz = [50000 1]; x = laplacernd ( mu, b, sz); hist (x, 100)
Die beste (am schnellsten auszuführende, nicht am schnellsten zu codierende;) kostenlose Lösung, die ich in Matlab gefunden habe, bestand darin, Rs MATHLIB_STANDALONE c-Bibliothek mit einer mex-Funktion zu versehen. Dies gibt Ihnen Zugriff auf Rs T-Distribution PRNG. Ein Vorteil dieses Ansatzes besteht darin, dass Sie mit demselben Trick auch Variablen aus einer nicht zentralen t-Verteilung abrufen können.
Die zweitbeste kostenlose Lösung bestand darin, die Oktavimplementierung von trnd a zu verwenden >. Das Portieren aus der Oktave erwies sich für mich als mehr Arbeit als das Umschließen von C-Code.
Für meinen Geschmack war es viel zu langsam, eine einheitliche Generierung über rand
und eine Invertierung über tinv
zu verwenden. YMMV.
Sie können denselben Ansatz verwenden, der als Antwort auf Ihre Frage zum Generieren von Zufallszahlen aus einer t-Verteilung beschrieben wurde. Generieren Sie zuerst gleichmäßig verteilte Zufallszahlen aus (0,1) und wenden Sie dann die inverse kumulative Verteilungsfunktion der Laplace-Verteilung an, die in dem von Ihnen verlinkten Wikipedia-Artikel angegeben ist.