简单利率模型的蒙特卡洛模拟和类似投资组合排序的R实现

Q461157910
今天遇到一个小的需求,类似于实证金融中常用的投资组合排序方法,但相比起来更简单一些,比较适合learn the hard way。

需求描述如下:

有量级可比拟的两列数据p和ps(比如一支股票的收益率和滞后一期收益率),需要用ps的20%分位点将p分成5份,再统计每一份的均值,并画出每一份的核密度曲线。

代码如下,作为一个简单示意,此处的p和ps分别来自两个参数不同的Vasicek模型的蒙特卡洛模拟。

sp=function(x,q){

  res=max(which(q<=x))

  if(res==length(q))

    res=res-1

  return(res)

}

mc=function(r0,T,deltaT,a,b,sigma){

  path=rep(r0,T/deltaT)

  for(i in 2:length(path)){

    path[i]=path[i-1]+a*(b-path[i-1])+sigma*rnorm(1,0,1)

  }

  path

}

p=mc(0.03,10,0.0001,0.1,0.04,0.02)

ps=mc(0.05,10,0.0001,0.15,0.05,0.10)

q=quantile(ps,seq(0,1,0.2))

c=apply(X=as.array(p), MARGIN = 1, FUN=sp,q)

m=tapply(p,c,mean)

co=tapply(p,c,length)
Rplot.jpeg

PS:这个小需求还可以用base里面的cut函数完成,然而不属于hard way范围,不再赘述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容