自助法在分布式投資策略中的應用

2022-07-05 17:36:12 字數 3332 閱讀 6265

先用人話來描述一下這個問題:有兩個收益不固定的投資專案,如何將一筆固定的金額分開投資,才能使總投資風險最小?

再用數學語言來描述一下這個問題,對於兩個收益分別為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資料集為例,以之為樣本,進行自助法重抽樣,觀察根據樣本重抽樣計算的α的估計量。

老規矩,先看一下資料集:

> 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

...

可見資料框100行,兩列x、y都是數值型。

先計算一下根據樣本中所有的觀測資料求得的α。

> # 求α的函式

> 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()函式可用來求估計量的置信區間。

> 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

結果中的4種置信區間是根據不同的方法計算出來的,差別不大,按需取之即可。

這下不僅能給出α的估計值,還能給出標準誤和置信區間,有理有據,令人信服。

gareth james et al. an introduction to statistical learning.

老子今晚不加班,《bootstrap 自助法》,csdn.

java中的分布式應用(一)之分布式介紹

要理解分布式系統,主要需要明白一下2個方面 1.分布式系統一定是由多個節點組成的系統。其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。分布式系統對於使用者而言,他們面對的就是乙個伺服器,提供使用者需要的服務而已,而實...

分布式系統的Quorum策略

分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...

分布式系統的Quorum策略

分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...