# Application au jeu de données `abalone` ## Récupération du jeu de données Téléchargeons le jeu de données [`abalone`](http://archive.ics.uci.edu/ml/datasets/Abalone) depuis le répertoire de l'Université de Californie Irvine (University of California Irvine, UCI, machine learning repository). Variable | Type | Unité | Commentaire ----------------|-------------|--------|------------------------------ Sex | nominal | - | M, F, and I (infant) Length | continuous | mm | Longest shell measurement Diameter | continuous | mm | perpendicular to length Height | continuous | mm | with meat in shell Whole weight | continuous | grams | whole abalone Shucked weight | continuous | grams | weight of meat Viscera weight | continuous | grams | gut weight (after bleeding) Shell weight | continuous | grams | after being dried Rings | integer | - | +1.5 gives the age in years ```{r cache=TRUE} abalone.cols = c("sex", "length", "diameter", "height", "whole.wt", "shucked.wt", "viscera.wt", "shell.wt", "rings") url <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data' abalone <- read.table(url, sep=",", row.names=NULL, col.names=abalone.cols, nrows=4177) ``` ```{r} str(abalone) ``` ## Préparation du jeu de données En cherchant des valeurs aberrantes, nous remarquons que, pour deux observations, la variable `height` a une valeur nulle. ```{r} table(abalone$height) ``` Nous regardons les valeurs des autres attributs pour ces deux observations. ```{r} abalone[abalone$height==0,] ``` Nous supprimons ces observations. ```{r} abalone <- subset(abalone, height!=0) ``` Nous affichons les corrélations entre variables. ```{r} print(as.matrix(cor(na.omit(abalone[,-1]))), digits=2) ``` Les variables sont très corrélées. Mesurons les colinéarités par les facteurs d'inflation de la variance. ```{r} library(car) vif(lm(rings ~ ., data = abalone)) ``` Parmi les variables corrélées, nous proposons de conserver celles avec les scores VIF les plus faibles (c'est-à-dire celles dont la variance s'explique le moins par la variance d'autres variables). ## Modèle linéaire Nous calculons un modèle linéaire. ```{r} abalone_lm <- lm(rings ~ length + height + viscera.wt + sex, data = abalone) ``` Observons les résultats statistiques proposés par défaut. ```{r} summary(abalone_lm) ``` ## Analyse graphique du modèle linéaire Affichons les résidus pour chaque observation. ```{r} plot(abalone_lm, which = 1, id.n = 5) ``` L'observation d'identifiant $2052$ semble anormale. Nous observons que sa valeur `height` est anormalement élevée : `r abalone["2052","height"]`. ```{r} abalone <- abalone[!(row.names(abalone) %in% c("2052")),] abalone_lm <- lm(rings ~ length + height + viscera.wt + sex, data = abalone) summary(abalone_lm) ``` ```{r} plot(abalone_lm, which = 1, id.n = 5) ``` La variance des résidus n'est pas homogène. Plus le nombre d'anneaux est grand, plus la variance des résidus est grande. Ainsi, testons si un transformation logarithmique peut être signifique. ```{r} abalone_lm <- lm(log(rings) ~ length + height + viscera.wt + sex, data = abalone) summary(abalone_lm) ``` Avec les intervalles de confiance. ```{r} confint(abalone_lm) ``` ```{r} plot(abalone_lm, which = 1, id.n = 5) ``` Observons les résidus en fonction des effets levier. ```{r} plot(abalone_lm, which = 5, id.n = 5) ``` ## Interprétation du modèle linéaire Une augmentation de `length` de $1mm$ augmente la prédiction de $1.1$ anneaux avec un intervalle de confiance à $95\%$ qui vaut $[0.95,1.27]$. De même pour les autres variables continues. Un passage de la variable `sex` de la catégorie de référence F à la catégorie I entraîne une diminution du nombre d'anneaux prédits de $0.12$ avec un intervalle de confiance à $95\%$ qui vaut $[-0.14,-0.10]$.