Vous êtes sur la page 1sur 4

EIGSI PROMO 2020

MSAE - ANALYSE DE DONNEES


TP1
ANALYSE EN COMPOSANTES PRINCIPALES
Logiciel R-PLUS

INTRODUCTION
L’objectif du TP est de savoir mener une Analyse en Composantes Principales sur un
fichier de données. La première étape est d’entrer directement dans le vif du sujet en se
basant sur le fichier ‘USArrests ‘ disponible dans la base de données de R. Un
complément en statistique descriptive achèvera l’étude de ce fichier (En réalité il faudrait
commencer par cela ce que vous ferez pour les fichiers suivants). Les commandes sont
fournies mais vous pouvez changer les valeurs ou paramètres et examiner leurs
répercussions sur les sorties affichées (les commandes ne sont pas des formules
occultes !). La seconde étape sera l’étude d’un fichier importé (préalablement enregistré).
Une conclusion est attendue pour tous les fichiers.

1. Fichier USArrests

Faire une ACP complète des données du fichier USArrests avec interprétation des
résultats et des graphes obtenus.
Utiliser les commandes suivantes, dans la fenêtre de commandes

0) Ouvrir la fenêtre de commandes et tapez :


?USArrests
1) a<- USArrests
2) ?princomp()
3) princomp(a,cor = T)
4) acp<-princomp(a,cor=T)
5) summary(acp)
6) print(attributes(acp))
7) acp$loadings
8) matrix (acp$loadings)
9) tab<-matrix (acp$loadings,4,4)
10) print(tab,digits=3)
11) names(acp)
12) acp$sdev
13) vp<-acp$sdev^2
14) plot(1:4,vp,type="b",ylab="Valeurspropres",xlab="Composantes Principales",
main="Eboulis des Valeurs Propres")
15) acp$scores
16) var(acp$scores)
17) plot(acp)

Schérazade BENHABIB- Rose CAMPBELL- Tatiana GRAINDORGE févier 2019


EIGSI PROMO 2020

18) cor(a,acp$scores)
19) biplot(acp)
20) barplot(acp$loadings[,1],main="C1",col=1:4) #puis pour C2 et C3
21) plot(acp$scores[,1],acp$scores[,2],type="n")
text(acp$scores[,1], acp1$scores[,2],row.names(a))
plot(acp$scores[,1],acp$scores[,3],type="n")
text(acp$scores[,1], acp$scores[,3],row.names(a))
c1 <- acp$loadings[,1]*acp$sdev[1]
c2 <- acp$loadings[,2]*acp$sdev[2]
correlation <- cbind(c1,c2)
print(correlation,digits=2)
print(correlation^2,digits=2)
plot(c1,c2,xlim=c(-1,+1),ylim=c(-1,+1),type="n")
abline(h=0,v=0)
text(c1,c2,labels=colnames(a),cex=0.5)
symbols(0,0,circles=1,inches=F,add=T)

Complément de Statistiques descriptives

1) names(a)
2) row.names(a)
3) n<-nrow(a)
print(n)
4) apply(nomfichier,2,function(x)(1:dernière ligne)[x==min(x)])
5) apply(nomfichier,2,function(x)(1:dernière ligne)[x==max(x)])
6) hist (a[[1]],col=1:7)
7) hist (a[[2]],col=7:14)
8) hist (a[[3]],col=14:21)
9) hist (a[[4]],col=21:28)
10) stars(USArrests[, 1:4], key.loc = c(14, 2), main = "USARRESTS : full
stars()",flip.labels=FALSE)
11) apply(a,2,mean)
12) apply(a,2,var)
13) summary(a)
14) boxplot(a)
15) plot(a)
16) pairs(a)

2 Fichiers’notes’ et ‘olympic’

2.1 Enregistrer le fichier « olympic ».


Remarque Si on veut importer un fichier (par exemple olympic) on va utiliser la fonction
read.table en indiquant le chemin d’accès par exemple :
read.table("H:/16-17/AD/olympic.txt”)
!!!!attention au sens du slash / et non \

Analyser de la même façon le fichier olympic joint


Attention aux points aberrants (ici athlètes ayant des résultats trop faibles par exemple]

Schérazade BENHABIB- Rose CAMPBELL- Tatiana GRAINDORGE févier 2019


EIGSI PROMO 2020

Pour supprimer l’individu 5 par exemple dans le fichier appelé « F », la commande est
F[-5,]

2.2 Faire l’ACP sur le fichier ‘notes’

Les commandes ci-dessous mènent les étapes détaillées de l’ACP l’une après l’autre (même
démarche qu’en cours)

1) read.table("chemin")
2) a<-read.table("chemin")
3) names(a)
4) row.names(a)
5) n<-nrow(a)
print(n)
6) apply(a,2,function(x)(1:16)[x==min(x)])
7) apply(a,2,function(x)(1:16)[x==max(x)])
8) summary(a)
9) scale(a)
10) b<- scale(a)
11) as.data.frame(b)
12) b'<-as.data.frame(b)
13) cor(b’)
14) R<-cor(b)
15) eigen(R)
16) valp<- eigen(R)$values
17) sum(eigen(R)$values)
18) P<-eigen(R)$vectors
19) P
20) C<-b%*%P
21) Comp<-as.data.frame(C)
22) Comp
23) colnames(Comp)<-c("C1","C2","C3","C4","C5","C6","C7","C8")
24) Comp
25) apply(Comp,2,var)
26) plot(1:8,valp,type="b",ylab="Valeurspropres",xlab="Composantes
Principales",main="Eboulis des Valeurs Propres")
27)row.names(P)<-colnames(a)
28) barplot(P[,1],names.arg=colnames(Comp),main="C1",col=1:8) %idem pour C2 et C3
29) plot(Comp[,1],Comp[,2],type="n")
30) text(C[,1],C[,2],row.names(Comp))
31) Idem pour le plan (C1,C2)
32) C1<-sd(Comp[,1])*P[,1]
33) C2<-sd(Comp[,2])*P[,2]
34) correlation <- cbind(C1,C2)

Schérazade BENHABIB- Rose CAMPBELL- Tatiana GRAINDORGE févier 2019


EIGSI PROMO 2020

35) print(correlation,digits=2)
36) plot(C1,C2,xlim=c(-1,+1),ylim=c(-1,+1),type="n")
abline(h=0,v=0)
text(C1,C2,labels=colnames(a),cex=0.5)
symbols(0,0,circles=1,inches=F,add=T)

3) AIDE A L’INTERPRETATION - INDIVIDUS TESTS


Exemple pour USArrests : Si on veut ajouter des individus test pour vérifier les
interprétations voici les commandes à utiliser après avoir enregistré le fichier joint de
données etattest:

a<-USArrests
read.table("H:/16-17/AD/ajoutindividus/etattest.txt")
test<-read.table("H:/16-17/AD/ajoutindividus/etattest.txt")
ind.scaled <- NULL
acp1<-princomp(a,cor=T)
for (i in 1:nrow(test)){ind.scaled <- rbind(ind.scaled,(test[i,] - acp1$center)/acp1$scale)}
print(ind.scaled)
produit.scal <- function(x,k){return(sum(x*acp1$loadings[,k]))}
ind.coord <- NULL
for (k in 1:2){ind.coord <- cbind(ind.coord,apply(ind.scaled,1,produit.scal,k))}
plot(c(acp1$scores[,1],ind.coord[,1]),c(acp1$scores[,2],ind.coord[,2]),xlim =c(-
6,6),type="n",xlab="Comp.1",ylab="Comp.2")
abline(h=0,v=0)
text(acp1$scores[,1],acp1$scores[,2],labels=rownames(a),cex=0.5)
text(ind.coord[,1],ind.coord[,2],labels=rownames(test),cex=1,col="red")

Schérazade BENHABIB- Rose CAMPBELL- Tatiana GRAINDORGE févier 2019

Vous aimerez peut-être aussi