Frage:
Zufallszahlengenerierung mittels T-Verteilung oder Laplace-Verteilung
user
2011-05-21 23:53:14 UTC
view on stackexchange narkive permalink

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.

@crucified Haben Sie ein Statistikpaket im Sinn?
Ich möchte in matlab implementieren
@cruc Matlab hat eine inverse t-Verteilung: siehe http://www.mathworks.com/help/toolbox/stats/tinv.html. Sie wenden diese Funktion lediglich auf eine einheitliche Zufallsvariable im Bereich (0,1) an.
Da `tinv` Teil der Statistik-Toolbox ist, müssten Sie dafür extra bezahlen, es sei denn, Sie sind für eine Studentenversion berechtigt. In diesem Fall ist sie Teil des Pakets.
** Schnell und schmutzig **: `sqrt (n) * randn (1) / norm (randn (n, 1))` erzeugt eine $ t $ -verteilte Variable mit $ n $ Freiheitsgraden. Dies ist wahrscheinlich am schnellsten zu codieren, aber sicherlich nicht am schnellsten auszuführen, insbesondere wenn Sie eine sehr große Anzahl von ihnen benötigen.
Ich bin mir nicht ganz sicher, warum Sie sich die Mühe gemacht haben, nach der Laplace-Distribution zu fragen, da hier ausdrücklich angegeben ist, wie diese in dem Link generiert werden, den Sie in Ihrer Frage angeben!
Fünf antworten:
#1
+9
Jonas
2011-05-22 01:47:24 UTC
view on stackexchange narkive permalink

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 enter image description here

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.

#2
+6
NRH
2011-05-22 00:05:30 UTC
view on stackexchange narkive permalink

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.

Bitte vergib mir meine Unwissenheit. Ich möchte es in Matlab machen. Möglicherweise muss ich die t-Verteilung mit Freiheitsgraden zwischen 1 und 30 verwenden. Im Wiki wird die Formel für nur 1, 2, 4 Freiheitsgrade angegeben. Gibt es eine verallgemeinerte Formel für die Quantilfunktion? Könnten Sie Formeln für andere gerade Freiheitsgrade angeben?
@crucified, Für die Quantilfunktion $ t $ existiert keine geschlossene Form. Siehe die hier aufgeführten G. W. Hill-Referenzen (http://stat.ethz.ch/R-manual/R-patched/library/stats/html/TDist.html). Sie können auch den Quellcode für [GSL] (http://www.gnu.org/software/gsl/) abrufen und die [entsprechenden Funktionen] (http://www.gnu.org/software/gsl/) nachschlagen. manual / html_node / The-t_002ddistribution.html). Ich habe selbst nicht nachgesehen, aber es ist wahrscheinlich einfach genug, auf MATLAB zu portieren.
@cardinal +1, insbesondere angesichts der Tatsache, dass GSL-Bindungen für Octave existieren.
#3
+5
petrichor
2011-06-15 16:14:10 UTC
view on stackexchange narkive permalink

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)  

Laplace distribution

#4
+4
shabbychef
2011-05-23 22:29:07 UTC
view on stackexchange narkive permalink

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.

#5
+2
mark999
2011-05-22 11:22:49 UTC
view on stackexchange narkive permalink

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.

** NB: ** Dies ist eine Antwort auf eine zweite Frage, die später mit der vorliegenden zusammengeführt wurde. Wie @mark999 hier richtig hervorhebt, sind die beiden Fragen gleich, außer dass man nach Laplace-Variablen fragt und das Original (diese) nach Student-t-Variablen fragt.
@whuber: Es kann daher sinnvoll sein, diese Frage so zu bearbeiten, dass sie die Laplace-Distribution enthält.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...