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)

你可能感兴趣的:(R语言学习,风险管理实践)