全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 金融工程(数量金融)与金融衍生品
1480 1
2018-07-10

本章旨在说明,如何进行具相关性的多资产随机过程的模拟。这其中需要一些线性代数的计算,为了简化数学的说明,我们打算利用R的内建函数来执行线性代数的计算。其实,这当然不是必要的,很多C#的链接库都有提供这些功能。以我们打算在后面介绍的QuantLibC#链接库而言,它几乎提供所有金融工程中所需的数学函数。但是,使用R也有附带的好处,他也可以成为我们验证计算的工具。此为,R所提供的绘图功能,也是一项额外的好处。




第一节 资产与相关性

一些复杂的金融商品,其偿付条件可能牵涉到的资产价格不只一个,因此,我们仿真之标的变量,可能不只一个,而且变量之间有相关性。令两资产分别为

Eq_3_1_1.jpg .....................................................................................................(3.1.1)

若两变数报酬率之相关性为 Eq_3_1_1_1.jpg ,则我们可以先产生两个独立常态分配随机数, Eq_3_1_1_2.jpgEq_3_1_1_3.jpg

Eq_3_1_1_4.jpg

我们可以使用下面的线性组合产生 Eq_3_1_1_5.jpgEq_3_1_1_6.jpg

Eq_3_1_2.jpg ........................................................................................(3.1.2)

矩阵表示为,

Eq_3_1_3.jpg ................................................................................(3.1.3)

我们可以发现,此系数矩阵为一下三角矩阵, Eq_3_1_3_1.jpg

Eq_3_1_4.jpg ...............................................................................................(3.1.4)

如果我们转置此矩阵,得到 Eq_3_1_4_1.jpg ,将两者相乘,得到这两资产的相关性矩阵, Eq_3_1_4_2.jpg

Eq_3_1_4_3.jpg


当资产数目为n时,我们可以先求得n资产的相关性矩阵,,然后将相关性矩阵透过线性代数的Cholesky分解,找出

Eq_3_1_5.jpg ................................................................(3.1.5)

再由与n个独立的常态分配随机数, Eq_3_1_5_1.jpg ,便可产生n个相关性矩阵为的常态分配随机数 Eq_3_1_5_2.jpg

Eq_3_1_6.jpg .................................................................................................(3.1.6)




第三节 R的Cholesky函数


在多资产的模拟中,我们需要将相关性矩阵进行Cholesky分解。形成下三角与上三角矩阵的乘积。以一个2╳2的相相关性矩阵为例。M可分解成L与U的乘积。


Eq_3_3_1.jpg ...........................................................(3.3.1)

#006

#007 > M <- matrix(c(1.0, 0.8, 0.8,1.0), nrow = 2, ncol = 2, byrow = TRUE)
#008 > U <- chol(M)
#009 > U
#010     [,1] [,2]
#011 [1,]   1  0.8
#012 [2,]   0  0.6
#013 > L <- t(U)
#014 > L
#015     [,1] [,2]
#016 [1,] 1.0  0.0
#017 [2,] 0.8  0.6
#018 > A = L %*% U
#019 > A
#020     [,1] [,2]
#021 [1,] 1.0  0.8
#022 [2,] 0.8  1.0
#023 >程序行表3.1


程序行表3.1示范了R语言的Cholesky分解函数,#007使用matrix()函数建立M矩阵;先以c()函数建立一维向量,内含四个分量,当作传入数据;然后,说明M矩阵为两列,两行的矩阵,并以列优先的方式,读取c()函数建立的一维向量。#008使用chol()函数执行Cholesky分解,将上三角矩阵传出给U矩阵。#013使用t()函数进行U矩阵的转置,将下三角矩阵传出给L矩阵。#018以L %*% U进行矩阵相乘,结果传给A。如果想知道每个变量的内容,只要在提示符号后输入变量的名称,按Enter就可看到结果。如#009输入U按Enter,便可看到2╳2的上三角矩阵。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-7-14 16:06:51
感谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群