KMV模型的R语言实现

本文基于郑志勇《金融数量分析:基于Matlab编程》第六章KMV模型相关内容进行改编和验证,同时说明使用R语言nleqslv()函数求解非线性方程的方法。


library(nleqslv)
r<-0.0225;
##输入时间
T<-1;
##输入流动负债、非流动负债
SD<-1e8;
LD<-50000000;
##计算违约点
DP<-SD+0.5*LD;
##可以根据fair value修改违约点
D<-DP;
##输入股权波动率和股权价值
PriceTheta<-0.2893 
EquityTheta<-PriceTheta*sqrt(12) #以月波动率为例
E=141276427;
##KMV 方程变形及求解
EtoD <- E/D;
x0 <- c(1,1);
KMVfun<-function(x) {
  y <- numeric(2);
d1<-( log(x[1]*EtoD)+(r+0.5*x[2]^2)*T ) / ( x[2]*sqrt(T));
d2<-d1-x[2]*sqrt(T);
y[1]<-x[1]*pnorm(d1)-exp(-r*T)*pnorm(d2)/EtoD-1;
y[2]<-pnorm(d1)*x[1]*x[2]-EquityTheta;
y
   }
z<-nleqslv(x0, KMVfun,  method="Newton")
Va<-z$x[1]*E
AssetTheta<-z$x[2]
##计算违约距离
##DD=(log(Va/DP)+(r-0.5*AssetTheta^2)*T)/(AssetTheta*T)  
DD<-(Va-DP)/(Va*AssetTheta)
##计算违约率
EDF<-pnorm(-DD)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值