本章旨在说明,如何进行具相关性的多资产随机过程的模拟。这其中需要一些线性代数的计算,为了简化数学的说明,我们打算利用R的内建函数来执行线性代数的计算。其实,这当然不是必要的,很多C#的链接库都有提供这些功能。以我们打算在后面介绍的QuantLibC#链接库而言,它几乎提供所有金融工程中所需的数学函数。但是,使用R也有附带的好处,他也可以成为我们验证计算的工具。此为,R所提供的绘图功能,也是一项额外的好处。
第一节 资产与相关性
一些复杂的金融商品,其偿付条件可能牵涉到的资产价格不只一个,因此,我们仿真之标的变量,可能不只一个,而且变量之间有相关性。令两资产分别为
![]()
若两变数报酬率之相关性为
我们可以使用下面的线性组合产生
![]()
矩阵表示为,
我们可以发现,此系数矩阵为一下三角矩阵,
如果我们转置此矩阵,得到
当资产数目为n时,我们可以先求得n资产的相关性矩阵,,然后将相关性矩阵透过线性代数的Cholesky分解,找出
。
再由与n个独立的常态分配随机数,
第三节 R的Cholesky函数
在多资产的模拟中,我们需要将相关性矩阵进行Cholesky分解。形成下三角与上三角矩阵的乘积。以一个2╳2的相相关性矩阵为例。M可分解成L与U的乘积。
#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的上三角矩阵。



雷达卡




京公网安备 11010802022788号







