############################## ############################## #TDM 6 ANALYSES FACTORIELLES## ############################## ############################## ####################################################################### #Partie 1: ACP: exemple de la BDD: physico-chimie du Bassin d'Arcachon# données heterogènes et importance du double 0 ####################################################################### ##Exemple décortiqué en TD pour l'interpretation: matrice 11 variables hétérogènes en unités et 3 qualitatives (date, stations, mois) et 36 lignes (3 stations: Bouée 13, Eyrac et Comprian) #Importer somlit par import Dataset, en le nommant BA names(BA) #matrice utilisée pour l'ACP: sans chl a ni var qualitatives BA2<-BA[,-c(1,2,3,4)] View(BA2) dim(BA2) rownames(BA2)<-BA$NOM #HYPOTHESES #Verification de la distribution multinormale: hypothèse de base pour l'ACP (données centrées réduites) names(BA2) par(mfrow=c(1,2)) plot(density(scale(BA2[,1])), main="Temperature") plot(density(scale(BA2[,2])), main="Salinité") # pas besoin d'enfaire plus pour se rendre compte que ce n'est pas le cas... #-> Hypothèse bancale surtout pour certains paramètres dim(BA2) #Je peux quand même faire mon ACP car j'ai plus de lignes que de colonnes=> c'est "accepté" car l'ACP est robuste dans ce cas #Vérification de l'hypothèse "relation monotone" entre variables plot(BA2) #-> Observation des relations entre variables 2 à 2, si relation existe elle est monotone et non unimodale... #TRANSFORMATION OU NON #Données hétérogènes en terme d'unité donc forcément en gamme de variation #=>Intéret de "centrer et reduire les données", représentations en boxplot summary(BA2) x11(); par(mfrow=c(1,2)) boxplot(BA2)# données brutes scale(BA2)->BAtrf boxplot(BAtrf)# données "normées" #-> centrer et réduire les gammes de variation pour enlever les problèmes d'unités hétérogènes #REALISATION DE L'ACP #ACP proprement dite library(FactoMineR) ?PCA #De l'aide sur la fonction à utiliser PCA<-PCA(BAtrf,scale.unit = TRUE, ncp = ncol(BAtrf), graph = TRUE, axes = c(1,2)) #Remarque: pour scale.unit = FALSE il ne dessinera pas de cercle de correlation #2 graphes non superposables pour l'ACP: 1 pour les variables et 1 pour les stations, PCA #Donne les différents resultats de l'ACP et me dit ou les chercher #Quels axes conservés? ###################### PCA$eig #Vecteurs propres et variance expliquée barplot(PCA$eig[,1])#Permet de choisir le nombre d'axes à conserver selon les 3 critères => conclusions? #qualité de représentation et interpretation des variables ########################################################## round(PCA$var$cos2[,1:2],2) #cos 2 donne la qualité de representation des variables round(PCA$var$cos2[,1:2],2)#Plus lisible #Quelles sont les variables bien représentées sur les axes 1,2,3?, sur les plans 12 et 13? #Quelles sont donc les variables mal representées et donc sur lesquelles on ne pourra pas faire d'interpretation? round(PCA$var$contrib[,1:2],2) #Somme des colonnes et lignes égale à 100 #Quelles variables contribuent principalement à la construction des axes conservées? #"SIGNIFICATION ECOLOGIQUE" des axes? Axe 1: gradient continent-ocean donc spatial; Axe 2: saison #"HIERARCHISATION" de l'information dans la base de données de base? structure des stations/date davantage par l'espace que par le temps round(PCA$var$coord[,1:2],2) #Coordonnées des variables dans le cercle de corrélation plot(PCA,choix="var",axes = c(1,2))#Cercle de corrélation des variables, pour le plan 12 #qualité de représentation et interpretation des stations ("individus") ######################################################################### round(PCA$ind$cos2[,1:2],2)#cos 2 donne la qualité de representation des ind round(PCA$ind$contrib[,1:2],2) #Somme des colonnes et lignes égale à 100 round(PCA$ind$coord[,1:2],2) #Coordonnées des stations sur le graphe plot(PCA,choix="ind",axes = c(1,2))#Graphes des stations, pour le plan 12 #Aide à l'interpretation des "individus" => projeter des ellipses correspondant à la dispersion des individus selon une variable qualitatives ############################################################################################################################################# library(ade4) stat<-as.factor(BA$Station);stat#exemple station s.class(PCA$ind$coord , fac=BA$Station, col=c(1:3), xax=1,yax=2)#Plan 12 saison<-as.factor(BA$Saison);saison#exemple saison s.class(PCA$ind$coord , fac=BA$Saison, xax=1,yax=2,col=c(1:4) )#Plan 12 #FAIRE UNE NMDS avec les données ############################################################## library(vegan) ?metaMDS NMDS<-metaMDS(scale(BA2),k=2,distance="euclidean",autotransform=F)#k=nombre de dimensions de l'espace réduit, NMDS$stress #Attention aux structures locales #Remarque: vous n'avez pas tous exactement le même resultat (au depart positionnement au hasard donc pas le même d'un ordi à l'autre) NMDS plot(NMDS,type="t") library(ade4) s.class(scores(NMDS) , fac=BA$Station, col=c(1:3), xax=1,yax=2) x11();s.class(scores(NMDS) , fac=BA$Saison, col=c(1:4), xax=1,yax=2)#Plan 12 #L'analyse factorielle reste l'analyse la "plus puissante" => plus d'info sur la hierarchisation des infos et paramètres explicatifs #Analyse factorielle des correspondances: embryon et morale humaine# ##################################### #importer embryo.txt sous le nom emb emb2<-emb[,-1]; rownames(emb2)<-emb[,1] #Le fichier donne les résultats d’un sondage réalisé dans 10 pays européens. #La question du sondage : « Pensez-vous que les embryons humains ont une conscience ? #Considérez-vous les embryons humains au même niveau que les êtres humains ? ». #4 réponses possibles graduellement entre « Non pas du tout » (A) et « Oui totalement » (D) , des abstentions boxplot(emb2) library(FactoMineR) ?CA CA<-CA(emb2,ncp = ncol(emb2), graph = TRUE, axes = c(1,2)) CA CA$eig #Choisir le nombre d'axes barplot(CA$eig[,2])#2 axes round(CA$eig,2) round(CA$col$cos2[,1:2],2) round(CA$row$cos2[,1:2],2)#Italie mal représenté : soit prendre axe sup soit passer par une analyse de groupement round(CA$col$coord[,1:2],2) round(CA$row$contrib[,1:2],2) round(CA$row$coord[,1:2],2) plot(CA,axes = c(1,2))#=>Italie mal representée soit prendre axe sup soit passer par une typologie #Montrer en quoi Analyse de groupement est complémentaire à une analyse factorielle notamment quand certaines variables ou objets pas bien représenté sur l'analyse factorielle ##Si la question est une typologie: on fait un arbre pour verifier les groupes et on superpose sur l'AFC #Pour que ce soit comparable, j'utilise la distance du chi2 library(vegan) embtrf<-decostand(emb2, "chi.square") mat<-dist(embtrf, method="euclidean")#Ces 2 etapes permettent de baser la CAH sur les distances du chi2 cluster<-hclust(mat,method = "average") cluster; plot(cluster, hang=-1) CA grpecluster<-cutree(cluster,k=3) #Superposer les groupes sur l'AFC library(ade4) x11();s.class(CA$row$coord,fac=as.factor(grpecluster)) text(CA$col$coord[,1:2],labels=colnames(emb2), col="red") #On peut attribuer l'Italie à une réponse gr^ce à la CAH #Pas d'idée sur les réponses des pays pour la CAH donc resultats complementaires avec AFC #Verifier qualité de representation et contribution