Coefficient de Gini
Activités #4
Table des matières
1. Saisie des données
- Entrer les données ci-dessous dans R grâce à la fonction
scan
.Nous considérons trois échantillons aléatoires d’une population :
- le nombre d’heures de charge pour différents modèles de téléphone mobile ;
45.8 41.1 55.9 46.6 57.0 45.0 58.5 46.7 49.3 52.7 54.9 48.5 40.4 44.4 51.0 44.2 59.1 46.9 50.7 43.7 41.7 52.8 60.5 38.5 60.4 53.8 47.3 50.2 58.8 50.7
- le nombre d’heures passées devant la télévision pour 34 foyers ;
23.1 15.9 21.0 26.0 25.1 14.7 24.2 16.6 18.2 16.5 20.7 15.3 17.7 19.1 22.7 21.9 14.6 26.3 25.8 9.4 17.0 21.2 17.9 24.7 21.1 17.2 19.1 22.7 24.0 24.7 22.5 8.3 2.5 30.4
- le nombre de km pour aller et revenir du travail de 12 employés.
3.7 14.3 11.0 26.5 5.2 4.8 24.2 16.9 8.2 26.5 40.7 5.3
- le nombre d’heures de charge pour différents modèles de téléphone mobile ;
2. Calcul du coefficient de Gini
- Le coefficient de Gini est donné par la formule (\(x_i \leq x_{i+1}\)):
\[ \frac{2}{n} \frac{ \sum_1^n i \times x_i}{\sum_1^n x_i} - \frac{n+1}{n}. \] Écrire une fonction
GiniIndex
qui calcule le coefficient de Gini. Calculer les coefficients de Gini pour les trois échantillons ci-dessus. Qu’en concluez-vous ?GiniIndex(phones) GiniIndex(tv) GiniIndex(dist)
[1] 0.07121991 [1] 0.1539792 [1] 0.3894376
3. Courbe de Lorenz
- Implémenter les fonctions
LorenzCurve(data)
renvoyant une matrice (ou dataframe) contenant les coordonnées des points de la courbe de Lorenz pour l’échantillondata
.LorenzCurve(dist)
x y 1 0.00000000 0.00000000 2 0.08333333 0.01975440 3 0.16666667 0.04538174 4 0.25000000 0.07314469 5 0.33333333 0.10144154 6 0.41666667 0.14522157 7 0.50000000 0.20395088 8 0.58333333 0.28029899 9 0.66666667 0.37052856 10 0.75000000 0.49973305 11 0.83333333 0.64121730 12 0.91666667 0.78270155 13 1.00000000 1.00000000
- Utiliser l’extension
ggplot2
pour produire des graphiques de la courbe de Lorenz.Tout d’abord, il faut installer quelques extensions.
install.packages(c("ggplot2", "ggthemes", "Rmisc"))
Ensuite, définir les fonctions construisant les graphiques à partir d’un jeu de données.
library(ggplot2) library(ggthemes) PlotLorenz <- function(lorenzCurve, giniIndex, dataName) { ggplot() + geom_line(aes(y = y, x = x), data = as.data.frame(lorenzCurve), stat="identity", color = ptol_pal()(1), size = 2) + geom_segment(aes(x = 0, y = 0, xend = 1, yend = 1),linetype="dotted", size = 1.5) + theme_gdocs() + scale_colour_ptol() + ggtitle(paste("Courbe de Lorenz - Gini Index =", format(giniIndex, digits=2)), sub = dataName) + labs(x="Part cumulée de la population", y=paste("Part cumulée :", dataName)) + theme(text = element_text(size=14), plot.title = element_text(size=14)) } PlotLorenzFromSample <- function(data, dataName) { PlotLorenz(LorenzCurve(data), GiniIndex(data), dataName) } phonesName <- "temps de charge" tvName <- "temps passé devant la TV" distName <- "distance du lieu de travail"
Ensuite, exécuter le code ci-dessous pour afficher les courbes de Lorenz des trois échantillons.
library(Rmisc) multiplot( PlotLorenzFromSample(phones, phonesName), PlotLorenzFromSample(tv, tvName), PlotLorenzFromSample(dist, distName), cols =3 )
4. Application shiny
- Utiliser l’extension
shiny
pour produire une application web interactive.Installer d’abord l’extension.
install.packages("shiny")
Ensuite, rassembler le code définissant les nécessaire dans un fichier et exécuter le. N’hésitez pas à lire l’introduction à shiny.
library(shiny) if (interactive()) { ## Only run examples in interactive R sessions choices <- c("phones", "tv", "dist") names(choices) <-c(phonesName, tvName, distName) ## user interface object ui <- fluidPage( titlePanel("Ma première application web avec shiny!"), sidebarLayout( ## Sidebar with radio buttons sidebarPanel( radioButtons("data", "Données : ", choices) ), ## Main panel with graphic mainPanel( plotOutput("dataPlot") ) ) ) ## a server function server <- function(input, output) { ## Build plot objects in advance phonesPlot <- PlotLorenzFromSample(phones, phonesName) tvPlot <- PlotLorenzFromSample(tv, tvName) distPlot <- PlotLorenzFromSample(dist, distName) ## Set the right plot object according to the user choice output$dataPlot <- renderPlot({ switch(input$data, phones = phonesPlot, tv = tvPlot, dist = distPlot, phonesPlot) }) } ## a call to the shinyApp function shinyApp(ui, server) }