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

Il comporte deux exercices, on pourra s'appuyer de les fiches 2 et 3 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)

Dans la suite, n'oubliez pas de donner un titre à vos graphiques et de bien vérifier que les titres des axes sont indicatifs.

  1. Représenter un nuage de points de la variable Longueur on fonction de la variable Points. Que remarque-t-on ?
library(ggplot2)
ggplot(data) + aes(x=Points, y=Longueur) + geom_point()

  1. Représenter le même nuage de point avec une couleur différente par compétition (la compétition est donnée par la variable Competition). Dans cette question, vous allez tracer 3 graphiques. Utiliser les couleurs par défault dans un premier temps (premier graphique) puis choisissez vos propres couleurs (deuxième graphique). Utiliser ensuite des formes différentes de votre choix en fonction de la compétition (troisième graphique).
ggplot(data) + aes(x=Points, y=Longueur, colour=Competition) + geom_point()

ggplot(data) + aes(x=Points, y=Longueur, colour=Competition) + geom_point() + scale_colour_manual(values=c("magenta", "orange"))

ggplot(data) + aes(x=Points, y=Longueur, colour=Competition, shape=Competition) + geom_point() + scale_shape_manual(values=c(21, 25))

  1. Sur le nuage de points obtenu avec différentes couleurs par compétition, tracer un lissage avec la méthode "loess". En spécifiant l'argument group dans la fonction aes, tracer deux courbes de lissage, une pour chaque compétition (idéalement, essayez que les courbes d'une compétition aient la même couleur que les points de cette compétition).
ggplot(data) + aes(x=Points, y=Longueur, colour=Competition, group=Competition) + geom_point() + geom_smooth( method="loess")
## `geom_smooth()` using formula 'y ~ x'

  1. Tracer le boxplot de la variable Longueur en fonction de la compétition. Tracer un autre boxplot de la variable X100m en fonction de la compétition et utilisez ici différentes couleurs pour les deux boxplots. Interpréter.
ggplot(data) + aes(x=Competition, y=Longueur) + geom_boxplot()

ggplot(data) + aes(x=Competition, y=X100m, fill=Competition) + geom_boxplot()

  1. Représenter par un graphique le nombre d'individus présents dans chacune des compétitions.
ggplot(data) + aes(x = Competition) + geom_bar()

  1. Représenter l'histogramme de la variable Longueur en réglant le nombre de classes, superposer l'estimateur de la densité. Les données vous semblent-elles gaussiennes ?
ggplot(data) + aes(x = Longueur, y= ..density..) + geom_histogram(bins=10) + geom_line(stat = "density") + ggtitle("Distribution des poids") 

  1. Dans l'exercice 3 de la Fiche 3, nous avons déterminer un intervalle de confiance asymptotique pour la moyenne \(\mu\) d'un échantillon \(X=(X_1,\dots,X_n)\) qui n'est pas forcément gaussien. Cet intervalle asymptotique de niveau \(1-\alpha\) est le suivant:

\[\left[\bar{X}_n-\frac{q\hat\sigma}{\sqrt{n}}\ ;\ \bar{X}_n+\frac{q\hat\sigma}{\sqrt{n}}\right] \]

avec \(q\) le quantile d'ordre \((1-\alpha/2)\) d'une gaussienne centrée réduite, \(\hat\sigma\) l'écart-type empirique et \(\bar{X}\) la moyenne empirique de \(X\). Ecrire une fonction qui prend en entrée \(X\) et \(\alpha\) et qui renvoie l'intervalle de confiance.

A l'aide de votre fonction, calculer un intervalle de confiance de niveau 95% et 90% de la Longueur. Retrouver le résultat avec la fonction t.test. Expliquer "à la main" lequel et pourquoi des intervalles de confiances est le plus petit.

intervalle_confiance <- function(X,alpha){
  n <- length(X)
  IC <- c(mean(X) - qnorm(1-alpha/2)*sd(X)/sqrt(n), mean(X) + qnorm(1-alpha/2)*sd(X)/sqrt(n))
  return(IC)
}
X <- data$Longueur
intervalle_confiance(X,0.05)
## [1] 7.163151 7.356849
intervalle_confiance(X,0.1)
## [1] 7.178722 7.341278
t.test(data$Longueur)
## 
##  One Sample t-test
## 
## data:  data$Longueur
## t = 146.92, df = 40, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  7.160131 7.359869
## sample estimates:
## mean of x 
##      7.26

Exercice 2

Au Tour de France, plusieurs classements importent dont le classement général pour le maillot jaune (qui récompense le meilleur coureur) et le classement par équipes (qui récompense la meilleure équipe).

Le classement individuel a largement été dominé par l'équipe Ineos Grenadiers (alias Sky) de 2012 à 2019 (victoire tous les ans d'un coureur de l'équipe sauf en 2014). Pourtant, Ineos n'a remporté qu'une seule fois le classement par équipes, alors que la Movistar l'a remporté 4 fois de 2012 à 2019.

Pour être bien classé au Tour de France (sans rêver du maillot jaune, rêvons d'abord du top 10...), vaut-il mieux avoir un contrat avec Ineos ou avec la Movistar, ou n'y a-t-il pas de différence ?

Le but de l'exercice est de tester l'indépendance entre deux variables qualitatives, le classement individuel d'un joueur (top 10, 11ième à 50ième, + de 50ième) et son appartenance à l'équipe Ineos/Movistar.

  1. Les données sont contenues dans la matrice suivante, appelée tableau de contingence \((N_{ij})_{1\leq i\leq I, 1\leq j\leq J}\). Créer sur R la matrice.
Top10 11-50 +50
Ineos 11 22 28
Movistar 12 17 31
tab <- matrix(c(11,22,28,12,17,31), ncol = 3, byrow = T)
rownames(tab) <- c("Ineos", "Movistar")
colnames(tab) <- c("Top10", "11-50", "+50")
tab
##          Top10 11-50 +50
## Ineos       11    22  28
## Movistar    12    17  31

Pour tester l’indépendance de deux variables qualitatives, on teste l'hypothèse nulle \(H_0\): "les deux variables sont indépendantes" contre l'hypothèse alternative \(H_1\) : "les deux variables ne sont pas indépendantes". Pour cela, on construit la statistique de test suivante : \[T_n=\sum_{i=1}^I\sum_{j=1}^J\frac{(N_{ij}-\frac{N_{i\bullet}N_{\bullet j}}{n})^2}{\frac{N_{i\bullet}N_{\bullet j}}{n}},\]

On peut montrer que, sous l'hypothèse \(H_0\), \[T_n\xrightarrow[n\to\infty]{\cal L}\chi_{(I-1)\times(J-1)}^2,\] tandis que, sous \(H_1\), \[T_n\xrightarrow[n\to\infty]{p.s.}+\infty.\] On rejette donc \(H_0\) si l'observation \(t_n=T_n(\omega)\) de la statistique de test prend une grande valeur.

  1. Effectuer le test au niveau 5% "à la main" en expliquant bien les lignes de votre code et en ayant le code le plus concis possible.

Pour effectuer le test "à la main", il suffit de calculer la double somme donnant la statistique de test :

tab1 <- matrix(rep(apply(tab, 1, sum), 3), ncol = 3)
tab2 <- matrix(rep(apply(tab, 2, sum), 2), ncol = 3, byrow = T)
n <- sum(tab)
tab3 <- tab1*tab2/n
T <- sum((tab - tab3)^2/tab3)
alpha <- 0.05
q <- qchisq(1 - alpha, df = 3)
T < q
## [1] TRUE
q
## [1] 7.814728

Au niveau 5%, on ne rejette donc pas \(H_0\) : le classement final individuel ne dépend pas du fait d'être dans l'équipe Movistar ou Ineos.

  1. A l'aide de la fonction chisq.test, faite le test.
## 
##  Pearson's Chi-squared test
## 
## data:  tab
## X-squared = 0.82884, df = 2, p-value = 0.6607
  1. Retrouver la p-value à la main et interprétez.

Pour retrouver cette p-value à la main :

## [1] 0.8425576