vs2017 KMV模型的R语言实现

这是针对于博客vs2017安装和使用教程(详细)的KMV模型的R语言实现


github项目地址:https://github.com/nickhuang1996/KMV

有用的话记得star噢~


KMV模型的概念这里就不多赘述了,主要还是来看看R语言如何实现这个KMV模型的求解。

我们主要求解出V_{0}\sigma _{V},也就是公司资产价值公司资产价值的波动率,然后计算违约距离DD违约率EDF


目录

一、核心公式

二、安装依赖库

三、R语言实现


一、核心公式

1.E_{0} = V_{0}N(d_{1})-De^{-rT}N(d_{2})

2.d_{1}=\frac{ln(\frac{V_{0}}{D})+(r+\frac{\sigma_{V}^{2}}{2} )T}{\sigma _{V}\sqrt{T}}

3.d_{2}=d_{1}-\sigma_{V}\sqrt{T}

4.\sigma _{E}E_{0}=\frac{\partial E}{\partial V}\sigma_{V}V_{0}=N(d_{1})\sigma _{V}V_{0}


二、安装依赖库

1.新建项目

2.点击R工具-->窗口-->包,打开R语言工具包管理器

                                            

3.搜索nleqslv,它是用来求解非线性方程组的。结果如下,可以点击蓝色进行下载

                           

我们也可以查找存储库,下载这个包:

https://cran.microsoft.com/snapshot/2016-11-01/src/contrib/

                                    

该包的描述为

套餐:nleqslv
类型:包装
标题:非线性方程组的求解系统
版本:3.0.3
日期:2016-08-08
作者:Berend Hasselman
维护者:Berend Hasselman <bhh@xs4all.nl>
描述:使用Broyden或Newton方法求解非线性方程组
              可以选择线搜索和信任区域等全局策略。
              有使用数字或用户提供的雅可比行列式的选项,
              用于指定带状数字雅可比行列式和允许
              单数或病态的雅各比行列式。
许可证:GPL(> = 2)
NeedsCompilation:是的
打包:2016-08-07 17:38:12 UTC;berendhasselman
存储库:CRAN
发布日期:2016-08-08 17:19:53

4.下载完成,如下


三、R语言实现

script.R

#导入nleqslv
library(nleqslv);
#输入无风险利率
print("无风险利率:")
r <- 0.0225;
print(paste("r=", r))
#输入公司债务期限
print("公司债务期限:")
T <- 1;
print(paste("T=", T))
#输入流动负债、非流动负债
print("流动负债、非流动负债:")
SD <- 1e8;
LD <- 0.5 * 1e8;
print(paste("SD=", SD))
print(paste("LD=", LD))
#计算违约点
print("违约点:")
D0 <- SD + 0.5 * LD;
print(paste("D0=", D0))
#根据fair value修改违约点
D <- D0;
#输入股权波动率
print("股权波动率:")
PriceTheta <- 0.2893;
print(paste("PriceTheta=", PriceTheta))
#月波动
EquityTheta <- PriceTheta * sqrt(12);
print(paste("EquityTheta=", EquityTheta))
#输入股权价值
print("股权价值:")
E <- 214512867;
print(paste("E=", E))
if (FALSE) {
    "KMV模型变形求解"
}
cat('\n')

print("KMV模型变形求解")

x0 <- c(1, 1);
KMV_fun <- function(x) {
    y <- numeric(2);
    d1 <- (log(x[1] * E / D) + (r + 0.5 * x[2] ^ 2) * T) / (x[2] * sqrt(T));
    d2 <- d1 - x[2] * sqrt(T);
    y[1] <- x[1] * pnorm(d1) - D * exp(-r * T) * pnorm(d2) / E - 1;
    y[2] <- pnorm(d1) * x[1] * x[2] - EquityTheta;
    y
}
#求解KMV
z <- nleqslv(x0, KMV_fun, method = "Newton")
print(paste("z=", z))
cat('\n')

#VA
print("公司资产价值:")
V0 <- z$x[1] * E
print(paste("V0=", V0))
#AssetTheta
print("公司资产价值的波动率:")
ThetaV <- z$x[2]
print(paste("ThetaV=", ThetaV))
cat('\n')

#计算违约距离
print("违约距离:")
DD <- (V0 - D0) / (V0 * ThetaV)
print(paste("DD=", DD))
#计算违约率
print("违约率:")
EDF <- pnorm(DD)
print(paste("EDF=", EDF))

点击source startup file,运行script.R

结果:

[1] "无风险利率:"
[1] "r= 0.0225"
[1] "公司债务期限:"
[1] "T= 1"
[1] "流动负债、非流动负债:"
[1] "SD= 1e+08"
[1] "LD= 5e+07"
[1] "违约点:"
[1] "D0= 1.25e+08"
[1] "股权波动率:"
[1] "PriceTheta= 0.2893"
[1] "EquityTheta= 1.00216459725935"
[1] "股权价值:"
[1] "E= 214512867"

[1] "KMV模型变形求解"
[1] "z= c(1.55208533656458, 0.667931845274532)"         "z= c(1.20792265079217e-13, -3.71702668644502e-13)" "z= 1"                                             
[4] "z= Function criterion near zero"                   "z= c(1, 1)"                                        "z= 6"                                             
[7] "z= 5"                                              "z= 5"                                             

[1] "公司资产价值:"
[1] "V0= 332942275.375128"
[1] "公司资产价值的波动率:"
[1] "ThetaV= 0.667931845274532"

[1] "违约距离:"
[1] "DD= 0.935064778664272"
[1] "违约率:"
[1] "EDF= 0.825122541709471"


返回至原博客:vs2017安装和使用教程(详细)

悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值