Projet de lecture dirigée portant sur l'estimation des modèles de taux d'intérêts basés sur des processus stochastiques. En collaboration avec mon superviseur de mémoire Andrew Luong.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pca.r 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. ## principal component analysis
  2. ## données .25,2,3,5,10,30 ans USGG pris sur Bloomberg
  3. ## librairies
  4. library("xtable")
  5. yc <- data.matrix(read.table("usgg.csv",header=T, sep=";",na.strings = "#NA"))[,-1]
  6. dt <- yc[,7]
  7. yc <- yc[,-7]
  8. time <- c(.25,2,3,5,10,30)
  9. yc.center <- t(t(yc)-apply(yc,2,mean))
  10. ## plot des séries
  11. pdf("PCA-tseries.pdf")
  12. par(mfrow=c(3,2))
  13. ts.plot(yc[,1], main="90 jours")
  14. ts.plot(yc[,2], main="2 ans")
  15. ts.plot(yc[,3], main="3 ans")
  16. ts.plot(yc[,4], main="5 ans")
  17. ts.plot(yc[,5], main="10 ans")
  18. ts.plot(yc[,6], main="30 ans")
  19. dev.off()
  20. ## plot de l'observation 1
  21. pdf("PCA-observation1.pdf")
  22. plot(time,yc[1,],type="l")
  23. ## plot de l'observation 1 avec spline
  24. lines(spline(time,yc[1,]),type="l", col="red")
  25. dev.off()
  26. ## différenciation
  27. yc.diff <- diff(yc.center)
  28. ##
  29. ## Approche #1 (cov)
  30. ##
  31. ## matrice de variance covariance des différences
  32. yc.diff.vcov <- cov(yc.diff)
  33. ## matrice P (vecteurs propres)
  34. P <- eigen(yc.diff.vcov)$vectors
  35. sink("PCA-Pcov.tex",append=FALSE,split=FALSE)
  36. xtable(P,digits=4)
  37. sink()
  38. ## valeurs propres (variance par composant)
  39. lambda <- eigen(yc.diff.vcov)$values
  40. sink("PCA-lambdacov.tex",append=FALSE,split=FALSE)
  41. xtable(t(as.matrix(lambda)),digits=4)
  42. sink()
  43. ## écart-type par composant
  44. sq.lambda <- sqrt(lambda)
  45. ## variance totale (trace de la matrice de valeurs propres)
  46. totvar <- sum(lambda)
  47. ## fraction expliquée par composante
  48. lambda/totvar
  49. sink("PCA-prcov.tex",append=FALSE,split=FALSE)
  50. xtable(t(as.matrix(lambda/totvar)),digits=4)
  51. sink()
  52. ##
  53. ## Approche #2 (corr)
  54. ##
  55. ## matrice de corrélations des différences
  56. yc.diff.corr <- cor(yc.diff)
  57. ## matrice P (vecteurs propres)
  58. Pcorr <- eigen(yc.diff.corr)$vectors
  59. sink("PCA-Pcorr.tex",append=FALSE,split=FALSE)
  60. xtable(Pcorr,digits=4)
  61. sink()
  62. ## valeurs propres (variance par composant)
  63. lambda.corr <- eigen(yc.diff.corr)$values
  64. sink("PCA-lambdacorr.tex",append=FALSE,split=FALSE)
  65. xtable(t(as.matrix(lambda.corr)),digits=4)
  66. sink()
  67. ## écart-type par composant
  68. sq.lambda.corr <- sqrt(lambda.corr)
  69. ## variance totale (trace de la matrice de valeurs propres)
  70. totvar.corr <- sum(lambda.corr)
  71. ## fraction expliquée par composante
  72. lambda.corr/totvar.corr
  73. sink("PCA-prcorr.tex",append=FALSE,split=FALSE)
  74. xtable(t(as.matrix(lambda.corr/totvar.corr)),digits=4)
  75. sink()
  76. ## graphiques (3 premieres composantes: parallel shift, tilt, curvature)
  77. pdf("PCA-composantes1-2-3.pdf")
  78. par(mfrow=c(2,3))
  79. plot(time,P[,1],col="blue", ylim=c(-1,1), type="l")
  80. plot(time,P[,2],col="blue", ylim=c(-1,1), type="l")
  81. plot(time,P[,3],col="blue", ylim=c(-1,1), type="l")
  82. plot(time,Pcorr[,1],col="red", ylim=c(-1,1), type="l")
  83. plot(time,Pcorr[,2],col="red", ylim=c(-1,1), type="l")
  84. plot(time,Pcorr[,3],col="red", ylim=c(-1,1), type="l")
  85. dev.off()
  86. ## produits Score (volatilité expliquée par composante)
  87. Score <- yc.center %*% P
  88. Scorecorr <- yc.center %*% Pcorr
  89. pdf("PCA-score.pdf")
  90. par(mfrow=c(2,1))
  91. ts.plot(Score,col="blue")
  92. ts.plot(Scorecorr,col="red")
  93. dev.off()
  94. ## utilisation de la fonction princomp pour fins de comparaison
  95. yc.princomp <- prcomp(yc.diff)
  96. pdf("PCA-verif-princomp.pdf")
  97. plot(yc.princomp, type="l")
  98. dev.off()