Importation donnees

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

Premieres analyses

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.

Centrage et reduction des donnees

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.

Creation de la matrice variance covariance et diagonalisation

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.

Interpretation de l’ACP

Choix de la dimension

# 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.

Creation de la matrice des correlations (Xj,Ck)

# 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 ?

ACP sur donnes non reduites

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