UP | HOME

Coefficient de Gini
Activités #4

Table des matières

1. Saisie des données

  1. Entrer les données ci-dessous dans R grâce à la fonction scan.

    Nous considérons trois échantillons aléatoires d’une population :

    1. 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
      
    2. 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
      
    3. 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
      

2. Calcul du coefficient de Gini

  1. 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

  1. Implémenter les fonctions LorenzCurve(data) renvoyant une matrice (ou dataframe) contenant les coordonnées des points de la courbe de Lorenz pour l’échantillon data.
    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
    
  2. 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
    )
    

    lorenz.jpg

4. Application shiny

  1. 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)
    }
    

Created: 2023-08-23 mer. 14:41