X=read.table(file="ForsyDonnees.txt",dec='.')
head(X)
dim(X)
## [1] 54 9
nom.ind=rownames(X) # les noms des individus "années" sont dans la première colonne
nom.ind
## [1] "C18" "C17" "C16" "C27" "C36" "C26" "C29" "C30" "C31" "C32"
## [11] "C33" "C8" "C9" "C37" "C1" "C20" "C28" "C2" "C3" "C34"
## [21] "C35" "C15p" "C15" "C21" "C22" "C24" "C25" "C10" "C11" "C13"
## [31] "C47" "C14" "C4" "C5" "C6" "C7" "C23" "C39" "C40" "C42"
## [41] "C41" "C38" "C43" "C44" "C45" "C49" "C48" "C55" "C50" "C51"
## [51] "C52" "C53" "C54" "C56"
nom.var=names(X) # a changer au besoin
nom.var
## [1] "LP" "Lcal" "lsep" "LTC" "PGl" "LTP" "LTE" "LF" "Del"
n=dim(X)[1] # nombre de lignes et donc nb d'individus
n
## [1] 54
p=dim(X)[2] # nombre de colonnes et donc nb de variables
p
## [1] 9
summary(X)
## LP Lcal lsep LTC
## Min. : 2.950 Min. :3.940 Min. :1.750 Min. :13.45
## 1st Qu.: 5.925 1st Qu.:5.100 1st Qu.:2.515 1st Qu.:17.74
## Median : 7.750 Median :6.250 Median :2.690 Median :21.38
## Mean : 8.005 Mean :6.078 Mean :2.762 Mean :21.35
## 3rd Qu.:10.075 3rd Qu.:7.088 3rd Qu.:3.007 3rd Qu.:23.82
## Max. :14.300 Max. :8.500 Max. :4.000 Max. :32.85
## PGl LTP LTE LF
## Min. : 4.400 Min. :3.050 Min. :2.750 Min. :1.150
## 1st Qu.: 6.612 1st Qu.:4.000 1st Qu.:3.850 1st Qu.:1.750
## Median : 7.750 Median :4.425 Median :5.700 Median :3.625
## Mean : 8.256 Mean :5.600 Mean :5.239 Mean :3.060
## 3rd Qu.: 9.675 3rd Qu.:7.987 3rd Qu.:6.487 3rd Qu.:4.138
## Max. :13.750 Max. :9.900 Max. :7.800 Max. :5.150
## Del
## Min. :-5.050
## 1st Qu.:-3.788
## Median :-2.975
## Mean :-1.065
## 3rd Qu.: 2.850
## Max. : 4.100
boxplot(X,main="Forsythia")
diag(var(X))
## LP Lcal lsep LTC PGl LTP LTE
## 7.9732329 1.5205847 0.2648516 19.7424389 4.4583648 4.6312264 2.1642138
## LF Del
## 1.6283377 10.8605311
On a ici des variances tres differentes d’une variable a l’autre. On est dans un cadre d’heteroscedasticite[^1]. La reduction des variables est importante afin que les variables de grande variance ne creent pas de biais dans l’analyse. A la fin du programme, une ACP sur les meme donnees mais pas reduite est porposee afin de voir le biais cree.
for (j in 1:p)
{
X[,j]=(X[,j]-mean(X[,j]))/sd(X[,j]);
}
head(X)
boxplot(X,main="Crimes données centrées réduites")
Visualiser les deux boxplot avant et apres centrage et reduction des données.
Q1- Rappeler pourquoi il est utile de centrer et reduire les donnees.
Cette transformation permet de normaliser les données pour améliorer la performance des modèles et faciliter leur interprétation.
V=var(X)
V
## LP Lcal lsep LTC PGl LTP
## LP 1.00000000 0.81559213 0.34126198 0.6499533 0.6716270 -0.08508423
## Lcal 0.81559213 1.00000000 0.45496969 0.5595993 0.6565531 -0.09834224
## lsep 0.34126198 0.45496969 1.00000000 0.4949621 0.6859560 0.04090412
## LTC 0.64995329 0.55959933 0.49496211 1.0000000 0.7940188 -0.16729954
## PGl 0.67162701 0.65655313 0.68595603 0.7940188 1.0000000 -0.22050769
## LTP -0.08508423 -0.09834224 0.04090412 -0.1672995 -0.2205077 1.00000000
## LTE 0.57851736 0.56904656 0.27968893 0.5386676 0.6485583 -0.68711131
## LF 0.44561930 0.41603518 0.13566136 0.4141710 0.5171263 -0.78135840
## Del -0.33664435 -0.34422973 -0.11480063 -0.3582568 -0.4454276 0.93569715
## LTE LF Del
## LP 0.5785174 0.4456193 -0.3366444
## Lcal 0.5690466 0.4160352 -0.3442297
## lsep 0.2796889 0.1356614 -0.1148006
## LTC 0.5386676 0.4141710 -0.3582568
## PGl 0.6485583 0.5171263 -0.4454276
## LTP -0.6871113 -0.7813584 0.9356972
## LTE 1.0000000 0.9595385 -0.8806573
## LF 0.9595385 1.0000000 -0.9147216
## Del -0.8806573 -0.9147216 1.0000000
diag(V)
## LP Lcal lsep LTC PGl LTP LTE LF Del
## 1 1 1 1 1 1 1 1 1
##Q2- Y a-t-il homogeneite des variances ou bien une heteroscedasticite (heterogeneite des variances) ? > ici il y a une homogénéhité des variances
###Rappeler pourquoi il est important de ne pas avoir de trop grande difference dans les variances. >Il est important de ne pas avoir de trop grandes différences dans les variances (c’est-à -dire éviter l’hétéroscédasticité) dans un modèle de régression, car cela peut affecter plusieurs aspects cruciaux de l’analyse statistique
A=eigen(V)$vectors
A[,1:3]
## [,1] [,2] [,3]
## [1,] -0.3239371 0.2869567 0.52160908
## [2,] -0.3199411 0.2950977 0.40310913
## [3,] -0.2091029 0.3883882 -0.67486584
## [4,] -0.3231577 0.2787859 -0.09891303
## [5,] -0.3653059 0.2776034 -0.24940754
## [6,] 0.2659985 0.5018064 0.16778232
## [7,] -0.4116611 -0.1780879 0.05176845
## [8,] -0.3776396 -0.3066114 0.04204825
## [9,] 0.3581443 0.3839363 0.07345925
X=as.matrix(X) # pour utiliser les produits matricielles
C=X%*%A
C[1:5,]
## [,1] [,2] [,3] [,4] [,5] [,6]
## C18 0.4649132 -2.54121570 0.5569395 -1.1913057 0.33750814 -0.04822268
## C17 -1.0854740 -1.72916808 0.2764895 0.7605894 0.04472892 -0.47358359
## C16 -1.0665960 -2.13493524 0.6209960 0.9657924 0.28669948 -0.41458984
## C27 -1.8977747 -0.06038556 -0.8169353 -0.3328652 0.04001978 -0.10191526
## C36 0.2358117 -2.39461232 0.4633573 -1.3149348 0.52469877 -0.23092425
## [,7] [,8] [,9]
## C18 -0.07531247 -0.058998674 -0.05450086
## C17 0.19570276 0.042799160 0.13976736
## C16 -0.04789133 0.004824185 0.12379953
## C27 -0.53861962 -0.152752245 -0.10573180
## C36 -0.21976525 -0.151587804 -0.07383376
L=eigen(V)$values #L=lambda
head(L)
## [1] 5.1283421 2.1474225 0.7629452 0.4434020 0.2160867 0.1444193
sum(L)
## [1] 9
L
## [1] 5.128342093 2.147422520 0.762945218 0.443402009 0.216086744 0.144419309
## [7] 0.126050643 0.022867550 0.008463915
On verifie bien que les vecteurs propres sont de dimension 9 correspondant au nombre de variables initiales. Cela est coherent car ils correspondent aux coefficient de la combinaison lineaire effectuee sur l’ensemble des variables initiales.
Q3- Quelle est la premiere valeur propre et son vecteur associe ?
Elle vous est donnee par le vecteur L. Nous avons une premiere valeur propre egale a 5,13.
Q4- Rappelez pourquoi doit-on ordonner les valeurs propres. >Les valeurs propres dans une ACP indiquent la quantité de variance expliquée par chaque composante principale. Elles aident à déterminer combien de composantes principales il est utile de conserver. Elles facilitent la réduction de la dimensionnalité tout en conservant le maximum d’information possible.
Q5- Donnez les coordonnees du premier individu dans le nouveau repere.
# Methode inertie
inertie=sum(L)
inertie
## [1] 9
cumsum(L)/inertie
## [1] 0.5698158 0.8084183 0.8931900 0.9424569 0.9664665 0.9825131 0.9965187
## [8] 0.9990596 1.0000000
# Methode kaiser
kaiser=L/inertie
round(kaiser,2)
## [1] 0.57 0.24 0.08 0.05 0.02 0.02 0.01 0.00 0.00
1/p
## [1] 0.1111111
# Methode coude
barplot(kaiser,main="Scree-graph ACP",names.arg=c(1:p))
Q6- Combien de dimension retenez-vous avec la methode de l’inertie ? >on retien 2 axes avec cette méthode
Q7- Combien de dimension retenez-vous avec la methode de Kaiser ? >on retien 2 axes avec cette méthode
Q8- Combien de dimension retenez-vous avec la méthode du coude ? >on retien 2 axes avec cette méthode
Q9- Concluez sur le choix de la dimension retenue.
# Calcul des corrélations entre les variables d'origine et les composantes principales
CC = matrix(ncol = p, nrow = p)
for (j in 1:p) {
for (k in 1:p) {
CC[j, k] = cor(X[, j], C[, k])
}
}
# Afficher les premières valeurs pour vérification
head(CC)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -0.7335829 0.4205088 0.45560850 -0.003003824 0.00239423 0.27156782
## [2,] -0.7245335 0.4324387 0.35210266 0.302508532 -0.17473567 -0.20024853
## [3,] -0.4735312 0.5691474 -0.58947328 0.289325140 -0.01706142 0.05953500
## [4,] -0.7318179 0.4085352 -0.08639731 -0.503768207 -0.11398122 -0.10124231
## [5,] -0.8272660 0.4068025 -0.21784934 -0.100606807 0.09336212 0.03617924
## [6,] 0.6023761 0.7353514 0.14655238 -0.004721063 0.25244905 -0.08028917
## [,7] [,8] [,9]
## [1,] -0.06060454 -0.003064481 0.0018151544
## [2,] 0.04148554 -0.014392966 -0.0001585792
## [3,] -0.12947759 -0.007137000 -0.0008417841
## [4,] -0.11414505 -0.004594202 -0.0016644537
## [5,] 0.28728219 -0.002391642 0.0007108264
## [6,] -0.03626063 0.037315805 -0.0449145820
# Créer le plot pour le cercle de corrélation
plot(CC[, 1], CC[, 2], main = "Cercle des corrélations CRIMES US",
xlab = "Composante1", ylab = "Composante2",
xlim = c(-1, 1), ylim = c(-1, 1), pch = "")
# Ajouter les labels des variables sur le plot
text(CC[, 1], CC[, 2], labels = nom.var)
# Ajouter les axes
abline(h = 0) # Axe horizontal à 0
abline(v = 0) # Axe vertical à 0
# Ajouter le cercle de corrélation avec cosinus et sinus
t <- seq(0, 2 * pi, length.out = 100) # Générer 100 points entre 0 et 2π
lines(cos(t), sin(t)) # Tracer le cercle avec les coordonnées (cos(t), sin(t))
# Optionnel : Ajouter des graduations pour l'axe
grid()
Q10- Pour les plus rapides uniquement. Rajoutez au graphique un cercle
unite.
Q11- Quelles sont les variables les mieux representees sur le premier plan C1-C2 ? >LTP,LTE,PGL
Q12- Y a-t-il des groupes de variables fortement correlees entre elles ? >LTE & LF, LTP & Del, PGL & LTC & Isep
Q13- Quelles sont les variables les plus correlees avec la premiere composante ? >toutes les variables sauf isep
Q14- Quelles sont les variables les plus correlees avec la seconde composante ? >toutes les variables sauf ltee,PGL et LTC
Q15- Interpretez les deux premieres compsantes.
#Representation des individus sur le plan 1-2
plot(C[,1],C[,2],main="Individus Forsy US",xlab="Composante1",ylab="Composante2",pch="")
abline(h=0)# horigontale 0
abline(v=0)
text(C[,1],C[,2], labels=nom.ind)
Q16- Y-a-t il des groupes d’individus ? >oui
Q17- Quels sont les individus ayant le plus contribués à la création du premier axe ?
Q18- Idem pour le second axe.
Q19- Etiquetez ces individus en vous reportant à l’interprétation des composantes.
Q20- Determiner un individu le plus proche de l’origine. Que pouvez-vous dire de lui ?
Reprenons les donnees initilaes et centrons les uniquement.
X=read.table(file="ForsyDonnees.txt",dec='.')
Y=X # juste pour definir Y
for (j in 1:p)
{
Y[,j]=(X[,j]-mean(X[,j]));
}
V2=var(Y)
A2=eigen(V2)$vectors
A2
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.37512683 0.19459717 0.781808024 0.30013100 0.18828672
## [2,] -0.14734150 0.05873225 0.299880369 -0.10694704 -0.01816666
## [3,] -0.04186608 0.03976170 -0.009100076 -0.24217352 0.08687774
## [4,] -0.69621175 0.43145442 -0.508130744 0.25529293 -0.04919219
## [5,] -0.31371809 0.10487489 0.039155838 -0.85415800 0.24541048
## [6,] 0.17687806 0.49858920 0.150949546 -0.15939216 -0.49978729
## [7,] -0.20922918 -0.18086018 0.110944656 -0.12733829 -0.60328691
## [8,] -0.15960766 -0.20783037 0.062544616 -0.05243683 -0.52902623
## [9,] 0.39006464 0.65988995 0.005368586 -0.02654821 -0.02032227
## [,6] [,7] [,8] [,9]
## [1,] -2.798005e-01 -0.068396139 -0.040916112 0.004127624
## [2,] 9.066250e-01 0.211237185 -0.065655941 -0.047373432
## [3,] 1.256416e-01 -0.842567050 -0.439230422 -0.108440179
## [4,] 5.640024e-02 -0.005317165 -0.005699201 -0.010165056
## [5,] -2.125704e-01 0.221064924 0.071731268 0.005963915
## [6,] 6.722017e-05 -0.242704852 0.543880853 -0.259676660
## [7,] -3.569261e-02 -0.080386986 -0.081315676 0.718808476
## [8,] -1.705186e-01 0.244103254 -0.451035482 -0.593890334
## [9,] -7.238197e-02 0.258707369 -0.538574342 0.221398350
Y=as.matrix(Y)
C2=Y%*%A2
L2=eigen(V2)$values
kaiser=L2/sum(L2)
barplot(kaiser,main="Scree-graph ACP",names.arg=c(1:p))
CC2=matrix(ncol=p,nrow=p)
for (j in 1:p)
{ for (k in 1:p)
{
CC2[j,k]=cor(Y[,j] ,C2[,k ]);
}
}
plot(CC2[,1],CC2[,2],main="Cercle des correlations Forsy US",xlab="Composante1",ylab="Composante2",xlim=c(-1,1),ylim=c(-1,1),pch="")
#graphe cercle de corr avec les axes allant de -1 Ã 1
text(CC2[,1],CC2[,2], labels=nom.var)
abline(h=0)# horigontale 0
abline(v=0)
plot(C2[,1],C2[,2],main="Individus Forsy US",xlab="Composante1",ylab="Composante2",pch="")
abline(h=0)# horigontale 0
abline(v=0)
text(C2[,1],C2[,2], labels=nom.ind)
Regardons l’infleunce de la reduction
A[,1]
## [1] -0.3239371 -0.3199411 -0.2091029 -0.3231577 -0.3653059 0.2659985 -0.4116611
## [8] -0.3776396 0.3581443
diag(var(X))
## LP Lcal lsep LTC PGl LTP LTE
## 7.9732329 1.5205847 0.2648516 19.7424389 4.4583648 4.6312264 2.1642138
## LF Del
## 1.6283377 10.8605311
A2[,1]
## [1] -0.37512683 -0.14734150 -0.04186608 -0.69621175 -0.31371809 0.17687806
## [7] -0.20922918 -0.15960766 0.39006464
diag(var(Y))
## LP Lcal lsep LTC PGl LTP LTE
## 7.9732329 1.5205847 0.2648516 19.7424389 4.4583648 4.6312264 2.1642138
## LF Del
## 1.6283377 10.8605311