均值-方差模型的概述

2024-05-04 05:16

1. 均值-方差模型的概述

均值-方差模型(Mean-Variance Model)投资者将一笔给定的资金在一定时期进行投资。在期初,他购买一些证券,然后在期末卖出。那么在期初他要决定购买哪些证券以及资金在这些证券上如何分配,也就是说投资者需要在期初从所有可能的证券组合中选择一个最优的组合。这时投资者的决策目标有两个:尽可能高的收益率和尽可能低的不确定性风险。最好的目标应是使这两个相互制约的目标达到最佳平衡。 由此建立起来的投资模型即为均值-方差模型。

均值-方差模型的概述

2. 均值方差模型是什么?

均值—方差模型是由H.M.Markowitz(哈里·马科维茨)在1952年提出的风险度量模型。
均值-方差模型 (Mean-Variance Model) 投资者将一笔给定的资金在一定时期进行投资。在期初,他购买一些证券,然后在期末卖出。那么在期初他要决定购买哪些证券以及资金在这些证券上如何分配,也就是说投资者需要在期初从所有可能的证券组合中选择一个最优的组合。

均值方差模型的优化
对于均值方差来说,最重要的是模型对于历史数据的依赖性强,预期收益率及风险度量都是用历史数据来衡量,但往往历史并不能代表过去,过去一段时间的平均收益与未来一段时间内的期望收益往往差别很大。
在此基础上,1990年,Black和Litterman在高盛工作期间发展出Black-Litterman模型,在模型里加入投资人对市场的看法与预测。将历史数据的特征和投资者对未来的预测相结合,可以说是一半客观,一半主观的方法。
简单的说,就是在基于市场历史数据的基础之上,加上投资者的主观的观点,然后将两者结合,形成一个新的收益率的分布。

3. 均值-方差模型的分析与理解

 该理论依据以下几个假设:1、投资者在考虑每一次投资选择时,其依据是某一持仓时间内的证券收益的概率分布。2、投资者是根据证券的期望收益率估测证券组合的风险。3、投资者的决定仅仅是依据证券的风险和收益。4、在一定的风险水平上,投资者期望收益最大;相对应的是在一定的收益水平上,投资者希望风险最小。根据以上假设,马科维茨确立了证券组合预期收益、风险的计算方法和有效边界理论,建立了资产优化配置的均值-方差模型:目标函数:minб2(rp)=∑ ∑xixjCov(ri-rj)rp= ∑ xiri限制条件: 1=∑Xi (允许卖空)或 1=∑Xi xi>≥0(不允许卖空)其中rp为组合收益, ri为第i只股票的收益,xi、 xj为证券 i、j的投资比例,б2(rp)为组合投资方差(组合总风险),Cov (ri 、rj ) 为两个证券之间的协方差。该模型为现代证券投资理论奠定了基础。上式表明,在限制条件下求解Xi 证券收益率使组合风险б2(rp )最小,可通过朗格朗日目标函数求得。其经济学意义是,投资者可预先确定一个期望收益,通过上式可确定投资者在每个投资项目(如股票)上的投资比例(项目资金分配),使其总投资风险最小。不同的期望收益就有不同的最小方差组合,这就构成了最小方差集合。

均值-方差模型的分析与理解

4. 均值-方差模型的介绍

均值—方差模型是由H.M.Markowitz(哈里·马科维茨)在1952年提出的风险度量模型,把风险定义为期望收益率的波动率,首次将数理统计的方法应用到投资组合选择的研究中。

5. 均值与方差

既然已经用了均值跟方差的概念,那么就要用概率论的理论去做这个题。概率论的基础就是随机变量。那么就设随机变量s为考生的成绩。x1,x2,x3...x25为考生25道选择题的得分。
可以根据s=Σxi 和xi的分布求得均值与方差。
E(s)=ΣE(xi)=25E(x1)=25*3.2=80.
事实上由于xi相互独立有D(s)=ΣD(xi)=64
如果掌握得不是很好。也可以直接用定义做
D(s)=E(s²)-(E(s))²=E(s²)-6400.
只要求随机变量s²的均值。
E(s²)=E((Σxi)²)=ΣE(xixj) (i,j从1到25)
由于xi同分布所以E(xixj)在i≠j的时候分别相等,在i=j的时候也分别相等 所以
E(s²)=25E(x1²)+600E(x1x2)=320+6144=6464
所以D(s)=64

均值与方差

6. 均值方差是什么

均值描述的是样本集合的中间点,它告诉我们的信息是有限的。
   
 方差(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。方差是衡量源数据和期望值相差的度量值。
  
 而标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。
  
 以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合的差别是很大的,计算两者的标准差,前者是8.3后者是1.8,显然后者较为集中,故其标准差小一些,标准差描述的就是这种“散布度”。之所以除以n-1而不是n,是因为这样能使我们以较小的样本集更好地逼近总体的标准差,即统计上所谓的“无偏估计”。而方差则仅仅是标准差的平方。

7. 方差和均值

0-12依次是:1*(5/6)^12,1*1/6*12*(5/6)^11,12*11/2*(1/6)^2*12*11/2*(5/6)^10,12*11*10/6*(1/6)^3*12*11*10/6*(5/6)^9,……,1*(1/6)^12
计算有点复杂,耐心一点应该不会错。

方差和均值

8. 均值模型

原文链接:http://tecdat.cn/?p=20015 
 
本文将说明单变量和多变量金融时间序列的不同模型,特别是条件均值和条件协方差矩阵、波动率的模型。
均值模型
本节探讨条件均值模型。
iid模型
我们从简单的iid模型开始。iid模型假定对数收益率xt为N维高斯时间序列:

均值和协方差矩阵的样本估计量分别是样本均值

和样本协方差矩阵

我们从生成数据开始,熟悉该过程并确保估计过程给出正确的结果(即完整性检查)。然后使用真实的市场数据并拟合不同的模型。
让我们生成合成iid数据并估算均值和协方差矩阵:
# 生成综合收益数据X  [1] 2.44norm(Sigma_scm - Sigma, "F")#> [1] 70.79
现在,让我们针对不同数量的观测值T再做一次:
# 首先生成所有数据X <- rmvnorm(n = T_max, mean = mu, sigma = Sigma)# 现在遍历样本的子集for (T_ in T_sweep) {  # 样本估算  mu_sm <- colMeans(X_)  Sigma_scm <- cov(X_)  # 计算误差  error_mu_vs_T    <- c(error_mu_vs_T,    norm(mu_sm     - mu, "2"))  error_Sigma_vs_T <- c(error_Sigma_vs_T, norm(Sigma_scm - Sigma, "F"))# 绘图plot(T_sweep, error_mu_vs_T,      main = "mu估计误差",

plot(T_sweep, error_Sigma_vs_T     main = "Sigma估计中的误差", ylab = "误差"

单变量ARMA模型
对数收益率xt上的ARMA(p,q)模型是

其中wt是均值为零且方差为σ2的白噪声序列。模型的参数是系数ϕi,θi和噪声方差σ2。
请注意,ARIMA(p,d,q)模型是时间差分为d阶的ARMA(p,q)模型。因此,如果我们用xt代替对数价格,那么先前的对数收益模型实际上就是ARIMA(p,1,q)模型,因为一旦对数价格差分,我们就获得对数收益。
rugarch生成数据 
我们将使用rugarch包  生成单变量ARMA数据,估计参数并进行预测。
首先,我们需要定义模型:
# 指定具有给定系数和参数的AR(1)模型#> #> *----------------------------------*#> *       ARFIMA Model Spec          *#> *----------------------------------*#> Conditional Mean Dynamics#> ------------------------------------#> Mean Model           : ARFIMA(1,0,0)#> Include Mean     : TRUE #> #> Conditional Distribution#> ------------------------------------#> Distribution :  norm #> Includes Skew    :  FALSE #> Includes Shape   :  FALSE #> Includes Lambda  :  FALSE#>          Level Fixed Include Estimate LB UB#> mu        0.01     1       1        0 NA NA#> ar1      -0.90     1       1        0 NA NA#> ma        0.00     0       0        0 NA NA#> arfima    0.00     0       0        0 NA NA#> archm     0.00     0       0        0 NA NA#> mxreg     0.00     0       0        0 NA NA#> sigma     0.20     1       1        0 NA NA#> alpha     0.00     0       0        0 NA NA#> beta      0.00     0       0        0 NA NA#> gamma     0.00     0       0        0 NA NA#> eta1      0.00     0       0        0 NA NA#> eta2      0.00     0       0        0 NA NA#> delta     0.00     0       0        0 NA NA#> lambda    0.00     0       0        0 NA NA#> vxreg     0.00     0       0        0 NA NA#> skew      0.00     0       0        0 NA NA#> shape     0.00     0       0        0 NA NA#> ghlambda  0.00     0       0        0 NA NA#> xi        0.00     0       0        0 NA NAfixed.pars#> $mu#> [1] 0.01#> #> $ar1#> [1] -0.9#> #> $sigma#> [1] 0.2true_params#>    mu   ar1 sigma #>  0.01 -0.90  0.20
然后,我们可以生成时间序列:
# 模拟一条路径apath(spec, n.sim = T)# 转换为xts并绘图plot(synth_log_returns, main = "ARMA模型的对数收益率"plot(synth_log_prices, main = "ARMA模型的对数价格"

ARMA模型
现在,我们可以估计参数(我们已经知道):
# 指定AR(1)模型arfimaspec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE))# 估计模型#>           mu          ar1        sigma #>       0.0083      -0.8887       0.1987#>    mu   ar1 sigma #>  0.01 -0.90  0.20
我们还可以研究样本数量T对参数估计误差的影响:
# 循环for (T_ in T_sweep) {  estim_coeffs_vs_T <- rbind(estim_coeffs_vs_T, coef(arma_fit))  error_coeffs_vs_T <- rbind(error_coeffs_vs_T, abs(coef(arma_fit) - true_params)/true_params)# 绘图matplot(T_sweep, estim_coeffs_vs_T,         main = "估计的ARMA系数", xlab = "T", ylab = "值",

matplot(T_sweep, 100*error_coeffs_vs_T,         main = "估计ARMA系数的相对误差", xlab = "T", ylab = "误差 (%)",

首先,真正的μ几乎为零,因此相对误差可能显得不稳定。在T = 800个样本之后,其他系数得到了很好的估计。
ARMA预测
为了进行健全性检查,我们现在将比较两个程序包 Forecast 和 rugarch的结果:
# 指定具有给定系数和参数的AR(1)模型spec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE),                              fixed.pars = list(mu = 0.005, ar1 = -0.9, sigma = 0.1))# 生成长度为1000的序列arfima(arma_fixed_spec, n.sim = 1000)@path$seriesSim# 使用 rugarch包指定和拟合模型spec(mean.model = list(armaOrder = c(1,0), include.mean = TRUE))# 使用包“ forecast”拟合模型#> ARIMA(1,0,0) with non-zero mean #> #> Coefficients:#>           ar1    mean#>       -0.8982  0.0036#> s.e.   0.0139  0.0017#> #> sigma^2 estimated as 0.01004:  log likelihood=881.6#> AIC=-1757.2   AICc=-1757.17   BIC=-1742.47# 比较模型系数#>          ar1    intercept        sigma #> -0.898181148  0.003574781  0.100222964#>           mu          ar1        sigma #>  0.003605805 -0.898750138  0.100199956
确实,这两个软件包给出了相同的结果。
ARMA模型选择 
在先前的实验中,我们假设我们知道ARMA模型的阶数,即p = 1和q = 0。实际上,阶数是未知的,因此必须尝试不同的阶数组合。阶数越高,拟合越好,但这将不可避免地导致过度拟合。已经开发出许多方法来惩罚复杂性的增加以避免过度拟合,例如AIC,BIC,SIC,HQIC等。
# 尝试不同的组合# 查看排名#>    AR MA Mean ARFIMA         BIC converged#> 1   1  0    1      0 -0.38249098         1#> 2   1  1    1      0 -0.37883157         1#> 3   2  0    1      0 -0.37736340         1#> 4   1  2    1      0 -0.37503980         1#> 5   2  1    1      0 -0.37459177         1#> 6   3  0    1      0 -0.37164609         1#> 7   1  3    1      0 -0.37143480         1#> 8   2  2    1      0 -0.37107841         1#> 9   3  1    1      0 -0.36795491         1#> 10  2  3    1      0 -0.36732669         1#> 11  3  2    1      0 -0.36379209         1#> 12  3  3    1      0 -0.36058264         1#> 13  0  3    1      0 -0.11875575         1#> 14  0  2    1      0  0.02957266         1#> 15  0  1    1      0  0.39326050         1#> 16  0  0    1      0  1.17294875         1#选最好的armaOrder#> AR MA #>  1  0
在这种情况下,由于观察次数T = 1000足够大,因此阶数被正确地检测到。相反,如果尝试使用T = 200,则检测到的阶数为p = 1,q = 3。
ARMA预测 
一旦估计了ARMA模型参数ϕi  ^ i和θ^j,就可以使用该模型预测未来的值。例如,根据过去的信息对xt的预测是

并且预测误差将为xt-x ^ t = wt(假设参数已被估计),其方差为σ2。软件包 rugarch 使对样本外数据的预测变得简单:
# 估计模型(不包括样本外)coef(arma_fit)#>           mu          ar1        sigma #>  0.007212069 -0.898745183  0.200400119# 整个样本外的预测对数收益forecast_log_returns <- xts(arma_fore@forecast$seriesFor[1, ], dates_out_of_sample)# 恢复对数价格prev_log_price <- head(tail(synth_log_prices, out_of_sample+1), out_of_sample)# 对数收益图plot(cbind("fitted"   = fitted(arma_fit),# 对数价格图plot(cbind("forecast" = forecast_log_prices,     main = "对数价格预测", legend.loc = "topleft")

多元VARMA模型
对数收益率xt上的VARMA(p,q)模型是

其中wt是具有零均值和协方差矩阵Σw的白噪声序列。该模型的参数是矢量/矩阵系数ϕ0,Φi,Θj和噪声协方差矩阵Σw。
 
比较
让我们首先加载S&P500:
# 加载标普500数据head(SP500_index_prices)#>              SP500#> 2012-01-03 1277.06#> 2012-01-04 1277.30#> 2012-01-05 1281.06#> 2012-01-06 1277.81#> 2012-01-09 1280.70#> 2012-01-10 1292.08# 准备训练和测试数据logreturns_trn <- logreturns[1:T_trn]logreturns_tst <- logreturns[-c(1:T_trn)]# 绘图{ plot(logreturns,   addEventLines(xts("训练"

现在,我们使用训练数据(即,对于t = 1,…,Ttrnt = 1,…,Ttrn)来拟合不同的模型(请注意,通过指示排除了样本外数据 out.sample = T_tst)。特别是,我们将考虑iid模型,AR模型,ARMA模型以及一些ARCH和GARCH模型(稍后将对方差建模进行更详细的研究)。
# 拟合i.i.d.模型coef(iid_fit)#>           mu        sigma #> 0.0005712982 0.0073516993mean(logreturns_trn)#> [1] 0.0005681388sd(logreturns_trn)#> [1] 0.007360208# 拟合AR(1)模型coef(ar_fit)#>            mu           ar1         sigma #>  0.0005678014 -0.0220185181  0.0073532716# 拟合ARMA(2,2)模型coef(arma_fit)#>            mu           ar1           ar2           ma1           ma2         sigma #>  0.0007223304  0.0268612636  0.9095552008 -0.0832923604 -0.9328475211  0.0072573570# 拟合ARMA(1,1)+ ARCH(1)模型coef(arch_fit)#>            mu           ar1           ma1         omega        alpha1 #>  6.321441e-04  8.720929e-02 -9.391019e-02  4.898885e-05  9.986975e-02#拟合ARMA(0,0)+ARCH(10)模型coef(long_arch_fit)#>           mu        omega       alpha1       alpha2       alpha3       alpha4       alpha5 #> 7.490786e-04 2.452099e-05 6.888561e-02 7.207551e-02 1.419938e-01 1.909541e-02 3.082806e-02 #>       alpha6       alpha7       alpha8       alpha9      alpha10 #> 4.026539e-02 3.050040e-07 9.260183e-02 1.150128e-01 1.068426e-06# 拟合ARMA(1,1)+GARCH(1,1)模型coef(garch_fit)#>            mu           ar1           ma1         omega        alpha1         beta1 #>  6.660346e-04  9.664597e-01 -1.000000e+00  7.066506e-06  1.257786e-01  7.470725e-01
最新文章
热门文章
推荐阅读