[R] Plot ACP

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Saluts à tous,

je commence avec R et j’ai un petit problème.

J’ai fait une ACP sur iris, avec la fonction PCA de la lib FactoMineR.

Quand je le plot, voici ce que j’ai :

Screenshot
Screenshot

Ce qui est assez immonde.

Je voudrais donc à la place de points/numéro, afficher quelque chose comme carré ->setosa, rond -> versicolor etc…

Mais je n’ai pas trouvé comment faire.

Y a t-il un moyen de le faire avec plot directement ?

Merci d’avance !

+0 -0

La fonction plot peut recevoir un certain nombre de paramètres, notamment pch et col qui permettent, respectivement, de modifier la forme et la couleur de chaque point.

plot(iris$Sepal.Width, pch = as.numeric(iris$Species), col = iris$Species)

Le code ci-dessus affiche la variable Sepal.Width et donne à chaque point une forme et une couleur dépendante de la variable Species.

+1 -0
Auteur du sujet

Ouais j’ai essayé, mais ca marche pas avec la sortie de la PCA. J’ai quelque chose comme ca :

pca <- PCA(iris[,1:4])
plot(pca)
#Ca donne le résultat ci-dessus

Par contre quand j’essaye :

plot(pca, col = iris$Species)

Ca me donne :

Error in plot.PCA(pca, col = iris$Species) : l'argument 2 correspond à plusieurs arguments formels

Et j’ai du mal à trouver des infos la dessus …

+0 -0

Cette réponse a aidé l’auteur du sujet

J’ai regardé un peu la documentation de FactoMineR. En fait la fonction plot.PCA (c’est cette fonction qui est appelé lorsqu’on évalue plot(pca)) s’écarte de la norme introduite par la fonction plot.

Il faut en réalité jouer avec les paramètres habillage et col.hab, de cette façon :

pca <- PCA(iris[,1:4])
plot(pca, habillage = "ind", col.hab = iris$Species)

Ce qui devrait donner le graphique ci-dessous.

PCA
PCA

Par contre, on ne peut visiblement pas changer la forme des points. Pour ça, il va falloir écrire sa fonction d’affichage. Evaluer pca dans l’interpréteur nous donne pas mal d’informations :

> pca
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 150 individuals, described by 4 variables
*The results are available in the following objects:

   name               description
1  "$eig"             "eigenvalues"
2  "$var"             "results for the variables"
3  "$var$coord"       "coord. for the variables"
4  "$var$cor"         "correlations variables - dimensions"
5  "$var$cos2"        "cos2 for the variables"
6  "$var$contrib"     "contributions of the variables"
7  "$ind"             "results for the individuals"
8  "$ind$coord"       "coord. for the individuals"
9  "$ind$cos2"        "cos2 for the individuals"
10 "$ind$contrib"     "contributions of the individuals"
11 "$call"            "summary statistics"
12 "$call$centre"     "mean of the variables"
13 "$call$ecart.type" "standard error of the variables"
14 "$call$row.w"      "weights for the individuals"
15 "$call$col.w"      "weights for the variables"

J’en déduis que pca$ind$coord contient les coordonnées des données. Le code ci-dessous permet alors d’afficher un graphique similaire.

pca <- PCA(iris[,1:4])
x <- pca$ind$coord[, 1L] # Première dimension de la PCA
y <- pca$ind$coord[, 2L] # Deuxième dimension de la PCA

pch <- as.numeric(iris$Species)
col <- iris$Species

plot(x, y, col = col, pch = pch)
PCA avec formes et couleurs
PCA avec formes et couleurs

Édité par GaaH

+1 -0
Auteur du sujet

Oooh, nice, merci beaucoup.

Par contre, c’est quoi comme langage de prog qui quand tu fait plot(pca) appel PCA.plot(pca) o_O Si j’avais écris pca.plot() ok, mais la ca me semble bien contre-intuitif…

Enfin bref, merci beaucoup !

+0 -0

C’est le (enfin, l’un des) mécanisme de programmation orienté objet de R qui fonctionne comme ça. L’objet retourné par la fonction PCA retourne une liste dont la valeur de l’attribut "class" est "PCA". On dit que PCA est une classe S3.

Certaines méthodes, telles que plot, sont des méthodes dites génériques. En pratique, ça signifie qu’elle vont rediriger (on parle de dispatch) les paramètres qu’elle reçoit à la bonne fonction. Par exemple, la fonction plot appelle la fonction plot.class, où class est remplacé par la classe de l’objet, avec tous les paramètres passés initialement à plot.

Plus d’informations sur le système de classes S3 ici

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte