survey
Nous étudions les réponses aux questionnaires de 237 étudiants de l’Université d’Adélaïde. À l’aide des commandes suivantes, charger le package MASS
et les données correspondantes :
library("MASS")
data(survey)
help(survey)
summary(survey)
Quelles sont les variables, leur nature ?
Il ne sera pas possible de faire une ACP sur l’ensemble des données du tableau car certaines variables sont qualitatives.
Vous constaterez que le tableau contient des données manquantes, nous allons les supprimer dans un premier temps :
survey.cc <- survey[complete.cases(survey), ]
Combien d’individu contient le tableau survey.cc
?
Nous allons nous intéresser uniquement ici aux variables quantitatives WR.Hnd
,NW.Hnd
et Height
. La variable Sex
sera considérée également à titre illustratif.
couleur <- ifelse(survey.cc$Sex=="Male",'blue','red')
X = survey.cc[,c("Wr.Hnd","NW.Hnd","Height")]
Nous visualisons dans un premier temps les données.
library("rgl")
plot3d(X, col = couleur)
Que se passe-t’il si nous mettons toutes les données à la même échelle ?
lims = range(X)
plot3d(X, col = couleur, xlim=lims,ylim=lims,zlim=lims)
Centrer et réduire le tableau de données, enregister le nouveau résultat dans un tableau X.sc
et tracer le nuage de points.
À partir de la matrice de corrélation, pour mieux visualiser, nous pouvons définir un intervalle de confiance à 95% (c’est-à-dire que, sous l’hypothèse de gaussianité des données, moins de 5% des données seront en dehors de l’ellipsoïde). Pour calculer la matrice de corrélation
C = cor(X)
C
## Wr.Hnd NW.Hnd Height
## Wr.Hnd 1.0000000 0.9651297 0.6510316
## NW.Hnd 0.9651297 1.0000000 0.6296482
## Height 0.6510316 0.6296482 1.0000000
plot3d(X.sc, type = "s", col = couleur)
plot3d(ellipse3d(C), col = "grey", add = TRUE)
En faisant tourner la figure, chercher le meilleur plan de visualisation des données.
La figure représentée en gris est un ellipsoïde, son plus grand diamètre correspond au premier axe de l’ACP, le moyen diamètre au second axe et le plus petit au troisième axe. Le meilleur plan obtenu est donc celui engendré par les deux premiers axes de l’ACP.
FactoMineR
La fonction permettant de faire une ACP avec FactoMineR
est PCA()
. La commande suivante permet de réaliser une ACP sur le tableau X.sc
.
library('FactoMineR')
X.comp = cbind(X,survey.cc$Sex)
res.pca = PCA(X.comp,quali.sup=4,graph=FALSE)
plot(res.pca,habillage=4)
plot(res.pca,habillage=4,axes=c(2,3))
L’option quali.sup=4
permet d’indiquer que la quatrième colonne est une variable qualitative supplémentaire qui ne sera donc pas prise en compte dans le calcul des axes principaux. La fonction PCA()
admet aussi d’autres options (ind.sup
, quanti.sup
,…). La standardisation est faite automatiquement par défaut, pour réaliser une ACP non normée, il faut utiliser l’option scale.unit=FALSE
.
Nous allons pour le moment observer les données manquantes.
summary(survey[,c("Wr.Hnd","NW.Hnd","Height")])
## Wr.Hnd NW.Hnd Height
## Min. :13.00 Min. :12.50 Min. :150.0
## 1st Qu.:17.50 1st Qu.:17.50 1st Qu.:165.0
## Median :18.50 Median :18.50 Median :171.0
## Mean :18.67 Mean :18.58 Mean :172.4
## 3rd Qu.:19.80 3rd Qu.:19.73 3rd Qu.:180.0
## Max. :23.20 Max. :23.50 Max. :200.0
## NA's :1 NA's :1 NA's :28
Installer le package VIM
library("VIM")
aggr(survey[,c("Wr.Hnd","NW.Hnd","Height")])
A l’aide de la fonction summary()
, on observe que les variables Wr.Hnd
et NW.Hnd
ont une seule donnée manquante. Le graphique de droite donné par la fonction aggr()
indique que cette donnée manquante correspond au même individu pour les deux variables. Nous allons donc supprimer cet individu de l’étude, car il apporte peu d’information.
ind = complete.cases(survey[,c("Wr.Hnd","NW.Hnd")])
Ximputed = survey[ind,c("Wr.Hnd","NW.Hnd","Height")]
summary(Ximputed)
## Wr.Hnd NW.Hnd Height
## Min. :13.00 Min. :12.50 Min. :150.0
## 1st Qu.:17.50 1st Qu.:17.50 1st Qu.:165.0
## Median :18.50 Median :18.50 Median :171.0
## Mean :18.67 Mean :18.58 Mean :172.4
## 3rd Qu.:19.80 3rd Qu.:19.73 3rd Qu.:180.0
## Max. :23.20 Max. :23.50 Max. :200.0
## NA's :28
La variable Height
comprend un nombre plus important de données manquantes. Nous allons les imputer par la méthode des k-plus proches voisins.
Ximputed = kNN(Ximputed)
summary(Ximputed)
## Wr.Hnd NW.Hnd Height Wr.Hnd_imp
## Min. :13.00 Min. :12.50 Min. :150.0 Mode :logical
## 1st Qu.:17.50 1st Qu.:17.50 1st Qu.:165.0 FALSE:236
## Median :18.50 Median :18.50 Median :171.0 NA's :0
## Mean :18.67 Mean :18.58 Mean :172.1
## 3rd Qu.:19.80 3rd Qu.:19.73 3rd Qu.:179.3
## Max. :23.20 Max. :23.50 Max. :200.0
## NW.Hnd_imp Height_imp
## Mode :logical Mode :logical
## FALSE:236 FALSE:208
## NA's :0 TRUE :28
## NA's :0
##
##