ACP_Cercle_Corrélations_Col.var

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Jules Bellon
Messages : 3
Enregistré le : 30 Juil 2020, 20:22

ACP_Cercle_Corrélations_Col.var

Messagepar Jules Bellon » 03 Aoû 2020, 22:44

Bonjour à toutes et à tous,

Je m'intéresse à la variabilité du caractère couleur dans un plan de croisement factoriel de Pétunia.

J'ai effectué plusieurs ACP sur les individus et je dois désormais m'intéresser aux variables. J'utilise les packages Factoextra, avec les codes suivants:

Code : Tout sélectionner

res<- PCA(ACP_Petunia2020[,2:1737], scale.unit=TRUE, ncp=5,  quali.sup =1736, graph=T)

Code : Tout sélectionner

fviz_pca_var(res)


Mon problème est le suivant: le nombre élevé de variables (1735) ne me permet pas d'interpréter le cercle des corrélations, le graphique est illisible (cf. img plus bas)

Image

D'après mes recherches, le paramètre col.var de la fonction fviz_pca_var permet de colorier les variables en fonction des valeurs cos2, des coordonnées et des axes. Mais il permet également d'introduire un vecteur de valeurs.

J'aimerais donc colorer les variables en fonction de leurs valeurs numériques respectives. Les variables étant des longueurs d'ondes, il m'apparaît pertinent de faire un dégradé allant du violet au rouge, pour cela j'utiliserais la fonction suivante:

Code : Tout sélectionner

scale_color_gradient2(low="Purple", mid="Green",high="Red",  space ="Lab")


Ma question est la suivante: comment créer un vecteur dont les composantes sont les valeurs numériques de chacune des variables; mais aussi, comment faire en sorte que chaque valeur soit bien attribuée à la bonne variable ?


En vous remerciant par avance.

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: ACP_Cercle_Corrélations_Col.var

Messagepar Facundo Muñoz » 04 Aoû 2020, 08:17

Bonjour,

pourriez-vous apporter un code minimal reproductible [1,2] avec quelques données d'exemple [3] et le résultat que vous souhaitez ?

Merci,

[1] Qu'est-ce qu'un code reproductible ?
[2] FAQ: What's a reproducible example (`reprex`) and how do I do one?
[3] Comment insérer des données dans un message ?
ƒacu.-

Jules Bellon
Messages : 3
Enregistré le : 30 Juil 2020, 20:22

Re: ACP_Cercle_Corrélations_Col.var

Messagepar Jules Bellon » 05 Aoû 2020, 11:17

Bonjour,

Voici un jeu de données réduit , composé d'un data.frame 10x10:

Code : Tout sélectionner

      df<-structure(list(`250.643799` = c(-1.059329, 4.449154, -0.211861,
-10.381359, -9.110169, -10.593221, -15.254236, -19.915274, -22.24577,
-19.915274), `300.579315` = c(1.15572, 0.425791, -0.182479, 0.425791,
-1.76399, -1.642337, -1.034061, -3.223841, -3.832118, -5.656934
), `350.719604` = c(2.805118, 5.511807, 2.263777, 2.755901, 2.165353,
0.541336, 1.033465, -1.377953, 1.279524, -1.033465), `400.637024` = c(6.752699,
6.90276, 40.39616, 4.141655, 37.845135, 1.350539, 29.021608,
0.180073, 5.552221, 39.195679), `450.279846` = c(87.961746, 89.337967,
38.389099, 8.21382, 32.493118, 15.210775, 19.947847, 18.035637,
4.766045, 35.260029), `500.303619` = c(71.055733, 71.633324,
52.946838, 5.423041, 46.464863, 6.588941, 36.934429, 8.375227,
11.509252, 52.112522), `550.619446` = c(50.106739, 50.130459,
98.209206, 4.198293, 107.08017, 3.285105, 116.544121, 2.680266,
75.533684, 109.890892), `600.445679` = c(84.085876, 84.222191,
93.014145, 5.128644, 99.761459, 8.127449, 108.144485, 11.041065,
61.032551, 96.012955), `650.055603` = c(112.020103, 111.172882,
74.847755, 39.078632, 79.481064, 46.994965, 81.969803, 50.675137,
36.563408, 72.147202), `700.022278` = c(123.58625, 124.230499,
110.486763, 106.907661, 113.815315, 105.082329, 126.449547, 105.5476,
79.527557, 112.168938)), class = "data.frame", row.names = c(NA,
-10L))           


Et voici un code minimal reproductible

Code : Tout sélectionner

library(factoextra)
library(FactoMineR)
res<-PCA(df)
fviz_pca_var(res)


J'aimerais donc colorier les variables en fonction de leurs valeurs numériques avec le paramètre col.var .

Merci.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: ACP_Cercle_Corrélations_Col.var

Messagepar Mickael Canouil » 05 Aoû 2020, 12:04

Bonjour,

pourquoi ne pas tout simplement lire la documentation ?

Code : Tout sélectionner

?fviz_pca_var

col.ind, col.var
color for individuals and variables, respectively. Can be a continuous variable or a factor variable. Possible values include also : "cos2", "contrib", "coord", "x" or "y". In this case, the colors for individuals/variables are automatically controlled by their qualities of representation ("cos2"), contributions ("contrib"), coordinates (x^2+y^2, "coord"), x values ("x") or y values ("y"). To use automatic coloring (by cos2, contrib, ....), make sure that habillage ="none".


Que veut dire "leurs valeurs numériques" ? Est-ce leurs contributions, leurs coordonnées, ... ?
Où sont ces valeurs ?

`scale_*` est un paramètre graphique pour changer une échelle uniquement d'un point de vue "affichage", ça ne permet pas de faire autre chose.

Code : Tout sélectionner

df<-structure(list(`250.643799` = c(-1.059329, 4.449154, -0.211861,
-
10.381359, -9.110169, -10.593221, -15.254236, -19.915274, -22.24577,
-
19.915274), `300.579315` = c(1.15572, 0.425791, -0.182479, 0.425791,
-
1.76399, -1.642337, -1.034061, -3.223841, -3.832118, -5.656934
), `350.719604` = c(2.805118, 5.511807, 2.263777, 2.755901, 2.165353,
0.541336, 1.033465, -1.377953, 1.279524, -1.033465), `400.637024` = c(6.752699,
6.90276, 40.39616, 4.141655, 37.845135, 1.350539, 29.021608,
0.180073, 5.552221, 39.195679), `450.279846` = c(87.961746, 89.337967,
38.389099, 8.21382, 32.493118, 15.210775, 19.947847, 18.035637,
4.766045, 35.260029), `500.303619` = c(71.055733, 71.633324,
52.946838, 5.423041, 46.464863, 6.588941, 36.934429, 8.375227,
11.509252, 52.112522), `550.619446` = c(50.106739, 50.130459,
98.209206, 4.198293, 107.08017, 3.285105, 116.544121, 2.680266,
75.533684, 109.890892), `600.445679` = c(84.085876, 84.222191,
93.014145, 5.128644, 99.761459, 8.127449, 108.144485, 11.041065,
61.032551, 96.012955), `650.055603` = c(112.020103, 111.172882,
74.847755, 39.078632, 79.481064, 46.994965, 81.969803, 50.675137,
36.563408, 72.147202), `700.022278` = c(123.58625, 124.230499,
110.486763, 106.907661, 113.815315, 105.082329, 126.449547, 105.5476,
79.527557, 112.168938)), class = "data.frame", row.names = c(NA,
-
10L))
library(factoextra)
#> Loading required package: ggplot2
#> Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
res <- PCA(df


Code : Tout sélectionner

fviz_pca_var(res, col.var = "contrib"

Image

Code : Tout sélectionner

fviz_pca_var(res, col.var = "contrib") +
  scale_colour_viridis_c() 

Image


Dans l'hypothèse où le nom des variables (colonnes de "df") correspondent aux "valeurs" et en faisant exactement comme indiqué dans la documentation

Code : Tout sélectionner

fviz_pca_var(res, col.var = as.numeric(colnames(df))) +
  scale_color_gradient2(
    name = NULL,
    low = "Purple",
    mid = "Green",
    high = "Red",
    space = "Lab"
  )

Image

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: ACP_Cercle_Corrélations_Col.var

Messagepar Facundo Muñoz » 05 Aoû 2020, 12:33

Bonjour,

Est-ce cela ce que vous voulez ?

Code : Tout sélectionner

var_values <- as.numeric(rownames(res$var$coord))

fviz_pca_var(res, col.var = var_values) +
  scale_color_gradient2(
    low="Purple", mid="Green", high="Red", space ="Lab",
    midpoint = mean(range(var_values))
  )


Image

Ici, les valeurs pour la couleur sont prises d'après les noms des variables.
Pour une échelle divergente comme celle-là, est important de définir le "midpoint". C.a.d., la valeur que va être associée à la couleur centrale.

Cordialement,
ƒacu.-

Jules Bellon
Messages : 3
Enregistré le : 30 Juil 2020, 20:22

Re: ACP_Cercle_Corrélations_Col.var

Messagepar Jules Bellon » 05 Aoû 2020, 13:02

Bonjour Monsieur Canouil et Monsieur Munoz,

Je vous remercie infiniment, vous avez résolu mon problème. Effectivement, je voulais colorier les variables en fonction de leurs noms.

Vous avez raison, j'ai pourtant lu la documentation existante.

Cordialement.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité