IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

ACP Cercle des Corrélations Col.var


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Par défaut ACP Cercle des Corrélations Col.var
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >res<- PCA(ACP_Petunia2020[,2:1737], scale.unit=TRUE, ncp=5,  quali.sup =1736, graph=T)
     
    >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 :

    Nom : Graph_Variables.png
Affichages : 537
Taille : 36,9 Ko

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    >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.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Par défaut Jeu de données et code minimal reproductible
    Bonjour,


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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    > 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 minimale reproductible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >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.

  3. #3
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut ACP Cercle des Corrélations col.var
    Bonjour,

    Merci d'avoir ajouté un exemple reproductible.

    Une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    couleurs <- read.csv("d:/temp/longueurs_ondes.txt",skip=3)
    ajout <- data.frame(lambda = c(250:379), R=rep(0,130), G=rep(0,130), B=rep(0,130))
    couleurs <- rbind(ajout,couleurs)
    couleurs$col <- rgb(couleurs$R,couleurs$G,couleurs$B)
     
    couleurs_selec <- data.frame(lambda=floor(as.numeric(names(dftest))))
    couleurs_selec <- merge(couleurs_selec,couleurs[,c("lambda","col")],by="lambda")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fviz_pca_var(res, col.var=names(dftest), palette=couleurs_selec$col)
    Nom : plot1.jpg
Affichages : 435
Taille : 69,3 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fviz_pca_var(res, col.var=names(dftest), palette=couleurs_selec$col, label=FALSE) + theme(legend.position = "none")
    Nom : plot2.jpg
Affichages : 395
Taille : 53,0 Ko

    Curieuse de voir le résultat sur le jeu de données complet ;-)

    Lien utile : http://pierreontheweb.free.fr/RGB-wa...length2RGB.htm

    Cordialement,




    • PS1 : Merci d'avoir ajouté un exemple reproductible. Il est préférable de formater les données de façon à en faciliter la lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dftest <- 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))
    ou avec la fonction read.table() pour avoir le tableau dans le bon sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    dftest2 <- read.table(header=TRUE, check.names=FALSE,
    text="
    250.643799 300.579315 350.719604 400.637024 450.279846 500.303619 550.619446 600.445679 650.055603 700.022278
     -1.059329   1.15572    2.805118   6.752699  87.961746  71.055733  50.106739  84.085876 112.020103 123.58625
      4.449154   0.425791   5.511807   6.90276   89.337967  71.633324  50.130459  84.222191 111.172882 124.230499
     -0.211861  -0.182479   2.263777  40.39616   38.389099  52.946838  98.209206  93.014145  74.847755 110.486763
    -10.381359   0.425791   2.755901   4.141655   8.21382    5.423041   4.198293   5.128644  39.078632 106.907661
     -9.110169  -1.76399    2.165353  37.845135  32.493118  46.464863 107.08017   99.761459  79.481064 113.815315
    -10.593221  -1.642337   0.541336   1.350539  15.210775   6.588941   3.285105   8.127449  46.994965 105.082329
    -15.254236  -1.034061   1.033465  29.021608  19.947847  36.934429 116.544121 108.144485  81.969803 126.449547
    -19.915274  -3.223841  -1.377953   0.180073  18.035637   8.375227   2.680266  11.041065  50.675137 105.5476
    -22.24577   -3.832118   1.279524   5.552221   4.766045  11.509252  75.533684  61.032551  36.563408  79.527557
    -19.915274  -5.656934  -1.033465  39.195679  35.260029  52.112522 109.890892  96.012955  72.147202 112.168938
    ")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > compareDF::compare_df(dftest, dftest2, group_col=rownames)
    Error in stop_or_warn("The two data frames are the same!", stop_on_error) : 
      The two data frames are the same!
    La page Reprex, ou comment demander de l’aide efficacement indiquée par statnmap ici pourra aussi vous intéresser.


    • PS2 : df est par défaut une fonction liée à la distribution F. Il est préférable de choisir un autre nom. (message de faubry)
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. PCA{FactoMineR} Cercle des corrélations
    Par CupOfAppleTea dans le forum R
    Réponses: 10
    Dernier message: 20/03/2018, 12h42
  2. Réponses: 0
    Dernier message: 13/12/2014, 18h55
  3. ACP cercle de corrélation
    Par ebongue dans le forum SAS STAT
    Réponses: 7
    Dernier message: 07/03/2013, 15h34
  4. Réalisation d'ACP- expression des variables
    Par Ptinéwik dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/12/2007, 09h21
  5. Réponses: 2
    Dernier message: 06/02/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo