I. Types de Variables

Variable Qualitative: Les variables qualitatives contiennent des valeurs qui expriment une qualité, un état, c’est-à-dire une condition, un statut unique et exclusif comme le sexe, la couleur ou bien encore la catégorie socioprofessionnelle.

  • Nominale : Une variable est dite qualitative nominale quand ses valeurs sont des éléments d’une catégorie type nom non hiérarchique. En d’autres termes, ses éléments ne peuvent pas se ranger dans une gradation logique, selon une hiérarchie naturelle. exemple : la variable « couleur » est de type qualitative nominale, les valeurs pouvant être prises par celle-ci étant bien de type nom (vert, jaune, noir, rouge, …) avec aucune hiérarchie entre elles.

  • Ordinale : Une variable qualitative ordinale possède toutes les propriétés de la variable qualitative nominale avec en plus la possibilité de positionner et de hiérarchiser les individus entre eux selon la valeur attachée à leur caractère. exemple: La variable « niveau de confort d’un logement » est de type qualitative ordinale, les valeurs pouvant être prises par celle-ci étant bien de type nom (médiocre, moyen, bon, très bon) et une hiérarchie existe entre les modalités définies.

Variable Quantitative: Les variables quantitatives contiennent des valeurs numériques faisant référence à une unité de mesure reconnue. Pour cette raison, elles sont quelques fois qualifiées de variables métriques. La taille, le poids, la surface, la distance, le revenu, l’âge, le chiffre d’affaire ou bien encore la population (dans le sens du nombre d’habitants) sont des variables quantitatives

  • Discrète : Une variable est dite discrète quand elle prendre un nombre fini ou dénombrable de valeurs. exemple : Le nombre d’arbres plantés sur les parcelles d’un lotissement a été compté. {0,1,2,…}

  • Continue : Une variable continue peut, à l’inverse de la variable discrète, prendre un nombre infini ou non dénombrable de valeurs. exemple: variable « température » est une variable quantitative d’intervalle continue. Celle-ci peut en effet prendre une infinité de valeurs quelles que soient les limites retenues.



II. Filtres (strates)

Les filtres permettent de sélectionner seulement certaines données qui respectent une condition demandée. Les principaux filtre sont les connecteurs logique « et » et « ou ». Ils sont associés à un test qui peut être une égalité ou une inégalité, et dans le cas d’une variable quantitative il peut également être inférieur (ou égal) ou supérieur (ou égal).Il existe aussi le filtre différent.

X=read.delim(file ="https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/sports.txt", 
             header =T , sep = ";" , dec = "." , fileEncoding ="latin3")

L’opérateur == nous permet voir l’égalité entre deux variables, par exemple voir tous les sports pratiqués des femmes:

X$sport[X$sexe=='F']
##   [1] natation    badminton   equitation  basket      gymnastique ski_alpin  
##   [7] ski_alpin   gymnastique natation    equitation  tennis      aucun      
##  [13] handball    danse       gymnastique snowboard   snowboard   rugby      
##  [19] badminton   tennis      aucun       snowboard   judo        rugby      
##  [25] natation    basket      badminton   aucun       handball    rugby      
##  [31] danse       aucun       danse       handball    handball    ski_alpin  
##  [37] natation    rugby       badminton   danse       natation    basket     
##  [43] danse       equitation  equitation  ski_alpin   badminton   equitation 
##  [49] snowboard   snowboard   handball    basket      basket      natation   
##  [55] gymnastique basket      basket      equitation  badminton   snowboard  
##  [61] natation    rugby       rugby       equitation  aucun       natation   
##  [67] handball    natation    danse       rugby       aucun       handball   
##  [73] rugby       basket      gymnastique ski_alpin   aucun       aucun      
##  [79] tennis      snowboard   snowboard   gymnastique danse       football   
##  [85] aucun       ski_alpin   rugby       basket      handball    rugby      
##  [91] natation    basket      basket      ski_alpin   rugby       ski_alpin  
##  [97] handball    danse       tennis      handball    tennis      danse      
## [103] snowboard   badminton   badminton   aucun       aucun       tennis     
## [109] natation    rugby       handball    ski_alpin   aucun       badminton  
## [115] equitation  equitation  natation    rugby       gymnastique tennis     
## [121] handball    basket      gymnastique ski_alpin   aucun       snowboard  
## [127] equitation 
## 18 Levels: aucun badminton basket boules danse equitation ... VTT

L’opérateur & nous permet par exemple de connaitre l’âge moyen des hommes faisant du football (ET mathématique)

mean(X$age[X$sexe=='M' & X$sport=='football'])
## [1] 20.47059

L’opérateur > nous permet par exemple de calculer la moyenne des personnes faisant plus de 175cm (strictement supérieure)

mean(X$poids.kg[X$taille.cm>175])
## [1] 72.54286

De même l’opérateur <= nous permet par exemple de représenter les banques en fonction du nombre annuel de démissions par succursales inférieure où égale à 60.

Y=read.delim("http://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/stock_attrition.txt",header=T, dec=".",sep="\t")
Y$banque[Y$dem<=60]
##  [1] Alpes               Alsace              Alsace             
##  [4] Alsace              Alsace              Alsace             
##  [7] Alsace              Alsace              Alsace             
## [10] Atlantique          BDP                 BDP                
## [13] BDP                 BDP                 BDP                
## [16] BDP                 BDP                 BDP                
## [19] Cote d Azur         Cote d Azur         Cote d Azur        
## [22] Cote d Azur         Cote d Azur         Loire Lyonnais     
## [25] Massif Central      Massif Central      Massif Central     
## [28] Massif Central      Massif Central      Ouest              
## [31] Provencale et Corse Provencale et Corse SGCB               
## [34] SGCB                SGCB                SGCB               
## [37] SGCB                SGCB                SGCB               
## [40] SGCB                Sud                 Sud                
## [43] SUD OUEST           SUD OUEST           SUD OUEST          
## 20 Levels: Alpes Alsace Atlantique BDP Bourgogne FC BRED ... Val de France

Ou encore cela nous permet de définir de nouvelles variables comme l’IMC par exemple qu’on calcule grâce a cette formule et grâce au filtre <

X$IMC=X$poids.kg/(X$taille.cm/100)^2
X$ID_IMC <- ifelse(X$IMC<18.5,"maigreur",
                    ifelse(X$IMC<25,"normale",
                           ifelse(X$IMC<30,"surpoids",
                                  ifelse(X$IMC<35,"obésité modérée"))))

L’opérateur | nous permet par exemple de représenter l’âge des personnes en fonction du fait si elles font de la natation ou si elles font du handball. (OU mathématique)

table(X$age[X$sport=="natation" | X$sport=="handball" ])
## 
## 17 18 19 20 21 22 23 24 25 26 
##  5  9  3  2  1  4  6  3  5  2

L’ opérateur != (différent) nous permet de sélectionner toutes les lignes sauf celle définie par le != Par exemple le poids de toutes les personnes sauf celles qui font du basket.

table(X$poids.kg[X$sport!="basket"])
## 
## 47 48 49 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 
##  1  3 11  4  6  6  4  9 17 15  5 20  6  8 14  3  8  8  4  4  2 28 11  2  3  1 
## 75 76 78 80 83 88 90 
##  5  2  2  3  1  1  1





III. Instructions d’analyse

Une Variable Quantitative

library(ggplot2)

Une commande utile pour inspecter la structure de données est la commande summary() qui fournit un résumé descriptif univarié pour chaque variable.

summary(Y$dem[Y$annee==1999 & Y$banque!="Alpes"])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   41.00   54.00   67.37   81.00  199.00

De même la fonction table() nous renvoie les effectifs par modalités.

table(X$age)
## 
## 17 18 19 20 21 22 23 24 25 26 
## 24 25 23 37 22 26 26 11 19 27

Un histogramme est une représentation graphique permettant de représenter la répartition d’une variable quantitative en la représentant avec des colonnes verticales, représenter la densité nous permet de mieux visualiser la répartition.

ggplot(Y, aes(x=Y$dem)) + 
  geom_histogram(aes(y=..density..), alpha=1, 
                 position="identity") +
  geom_density(alpha=.2,fill="#96ff66")  + ggtitle(label = "Histogramme du nombre annuel de démission et sa densité") + theme_gray()

Un boxplot permet d’afficher les distributions d’une variable quantitative, on y retrouve ses quartiles.

boxplot(X[c("poids.kg","taille.cm","rythmcard")],main="Boxplot du poids, de la taille et du rythme cardiaque")

Une fonction de répartition (du nombre de volume annuel de sociétaires ordonné avec la fonction sort) est aussi une façon d’analyser une variable quantitative.

ggplot(Y, aes(sort(Y$soc))) + stat_ecdf(geom = "point") + theme_gray() + labs(title = "Fonction de répartition du volume annuel de sociétaire (trié)")+ theme_gray()





Une Variable Qualititative

Encore une fois la fonction table() renvoie les effectifs par modalités.

table(X$pballon)
## 
##   D   G 
## 213  27

Effectif seulement sur les footballeurs

table(X$pballon[X$sport=="football"])
## 
##  D  G 
## 15  3

La fréquence permet aussi une analyse d’une variable qualitative

freq=table(X$pballon)/sum(table(X$pballon));freq
## 
##      D      G 
## 0.8875 0.1125

Un barplot peut permettre de représenter des variables qualitatives

ggplot(X) + geom_bar(aes(x = X$sport), fill = "darkseagreen", width = .5)+ ggtitle(label = "Barplot du nombre de personnes en fonction du sport") + theme_gray()

De même on peut aussi faire un piechart afin de représenter une variable qualitative (utilisation de googleVis ici)

library(googleVis)
op <- options(gvis.plot.tag="chart")
Sport= X[(X$sport !="aucun"),]
table_pie <- data.frame(prop.table(table(Sport$sport)))
Pie <- gvisPieChart(table_pie,options=list(title="Proportion des différentes sports"))
plot(Pie)





Transformer une variable quantitative en variable qualitative

La fonction FindInterval est très utile pour transformer une variable quantitative en qualitative (intervalle)

?findInterval
échelle = c(0,60,120,200)
qualité = c('faible','moyen','élevé')
f=findInterval(Y$dem,échelle)
table(qualité[f])
## 
##  élevé faible  moyen 
##     39     45     49

On peut aussi rendre une variable qualitative en utilisant la fonction as.factor

Cela est utile pour être sur de ne pas faire des calculs avec des variables qui n’ont pas de sens en tant que variable quantitatives.

qualitage <- as.factor(X$age)

summary(X$age) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.00   19.00   21.00   21.28   23.00   26.00
summary(qualitage) 
## 17 18 19 20 21 22 23 24 25 26 
## 24 25 23 37 22 26 26 11 19 27





Une variable quantitative à nombre de modalités fini (et réduit)

En définissant la variable age à l’aide d’une table on peut ensuite facilement réaliser un plot.

t=table(X$age);t
## 
## 17 18 19 20 21 22 23 24 25 26 
## 24 25 23 37 22 26 26 11 19 27

En effet, en regroupeant les valeurs en nombre d’observation ou l’on a eu la valeur on peut représenter un barplot.

barplot(t,main = "Barplot de l'âge avec un nombre de modalités fini",col = "darkseagreen")





Deux variables quantitatives

Quand on croise deux variables quantitatives, l’idéal est de faire une représentation graphique sous forme de nuage de points à l’aide de la fonction plot.

sp = ggplot(Y, aes(x=dem, y=soc)) + geom_point() + xlab("nombre annuel de démissions par succursales") + ylab("volume annuel de sociétaires par succursales") + labs(title = "Nombre annuel de démission en", subtitle = "fonction du volume annuel de sociétaires") + theme_gray()
sp

On remarque plus haut une dépendance linéaire positive entre les deux variables, on rajoute ici la densité afin d’en savoir plus sur le lien des deux variables

sp + geom_density_2d()

En plus d’une représentation graphique, on peut calculer certains indicateurs permettant de mesurer le degré d’association de deux variables quantitatives.

La corrélation est une mesure du lien d’association linéaire entre deux variables quantitatives. Sa valeur varie entre -1 et 1. Si la corrélation vaut -1, il s’agit d’une association linéaire négative parfaite. Si elle vaut 1, il s’agit d’une association linéaire positive parfaite. Si elle vaut 0, il n’y a aucune association linéaire entre les variables.

cor(Y$dem,Y$soc) 
## [1] 0.8824886

Ici la corrélation est élévé, Il y a donc un lien linéaire et positif entre les deux variables (quand la valeur de l’une augmente, la valeur de l’autre augmente également).

Il existe un autre type de corrélation, la corrélation de spearman quand la corrélation n’est pas forte mais qu’on est en présence d’une association monotone, on peut l’utiliser.Plutôt que de se baser sur les valeurs des variables, cette corrélation va se baser sur leurs rangs, c’est-à-dire sur leur position parmi les différentes valeurs prises par les variables.

Quand on est en présence d’une association linéaire entre deux variables, on peut vouloir faire la régression linéaire d’une des variables sur l’autres.

#Intercept est l'ordonnée a l'origine et le coeff associé a poids.kg est de 0.738
#On voit la présence de " *** " cela signifie donc que c'est très significatif
m=lm(X$taille.cm~X$poids.kg);m 
## 
## Call:
## lm(formula = X$taille.cm ~ X$poids.kg)
## 
## Coefficients:
## (Intercept)   X$poids.kg  
##     124.053        0.738
summary(m) 
## 
## Call:
## lm(formula = X$taille.cm ~ X$poids.kg)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.5499  -3.8597  -0.2174   3.5457  15.2838 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 124.05336    2.51798   49.27   <2e-16 ***
## X$poids.kg    0.73804    0.03906   18.89   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.668 on 238 degrees of freedom
## Multiple R-squared:    0.6,  Adjusted R-squared:  0.5983 
## F-statistic:   357 on 1 and 238 DF,  p-value: < 2.2e-16

On peut répresenter cela à l’aide de la fonction “geom_smooth(method=lm)”

ggplot(X, aes(x=taille.cm, y=poids.kg)) + 
  geom_point()+
  geom_smooth(method=lm) + labs(title = "Taille en fonction du poids avec l'ajout d'une régression linéaire")

De même, on peut aussi réaliser des heatmaps

library(plot.matrix)
m=lm(X$taille.cm~X$poids.kg)
mm=m$model
plot(t(mm)%*%as.matrix(mm))

plot(solve(t(mm)%*%as.matrix(mm)))

library(googleVis)
op <- options(gvis.plot.tag="chart")
X$IMC=X$poids.kg/(X$taille.cm/100)^2

IMC=X$IMC
RythmeCardiaque=X$rythmcard

AB=data.frame(IMC,RythmeCardiaque)
IMC_RythmeCard <- gvisTable(AB,options=list(width="300px", height="550px"))
plot(IMC_RythmeCard)





Deux variables qualitatives

library(ggmosaic)
library(questionr)
library(RColorBrewer)

Afin de croiser deux variables qualitatives on peut réaliser un tableaux croisés, par exemple le sport en fonction du sexe

tab= table(X$sport,X$sexe)

A l’aide du package questionr on peut afficher les pourcentages par lignes avec lprop

lprop(tab)
##                  
##                   F     M     Total
##   aucun            41.9  58.1 100.0
##   badminton        90.0  10.0 100.0
##   basket           54.5  45.5 100.0
##   boules            0.0 100.0 100.0
##   danse           100.0   0.0 100.0
##   equitation       90.9   9.1 100.0
##   football          5.6  94.4 100.0
##   gymnastique      40.0  60.0 100.0
##   handball         44.4  55.6 100.0
##   judo            100.0   0.0 100.0
##   natation         92.3   7.7 100.0
##   rugby            61.9  38.1 100.0
##   ski_alpin        90.9   9.1 100.0
##   snowboard       100.0   0.0 100.0
##   tennis          100.0   0.0 100.0
##   tennis_de_table   0.0 100.0 100.0
##   volleyball        0.0 100.0 100.0
##   VTT               0.0 100.0 100.0
##   Ensemble         52.9  47.1 100.0

Ou encore les pourcentages en colonne avec cprop

cprop(tab)
##                  
##                   F     M     Ensemble
##   aucun            10.2  15.9  12.9   
##   badminton         7.1   0.9   4.2   
##   basket            9.4   8.8   9.2   
##   boules            0.0   0.9   0.4   
##   danse             7.1   0.0   3.8   
##   equitation        7.9   0.9   4.6   
##   football          0.8  15.0   7.5   
##   gymnastique       6.3  10.6   8.3   
##   handball          9.4  13.3  11.2   
##   judo              0.8   0.0   0.4   
##   natation          9.4   0.9   5.4   
##   rugby            10.2   7.1   8.8   
##   ski_alpin         7.9   0.9   4.6   
##   snowboard         7.9   0.0   4.2   
##   tennis            5.5   0.0   2.9   
##   tennis_de_table   0.0   6.2   2.9   
##   volleyball        0.0  10.6   5.0   
##   VTT               0.0   8.0   3.8   
##   Total           100.0 100.0 100.0

De même on peut effectuer un test de χ² avec la fonction chisq.test On y retrouve le X-squared le χ² c’est-à-dire une “distance” entre notre tableau observé et celui attendu si les deux variables étaient indépendantes. Le DF = Le nombre de degrés de liberté Et enfin la p-value indique la probabilité d’obtenir une valeur de la statistique du χ²

chisq.test(tab)
## Warning in chisq.test(tab): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tab
## X-squared = 103.5, df = 17, p-value = 1.986e-14
chisq.residuals(tab)
## Warning in stats::chisq.test(tab): Chi-squared approximation may be incorrect
##                  
##                       F     M
##   aucun           -0.84  0.89
##   badminton        1.61 -1.71
##   basket           0.11 -0.11
##   boules          -0.73  0.77
##   danse            1.94 -2.06
##   equitation       1.73 -1.84
##   football        -2.76  2.93
##   gymnastique     -0.79  0.84
##   handball        -0.61  0.64
##   judo             0.65 -0.69
##   natation         1.95 -2.07
##   rugby            0.57 -0.60
##   ski_alpin        1.73 -1.84
##   snowboard        2.05 -2.17
##   tennis           1.71 -1.82
##   tennis_de_table -1.92  2.04
##   volleyball      -2.52  2.67
##   VTT             -2.18  2.31

Afin d’analyser deux variables qualitative on peut réaliser un mosaicplot ou la largeur des rectangles correspond au pourcentage des modalités en colonnes.

ggplot(data = X) +
  geom_mosaic(aes(x = product(sport), fill=sexe), na.rm=TRUE) +
  labs(x="Sport ", title='Répartition des hommes et des femmes en fonction du sport') + scale_fill_manual(values = rev(brewer.pal(8, "Greens"))) +theme_gray()





Une variable quantitative et une variable qualitative

Afin de croiser une variable quantitative et une variable qualitative, on doit essayer de voir si les valeurs de la variable quantitative se répartissent différemment selon la catégorie d’appartenance de la variable qualitative. Par exemple je veux comparer le rythme cardiaque des sportifs et des non-sportifs.

Aucun_sport= (X$sport=="aucun")
Aucun_sport=as.factor(Aucun_sport)
levels(Aucun_sport)=c("non sportif", "sportif")
Aucun_sport
##   [1] non sportif non sportif non sportif non sportif non sportif non sportif
##   [7] non sportif non sportif non sportif sportif     non sportif non sportif
##  [13] non sportif non sportif non sportif non sportif non sportif non sportif
##  [19] non sportif non sportif non sportif non sportif non sportif sportif    
##  [25] non sportif non sportif non sportif non sportif non sportif non sportif
##  [31] sportif     non sportif non sportif sportif     non sportif non sportif
##  [37] non sportif non sportif non sportif non sportif non sportif non sportif
##  [43] non sportif non sportif non sportif sportif     non sportif non sportif
##  [49] non sportif non sportif non sportif non sportif non sportif non sportif
##  [55] non sportif non sportif non sportif non sportif non sportif sportif    
##  [61] non sportif non sportif non sportif non sportif non sportif non sportif
##  [67] sportif     non sportif non sportif non sportif non sportif non sportif
##  [73] non sportif sportif     non sportif non sportif non sportif non sportif
##  [79] non sportif non sportif non sportif non sportif non sportif sportif    
##  [85] non sportif non sportif non sportif non sportif non sportif non sportif
##  [91] non sportif non sportif non sportif non sportif non sportif non sportif
##  [97] non sportif non sportif non sportif non sportif non sportif sportif    
## [103] non sportif non sportif non sportif non sportif non sportif non sportif
## [109] non sportif non sportif sportif     non sportif non sportif non sportif
## [115] non sportif non sportif non sportif non sportif non sportif non sportif
## [121] non sportif non sportif sportif     non sportif non sportif non sportif
## [127] sportif     non sportif non sportif non sportif non sportif non sportif
## [133] non sportif non sportif non sportif sportif     non sportif sportif    
## [139] non sportif non sportif non sportif non sportif non sportif sportif    
## [145] sportif     non sportif non sportif sportif     non sportif sportif    
## [151] non sportif non sportif non sportif non sportif non sportif non sportif
## [157] non sportif non sportif non sportif sportif     non sportif non sportif
## [163] non sportif sportif     non sportif non sportif non sportif non sportif
## [169] non sportif non sportif non sportif non sportif non sportif non sportif
## [175] non sportif non sportif non sportif non sportif non sportif non sportif
## [181] non sportif non sportif non sportif non sportif non sportif sportif    
## [187] non sportif non sportif non sportif sportif     non sportif sportif    
## [193] non sportif sportif     non sportif non sportif non sportif non sportif
## [199] non sportif non sportif non sportif sportif     sportif     non sportif
## [205] non sportif non sportif non sportif non sportif non sportif non sportif
## [211] non sportif non sportif non sportif sportif     non sportif non sportif
## [217] non sportif non sportif non sportif non sportif non sportif non sportif
## [223] non sportif non sportif non sportif sportif     non sportif sportif    
## [229] non sportif non sportif non sportif sportif     non sportif non sportif
## [235] non sportif non sportif non sportif non sportif non sportif non sportif
## Levels: non sportif sportif
g <- ggplot(X, aes(Aucun_sport, rythmcard))
g + geom_boxplot(aes(fill=sexe)) +
  labs(title="Box plot",
       subtitle="Rythme cardiaque en fonction de l'activité sportive",
       caption="Source: Otmane NOKRI",
       x="Activité sportive",
       y="Rythme cardiaque")  + scale_fill_brewer(palette = "Greens") +theme_gray()

On peut aussi réaliser des histogrammes

ggplot(X, aes(x=X$taille.cm,color=X$sexe, fill=X$sexe)) + 
  geom_histogram(aes(y=..density..), alpha=0.5, position="identity") + scale_color_manual(values=c("#e0ff5f", "#e0ff5f"))+ geom_density(alpha=.2) +
  scale_fill_manual(values=c("#e0ff5f", "#0b2400")) + labs(title = "Histogramme de la taille par sexe") + scale_color_brewer(palette = "Greens") + theme_gray()
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

En appliquant la fonction filter on peut créer deux sous-populations, stockées dans deux nouveaux tableaux de données :

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Homme=filter(X, sexe == "M")
Femme=filter(X,sexe !="M")
mean(Homme$poids.kg)
## [1] 70.54867
mean(Femme$poids.kg)
## [1] 57.75591

On peut aussi utiliser la fonction tapply qui nous permet de réaliser la même chose et sans package.

tapply(X$poids.kg, X$sexe, mean)
##        F        M 
## 57.75591 70.54867

Il existe aussi différents test comme le t.test (Test de Student), mais il nous faut un facteur de regroupement avec exactement 2 niveaux.


Avec la fonction geom_ridges on peut représenter la densité du nombre de démission en fonction de la banque

library(ggridges)
library(ggplot2)
library(viridis)
library(hrbrthemes)

ggplot(Y, aes(x = Y$dem, y = Y$banque, fill = ..x..)) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01,alpha=0.2) + theme_gray() +
  scale_fill_viridis(name = "T", option = "D") +labs(title ="Densité du nombre de démission", subtitle =  "par succursales en fonction de la banque" ) +
  theme_ipsum() +
  theme(
    legend.position="none",
    panel.spacing = unit(0.1, "lines"),
    strip.text.x = element_text(size = 8)) 

On peut aussi réaliser un dendrogramme qui nous permet d’analyser la distance entre les classes. (voir projet classif)

Y=read.delim("http://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/stock_attrition.txt",header=T, dec=".",sep="\t")
Y <- aggregate( dem ~ banque, data = Y, FUN = mean)

agg <- aggregate(list(Y$dem), by = list(Y$banque), mean)
colnames(agg)=c("banque","dem")

hc <- hclust(dist(agg), "ave")
## Warning in dist(agg): NAs introduits lors de la conversion automatique
hc[["labels"]]=c("SGCB","Alpes","Alsace","Atlantique","BDP","Bourgogne FC",
                 "BRED","Centre Atlantique","Cote Azur","Loire Lyonnais","Lorainne Champagne",
                 "Massif Central","Nord","Occitane","Ouest","Provencale Et Corse","Rives de Paris","Sud","Sud Ouest","Val de France")

plot(hc)

library(googleVis)
op <- options(gvis.plot.tag="chart")

Enfin, on peut aussi réaliser une carte à l’aide de GoogleVis

W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")
GDP2000=subset(W,(annee=='YR2000') & (indicateur=='GDP per capita growth (annual %)'))
library(googleVis)
Geo=gvisGeoChart(GDP2000, locationvar="pays", 
                 colorvar="valeur",
                 options=list(projection="kavrayskiy-vii",colors="['sandybrown','limegreen']"))
plot(Geo)





Une variable quantitative et plusieurs variables qualitatives

A l’aide de la fonction tapply on peut analyser ce type de variables

tapply(X$taille.cm,list(X$sexe,X$mecriture),mean)
##          D        G
## F 164.5673 166.6087
## M 178.1959 177.3750
a=tapply(X$taille.cm[X$mecriture=="D"],list(X$sport[X$mecriture=="D"],X$sexe[X$mecriture=="D"]), mean)
is.na(a)
##                     F     M
## aucun           FALSE FALSE
## badminton       FALSE FALSE
## basket          FALSE FALSE
## boules           TRUE FALSE
## danse           FALSE  TRUE
## equitation      FALSE FALSE
## football        FALSE FALSE
## gymnastique     FALSE FALSE
## handball        FALSE FALSE
## judo            FALSE  TRUE
## natation        FALSE FALSE
## rugby           FALSE FALSE
## ski_alpin       FALSE FALSE
## snowboard       FALSE  TRUE
## tennis          FALSE  TRUE
## tennis_de_table  TRUE FALSE
## volleyball       TRUE FALSE
## VTT              TRUE FALSE
a=na.exclude(a)
a
##                    F        M
## aucun       163.1538 177.3529
## badminton   169.0000 169.0000
## basket      170.0000 194.0000
## equitation  163.0000 165.0000
## football    158.0000 180.0769
## gymnastique 166.6667 170.0000
## handball    163.5833 176.6000
## natation    162.0000 170.0000
## rugby       162.2500 178.5714
## ski_alpin   160.0000 172.0000
## attr(,"na.action")
##          boules tennis_de_table      volleyball             VTT           danse 
##               4              16              17              18               5 
##            judo       snowboard          tennis 
##              10              14              15 
## attr(,"class")
## [1] "exclude"
barplot(a,beside=T,main = "Barplot de la taille en fonction du sport, du sexe et de la main d'écriture",col = c("darkseagreen","olivedrab1","palegreen1"))





Plusieurs variables quantitatives et une variable qualitative

library(googleVis)
op <- options(gvis.plot.tag="chart")

On peut réaliser un BubblePlot avec le package GoogleVis

attach(X)
## The following object is masked _by_ .GlobalEnv:
## 
##     IMC
BubbleTest=data.frame(
sport=levels(sport),
taille=tapply(taille.cm,sport,mean),
poids=tapply(poids.kg,sport,mean),
rythm=tapply(rythmcard,sport,mean))

library(googleVis)
Bubble <- gvisBubbleChart(BubbleTest, idvar="sport", 
                          xvar="taille", yvar="poids",
                         sizevar="rythm",
                          options=list(
                            hAxis='{minValue:150, maxValue:185}'),)
plot(Bubble)

Un streamgraph est aussi une analyse possible

library(streamgraph)
W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")
Gini= W[W$indicateur =="GINI index",]
annee=gsub("YR","",as.character(factor(Gini$annee)))
annee=as.numeric(annee)
Gini=cbind(Gini,annee)
Gini=Gini[,-3]

V <- Gini[order(Gini$pays, Gini$valeur,decreasing = T),]
pp <- streamgraph(V, key="pays", value="valeur", date="annee", height="300px", width="1200px") %>% sg_legend(show=TRUE, label="names: ") %>%
  sg_fill_brewer("Pastel1")

pp

Grâce à ce code on peut réaliser un plot sous forme de gif représentant le PIB par pays en fonction de l’espérance de vie et ceci chrnologiquement et classé par pays.

W=read.delim("https://pmbo.pagesperso-orange.fr/STID/Programmation_statistique_2/wdi.txt",header=T,dec=".",sep="\t")

library(plotly)
library(gapminder)

Pop = W[W$indicateur=="Population, total", ]
GDP = W[W$indicateur=="GDP per capita growth (annual %)", ]

PopGDP=merge(Pop,GDP,by= c("pays","annee"))
annee=gsub("YR","",as.character(factor(PopGDP$annee)))
annee=as.numeric(annee)
PopGDP=cbind(PopGDP,annee)
PopGDP=PopGDP[,-2]

life_expectancy=read.csv("life-expectancy.csv",header =T,dec=".",sep =",") #une base de données trouvé sur internet avec l'espérance de vie par pays
names(life_expectancy)=c("pays","code","annee","life expectancy")


Test2=merge(PopGDP,life_expectancy,by=c("pays","annee"))
Test3=na.omit(Test2)
Test3=Test3[,-7]
Test4=subset(Test3,pays!="World")
PopGDP=Test4

colnames(PopGDP)=c("Pays","Annee","Indicateur.x","Population","Indicateur.y","PIB par pays","Esperance de vie")

p <- gapminder %>%
  plot_ly(
    x = ~PopGDP$"PIB par pays",
    y = ~PopGDP$"Esperance de vie",
    size = ~PopGDP$"Population",
    color = ~PopGDP$"Pays",
    frame = ~PopGDP$"Annee",
    text = ~PopGDP$"Pays",
    hoverinfo = "text",
    type = 'scatter',
    mode = 'markers'
  ) %>%
  layout(
    xaxis = list(
      type = "log"
    )
  )
p
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors

## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in registerFrames(p, frameMapping = frameMapping): production de NaN
## Warning in p$x$data[firstFrame] <- p$x$frames[[1]]$data: le nombre d'objets à
## remplacer n'est pas multiple de la taille du remplacement