2013-07-10 3 views
1

채권 수익률과 초기 단기 수익률 간의 선형 관계를 찾으려고합니다. 저는 연 48 회의 기간과 13 년의 보증 기간을 사용하고 있습니다. 2에서 m + 1 I 루프는 다음 내 R 행렬이 같은 첫 번째 제외한 모든 행이있는 경우 for 루프에서Vasicek 채권 가격/수익률 시뮬레이션 in R

  1. :

    ## generate initial short rate matrix 
    totalcases<-71 
    r0 <-matrix(nrow=totalcases,ncol=1) 
    for (i in 1:totalcases){ 
        if (-.21+i/100 < -.07){ 
        r0[i,1]<- -.21+i/100 
        } 
        else if (r0[i-1,1] >= .02){ 
        r0[i,1]<- r0[i-1,1]+1/100 
        } 
        else { 
        r0[i,1]<- r0[i-1,1]+.25/100 
        } 
    
    } 
    
    ## simulate short rate paths 
    
    gamma <- 0.05 
    sigma <- 0.0135 
    alpha <- 0.05 
    lambda <- 0.00 
    
    n <- 30000 # MC simulation trials 
    Time <- 13 # Maturity of the Bond 
    int <-48 #no of subintervals per year 
    dt <- 1/int # difference in time between each subinterval 
    m <- Time*int # total subintervals 
    
    
    set.seed(0) 
    z<-matrix(rnorm(n*m,mean=0,sd=1),nrow=n,ncol=m) 
    
    r <- matrix(nrow=n,ncol=m+1) 
    
    Yield <-matrix(nrow=totalcases,ncol=1) 
    
    for(l in 1:totalcases){ 
    
        r[,1]<- r0[l,1] 
    
        for (j in 1:m+1){ 
        r[,j]<-r[,j-1]*exp(-alpha*dt)+(gamma-(lambda*sigma/alpha))*(1-exp(-alpha*dt))+sigma * sqrt((1 - exp(-2 * alpha *dt))/(2 * alpha)) *z[,j-1] 
    
        } 
    
        k<-apply(r,1,sum) 
        k<-k*dt 
        Price<-exp(-k) 
        ExptdPrice<-mean(Price) 
        Yield[l,1]<- -log(ExptdPrice)/Time 
    
    } 
    

    나는이 개 질문이 다음과 같이 내 코드는 하지만 1에서 m + 1까지 반복하면 행렬이 잘됩니다. 내 첫 번째 열 고정 (모든 행을 고정 값을 r0을) 감안할 때 왜 1에서 m + 1 및 2 m + 1 루프에서 실행해야합니까?

  2. 내 채권 가격은 정확한 솔루션에 가깝지만 충분히 근접하지 않으며 10,000 시뮬레이션에서 20k 또는 30k 시뮬레이션으로 갈 때 정확도가 선형 적으로 증가하지 않습니다. 뭐라 구요?

답변

0
  1. 는 모든 NA로 시작합니다 그래서, 어떤 초기 값을 제공하지 않습니다 행렬을 구성하도록 통화. 초기 값을 염두에 둔 경우 명시 적으로 r0[1] <- <initial_value>으로 지정하거나 matrix 전화 번호 : matrix(<initial_value>, nrow=71, ncol=1)에 포함 시키십시오. 비록 당신은 오직 하나의 컬럼을 가지고 있기 때문에, 그것도 벡터로 만들 수 있습니다. 1 : n + 1은 1 : (n + 1)이 아니라 (1 : n) +1로 구문 분석됩니다.

  2. 시뮬레이션의 정밀도는 일반적으로 시행 횟수의 제곱에 비례합니다. 정확도를 두 배로 높이려면 시련을 4 번해야합니다.

+0

질문 1과 관련하여 명확하지 않았습니다. 검색어는 행렬 r에 관한 것이고 행렬 r0에 관한 것이 아닙니다. 문제의 for 루프는 코드의 두 번째 절반에있는 루프입니다. – user2566834

+0

도움 주셔서 감사합니다. 정말 감사합니다. – user2566834