118 lines
3.9 KiB
Plaintext
118 lines
3.9 KiB
Plaintext
# 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]$. |