web-dev-qa-db-ja.com

「逆」統計:平均と標準偏差に基づいてデータを生成する

データセットを作成し、そこから統計を計算するのは簡単です。逆はどうですか?

ある変数が平均X、標準偏差Yを持ち、正規(ガウス)分布を持っていると仮定するとします。分布に適合する「ランダムな」データセット(任意のサイズ)を生成するための最良の方法は何でしょうか?

編集:この種の開発は この質問 ;その方法で何かを作ることはできますが、もっと効率的な方法があるのではないかと思います。

14
quantumSoup

Box-Mueller法 を使用して、standard正規確率変数を生成できます。次に、それを平均ミューと標準偏差シグマに変換するには、サンプルにシグマを掛けて、ミューを追加します。つまり標準正規分布の各zについて、mu + sigma * zを返します。

12
John D. Cook

これは、Excelでnorminv()関数を使用して非常に簡単に実行できます。例:

= norminv(Rand()、100、15)

平均が100、標準偏差が15(人間のIQ)の正規分布から値を生成します。この数式を列の下にドラッグすると、必要な数の値が表示されます。

8
Neil McGuigan

この問題がいくつかのプログラミング言語で解決さ​​れているページを見つけました。

http://rosettacode.org/wiki/Random_numbers

2
OhDaeSu

[〜#〜] r [〜#〜] とリストの2番目のアルゴリズム ここ を使用した例を示します。

X<-4; Y<-2 # mean and std
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X)

plot(density(z))
> mean(z)
[1] 4.002347

> sd(z)
[1] 2.005114

> library(fUtilities)

> skewness(z,method ="moment")
[1] -0.003924771
attr(,"method")
[1] "moment"

> kurtosis(z,method ="moment")
[1] 2.882696
attr(,"method")
[1] "moment"
2
George Dontas

ガウス確率変数を生成する方法はいくつかあります。標準的な方法は、前述のBox-Meullerです。少し速いバージョンはここにあります:

http://en.wikipedia.org/wiki/Ziggurat_algorithm

ガウス変数の生成に関するウィキペディアのリファレンスは次のとおりです

http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution

2
Joel

一種のモンテカルロシミュレーションにすることができます。広いランダムな「許容範囲」から始めて、いくつかの真にランダムな値を生成します。統計をチェックして、平均と分散がずれているかどうかを確認します。ランダム値の「許容範囲」を調整し、さらにいくつかの値を追加します。要件と母集団のサンプルサイズの両方に達するまで繰り返します。

頭のてっぺんから、あなたの考えを教えてください。 :-)

1
eruciform

Statistics ToolboxのMATLAB関数 normrnd は、指定されたミューとシグマで正規分布の乱数を生成できます。

1
Wu Yang

正規分布のデータセットを生成するのは簡単です( http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform を参照)。
生成されたサンプルには正確なN(0,1)分布がないことに注意してください。あなたはそれを標準化する必要があります-平均を差し引き、次に標準偏差で割ります。次に、このサンプルを指定されたパラメーターを使用して正規分布に自由に変換できます。標準偏差を掛けてから、平均を追加します。

0