先用人話來描述一下這個問題:有兩個收益不固定的投資專案,如何將一筆固定的金額分開投資,才能使總投資風險最小?
再用數學語言來描述一下這個問題,對於兩個收益分別為x和y的金融資產,x、y為隨機變數,把比例為α的金額投到x上,把剩下比例為1-α的金額投到y中,使var(αx+(1-α)y)最小。根據方差的性質、協方差的定義以及極值的導數意義進行轉化並求導,可以很easy地得到:
其中如果知道總體x、y的分布,那麼可以直接求出α,但事實上往往不知道,只有樣本。這個時候就需要根據樣本來估計α,但α的估計值真的靠譜麼?顯然只給出乙個數字是不行的。如果α的估計值自身都很不穩定,那就這種計算方法也就不靠譜了。
這裡介紹一種重抽樣方法:自助法(bootstrap)
。這裡直接引用csdn上老子今晚不加班
的《bootstrap 自助法》中的定義:
bootstrap有兩種形式:非引數bootstrap和引數化的bootstrap,但基本思想都是模擬。引數化的bootstrap假設總體的分布已知或總體的分布形式已知,可以由樣本估計出分布引數,再從引數化的分布中進行再取樣,類似於mc。非引數化的bootstrap是從樣本中再抽樣,而不是從分布函式中進行再抽樣。
總而言之,bootstrap是一種可放回式抽樣法,當進行大量這種抽樣時,可以對估計量的統計量(方差、標準差、標準誤差、置信區間等)有乙個較為穩定、準確的估計。
這裡以r的islr
包中的portfolio
資料集為例,以之為樣本,進行自助法重抽樣,觀察根據樣本重抽樣計算的α的估計量。
老規矩,先看一下資料集:
可見資料框100行,兩列x、y都是數值型。> library(islr)
> str(portfolio)
'data.frame': 100 obs. of 2 variables:
$ x: num -0.895 -1.562 -0.417
1.044 -0.316
... $ y: num -0.235 -0.885
0.272 -0.734
0.842
...
先計算一下根據樣本中所有的觀測資料求得的α。
再來求α的估計值。> # 求α的函式
> alpha=function(x,y)
> alpha(portfolio$x,portfolio$y)
[1] 0.5758321
下面進行重抽樣。> # 求α估計值的函式
> alpha.fn=function(data, index)
> # 檢查一下是否與上面結果一致
> alpha.fn(portfolio,1:100)
[1] 0.5758321
> # 結果一致
可見,當抽樣容量更大時,α的估計值與實際值更接近。> # 設定隨機數種子
> set.seed(1)
> # 可放回抽100個樣本
> alpha.fn (portfolio,sample(1:100,100,replace=true))
[1] 0.5963833
> # 可放回抽1000個樣本
> alpha.fn (portfolio,sample(1:100,100,replace=true))
[1] 0.5796283
不過當然不必自定義函式,自己去抽樣計算,r肯定有自帶的bootstrap方法的函式。
> boot.out=boot(portfolio,alpha.fn,r=1000)
> boot.out
ordinary nonparametric bootstrap
call:
boot(data = portfolio, statistic = alpha.fn, r = 1000)
bootstrap statistics :
original bias std. error
t1* 0.5758321
4.879587e-06
0.08872272
boot()
函式輸入資料集,欲計算的估計量,以及抽樣次數就可以進行bootstrap抽樣。從結果上來看,對於原始資料,樣本α估計值為0.5758(由於隨機性,與上面的結果略有差異),標準誤為0.0887。
還可以對估計量進行視覺化,觀察α估計量的分布。
可見α估計量正態性良好。
bootci()
函式可用來求估計量的置信區間。
結果中的4種置信區間是根據不同的方法計算出來的,差別不大,按需取之即可。> boot.ci(boot.out)
bootstrap confidence interval calculations
based on 1000 bootstrap replicates
call :
boot.ci(boot.out = boot.out)
intervals :
level normal basic
95% ( 0.4019, 0.7497 ) ( 0.3909, 0.7440 )
level percentile bca
95% ( 0.4076, 0.7607 ) ( 0.4107, 0.7617 )
calculations and intervals on original scale
warning message:
in boot.ci(boot.out) : bootstrap variances needed for studentized intervals
這下不僅能給出α的估計值,還能給出標準誤和置信區間,有理有據,令人信服。
gareth james et al. an introduction to statistical learning.
老子今晚不加班,《bootstrap 自助法》,csdn.
java中的分布式應用(一)之分布式介紹
要理解分布式系統,主要需要明白一下2個方面 1.分布式系統一定是由多個節點組成的系統。其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。分布式系統對於使用者而言,他們面對的就是乙個伺服器,提供使用者需要的服務而已,而實...
分布式系統的Quorum策略
分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...
分布式系統的Quorum策略
分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...