Vous êtes sur la page 1sur 13

Analyse statistique multivariée (logiciel R)

Analyse exploratoire multivariée et analyse confirmatoire multiple


Correction des exercices proposés

1 Données Catsdata
Il est supposé que les données ont été importées dans R à l’aide de la commande :

data <- read.table("Catsdata.txt", header=TRUE)


attach(data)

1. Analyse exploratoire

(a) Les informations descriptives du tableau ci-dessous s’obtiennent directement à


partir des commandes suivantes du script 1 (la commande sd permet de calculer
directement les écarts-types) :

summary(data)
apply(data[,2:3], 2, sd)

Noms des variables Moyennes Ecarts-types Premier quartile


Bwt 2.72 0.49 2.3
Hwt 10.63 2.43 8.95
On constate, à partir de ces résumés mais également en les complétant avec les
autres quartiles, que les distributions de ces deux variables présentent des car-
actéristiques différentes, notamment concernant la dispersion: l’écart-type de Hwt
est 5 fois plus important que celui de Bwt, mais si on change les unités de Bwt,
alors la dispersion de cette variable devient plus importante que celle de Hwt (ce
qui est a priori attendu). Pour mieux visualiser ces différences de comportement,
représenter un histogramme (cfr question suivante) serait instructif.
(b) La commande hist permet d’obtenir les histogrammes de la Figure 1 (basés sur
les choix proposés par défaut par le logiciel).
L’histogramme du poids du corps présente une concentration des valeurs plus
forte à gauche qu’à droite (d’où le très faible écart entre la moyenne et le premier
quartile observé ci-dessus). Il est difficile d’admettre la symétrie de cette distribu-
tion, et par conséquent la normalité. En ce qui concerne l’autre variable, le poids
du coeur, la symétrie est plus réaliste (l’étalement sur la droite est simplement
dû à une valeur particulière).

1
30

40
25
20

30
frequency

frequency
15

20
10

10
5
0

0
2.0 2.5 3.0 3.5 4.0 10 15 20

Bwt Hwt

Figure 1: Histogrammes des variables Bwt et Hwt

(c) La corrélation entre les deux variables quantitatives s’obtient à l’aide de la com-
mande cor(data[,2:3]). Elle vaut 0.80.
Cette corrélation est assez forte et positive (ce qui, intuitivement, est assez na-
turel). Le nuage de points de la Figure 2 confirme la présence d’une tendance
linéaire croissante assez bien prononcée entre les deux variables.
20
18
16
14
Hwt

12
10
8
6

2.0 2.5 3.0 3.5

Bwt

Figure 2: Diagramme de dispersion de la variable Hwt en fonction de la variable Bwt, obtenu


via la commande plot(Bwt,Hwt)

(d) Pour pouvoir calculer la corrélation entre les deux variables Bwt et Hwt tout en
n’utilisant que les chats mâles ou les chattes, il faut d’abord construire des sous-
ensembles basés sur les deux modalités possibles de la variable Sex comme suit:
Males <- data[Sex=="M", 2:3]
Femelles <- data[Sex=="F", 2:3]

2
Ensuite, la commande cor peut à nouveau être exploitée (via les commandes
précises cor(Males) et cor(Femelles)). On obtient une corrélation de 0.79
pour les chats mâles et de 0.53 pour les femelles. Le diagramme de la Figure 3
est obtenu via les commandes suivantes :
plot(Bwt, Hwt, col=as.integer(Sex))
legend("topleft", levels(Sex), col=1:2, pch=16)
On y distingue effectivement deux comportements différents. La tendance linéaire
observée parmi les chats de sexe féminin est moins marquée que celle visible parmi
les mâles, ce qui explique la différence entre les deux corrélations calculées.

● F ●
20

● M
18



16




● ●
● ●
● ● ●
14



Hwt

● ●

● ● ●
● ● ● ●
● ● ●
● ● ● ●
● ● ●
12

● ● ● ●
● ● ●
● ● ●
● ● ● ●
● ● ●
● ● ● ●
● ● ●
● ● ● ●
● ● ●
● ● ●
10

● ● ● ● ● ●
● ● ● ●

● ●
● ●
● ● ● ●
● ●
● ● ● ● ● ●
● ● ●
● ● ●
● ● ● ●
● ● ●

● ●
8

● ● ● ●
● ● ●
● ● ● ●
● ●




6

2.0 2.5 3.0 3.5

Bwt

Figure 3: Diagramme de dispersion de la variable Hwt en fonction de la variable Bwt, où les
femelles sont représentées en noir et les mâles en rouge

(e) Les boı̂tes à moustaches des variable Bwt et Hwt sont représentées à la Figure 4
et ont été obtenues à partir des commandes

boxplot(Bwt ∼ Sex)
boxplot(Hwt ∼ Sex)

Aucune mesure n’est extérieure en ce qui concerne les poids des corps (c’est
également le cas si la boı̂te est représentée globalement, sans distinction des gen-
res). Par contre, deux chats (un mâle et une femelle) ont des poids du coeur
qui s’écartent un peu de la limite supérieure des moustaches. Il serait cependant
exagéré de qualifier ces chats d’atypiques car les valeurs qui leur correspondent
ne sont pas si extrêmes. Pour déterminer quels individus correspondent à ces
valeurs extérieures, la commande Boxplot (avec une majuscule) de la librairie
car est utile. Cette commande s’exploite exactement de la même manière que
la commande usuelle boxplot mais indique, par défaut, les indices des observa-
tions extérieures. Il est intéressant de noter que la chatte 47 ne serait pas repérée

3
comme observation extérieure à la boı̂te à moustaches si les genres avaient été
mélangés. Par contre, l’observation 144, elle, resterait extérieure si l’analyse était
effectuée globalement.

20
18
3.5

16
3.0

14
Bwt

Hwt

12
2.5

10
8
2.0

6
F M F M

Sex
Sex

Figure 4: Boı̂tes à moustaches des variables Bwt et Hwt décomposées en fonction du sexe des
chats

(f) A partir de ces graphiques, il semble peu plausible que les chats mâles et les chats
femelles soient caractérisés par des poids du corps et du coeur de distribution sim-
ilaire. On constate un décalage en tendance centrale, une différence de dispersion
et un lien linéaire plus faible chez les femelles.
(g) Pour rappel, les valeurs standardisées s’obtiennent comme suit :

Z.Bwt <- scale(Bwt)


Z.Hwt <- scale(Hwt)

Les graphiques de la Figure 5 représentent les valeurs standardisées des variables


Bwt et Hwt en fonction des indices des observations. Ces graphiques ont été con-
struits à l’aide des commandes suivantes (seul un graphique présente des valeurs
standardisées supérieures à 3 en valeur absolue et permet de représenter la droite
horizontale) :

plot(Z.Bwt, type="h")
plot(Z.Hwt, type="h")
abline(h=3,col="red")
identify(Z.Hwt)

Plusieurs constatations s’imposent. Tout d’abord, visiblement, les mesures des


corps ont été discrétisées (présence de palliers horizontaux dans le graphique) et
les chats femelles (indice de 1 à 47) puis les chats mâles ont été encodés dans la
base de données dans l’ordre croissant de leur poids. On voit également qu’en

4
4
144
2

3
2
1

Z.Hwt
Z.Bwt

1
0

0
−1
−1

−2
0 20 40 60 80 100 120 140 0 20 40 60 80 100 120 140

Observation Index Observation Index

Figure 5: Index-Plot des valeurs standardisées des variables Bwt et Hwt

standardisant globalement les données, la plupart des femelles se voit attribuer


des valeurs standardisées négatives.
Enfin, seul le dernier chat (le chat mâle d’indice 144) a un poids du coeur stan-
dardisé supérieur à 3. Ce chat avait déjà été repéré par l’analyse basée sur les
boı̂tes à moustaches (via la représentation de la boı̂te à moustaches des poids des
mâles, mais aussi, via celle des poids de tous les chats; c’est d’ailleurs à cette
boı̂te globale qu’il convient de faire référence ici puisque la standardisation a été
réalisée globalement).
Pour terminer cette question, notons que si la standardisation est appliquée
séparément sur les mâles et les femelles, seul le chat d’indice 144 est repéré à
nouveau, et ce uniquement à partir de l’analyse des poids du coeur.
(h) Les lignes suivantes du script permettent de calculer les distances de Mahalanobis
et de les manipuler à l’aide de la variable distmah :

m<-apply(data[,2:3],2,mean)
S<-var(data[,2:3])
distmah<-mahalanobis(data[,2:3],m,S)

Le graphe indexé, plot(distmah,type="h"), construit sur cette nouvelle variable


est repris à la Figure 6.
Les chats dont les distances sont les plus grandes sont mis en évidence sur ce
graphe indexé. La ligne rouge représente le quantile 95% de la loi χ2 à p = 2 degrés
de liberté. La commande suivante permet de calculer ce quantile et d’ajouter la
droite horizontale sur le graphique :

abline(h=qchisq(0.95, 2),col="red")

Au dessus de ce seuil, on voit apparaı̂tre un groupe de plusieurs chats mâles (les


chats d’indices 140 et 144 ayant des distances plus grandes que les autres, les

5
144

15
140
10
dist

135142
5
0

0 20 40 60 80 100 120 140

Observation Index

Figure 6: Distances de Mahalanobis (au carré) basées sur les 2 variables quantitatives de la
base de données de départ

indices étant indiqués suite à l’exploitation de la commande identify). Ce n’est


pas si étonnant d’observer autant de distances au delà du seuil puisqu’il y a 144
chats dans la base de données et, même sans aucune observation atypique, on
peut s’attendre à observer 5% des chats au delà du seuil (c’est-à-dire de l’ordre de
7 chats). Rappelons également que ce seuil est basé sur l’hypothèse de normalité,
qui semble peu plausible ici vu l’histogramme de la variable Bwt.

2. Analyse confirmatoire

(a) Suite à leur définition à la question 1(d), les ensembles de données Femelles et
Males contiennent les valeurs des deux variables quantitatives mesurées séparément
sur les femelles et les mâles. En exploitant le test de normalité de Shapiro-Wilks
(via la commande shapiro.test), on obtient les outputs ci-dessous :

Un seul des quatre tests mène au rejet de l’hypothèse de normalité : celui effectué
sur le poids du corps des femelles. En regardant les histogrammes construits

6
sur les deux variables en séparant les chats mâles (histogrammes du dessous) des
chats femelles (histogrammes du dessus), ces résultats ne semblent pas très sur-
prenants, même si le premier rectangle observé dans l’histogramme de la vari-
able Bwt mesurée sur les mâles est relativement incompatible également avec
l’hypothèse de normalité (mais cet écart à la normalité n’est pas suffisant pour
rejeter l’hypothèse nulle).

Femelles Femelles

14
15

10
Frequency

Frequency
10

8
6
4
5

2
0

2.0 2.2 2.4 2.6 2.8 3.0 0 6 7 8 9 10 11 12 13

Bwt Hwt

Mâles Mâles
15

25
20
Frequency

Frequency
10

15
10
5

5
0

2.0 2.5 3.0 3.5 4.0 10 15 20

Bwt Hwt

Figure 7: Histogrammes des deux variables Bwt et Hwt construits dans les deux sous-
ensembles

(b) Les hypothèses à vérifier avant l’application du test de comparaison des moyennes
sont (i) la normalité dans chaque sous-population et (ii) l’égalité des variances.
En ce qui concerne la normalité, l’exercice précédent a montré qu’elle est acceptée
dans trois cas sur quatre. Le test de Student comparant les poids des corps pour-
rait être perturbé par le rejet de la normalité dans le sous-groupe des femelles.
En ce qui concerne l’homoscédasticité des variances, elle est rejetée pour les deux
variables. Le test à exploiter est (par exemple) le Test F de deux variances (com-
mande var.test dans R) et en exploitant les commandes spécifiques suivantes
var.test(Bwt∼Sex)
var.test(Hwt∼Sex)

7
on obtient des probabilités de dépassement nettement inférieures à 5%, menant
au rejet de l’homoscédasticité. Il convient donc d’utiliser le test de Student ap-
proximatif (test effectué par défaut dans R via la commande t.test). Il ne
faut cependant pas oublier de modifier l’option par défaut proposant un test
bilatéral puisque, dans le cas des chats, l’hypothèse d’intérêt consiste à mon-
trer que les mâles ont des poids plus importants que les femelles (il suffit de
spécifier alternative="less" puisque la première modalité est F). Les résultats
des deux tests de comparaison de moyennes sont repris ci-dessous (les commandes
spécifiques exploitées étant indiquées également).

Dans les deux cas, l’hypothèse d’égalité est rejetée en faveur de l’alternative selon
laquelle les poids des mâles (du corps ou du coeur) sont plus importants que ceux
des femelles.
(c) Afin de conserver globalement un niveau de 95%, il convient d’appliquer une cor-
rection, celle proposée par Bonferroni étant la plus simple. Même en multipliant
les p-valeurs obtenues par 2 (nombre de tests effectués), celles-ci restent bien plus
petites que 0.05, ce qui permet de confirmer le rejet de l’égalité des moyennes
pour les deux variables.

2 Données Hotdogdata
Au démarrage de cet exercice, l’importation des données doit être effectuée (après avoir
“supprimé” les données précédentes via la commande detach(data)) :

data <- read.table("Hotdogdata.txt", header=TRUE)


attach(data)

Les commandes exploitées dans cet exercice sont, pour la plupart, similaires à celles illustrées
sur les données concernant les chats. Elles sont néanmoins reproduites, autant que possible.

1. Analyse exploratoire :

8
(a) Statistiques descriptives : les valeurs demandées s’obtiennent à partir des outputs
des commandes suivantes :

summary(data)
diag(var(data[,2:3]))

Voici le tableau complété :


Noms des variables Médiane Moyenne Variances
Calories 145.44 145 863.38
Sodium 424.83 405 9188.44
On constate que la moyenne et la médiane de la variable Calories sont très
proches, alors qu’il y a un petit écart entre ces deux mesures pour le sodium (ce
qui traduit une légère dissymétrie). On voit aussi que les variabilités des deux
variables ne sont pas du tout comparables (ce qui se comprend vu la différence
d’unités de mesure). Pour mieux visualiser les distributions des deux variables,
représenter également un histogramme serait utile.
(b) Les boı̂tes à moustaches, obtenues via les commandes ci-dessous, sont représentées
à la Figure 8.

Boxplot(Calories ∼ Type)
Boxplot(Sodium ∼ Type)
600
180

500
160
Calories

Sodium

400
140
120

300
100

200

33

Beef Meat Poultry Beef Meat Poultry

Type Type

Figure 8: Boı̂tes à moustaches des variables Calories et Sodium décomposées en fonction


du type

(c) Pour la variable Calories, on constate un comportement très proche entre les
deux types Beef et Meat, tandis que le troisième type d’hotdog correspond à

9
moins de calories globalement (la boı̂te est fortement décalée vers le bas). Les
variabilités sont comparables dans chaque groupe. En ce qui concerne le sodium,
les teneurs médianes sont, cette fois-ci, similaires dans les trois groupes mais les
variabilités sont différentes (les hotdogs du type Beef sont plus variables que
les autres). Dans toutes les boı̂tes du sodium, les observations inférieures à la
médiane sont plus concentrées que celles qui lui sont supérieures.
(d) En standardisant globalement les données, on obtient, à l’aide des commandes
ci-dessous (similaires pour la variable Sodium), les graphes indexés de la Figure
9.

plot(scale(Calories), type="h")
identify(scale(Calories))

15
2
1

1
Z.Calories

Z.Sodium

0
0

−1
−1

−2
−2

44 50 33
−3

0 10 20 30 40 50 0 10 20 30 40 50

Observation Index Observation Index

Figure 9: Index-Plot des valeurs standardisées des variables Calories et Sodium

Aucune observation ne correspond à une valeur standardisée supérieure à 3 en


valeur absolue. Le graphique basé sur le sodium ne présente aucune “structure”
(ce qui est naturel vu les constatations faites à partir des boı̂tes à moustaches sur
lesquelles les tendances centrales étaient assez similaires). Par contre, le graphique
basé sur les calories montre que les observations dont les indices se trouvent parmi
les plus grands ont toutes des valeurs standardisées négatives (c’est le groupe des
hotdogs constitués de Poultry dont la tendance centrale est nettement inférieure
à celles des deux autres groupes).
(e) Les distances de Mahalanobis s’obtiennent et se représentent (graphique de gauche
de la Figure 10) via les commandes :

m<-apply(data[,2:3],2,mean)
S<-var(data[,2:3])

10
distmah<-mahalanobis(data[,2:3],m,S)
plot(distmah,type="h")
abline(h=qchisq(0.95, 2),col="red")
identify(distmah)

A partir de ce graphique, on repère deux observations dont la distance est plus


grande que le quantile 95% de la loi χ2 à 2 degrés de liberté (droite horizontale).
Avoir deux observations sur 54 au delà de la limite n’est pas inattendu (sous
l’hypothèse de normalité). On voit d’ailleurs sur le graphique de droite de la
même figure (commande non détaillée car non décrite dans le script), que les
deux observations dont les distances sont plus grandes que le quantile se trouvent
effectivement en dehors de l’ellipse de tolérance à 95% mais sans s’écarter de trop
de la masse des données.

33
8

600

43
43
500
6

Sodium

400
dist

300
2

200

33
0

0 10 20 30 40 50 100 120 140 160 180

Observation Index Calories

Figure 10: Distances de Mahalanobis (au carré) basées sur les 2 variables quantitatives de la
base de données de départ (à gauche) et nuage de points avec ellipse de tolérance (à droite)

2. Analyse confirmatoire :

(a) L’homoscédasticité des variances n’est pas rejetée de façon univariée. En effet,
pour vérifier cette hypothèse en 1D, c’est le test de Bartlett qui est le plus clas-
sique. L’output reprenant le résultat de ce test (et également les commandes à
exploiter) est repris ci-dessous et montre que dans les deux cas, la p-valeur est
supérieure à 0.05 :

11
De plus, après avoir décomposé les données en trois sous-ensembles (pour chacun
des trois types de hotdogs), on peut vérifier que la normalité n’est pas rejetée pour
la variable Calories quel que soit le sous-groupe (voir les outputs spécifiques,
avec les commandes utilisées, ci-dessous). Par contre, en remplaçant la variable
Calories par Sodium, on doit rejeter la normalité pour les types Meat et Poultry
(p-valeurs approximativement égales à 0.02 dans chacun des deux cas).

L’application de l’ANOVA sur la variable Sodium est donc plus discutable.


Néanmoins, on obtient les résultats suivants pour la comparaison des moyennes
dans les trois groupes :

et

Du premier output (basé sur la variable Calories), on en conclut que l’égalité


doit être rejetée (les hypothèses sont toutes satisfaites et la p-valeur est nettement
inférieure à 0.05). Notons que nous avions déjà constaté sur les boı̂tes à mous-
taches que, d’une part, l’égalité des tendances centrales était peu probable tandis

12
que, d’autre part, les variabilités étaient comparables. Toutes ces constatations se
confirment ici. Pour la deuxième variable, l’hypothèse de normalité est violée dans
deux sous-ensembles, ce qui implique que le test n’est pas nécessairement fiable.
On voit cependant que ce que nous avions constaté également lors de l’analyse ex-
ploratoire (comportement similaire en moyenne) est à nouveau obtenu ici puisque
la p-valeur est plus grande que 0.05.
(b) Afin de combiner les deux résultats, suivons à nouveau l’approche de Bonferroni
en multipliant les p-valeurs obtenues par le nombre de tests effectués (deux tests).
La petite p-valeur reste bien inférieure à 0.05, tandis que la seconde ne fait que
s’éloigner encore plus de cette valeur limite. Globalement, les résultats individuels
restent valables dans ce contexte bivarié.

13

Vous aimerez peut-être aussi