Você está na página 1de 9

1/9

### D'abord il faut effacer tous les lements sauf "banques"


rm(list=ls()[-1])
### Calcul des moyennes en fonction de la classe du PV
numSummary(banques[,c("Age_Moy", "Age_PV", "Age_RPV", "Anc_Moy", "Anc_RPV",
"Anc_RPV_PV", "Cadre",
"Diplome", "Nbr_reclam", "Non_Cadre", "Qualt_client", "Surface_")],
groups=banques$Classe_PV, statistics=c("mean", "sd"), quantiles=1)
#### Echatillon d'apprentissage
numRows=sample(1:102,92)
n=length(numRows)
classPV=banques$Classe_PV[numRows]
#### Construction de la matrice des variables actives
colnames(banques)
X=as.matrix(banques[numRows,c(2:8,10:13)])
X=data.frame(X)
#### Centrer et rduire X
g=colMeans(X)
X=sweep(X,2,g,"-")
Sig=sqrt(colMeans(X^2))
X=sweep(X,2,Sig,"/")
#### Matrice Variances-covariances
V=t(X)%*%X/n
#### CAlcul des composantes principales
eig=eigen(V)
lambdas=eig$values
U=eig$vectors
d=ncol(X)
round(det(V-lambdas[1]*diag(1,d)),3)
round(t(U)%*%U,3)
Comp=X%*%U
#### Eboulis des valeurs propres
x11()
plot(1:ncol(X),lambdas,type="b",col=4,cex=1.2,pch=3,axes=F,xlab="Axes
principaux",ylab="Variances des Comp. Princ.",main="Eboulis des valeurs
propres")
axis(1,1:10)
axis(2)
abline(h=1,lwd=3,col=2)
#### Tableau des inerties cumules
round(100*cumsum(lambdas/11),2)
### Contributions
Contrib=rowSums(Comp^2)/11/92
### Reprsentation Graphique
x11()
boxplot(Contrib,col=2,axes=F,xlab="Contribution",ylab="",main="Boxplot des
contributions des individus")
axis(1,labels=F)
axis(2)
### Contribution en fonction de la variable competition
x11()
boxplot(Contrib~classPV,xlab="Classe PV",ylab="Contribution",
col=as.numeric(levels(banques$Classe_PV)),axes=F,main="Contribution par Classe
PV")

2/9

axis(1,labels=F)
axis(2)
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(banques$Classe_PV)))
#### Contrib sur les deux premiers axes 1 et 2
Contrib12=rowSums(Comp[,1:2]^2)/11/92
x11()
boxplot(Contrib12~classPV,xlab="Classe PV",ylab="Contribution",
col=as.numeric(levels(banques$Classe_PV)),axes=F,main="Contribution sur le plan
12 par Classe PV")
axis(1,labels=F)
axis(2)
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(banques$Classe_PV)))
Contrib1=(Comp[,1]^2)/11/92
x11()
boxplot(Contrib1~classPV,xlab="Classe PV",ylab="Contribution",
col=as.numeric(levels(banques$Classe_PV)),axes=F,main="Contribution sur l'axe 1
par Classe PV")
axis(1,labels=F)
axis(2)
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(banques$Classe_PV)))
Contrib2=(Comp[,2]^2)/11/92
x11()
boxplot(Contrib2~classPV,xlab="Classe PV",ylab="Contribution",
col=as.numeric(levels(banques$Classe_PV)),axes=F,main="Contribution sur l'axe 2
par Classe PV")
axis(1,labels=F)
axis(2)
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(banques$Classe_PV)))

##### Qualit sur les axes


normX=rowSums(X^2)
### Matrice
matrQult=sweep(Comp^2,1,normX,"/")
x11()
boxplot.matrix(matrQult,xlab="Composantes Princ.",ylab="Cos2",axes=F,
main="Boxplot des Cos2")
axis(1,1:11)
axis(2)
##### Dtermination des individus les mals reprsents par l'ACP
maxQult=apply(matrQult,1,max)
### Est-ce maxQult dpend de la classe de PV
numSummary(maxQult,groups=classPV,statistic=c("mean"))

#### Reprsentation des individus


x11()
plot(Comp[,1],Comp[,2],pch=4,xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
axis(1)
axis(2)
abline(h=0,lty=2)

3/9

abline(v=0,lty=2)
#### Reprsentation des individus/classes PV
x11()
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
#legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
x11()
plot(Comp[,3],Comp[,5],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
text(Comp[,3],Comp[,5],labels=classPV,col=as.numeric(classPV))
#legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)

x11()
plot(X[,9],X[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(X[,9],X[,2],labels=classPV,col=as.numeric(classPV))
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(classPV)))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
x11()
plot(X[,3],X[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(X[,3],X[,2],labels=classPV,col=as.numeric(classPV))
legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(classPV)))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
#### Reprsentation des individus/classes PV/Concept
concept=banques$Type_concep[numRows]
x11()
par(mfrow=c(1,2))
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
### Le graphe de droite
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")

4/9

text(Comp[,1],Comp[,2],labels=concept,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)

#### Reprsentation des individus/classPV/qualit des clients...


qltClients=banques$Qualt_client[numRows]
x11()
par(mfrow=c(1,2))
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
### le graphe de droite
symbols(Comp[,1],Comp[,2], circles=qltClients/5, inches=F,
bg=as.numeric(classPV),xlab="Axe 1",ylab="Axe 2")
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
### Reprsentation des qualits 12
Qlt12=rowSums(matrQult[,1:2])
x11()
par(mfrow=c(1,2))
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
### le graphe de droite
symbols(Comp[,1],Comp[,2], circles=Qlt12, inches=F,bg=as.numeric(classPV),
xlab="Axe 1",ylab="Axe 2")
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
#### Cercle de corrlation et reprsentation des variables
### Calcul de la matrice des coordonnes des variables
coord.var=U%*%sqrt(diag(lambdas))
rownames(coord.var)=colnames(X)
### Calcul des limites
x11()
plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),
ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:11){
arrows(0, 0, coord.var[v, 1], coord.var[v,2], length = 0.1, angle = 15, col =
3)

5/9

if (abs(coord.var[v, 1]) > abs(coord.var[v, 2])) {


if (coord.var[v, 1] >= 0) pos <- 4
else pos <- 2
}
else {
if (coord.var[v, 2] >= 0) pos <- 3
else pos <- 1
}
text(coord.var[v, 1], y = coord.var[v, 2],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
}
#### Reprsentation sur le plan 2 et 3
plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),
ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:11){
arrows(0, 0, coord.var[v, 2], coord.var[v,3], length = 0.1, angle = 15, col =
3)
if (abs(coord.var[v, 2]) > abs(coord.var[v, 3])) {
if (coord.var[v, 2] >= 0) pos <- 4
else pos <- 2
}
else {
if (coord.var[v, 3] >= 0) pos <- 3
else pos <- 1
}
text(coord.var[v, 2], y = coord.var[v, 3],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
}
#### Reprsentation de la variable supplmentaire
### Calcul de la matrice Z
Z=sweep(Comp,2,sqrt(lambdas),"/")
QultClient=banques$Qualt_client[numRows]
QultClient= QultClient-mean(QultClient)
sigQultClient=sqrt(sum( QultClient^2)/n)
QultClient=QultClient/sigQultClient
### Centrer et rduire QutlClient
### Coordones de Qualt_Client sur les axes unitaires
Coord.Qult=t(QultClient)%*%Z/n
### Reprsentation graphique
x11()
plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),
ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:11){
arrows(0, 0, coord.var[v, 1], coord.var[v,2], length = 0.1, angle = 15, col =
3)
arrows(0, 0, Coord.Qult[1], Coord.Qult[2], length = 0.1, angle = 15, col = 2)
text(Coord.Qult[1], Coord.Qult[2],labels="Qualt_Client",pos=1,col=2,cex=1.3)

6/9

if (abs(coord.var[v, 1]) > abs(coord.var[v, 2])) {


if (coord.var[v, 1] >= 0) pos <- 4
else pos <- 2
}
else {
if (coord.var[v, 2] >= 0) pos <- 3
else pos <- 1
}
text(coord.var[v, 1], y = coord.var[v, 2],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
}
#### Calcul du coefficient partielle de entre Qualt_Client et les variables
actives
sum(Coord.Qult^2)
#### Reprsentation des qualits des representations
QualtVar12=rowSums(coord.var[,1:2]^2)
x11()
par(mfrow=c(1,2))
plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),
ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:11){
arrows(0, 0, coord.var[v, 1], coord.var[v,2], length = 0.1, angle = 15, col =
3)
if (abs(coord.var[v, 1]) > abs(coord.var[v, 2])) {
if (coord.var[v, 1] >= 0) pos <- 4
else pos <- 2
}
else {
if (coord.var[v, 2] >= 0) pos <- 3
else pos <- 1
}
text(coord.var[v, 1], y = coord.var[v, 2],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
# text(coord.var[v, 1], y = coord.var[v, 2],labels =
round(QualtVar12[v],2), pos = pos,cex = .8,col=2)
}

plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),


ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:11){
arrows(0, 0, coord.var[v, 1], coord.var[v,2], length = 0.1, angle = 15, col =
3)
if (abs(coord.var[v, 1]) > abs(coord.var[v, 2])) {
if (coord.var[v, 1] >= 0) pos <- 4
else pos <- 2
}

7/9

else {
if (coord.var[v, 2] >= 0) pos <- 3
else pos <- 1
}
# text(coord.var[v, 1], y = coord.var[v, 2],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
text(coord.var[v, 1], y = coord.var[v, 2],labels =
round(QualtVar12[v],2), pos = pos,cex = .8,col=2)
}

#### Individus Supplmentaires


Xs=as.matrix(banques[-numRows,c(2:8,10:13)])
### Transformation des individus supplmentaires
Xs=sweep(Xs,2,g,"-")
Xs=sweep(Xs,2,Sig,"/")
### Coordonnes sur les axes principaux
Cs=Xs%*%U
ClassPVs=banques$Classe_PV[-numRows]
### reprsentation graphique en
x11()
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
text(Cs[,1],Cs[,2],labels=ClassPVs,cex=2,col=as.numeric(ClassPVs))
#legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(levels(banques$Classe_PV)))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)

### Reprsentation des individus sur 2 et 3


x11()
plot(Comp[,2],Comp[,3],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(Comp[,2],Comp[,3],labels=classPV,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
###### Deuxime partie
### Comme on a dja vu dans la 1re partie que la performance est en effet
ddpendant des variables : cadre, non-cadre et superficie...
### Mais au fait ceci peut cacher une autre dpendance (selon la zone de
chalandise du PV) dans cette nouvelle ACP
### on va crer une nouvelle variable qui reprsente la qualit des conditions
de travail dans le PV
### trav= (Cadre+Non-cadre)/superficie...et on a supprim la variable nbre de
reclamation qui n'est pas en effet une variable decrivant exactement
### le PV
colnames(banques)
condTrav=(banques$Cadre+banques$Non_Cadre)/banques$Surface_
numRows=sample(1:102,92)
n=length(numRows)
classPV=banques$Classe_PV[numRows]

8/9

#### Construction de la matrice des variables actives


colnames(banques)
X=as.matrix(banques[numRows,c(2,5:7,11:13)])
X=data.frame(cbind(X,condTrav[numRows]))
fix(X)
#### Centrer et rduire X
g=colMeans(X)
X=sweep(X,2,g,"-")
Sig=sqrt(colMeans(X^2))
X=sweep(X,2,Sig,"/")
X=as.matrix(X)
#### Matrice Variances-covariances
V=t(X)%*%X/n
#### CAlcul des composantes principales
eig=eigen(V)
lambdas=eig$values
U=eig$vectors
d=ncol(X)
Comp=X%*%U
x11()
plot(1:ncol(X),lambdas,type="b",col=4,cex=1.2,pch=3,axes=F,xlab="Axes
principaux",ylab="Variances des Comp. Princ.",main="Eboulis des valeurs
propres")
axis(1,1:10)
axis(2)
abline(h=1,lwd=3,col=2)

x11()
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,
main="Reprsentation des Individus sur les Axes 12")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
#legend("topright",legend=c(levels(banques$Classe_PV)),horiz = T,
text.col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)

coord.var=U%*%sqrt(diag(lambdas))
rownames(coord.var)=colnames(X)
### Calcul des limites
x11()
plot(0, 0, xlab = "Axe 1", ylab = "Axe 2", xlim = c(-1.2,1.2),
ylim = c(-1.2,
1.2), main = "Cercle des corrlations 12")
x.cercle <- seq(-1, 1, by = 0.01)
y.cercle <- sqrt(1 - x.cercle^2)
lines(x.cercle, y = y.cercle)
lines(x.cercle, y = -y.cercle)
abline(v = 0, lty = 2)
abline(h = 0, lty = 2)
for(v in 1:ncol(X)){
arrows(0, 0, coord.var[v, 1], coord.var[v,2], length = 0.1, angle = 15, col =
3)
if (abs(coord.var[v, 1]) > abs(coord.var[v, 2])) {
if (coord.var[v, 1] >= 0) pos <- 4

9/9

else pos <- 2


}
else {
if (coord.var[v, 2] >= 0) pos <- 3
else pos <- 1
}
text(coord.var[v, 1], y = coord.var[v, 2],labels =
rownames(coord.var)[v], pos = pos,cex = .8)
}
############# Mesure de la qualit de la reprsentation
normX=rowSums(X^2)
### Matrice
matrQult=sweep(Comp^2,1,normX,"/")
### Reprsentation des qualits 12
Qlt12=rowSums(matrQult[,1:2])
x11()
par(mfrow=c(1,2))
plot(Comp[,1],Comp[,2],type="n",xlab="Axe 1",ylab="Axe 2",axes=F,main="")
text(Comp[,1],Comp[,2],labels=classPV,col=as.numeric(classPV))
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)
### le graphe de droite
qlt=
symbols(Comp[,1],Comp[,2], circles=Qlt12, inches=F,bg=as.numeric(classPV),
xlab="Axe 1",ylab="Axe 2")
axis(1)
axis(2)
abline(h=0,lty=2)
abline(v=0,lty=2)

Você também pode gostar