
R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)

R est un logiciel libre livré sans AUCUNE GARANTIE.
Vous pouvez le redistribuer sous certaines conditions.
Tapez 'license()' ou 'licence()' pour plus de détails.

R est un projet collaboratif avec de nombreux contributeurs.
Tapez 'contributors()' pour plus d'information et
'citation()' pour la façon de le citer dans les publications.

Tapez 'demo()' pour des démonstrations, 'help()' pour l'aide
en ligne ou 'help.start()' pour obtenir l'aide au format HTML.
Tapez 'q()' pour quitter R.

[Sauvegarde de la session précédente restaurée]

> ## general methods of moments (GMM)
> library(MASS)
> 
> MMGpoidsNW <- function(param,modele)
+ {
+   donnees <- modele$donnees
+   q <- modele$q
+   donneesF <- donnees[-1]
+   donneesL <- donnees[-length(donnees)]
+   deltaTemps <- modele$deltaTemps
+   a <- param[1]
+   b <- param[2]
+   Gamma <- array(0,c(4,4,q+1))
+   if(modele$nomModele=="CKLS")
+     {
+       sigma <- param[3]
+       gamma <- param[4]
+       g1t <- donneesF - a - b * donneesL
+       g2t <- (donneesF - a - b * donneesL) ^ 2 - sigma^2 * donneesL ^ (2*gamma) *
+         deltaTemps
+       g3t <- (donneesF - a - b * donneesL) * donneesL
+       g4t <- ((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL ^ (2*gamma) *
+               deltaTemps) * donneesL
+     }
+   
+   if(modele$nomModele=="CIR")
+     {
+       sigma <- param[3]
+       g1t <- donneesF - a - b * donneesL
+       g2t <- (donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL * deltaTemps
+       g3t <- (donneesF - a - b * donneesL) * donneesL
+       g4t <- ((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL * deltaTemps) *
+         donneesL
+     }
+   
+   if(modele$nomModele=="Vasicek")
+     {
+       sigma <- param[3]
+       g1t <- donneesF - a - b * donneesL
+       g2t <- (donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * deltaTemps
+       g3t <- (donneesF - a - b * donneesL) * donneesL
+       g4t <- ((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * deltaTemps) * donneesL  
+     }
+   gt <- cbind(g1t,g2t,g3t,g4t)
+   n <- length(g1t)
+   ## en attendant
+   #W <- solve(cov(gt))
+   ## Newey-West
+   gtc <- apply(gt,2,function(x) x-mean(x))
+   for(v in 0:q)
+     {
+       gtF <- gtc[(1+v):n,]
+       gtL <- gtc[1:(n-v),]
+       Gamma[,,(v+1)] <- t(gtF) %*% gtL / n
+     }
+   S <- Gamma[,,1]
+   for(v in 1:q)
+     {
+       Snext <- (1-v/(q+1)) * (Gamma[,,v+1] + t(Gamma[,,v+1]))
+       S <- S+Snext
+     }
+   W <- ginv(S)
+ }
> 
> MomentsJacobien <- function(param, modele)
+ {
+   donnees <- modele$donnees
+   donneesF <- donnees[-1]
+   donneesL <- donnees[-length(donnees)]
+   n <- length(donneesL)
+   deltaTemps <- modele$deltaTemps
+   if(modele$nomModele=="CKLS")
+     {
+       a <- param[1]
+       b <- param[2]
+       sigma <- param[3]
+       gamma <- param[4]
+         
+       g1a <- -n
+       g2a <- -2*sum(donneesF - a - b*donneesL)
+       g3a <- -sum(donneesL)
+       g4a <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+ 
+       g1b <- -sum(donneesL)
+       g2b <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+       g3b <- -sum(donneesL^2)
+       g4b <- -2*sum((donneesF - a - b*donneesL)*donneesL^2)
+ 
+       g1s <- 0
+       g2s <- -deltaTemps*sum(donneesL^(2*gamma))
+       g3s <- 0
+       g4s <- -deltaTemps*sum(donneesL^(2*gamma+1))
+ 
+       g1g <- 0
+       g2g <- -2*sigma^2*deltaTemps*sum(log(donneesL)*donneesL^(2*gamma))
+       g3g <- 0
+       g4g <- -2*sigma^2*deltaTemps*sum(log(donneesL)*donneesL^(2*gamma+1))
+         
+         d <- cbind(c(g1a, g1b, g1s, g1g),
+              c(g2a, g2b, g2s, g2g),
+              c(g3a, g3b, g3s, g3g),
+              c(g4a, g4b, g4s, g4g))/n
+     }
+   if(modele$nomModele=="CIR")
+     {
+       a <- param[1]
+       b <- param[2]
+         
+       g1a <- -n
+       g2a <- -2*sum(donneesF - a - b*donneesL)
+       g3a <- -sum(donneesL)
+       g4a <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+ 
+       g1b <- -sum(donneesL)
+       g2b <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+       g3b <- -sum(donneesL^2)
+       g4b <- -2*sum((donneesF - a - b*donneesL)*donneesL^2)
+       
+       g1s <- 0
+       g2s <- -sum(deltaTemps*donneesL)
+       g3s <- 0
+       g4s <- -sum(deltaTemps*donneesL*donneesL)
+ 
+       d <- cbind(c(g1a, g1b, g1s),
+              c(g2a, g2b, g2s),
+              c(g3a, g3b, g3s),
+              c(g4a, g4b, g4s))/n         
+     }
+   if(modele$nomModele=="Vasicek")
+     {
+       a <- param[1]
+       b <- param[2]
+       
+       g1a <- -n
+       g2a <- -2*sum(donneesF - a - b*donneesL)
+       g3a <- -sum(donneesL)
+       g4a <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+       
+       g1b <- -sum(donneesL)
+       g2b <- -2*sum((donneesF - a - b*donneesL)*donneesL)
+       g3b <- -sum(donneesL^2)
+       g4b <- -2*sum((donneesF - a - b*donneesL)*donneesL^2)
+       
+       g1s <- 0
+       g2s <- -deltaTemps*n
+       g3s <- 0
+       g4s <- -sum(deltaTemps*donneesL)
+ 
+       d <- cbind(c(g1a, g1b, g1s),
+                  c(g2a, g2b, g2s),
+                  c(g3a, g3b, g3s),
+                  c(g4a, g4b, g4s))/n  
+     }
+   d
+ }
> 
> MMGobjectif<- function(param, modele, W)
+   {
+     donnees <- modele$donnees
+     donneesF <- donnees[-1]
+     donneesL <- donnees[-length(donnees)]
+     n <- length(donnees)-2
+     deltaTemps <- modele$deltaTemps
+     a <- param[1]
+     b <- param[2]
+     
+     if(modele$nomModele=="CKLS")
+       {
+         sigma <- param[3]
+         gamma <- param[4]
+         g1 <- sum(donneesF - a - b * donneesL)
+         g2 <- sum((donneesF - a - b * donneesL) ^ 2 - sigma^2 * donneesL ^ (2*gamma) *
+                   deltaTemps)
+         g3 <- sum((donneesF - a - b * donneesL) * donneesL)
+         g4 <- sum(((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL ^ (2*gamma) *
+                    deltaTemps) * donneesL )      
+       }
+         
+     if(modele$nomModele=="CIR")
+       {
+         sigma <- param[3]
+         g1 <- sum(donneesF - a - b * donneesL)
+         g2 <- sum((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL * deltaTemps)
+         g3 <- sum((donneesF - a - b * donneesL) * donneesL)
+         g4 <- sum(((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * donneesL * deltaTemps)*
+                   donneesL)  
+       }
+     
+     if(modele$nomModele=="Vasicek")
+       {
+         sigma <- param[3]
+         g1 <- sum(donneesF - a - b * donneesL)
+         g2 <- sum((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * deltaTemps)
+         g3 <- sum((donneesF - a - b * donneesL) * donneesL)
+         g4 <- sum(((donneesF - a - b * donneesL) ^ 2 - sigma ^ 2 * deltaTemps) *
+                   donneesL)     
+       }
+     g <- c(g1,g2,g3,g4)/n
+     t(g) %*% W %*% g
+   }
> 
> MMGestimation <- function(modele)
+   {
+     deltaTemps <- modele$deltaTemps
+     ## paramètres initiaux
+     if(modele$nomModele=="CKLS")
+       {
+         alpha <- 0.5
+         beta <- -0.5
+         sigma <- 0.5
+         gamma <- 0.5
+         a <- alpha * deltaTemps
+         b <- beta * deltaTemps + 1
+         Initialparam <- c(a,b,sigma,gamma)
+       }
+     if(modele$nomModele=="CIR" || modele$nomModele=="Vasicek")
+       {
+         alpha <- 0.5
+         beta <- -0.5
+         sigma <- 0.5
+         a <- alpha * deltaTemps
+         b <- beta * deltaTemps + 1
+         Initialparam <- c(a,b,sigma)
+       }
+     ## Première étape avec matrice identité
+     W <- diag(4)
+     estim <- nlminb(Initialparam,MMGobjectif,gr=NULL,hessian=NULL,modele,W)
+     param <- estim$par
+     Fval <- estim$objective
+     Exitflag <- estim$convergence
+     if(modele$nomModele=="CKLS")
+       {
+         Ralpha <- estim$par[1] / deltaTemps 
+         Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+         Rsigma2 <- estim$par[3] ^ 2  
+         Rgamma <- estim$par[4] 
+       }
+     if(modele$nomModele=="CIR")
+       {
+         Ralpha <- estim$par[1] / deltaTemps 
+         Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+         Rsigma2 <- estim$par[3] ^ 2 
+         Rgamma <- 0.5 
+       }
+     
+     if(modele$nomModele=="Vasicek")
+       {
+         Ralpha <- estim$par[1] / deltaTemps 
+         Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+         Rsigma2 <- estim$par[3] ^ 2 
+         Rgamma <- 0 
+       }
+     ## Seconde étape avec matrice W
+     if(modele$Iterations>0)
+       {
+         for (i in 1:modele$Iterations)
+         {
+           Initialparam <- param
+           W <- MMGpoidsNW(param, modele)
+           estim <- nlminb(Initialparam,MMGobjectif,gr=NULL,hessian=NULL,modele,W)
+           param <- estim$par
+           Fval <- estim$objective
+           Exitflag <- estim$convergence
+           if(modele$nomModele=="CKLS")
+             {
+               Ralpha <- estim$par[1] / deltaTemps 
+               Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+               Rsigma2 <- estim$par[3] ^ 2  
+               Rgamma <- estim$par[4] 
+             }
+           if(modele$nomModele=="CIR")
+             {
+               Ralpha <- estim$par[1] / deltaTemps 
+               Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+               Rsigma2 <- estim$par[3] ^ 2 
+               Rgamma <- 0.5 
+             }
+           
+           if(modele$nomModele=="Vasicek")
+             {
+               Ralpha <- estim$par[1] / deltaTemps 
+               Rbeta  <- (estim$par[2] - 1) / deltaTemps 
+               Rsigma2 <- estim$par[3] ^ 2 
+               Rgamma <- 0 
+             }
+         }
+       }
+     
+     ## Statistique T
+     n <- length(modele$donnees)-1
+     d <- MomentsJacobien(param,modele)
+     Varparam <- ginv(d %*% W %*% t(d))
+     Tstat <- solve(chol(Varparam),param)/sqrt(n)
+     Tpvalue <- 1-pt(Tstat,n-length(param))
+     list(Tstat=Tstat,Tpvalue=Tpvalue,
+          Varparam=Varparam,param = c(Ralpha,Rbeta,Rsigma2,Rgamma), Fval=Fval,
+          Exitflag=Exitflag)
+     
+   }
> 
> proc.time()
utilisateur     système      écoulé 
      0.272       0.020       0.286 
