Ce devoir maison est à envoyer par mail (aude.sportisse@upmc.fr) pour le mercredi 23 septembre (soir) en format .Rmd et .html.

Il comporte deux exercices, on pourra s’appuyer de la fiche 1 pour le réaliser.

Exercice 1

Nous allons nous intéresser au jeux de données decathlon. Ce jeu de données comprend les performances des athlètes pour les dix épreuves du décathlon (10 premières colonnes), le classement des athlètes (colonne 11), les points obtenus (colonne 12) et la compétition où cela s’est déroulé (colonne 13).

  1. Charger le jeu de données avec le nom des colonnes et le nom des lignes (qui correspond à la premières colonne du csv) en utilisant la fonction read.table et en specifiant correctement les arguments sep, row.names et header.
data=read.table("https://audesportisse.github.io/files/decathlon.csv",sep=";",header=TRUE,row.names=1)
  1. Faire une analyse rapide des données (résumé des données, dimension ,type des variables ?).
head(data)
##           X100m Longueur Poids Hauteur X400m X110m.H Disque Perche Javelot
## Sebrle    10.85     7.84 16.36    2.12 48.36   14.05  48.72    5.0   70.52
## Clay      10.44     7.96 15.23    2.06 49.19   14.13  50.11    4.9   69.71
## Karpov    10.50     7.81 15.93    2.09 46.81   13.97  51.65    4.6   55.54
## Macey     10.89     7.47 15.73    2.15 48.97   14.56  48.34    4.4   58.46
## Warners   10.62     7.74 14.48    1.97 47.97   14.01  43.73    4.9   55.39
## Zsivoczky 10.91     7.14 15.31    2.12 49.40   14.95  45.62    4.7   63.45
##           X1500m Classement Points Competition
## Sebrle    280.01          1   8893          JO
## Clay      282.00          2   8820          JO
## Karpov    278.11          3   8725          JO
## Macey     265.42          4   8414          JO
## Warners   278.05          5   8343          JO
## Zsivoczky 269.54          6   8287          JO
dim(data)
## [1] 41 13
summary(data)
##      X100m          Longueur        Poids          Hauteur          X400m      
##  Min.   :10.44   Min.   :6.61   Min.   :12.68   Min.   :1.850   Min.   :46.81  
##  1st Qu.:10.85   1st Qu.:7.03   1st Qu.:13.88   1st Qu.:1.920   1st Qu.:48.93  
##  Median :10.98   Median :7.30   Median :14.57   Median :1.950   Median :49.40  
##  Mean   :11.00   Mean   :7.26   Mean   :14.48   Mean   :1.977   Mean   :49.62  
##  3rd Qu.:11.14   3rd Qu.:7.48   3rd Qu.:14.97   3rd Qu.:2.040   3rd Qu.:50.30  
##  Max.   :11.64   Max.   :7.96   Max.   :16.36   Max.   :2.150   Max.   :53.20  
##     X110m.H          Disque          Perche         Javelot     
##  Min.   :13.97   Min.   :37.92   Min.   :4.200   Min.   :50.31  
##  1st Qu.:14.21   1st Qu.:41.90   1st Qu.:4.500   1st Qu.:55.27  
##  Median :14.48   Median :44.41   Median :4.800   Median :58.36  
##  Mean   :14.61   Mean   :44.33   Mean   :4.762   Mean   :58.32  
##  3rd Qu.:14.98   3rd Qu.:46.07   3rd Qu.:4.920   3rd Qu.:60.89  
##  Max.   :15.67   Max.   :51.65   Max.   :5.400   Max.   :70.52  
##      X1500m        Classement        Points       Competition
##  Min.   :262.1   Min.   : 1.00   Min.   :7313   Decastar:13  
##  1st Qu.:271.0   1st Qu.: 6.00   1st Qu.:7802   JO      :28  
##  Median :278.1   Median :11.00   Median :8021                
##  Mean   :279.0   Mean   :12.12   Mean   :8005                
##  3rd Qu.:285.1   3rd Qu.:18.00   3rd Qu.:8122                
##  Max.   :317.0   Max.   :28.00   Max.   :8893
#1 variable catégorielles (la treizième)
  1. Nous allons nous intéresser à la variable Longueur. A l’aide de la fonction sum, calculer sa moyenne et son écart-type empiriques. A l’aide de la fonction sort et ceiling, déterminer la médiane empirique de cette variable. Idem pour le premier quartile.
longueur <- data$Longueur

On peut obtenir la moyenne empirique “à la main” comme suit (on retrouve le résultat du résumé ci-dessus)

n <- length(longueur) 
moy <- sum(longueur)/n
moy
## [1] 7.26

Quant à l’écart-type empirique, on peut utiliser indifféremment l’une des deux formules suivantes :

ecart <- sqrt((sum(longueur^2))/n - moy^2) 
ecart
## [1] 0.3125193

ou

ecart <- sqrt(sum((longueur - moy)^2)/n) 
ecart
## [1] 0.3125193

On rappelle que le quantile empirique d’ordre \(p\) d’un échantillon de taille \(n\) est défini par \[x_{p}(n)=\inf\{x\in\mathbb{R},\ F_n(x)\geq p\}=X_{(\lceil np\rceil)},\]

\(F_n\) est la fonction de répartition empirique et \(X_{(1)}\leq\dots\leq X_{(n)}\) est l’échantillon ordonné. La médiane empirique correspondant au quantile empirique d’ordre \(1/2\), ceci donne ici

vec <- sort(longueur)
med <- vec[ceiling(n/2)]
med
## [1] 7.3
  1. Retrouver les indicateurs des questions précédentes à l’aide des fonctions mean, sd et median. A quoi peuvent être dues les différences éventuelles avec les réponses des questions précédentes selon vous ?

Pour la moyenne, aucun problème, on retrouve la valeur obtenue ci-dessus

mean(longueur)
## [1] 7.26

L’écart-type est différent

sd(longueur)
## [1] 0.3164016

Ceci est dû au fait que c’est l’estimateur sans biais de la variance qui est calculé par R (voir l’aide). Pour la médiane, il n’y a pas de différence,

median(longueur)
## [1] 7.3

Mais il aurait pu en avoir, voir l’aide de la fonction.

  1. Donner la moyenne et les écarts-types des 10 premières colonnes en utilisant la fonction apply.
apply(data[,1:10],2,mean)
##      X100m   Longueur      Poids    Hauteur      X400m    X110m.H     Disque 
##  10.998049   7.260000  14.477073   1.976829  49.616341  14.605854  44.325610 
##     Perche    Javelot     X1500m 
##   4.762439  58.316585 279.024878
apply(data[,1:10],2,sd)
##       X100m    Longueur       Poids     Hauteur       X400m     X110m.H 
##  0.26302300  0.31640164  0.82442781  0.08895052  1.15345081  0.47178902 
##      Disque      Perche     Javelot      X1500m 
##  3.37784476  0.27799982  4.82682018 11.67324722
  1. Donner la moyenne du classement (colonne 12) des joueurs qui ont participé au Decastar et celles des joueurs qui ont paraticipé au JO pour en déduire quelle compétition semble la plus relevée. Laquelle réunissait-elle le plus d’athlètes ?
mean(data[data$Competition=="JO",12])
## [1] 8051.536
mean(data[data$Competition=="Decastar",12])
## [1] 7905.923
max(data[data$Competition=="JO",11])
## [1] 28
max(data[data$Competition=="Decastar",11])
## [1] 13

Exercice 2

Cet exercice est un extrait de “Probability: Theory and Examples”, Rick Durrett, page 316 deuxième édition.

Le professeur demande à un étudiant d’écrire au tableau une séquence de 100 nombres, au hasard, compris entre 0 à 9. Un autre étudiant choisit un des dix premiers nombres de la séquence écrite au tableau et ne le dit pas au professeur. Il note bien la position qu’a ce nombre dans la séquence. L’étudiant va parcourir la séquence de nombres de la manière suivante: si le premier nombre choisi est 7 et que c’est le deuxième nombre de la liste, la nouvelle position sera égale à 7+2=9. Si le nombre est 0, la nouvelle position sera calculée en ajoutant 10 à la position initiale. Il parcourt la séquence tant que la nouvelle position ne dépasse pas 100. Quant à lui, le professeur choisit le premier nombre de la séquence de nombres et parcourt ensuite la séquence de nombres en utilisant la même méthode que l’étudiant. La probabilité que le professeur n’obtienne pas la même position finale que l’étudiant est approximativement égale à 0.026.

Le but de cet exercice est d’écrire un programme permettant de retrouver cette probabilité de 0.026.

Pour estimer la probabilité d’un évènement (ici l’évènement est “le professeur se trompe”), nous pouvons répéter l’expérience un grand nombre de fois et compter combien de fois l’évènement se produit. On estime donc la probabilité \(p\) par \(C/n\), où \(C\) est la variable aléatoire de comptage et \(n\) le nombre d’expériences.

Nous allons d’abord simuler une seule expérience (questions 1 à 5).

  1. Simuler la séquence de nombre que l’étudiant écrit au tableau. (Pour simplifier la suite, vous pouvez supposer que l’étudiant écrit des nombres de 1 à 10).
seq <- sample(1:10, size = 100,replace = TRUE)
seq
##   [1]  8  8  7  3  2  3  4  4  4  4  1  9  3 10  4  7  7  5  5  4 10  7  2  2  6
##  [26]  1  8  1  9  4  6  2  5  5  3  5  5  9  3  3  2  4  3  9  7  9 10  5  9  9
##  [51]  5  3  4  6  8  9  9  9  4  4  5  2  7  9 10  4  7  4  5  8  8  3 10  1  2
##  [76]  3  2 10  6  5  1  1  7  5  2 10  2  6  9  3  7  9  2  3  9  3  8  5  8 10
  1. Le professeur choisit le premier nombre de cette séquence (le premier nombre a l’indice (= la position) 1 dans la séquence). Ecrire le code qui donne l’indice du nombre que le professeur obtient à la fin.
ind = 1 + seq[1]
while(ind+seq[ind] < 100){
    ind <- ind + seq[ind]
}
ind
## [1] 97
  1. L’autre étudiant choisit (au hasard) un nombre parmis les 10 premiers, simuler l’indice du nombre qu’il choisit.
alea <- sample(1:10,1)
alea
## [1] 8
  1. Simuler l’indice du nombre que cet étudiant obtient à la fin.
indbis <- alea + seq[alea]
while(indbis + seq[indbis] < 100){
    indbis = indbis + seq[indbis]
}
indbis
## [1] 97
  1. On rappelle que l’évènement “le professeur se trompe” se produit si l’indice du nombre du professeur obtenu à la fin est différent de celui de l’étudiant. Tester si l’évènement s’est produit dans cette expérience.
ind != indbis
## [1] FALSE
  1. En faisant un grand nombre d’expériences, retrouver la probabilité que le professeur a de se tromper.
n <- 10^5
C <- 0

for (i in 1:n){
seq <- sample(1:10, size = 100, replace = TRUE)
ind = 1 + seq[1]
while(ind+seq[ind] < 100){
    ind <- ind + seq[ind]
    }

alea <- sample(1:10, size = 1)
indbis <- alea + seq[alea]
while(indbis + seq[indbis] < 100){
    indbis <- indbis + seq[indbis]
}

if(ind != indbis){
    C <- C+1
}
}

phat <- C/n
phat
## [1] 0.02727