wddoer 题主目前接触R的时间很短,之前玩的一直是Python。由于工作需要,使用R简单实现了企业违约风险预估的kmv模型的算法。目前脚本的运行依赖csv格式的原始数据,kmv模型的运算结果保存在文本文件中。欢迎交流~ 算法介绍:http://wddoer.github.io/2015/08/14/implement-kmv-model-in-R/ 源码托管:https://github.com/wddoer/rkmv
wddoer [未知用户] 嗯,算法介绍后面的链接里面,又对这个脚本的简介。详细代码在GitHub上。布莱克的原版论文我还没读过。不过kmv模型中关于企业资产的市场价值和企业的市价的关系是借用了BS公式实现的。kmv模型可以从多个维度做优化,企业负债作为可能违约的判断依据,由流动负债和不同比例的长期负债相加得来。
wddoer [未知用户] 勾选了邮件通知新回复,所以回复快。 :-) :-) 我感觉B-S公式的精髓就是建立了标的对象(企业,或者股票)的资产价值和其证券化后的对象(与前面相对应,就是股权和期权)的定价建立了合理的运算关系。不过个人觉得B-S模型还是稍显复杂。 我写的算法,最先求解的是企业资产的波动率,不断得迭代拟合得到合适的值,应该还可以优化。我觉得找到合适的方法求解这个波动率是个难点吧。
HarryYu 看了一下代码,表示压力很大,从代码上看,基本上还不是“求波动率”,而是想办法得到一个“最佳波动率”,根据最佳波动率(看作一个点)再想办法求距离。 思路还是很巧妙,算法上也有很多新颖的地方,很值得学习。
HarryYu 楼主能不能把相应的数学推导给简要描述一下,尤其是求企业波动率的那一部分,有的公式看不懂啊,比如d_value[i] <- d1[i] - (log((10000*e+10000*f*exp(-r*t)*nd2[i])/((nd1[i])*10000*f))+(r+0.5*(vf_temp^2))*t)/(vf_temp*sqrt(t)) 这行代码里面后面的d1公式为什么乘上那么多系数,比如nd2,nd1
wddoer [未知用户] 嗯,逻辑比较简单,最主要还是求解波动率。正在更新该脚本,数据导入更加灵活,自由度更高。支持对上市公司的批量kmv测试和自定义季度的批量kmv测试。 后期还会针对KMV模型一个极大似然方法的R实现。
HarryYu 发现楼主mle的已经做出来了,看不太懂,能解释一下吗,尤其是定义对数似然函数这一行, (0.5*(length(p)-1))*log(2*pi*((arg[2])^2)/length(p)) + sum(av[2:length(av)]) + sum(log_nd1[2:length(log_nd1)]) + sum(temp_le)*length(p)/(2*((arg[2])^2)) 这是个什么函数
HarryYu 看到了,KMV模型的实现与应用 是有点理解了,就是由Va估算Ve,求Ve的一个最大值。 数学的还是不太懂,相当于要有两个相关系数最大的量,Ve和Va,由Va的分布函数和转换函数就得到Ve的最大似然函数了。 感觉信心不大,不如第一个方法。