Soru:
T-dağılımı veya laplace dağılımı kullanarak rastgele sayı üretimi
user
2011-05-21 23:53:14 UTC
view on stackexchange narkive permalink

İstatistik konusunda acemiyim. Evrimsel algoritma alanında tezimi tamamlıyorum. T dağılımından veya Laplace dağıtımından bazı rastgele sayılar oluşturmam gerekiyor. Bunu nasıl yapabilirim?

Kolay ve basit bir açıklama takdir edilecektir.

@crucified Aklınızda herhangi bir istatistiksel paket var mı?
Matlab'de uygulamak istiyorum
@cruc Matlab'ın ters t dağılımı vardır: http://www.mathworks.com/help/toolbox/stats/tinv.html bakın. Tek yapmanız gereken, bu işlevi (0,1) aralığındaki tekdüze bir rastgele değişime uygulamaktır.
"Tinv" İstatistikler araç kutusunun bir parçası olduğundan, öğrenci sürümü için uygun değilseniz, bu durumda paketin bir parçası olarak gelirse, bunun için fazladan ödeme yapmanız gerekir.
** Hızlı ve kirli **: `sqrt (n) * randn (1) / norm (randn (n, 1))`, $ n $ serbestlik derecesine sahip bir $ t $ dağıtılmış varyat oluşturacaktır. Bu muhtemelen kodlama için en hızlı olanıdır, ancak kesinlikle yürütmesi en hızlı olanı değildir, özellikle de çok sayıda kodlamaya ihtiyacınız varsa.
Sorunuzda verdiğiniz bağlantıda size bunları nasıl üreteceğinizi açıkça anlattığı için, Laplace dağıtımını neden sormaktan tam olarak emin değilsiniz!
Beş yanıtlar:
#1
+9
Jonas
2011-05-22 01:47:24 UTC
view on stackexchange narkive permalink

Bunu, bu istatistik araç kutusundan TINV kullanarak Matlab'da nasıl yapacağınız aşağıda açıklanmıştır:

 % # serbestlik derecesini seçindf = 4; % # note ayrıca gerekirse bir df dizisi de seçebilirsiniz% # 100.000 tekdüze dağıtılmış rasgele dağıtılmış bir vektör oluşturun variblesuni = rand (100000,1);% # karşılık gelen t-değerlerine bakınout = tinv (uni, df);  

Matlab'ın daha yeni bir sürümüyle, rasgele sayıları doğrudan oluşturmak için TRND 'yi de kullanabilirsiniz.

  out = trnd (100000, df);  

İşte out enter image description here

EDIT Re: birleştirilmiş soruyu

Matlab'ın bir Laplace dağılımından sayıları çizmek için yerleşik bir işlevi yoktur. Ancak, Matlab File Exchange'den iyi yazılmış bir uygulama sağlayan LAPRND işlevi vardır.

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

Kolay yanıt: rt (n, df) ile df serbestlik derecesiyle $ t $ dağılımı için R kullanın ve n değişkenleri alın kod>. R kullanmazsanız, belki hangi dili kullandığınızı yazabilirsiniz ve diğerleri tam olarak ne yapmaları gerektiğini söyleyebilir.

$ t $ dağıtımı için R veya yerleşik bir rastgele sayı oluşturucu içeren başka bir dil kullanmıyorsanız, ancak nicelik işlevi $ Q'ya erişiminiz varsa $, $ t $ -dağıtımı için $ [0,1] $ üzerinde tekdüze bir rastgele değişken $ U $ oluşturabilir ve ardından $ Q (U) $, $ t $ dağıtımını izler.

Aksi takdirde Wikipedia sayfasındaki bu kısa bölüme bir göz atın.

Lütfen cehaletimi bağışlayın. Bunu matlab'de yapmak istiyorum. 1 ile 30 arasında değişen serbestlik derecelerine sahip t dağılımını kullanmak zorunda kalabilirim. Wiki'de sadece 1, 2, 4 serbestlik derecesi için formül verilmiştir. Nicelik fonksiyonu için genelleştirilmiş bir formül var mı? Diğer çift sayıdaki serbestlik dereceleri için formüller verebilir misiniz?
@crucified, $ t $ quantile işlevi için kapalı bir form olmayacaktır. [Burada] listelenen G. W. Hill referanslarına bakın (http://stat.ethz.ch/R-manual/R-patched/library/stats/html/TDist.html). Ayrıca [GSL] (http://www.gnu.org/software/gsl/) için kaynak kodunu alabilir ve [uygun işlevleri] (http://www.gnu.org/software/gsl/ manual / html_node / The-t_002ddistribution.html). Kendime bakmadım ama muhtemelen MATLAB'a aktarılacak kadar kolay.
@cardinal +1, özellikle Octave için GSL bağlamaları olduğu gerçeği göz önüne alındığında.
#3
+5
petrichor
2011-06-15 16:14:10 UTC
view on stackexchange narkive permalink

Wikipedia makalesine bakarak, Laplace dağıtımından rastgele değişkenler oluşturmak için bir işlev yazdım. İşte:

  fonksiyon x = laplacernd (mu, b, sz)% LAPLACERND Laplacian rastgele değişkenleri oluşturun%% x = LAPLACERND (mu, b, sz) Laplace% 'den rastgele değişkenler üretir mu ve b parametrelerine sahip dağılım. sz, döndürülen% rastgele değişkenlerin boyutunu temsil eder. Laplace dağılımı için [1] 'e bakınız.%% [1] http://en.wikipedia.org/wiki/Laplace_distribution%%, Ismail Ari, 2011if nargin < 1% 1/2 mu = 0 ile ölçeklenmiş üstel dağılıma eşittir; endif nargin < 2 b = 1; endif nargin < 3 sz = 1; endu = rand (sz) - 0.5; x = mu - b * işaret (u). * log (1-2 * abs (u));  

Ve işte kullanabileceğiniz bir kod parçacığı

  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

Matlab'da bulduğum en iyi (çalıştırması en hızlı, kodlamak için en hızlı değil;) ücretsiz çözüm, R'nin MATHLIB_STANDALONE c kitaplığını bir mex işlevi ile sarmalamaktı. Bu, R'nin t-dağıtımı PRNG'sine erişmenizi sağlar. Bu yaklaşımın bir avantajı, merkezi olmayan bir t dağıtımından varyasyonları almak için aynı numarayı da kullanabilmenizdir.

İkinci en iyi ücretsiz çözüm, oktavın trnd a uygulamasını kullanmaktı. >. Oktavdan taşıma benim için c kodunu paketlemekten daha fazla iş oldu.

Benim zevklerime göre, rand ile tek tip üretim kullanmak ve tinv ile tersine çevirmek çok yavaştı. YMMV.

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

Bir t dağılımından rastgele sayılar oluşturma hakkındaki sorunuza yanıt olarak açıklanan yaklaşımı kullanabilirsiniz. Önce (0,1) 'den tek tip olarak dağıtılmış rasgele sayılar üretin ve ardından bağlantı kurduğunuz Wikipedia makalesinde verilen Laplace dağılımının ters kümülatif dağılım işlevini uygulayın.

** NB: ** Bu, sonradan mevcut soruyla birleştirilen ikinci bir soruya verilen cevaptır. @mark999'nin burada doğru bir şekilde işaret ettiği gibi, biri Laplace varyasyonlarını sorması dışında iki soru aynıdır ve orijinal (bu) Student t varyatlarını sorar.
@whuber: O halde, bu soruyu Laplace dağıtımını içerecek şekilde düzenlemek mantıklı olabilir.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...