# #################################################################################
# Document réalisé M. Clévenot, dans le cadre du TD d'informatique à l'université de Bourgogne en L3 économie. 21 spetembre 2018
###################################################################################
#Element de TD sur R.
#Reproduire les exercices réalisés avec Excel, et VBA grâce à R.
# Calcul des rendements du CAC40
# Réalisation d'un graphique élégant des rendements
# Réaliser un histogramme des rendements
# Réaliser les tests d'asymétrie et d'applatissement
# La première étapa consiste à récupérer sur le site d'Euronext la quotation du CAC40 depuis sa création. 
#Ensuite il faut néttoyer le document en retirant les élements dont on a pas besoin. 
#R n'aime pas les cellules vides.
#Pour charger les données dans R, il est nécessaire d'installer puis de charge le package"readxl" 
#install.packages("readxl")
#install.packages(c("readxl","e1071")

require("readxl")# pour la fonction read_excel
## Loading required package: readxl
## Warning: package 'readxl' was built under R version 3.5.1
cac41 <- read_excel("C:/Users/Mickael/Documents/l3 info/cac40_long.xlsx",sheet ="cac40_long")# On donne à R les infos sur le sentier qu'il doit suivre pour trouver les données.
head(cac41)# On regarde les premières lignes pour voir si c'est correct.
## # A tibble: 6 x 11
##   `Données histo~ X__1  X__2  X__3  X__4  X__5  X__6  X__7  X__8  X__9 
##   <chr>            <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Date: 31/12/198~ <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 2 CAC 40           <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 3 ISIN             MIC   Date  Ouve~ Haut  Bas   Ferm~ Nomb~ Numb~ Capi~
## 4 FR0003500008     Euro~ 32114 1015~ 1018~ 1015~ 1018~ 0     0     -    
## 5 FR0003500008     Euro~ 32115 983.~ 989.~ 983.~ 989.~ 0     0     -    
## 6 FR0003500008     Euro~ 32118 956.~ 964.2 956.~ 964.2 0     0     -    
## # ... with 1 more variable: X__10 <chr>
# On voit qu'il y a des problèmes car le dossier n'a pas été nettoyé. 
# On nettoie le feuille de données en suprimant les cellules vides(premières lignes). En première ligne, on doit avoir impérativement le nom des variables. Ici on peut conserver uniquement les dates et la valeur de cloture du CAC.C'est à faire dans Excel. Puis on peut à nouveau charger les données. 
cac40 <- read_excel("C:/Users/Mickael/Documents/l3 info/cac40_long.xlsx",sheet ="Feuil1")
class(cac40)# C'est plus clair. 
## [1] "tbl_df"     "tbl"        "data.frame"
cac42<-as.data.frame(cac40)# On transformer les données en data.frame pour faciliter leur traitement. 
head(cac42)#Les infos sur la nature des variables on disparu. 
##         Date  Ouvert    Haut     Bas  Fermer
## 1 1987-12-03 1015.32 1018.78 1015.31 1018.78
## 2 1987-12-04  983.53  989.14  983.53  989.14
## 3 1987-12-07  956.47  964.20  956.47  964.20
## 4 1987-12-08  972.60  977.19  972.60  977.19
## 5 1987-12-09  966.89  969.56  966.89  969.56
## 6 1987-12-10  964.15  991.01  964.15  991.01
cac<-cac42$Fermer # On prend la colonne qui s'appelle FERME pour qu'il s'agit du CAC.
R1<-NULL# ON crée la variable R1
for(i in 2:length(cac)) R1[i] <- (cac[i]-cac[i-1])/cac[i-1] # On réalise une boucle afin de calculer le rendement du CAC.
plot(R1)# On fait un petit graphique moche.

plot(R1,type = "l")# ON fait un graph un peu mieux.

plot.ts(R1,xlab="temps",ylab="rentabilité")# Un autre avec des noms sur les axes.
# Dans R la gestion des dates ,c'est un peu compliqué
date<-as.Date(cac40$Date)# On prend la colonne des dates et on explique à R qu'il s'agit de date.
#Graphique complet avec beaucoup d'option à décortiquer.
plot(R1~date,xaxt="n",xlim=c(min(date),max(date)),ylab="Rendements",xlab="Dates",type="l", panel.first = grid(),main="Rendements du CAC 40")

at1<-seq(ISOdate(1987,12,03), ISOdate(2018,09,21), by = "520 days")
axis.Date(side=1, ax,  at=at1,las=2,  format= "%b %y", panel.first = grid(),cex.axis = .5)

# Pour effectuer le calcul du Kurtosis on a besoin d'un package suppléementaire "moments" IL faut l'installer puis le charger. 
#install.packages("moments")
library(moments)  
kurtosis(R1,na.rm = TRUE)# na.rm =TRUE indique qu'on omet les valeurs manquantes
## [1] 7.867408
#Dans R1, il manque la première valeur à cause de la différence. 
skewness(R1,na.rm = TRUE)
## [1] 0.04920666
R11<-R1[-1]#On retire la prmière ligne avec la valeur vide car ça bloque le test de Jarque-Bera. 
jarque.test(R11)
## 
##  Jarque-Bera Normality Test
## 
## data:  R11
## JB = 7695, p-value < 2.2e-16
## alternative hypothesis: greater
#L'hypothèse aléternative est préférée "greater" donc la série ne correspond aux critères d'une loi normale.
#on peut regarder l'histogramme pour mieux s'en rendre compte.
hist(R1,50,main="Histogramme avec 50 classes")

hist(R1,100,main="Histogramme avec 100 classes")

hist(R1,150,main="Histogramme avec 150 classes")#On peut voir sur le graph une pointe forte autour de la moyenne et des queues de distributon épaisses(presomption Kurtosis élevé, distriubtion leptokurtique). Il penche vers la droite. 

#Finalement, on va confronter la distribution empirique à sa valeur théorique, # Une loi normale centrée réduite obtenue à partir de la moyenne et de l'écart type du rendement. 

hist(R11, prob=T,150)
curve(dnorm(x,mean(R11),sd(R11)),add=T,col="red")

# On voit ici encore plus clairement la point très élevée à la moyenne et les queues de distribution épaisses. 
#  Et finalement pour plus de netteté on transforme à la variable discontinue R11 en variable continue grâce à la méthode du noyau. On peut ainsi comparer 2 courbe. 
plot(density(R11),ylim = c(-0.5,55))
curve(dnorm(x,mean(R11),sd(R11)),add=T,col="red")
legend(-0.1,52, legend=c("Loi normale", "Distribution emprique"),col=c("red", "black"), lty=1:1, cex=0.8)

# On remarque les options supplémentaire sur le graphique pour afficher une légende et la positionner.