質問:
t分布またはラプラス分布を使用した乱数生成
user
2011-05-21 23:53:14 UTC
view on stackexchange narkive permalink

私は統計の初心者です。 進化的アルゴリズムで論文を完成させています。 T分布またはラプラス分布から乱数を生成する必要があります。どうすればよいですか?

簡単で簡単な説明をいただければ幸いです。

@crucified統計パッケージを念頭に置いていますか?
matlabに実装したい
@crucMatlabには逆t分布があります。http://www.mathworks.com/help/toolbox/stats/tinv.htmlを参照してください。この関数を範囲(0,1)の均一確率変数に適用するだけです。
`tinv`は統計ツールボックスの一部であるため、学生版の資格がない限り、これには追加料金を支払う必要があります。学生版の資格がある場合は、パッケージの一部として提供されます。
**迅速で汚い**: `sqrt(n)* randn(1)/ norm(randn(n、1))`は、$ n $の自由度を持つ$ t $分散変量を生成します。これはおそらくコーディングが最速ですが、特に非常に多くのコードが必要な場合は、実行が最速ではありません。
質問で指定したリンクでラプラス分布を生成する方法が明示的に示されているため、なぜラプラス分布についてわざわざ質問したのかよくわかりません。
五 答え:
Jonas
2011-05-22 01:47:24 UTC
view on stackexchange narkive permalink

統計ツールボックスの TINVを使用してMatlabでこれを行う方法は次のとおりです。

 %#自由度を選択df = 4; %#必要に応じてdfの配列を選択することもできます%#100,000の一様分布のランダム変数のベクトルを作成しますsuni = rand(100000,1);%#対応するt値を検索しますout = tinv(uni、df);  

Matlabの最新バージョンでは、 TRNDを使用して乱数を直接作成することもできます。

  out = trnd(100000、df);  

これが out enter image description here

EDIT Re:mergedquestionのヒストグラムです

Matlabには、ラプラス分布から数値を描画するための組み込み関数がありません。ただし、適切に記述された実装を提供するMatlab FileExchangeの関数 LAPRNDがあります。

NRH
2011-05-22 00:05:30 UTC
view on stackexchange narkive permalink

簡単な答え:Rを使用して、 rt(n、df)による df 自由度の$ t $分布の n 変数を取得します。コード>。 Rを使用しない場合は、使用する言語を記述でき、他の人が正確に何をすべきかを指示できる可能性があります。

$ t $分布にRまたは組み込みの乱数ジェネレーターを備えた別の言語を使用していないが、分位関数、$ Qにアクセスできる場合$、$ t $分布の場合、$ [0,1] $で均一な確率変数$ U $を生成でき、$ Q(U)$は$ t $分布に従います。

それ以外の場合は、ウィキペディアページのこの簡単なセクションをご覧ください。

私の無知を許してください。 matlabでやりたいです。 1から30の範囲の自由度のt分布を使用する必要があるかもしれません。wikiでは、1、2、4の自由度のみの式が示されています。分位関数の一般化された式はありますか?他の偶数の自由度の公式を教えていただけますか?
@crucified, $ t $分位関数の閉じた形式は存在しません。 [ここ](http://stat.ethz.ch/R-manual/R-patched/library/stats/html/TDist.html)にリストされているG. W.Hillのリファレンスを参照してください。 [GSL](http://www.gnu.org/software/gsl/)のソースコードを入手して、[適切な機能](http://www.gnu.org/software/gsl/)を検索することもできます。 manual / html_node / The-t_002ddistribution.html)。私は自分自身を見たことがありませんが、MATLABに移植するのはおそらく簡単です。
@cardinal +1、特にOctaveのGSLバインディングが存在するという事実を考えると。
petrichor
2011-06-15 16:14:10 UTC
view on stackexchange narkive permalink

ウィキペディアの記事を見て、ラプラス分布から確率変数を生成する関数を作成しました。

  function x = laplacernd(mu、b、sz)%LAPLACERNDラプラス確率変数の生成%% x = LAPLACERND(mu、b、sz)はラプラスから確率変数を生成します%パラメータmuおよびbを持つ分布。 szは、返される確率変数の%のサイズを表します。ラプラス分布については、[1]を参照してください。%% [1] http://en.wikipedia.org/wiki/Laplace_distribution %% by Ismail Ari、2011if nargin < 1%1/2 mu = 0でスケーリングされた指数分布に等しい。 endif nargin < 2 b = 1; endif nargin < 3 sz = 1; endu = rand(sz)-0.5; x = mu-b * sign(u)。* log(1-2 * abs(u));  

これを使用するためのコードスニペットです

  clc、clearmu = 30; b = 2; sz = [50000 1]; x = laplacernd( mu、b、sz); hist(x、100) 

Laplace distribution

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

Matlabで見つけた最良の(実行が最も速く、コーディングが最も速くない)無料のソリューションは、RのMATHLIB_STANDALONEcライブラリをmex関数でラップすることでした。これにより、Rのt分布PRNGにアクセスできます。このアプローチの利点の1つは、同じトリックを使用して非心t分布から変量を取得できることです。

2番目に優れた無料のソリューションは、オクターブの trnd aの実装を使用することでした。 >。オクターブからの移植は、私にとってcコードをラップするよりも手間がかかることがわかりました。

私の好みでは、 rand を介した均一な生成と tinv を介した反転の使用は非常に遅すぎました。 YMMV。

mark999
2011-05-22 11:22:49 UTC
view on stackexchange narkive permalink

t分布から乱数を生成することについての質問に答えて説明したのと同じアプローチを使用できます。最初に(0,1)から一様分布の乱数を生成し、次にリンク先のWikipediaの記事に記載されているラプラス分布の逆累積分布関数を適用します。

**注:**これは、現在の質問と統合された2番目の質問への回答です。 @mark999がここで正しく指摘しているように、2つの質問は同じですが、1つはラプラス変量を要求し、元の(これは)スチューデントt変量を要求します。
@whuber:では、この質問を編集してラプラス分布を含めることは理にかなっているかもしれません。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...