跳到主要內容

中央極限定理 (central limit theorem)之用均勻分布(uniform distribution)模擬常態分布(normal distribution)

中央極限定理 (central limit theorem)指的是只要從任何一個分布取出樣本後平均,樣本數量越多,這個平均會越接近常態分布(normal distribution)。

數學證明可參考:中央極限定理(central limit theorem )證明

中央極限定理好用的地方在模擬現實生活中的很多現象,就算不確定某個事件的機率分布,只要取其平均,就可以用常態分布模擬。

舉例來說,股價可以用對數常態分布(log-normal distribution)來模擬,也就是說,股票報酬可以用常態分布模擬。

可參考:股票走勢模擬

假設從某個數據庫,隨機選取4個樣本叫做X1、X2、X3、X4,然後將樣本平均,也就是(X1 + X2 + X3 + X4) / 4 = Xi,然後不斷重複選取4個樣本取平均,Xi會遵循常態分布;其平均值(mean)就是原數據庫的平均值,標準差(standard deviation)就是原數據庫的標準差除以每次樣本數開根號(根號4 = 2)。

電腦應用

中央極限定理其中一個應用就是可以用別的已知分布模型來模擬常態分布,舉例來說程式語言javascript沒有用常態分布取得隨機參數的方式。

但是可以藉由javascript原生產製的數據,藉由平均樣本來模擬。

舉例來說,我可以用javascript產至1000組範圍0到10的隨機數字,再從其中選5個數字作為樣本,然後看看樣本平均(為了方便做圖,皆四捨五入)是否遵循常態分布。

javascript程式碼分享

有需要用js來產生常態分布樣本的人可以參考這邊的程式碼。

首先設定常態分步的標準差及平均值,得到相對應均勻分布的上下限:
  • 假設常態分步的平均值為x,標準差為y
  • 則相對應的均勻分布的上下限分別為:上限則為x+y*√12/2,上限則為x-y*√12/2。
  • 有了均勻分布的上下限,就可以求得其散步範圍 (range),也就是上限減去下限: y*√12。
  • 假設要模擬的常態分步平均值為10,標準差為20,則程式碼如下:

randomvariable及為平均值為10,標準差為20的常態分步變數。

function getram(mean,sd,n){
var mean = mean;
var sd = sd;
var n= n;
var a = mean - Math.sqrt(n)*sd*Math.sqrt(12)/2;
var b = mean + Math.sqrt(n)* sd*Math.sqrt(12)/2;
var range = b - a;
var randomvariable;
var seeds = [];
for(i=0;i<=n;i++){
var x = a + Math.random()*range;
seeds.push(x);
}
randomvariable = seeds.reduce(myFunc)/n;

function myFunc(total, num) {
  return total + num;
}
return randomvariable;
}

留言