跳到主要內容

中央極限定理 (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;
}

留言

這個網誌中的熱門文章

母體變異數(population variance)、樣本變異數(sample variance)及自由度(degrees of freedom)

母體指的是所有的數據,樣本指的是從母體抽樣的數據,舉例來說,一個班級有40人,它們的身高,40個身高數據,若只針對這個班,就是母體,但是,卻只是代表全校學生身高的一部分,也就是樣本。 回到「機率統計」頁面 樣本平均數(mean)不是母體平均數,樣本變異數(variance)也不是母體變異數,一個班40個人身高的平均數很難剛好是全校學生的身高平均數。 一個班40個人的身高變異數也不會是全校學生的身高變異數。 變異數計算 母體變異數的定義如下: 而樣本變異數的定義如下: 奇怪的地方 平均數 雖然樣本平均數不是母體平均數,不過,如果不斷重複從同一個母體抽樣平均,會得到一個近似母體平均數的數字。舉例來說,從一個學校所有學生中,不斷隨機選出40個學生取平均數,再將這些平均數平均,結果會接近直接算全校學生的身高平均數。 也就是說樣本平均數的期望值就是母體平均數: 變異數 樣本變異數跟母體變異數就沒這麼單純了。奇怪的地方是,為什麼樣本變異數公式的除術是n-1,而不是像平均數計算一樣用n? 為何樣本變異數要除的是(n-1)? 除數為n的話,變異數會太小 如果樣本變異數的除數是n,樣本變異數就會常常比母體變異數小。為什麼呢? 因為,樣本是從母體抽取的,抽樣的數據算出平均,並且抽樣的數據會相對的接近抽樣的平均,總不會剛好抽出的樣本平均數剛好是母體平均數,且樣本數據離樣本平均數就像母體數據離母體平均數一樣分散吧? 假設母體數據為0-99的整數,共100個數據,從中選出10個數字,然後計算樣本的平均數,分別用n及n-1當作除數算出變異數,連續執行200次,並將200個樣本平均數及200個樣本變異數平均。 也就是取得樣本平均數及樣本變異數的期望值,結果如下: 母體平均數 = 49.5

中央極限定理(central limit theorem)證明

中央極限定理(central limit theorem )指的是從一個獨立同分布(Independent and identically distributed, i.i.d)取出之變數數量趨近無限多時,其平均數(mean)將趨近常態分布(normal distribution)。 回到「機率統計」頁面 目錄: 動差母函數(moment generating function) 常態分布的動差母函數 中央極限定理證明 中央極限定理模擬 中央極限定理應用 動差母函數(moment generating function) 動差母函數為機率密度函數(probability density fFunction, PDF)及累積分佈函數(cumulative distribution function CDF)之外,另一種描述機率分布模型的一種方式。 定義 M X (t) = E[e tx ] 而 e tx 的泰勒級數(Taylor series)為 e tx  = 1 + tx + t 2 x 2 /2! +  t 3 x 3 /3! + ... 則 M X (t) 的泰勒級數為 M X (t) = E[e tx ]  = 1 + tE[x] +  t 2 /2! E[x 2 ] +  t 3 /3! E[x 3 ] + ... 因此,當t = 0時,以t取 動差母函數m次微分,就可以找到其分布模型的第m動差。 特性 M X+Y (t) = E[e t(x+y) ] =  E[e tx+ty ] =  E[e tx e ty ]  =  E[e tx ]  E[ e ty ] =  M X (t)  M Y (t)  常態分布的動差母

HYG、LQD 與 TLT 風險報酬比較

10 年期公債除了站上 4%,再撰寫這篇文章時,已經在 4.3% 徘迴,上次在 這篇文章 研究了現在是否應該要買 LQD 而不是 TLT,本篇文章我想研究非投資等級債是否更適合。 買點 HYG 現在 HYG 價格為 74.04,距離近一次低點 2020/3/20 的 69.75,差別為 5.794% LQD 上次低點在 2020/10/14 的 100.38 附近,與目前的 105.01 相差 4.612%。 TLT 上次低點在 2022/11/4 的 94.22 附近,與目前的 95.16相差 1%。 殖利率上升時,公司債的表現 TLT 2009-01-06 到 2010-01-05 跌了 16.364% 這段期間美國 30 年期公債殖利率從 3.04% 漲到  3.74%,漲了 0.7%。 TLT 2012-11-14 到 2013-11-13 跌了 15.701% 這段期間 美國 30 年期公債殖利率從 2.73% 漲到  3.83%,漲了 1.1%。 TLT 2016-07-29 到 2017-07-28 跌了 10.307% 這段期間 美國 30 年期公債殖利率從 2.18% 漲到  2.89%,漲了 0.71%。 TLT 2021-11-18 到 2023-8-15 跌了 32.695% 這段期間美國 30 年期公債殖利率從 1.97% 漲到  4.35%,漲了 2.38%。 結論 HYG 現在也很便宜,在公債殖利率還有可能持續上漲狀況下,表現可能勝過公債及投資等級公司債。

如何在Chart.js的圖上加上X軸或Y軸名稱

 Chart.js可以幫助網頁顯示各類圖表,要在X軸及Y軸上標示名稱方法如下: 找到Chart物件。 在Chart物件內找到options。 在options內找到scales,若無,自行加上scales。 即可在scales下設定X軸及Y軸的標示。 程式碼範例 <div> <canvas id="myChart"></canvas> </div> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> const labels = [ '1', '2', '3', '4', '5', '6', ]; const data = { labels: labels, datasets: [{ label: '數據', backgroundColor: 'rgb(255, 99, 132)', borderColor: 'rgb(255, 99, 132)', data: [0, 10, 5, 2, 20, 30, 45], }] }; const config = { type: 'line', data, options: {scales:{ x:{ title:{ display:true, text:"月" } }, y:{ title:{ display:true, text:"unit" } } } } }; var myChart = new Chart( document.ge

賭徒破產理論(Gambler's ruin)機率公式證明

賭徒破產理論(Gambler's ruin)指指的是兩位賭徒,每局賭1元,A賭徒有i元,B賭徒有n-i元,兩人不斷的賭,直到一人輸光為止。 回到「機率統計」頁面 前言 假設A賭徒勝率為p,輸的機率就是1-p,稱為q,我們要求算A贏光所有錢的機率。 讓p(i)代表A賭徒擁有i元的時候,獲得最後勝利的機率。 p(0) = 0,因為已經輸光所有錢並且賭局已結束。 p(n) = 1,因為已經贏光所有錢並且賭局已結束。 那麼p(i)呢? 遞迴公式(recursive formula) 假設A有i元,它下一局有可能贏,有可能輸。贏的機率為p,輸的機率為1-p = q。 不論這一局是贏還是輸,A要贏光所有錢的機率還是沒有算出來。 這局贏了,接下來贏光所有錢的機率為p(i+1)。 這局輸了,接下來贏光所有錢的機率為p(i-1)。 因此,p(i) = p*p(i+1) + q*p(i-1),且可以繼續延伸,例如p(i+1) = p*p(i+2) + q*p(i)、p(i-1) = p*p(i-) + q*p(i-2)... 每個公式需要套用原本的公式,稱為遞迴公式公式,而遞迴公式解法可以像解微分方程(differential equation)一樣,可以先用猜的! 例如dx/dt = rx,微分之後x還是在公式裡,可以先猜測x = e^y。 猜測 假設,p(i) = x i ,並帶入p(i) = p*p(i+1) + q*p(i-1),得到  x i   = p* x i+1  + q * x i-1 x = p* x 2  + q p* x 2  - x + q = 0 解一元二次方程式得 x = 1 或 x = q/p 微分方程 p(i) = x i , x = 1 或 x = q/p,且有兩已知數 p(0) = 0 及 p(n) = 1。 而x i 的x有兩個根(root),必須都帶入線性組合(linear combination)公式求解。 p(i) = A(1) i  + B ( q/p ) i  =  A +  B ( q/p ) i  p(0) = A + B = 0 , A = -B p(n) = A + B ( q/p ) n   = 1 A + B ( q/p ) n  = -B +  B ( q/p ) n  = B(-1 +  ( q/p ) n )