114 lines
3.5 KiB
Plaintext
114 lines
3.5 KiB
Plaintext
|
---
|
||
|
title: "02-a Application au jeu de données `abalone`"
|
||
|
output:
|
||
|
bookdown::pdf_document2:
|
||
|
number_section: yes
|
||
|
includes:
|
||
|
in_header: preamble.tex
|
||
|
toc: false
|
||
|
classoption: fleqn
|
||
|
---
|
||
|
|
||
|
# 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)
|
||
|
```
|
||
|
|
||
|
```{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)
|
||
|
```
|