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 :

Coefficients de corrélation différents selon la library utilisé avec les mêmes données


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Coefficients de corrélation différents selon la library utilisé avec les mêmes données
    Bonjour,

    N'ayant pas toute les subtilités de R loin loin loin de là, je n'arrive pas à comprendre pourquoi en utilisant une même base de donnée, j'obtiens des coefficients de corrélations différents selon que j'utilise la library corrplot ou la library psych... Ces coefficients de diffère pas de beaucoup mais ils sont tout de même pas égaux...
    Auriez-vous une idée du pourquoi du comment s'il vous plait ?
    Je vous remercie de l'aide que vous pourrez m'apporter !
    Cordialement !!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Qu'entends-tu par des coefficients différents. Si ce sont ceux affichés sur la console à la sortie du test, cela provient de l'affichage car selon le nombre de chiffres significatifs imprimés. Voir par exemple, les 'différences' d'affichage entre et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str( summary( lm( y ~ x)))
    , la première instruction imprimant le résultat, la dernière instruction ne faisant qu'imprimer la structure du résultat en mémoire en donnant souvent des valeurs plus approximatives (1 à 3 chiffres derrière la virgule). Mais cela ne préjuge absolument pas des véritables valeurs en mémoire.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour !
    Déjà merci beaucoup pour votre réponse !

    Mais malheureusement cela ne vient pas d'une question d'affichage j'en ai peur... J'ai mis les deux fichiers en pièce jointe je ne sais pas si cela a bien fonctionné ou non ! Mais pour donner un exemple je me retrouve avec des coef de 0.46 et 0.68 pour la même corrélation avec les deux méthodes alors que logiquement je devrais obtenir des coefficients égaux...
    J'ai chercher depuis ce matin mais je n'ai vraiment aucune piste c'est très étrange
    Images attachées Images attachées

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Quel est ton script à chaque fois. Par quelles fonctions calcules-tu tes corrélations et les visualises-tu ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Pour la table des corrélations en couleur j'utilise la library "corrplot" et j'utilise le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    corrplot(ACPMATRIXcor, type="upper", order="hclust", method="color", addCoef.col = "black",
             tl.col="black", tl.cex = 0.5, tl.srt=45, is.corr=FALSE, 
             p.mat = p.mat, sig.level = 0.06, insig = "blank",
             title = "table des corrélations p-value 6%") #blanc => non significatif. Pour p-val = 1% ecrire "sig.level = 0.01"
    Pour l'autre scatter plots, j'utilise la library "psych" et j'utilise le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pairs.panels (ACPMATRIXcor, method = ("pearson"), hist.col = "#00AFBB", density = TRUE, ellipses = TRUE)
    Je les visualise directement sur R studio.

    ACPMATRIX et la matrice de mes données. Elle contient des données manquantes sous la forme NA, ce peut-il que les deux fonctions interprètent différemment ces données manquantes ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Si dans corrplot, l'argument est la matrice ce corrélation calculée par la fonction cor appliquée aux données, dans pairs.panels, l'argument est les données elles-mêmes et non la matrice de corrélation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ACPMATRIXcor <- cor( donnees)
    corrplot( ACPMATRIXcor, ...)
     
    Pairs.panels( donnees, ...
    Si tu donnes ACPMATRIXcor en entrée de pairs.panels, il visualise la matrice cor( ACPMATRIXcor). C'est de là que vient ton problème.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Effectivement, j'avais raté une étape, merci beaucoup !

    J'ai modifier mon script que voici:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    ACPMATRIXcor <- cor(ACPMATRIX, method = c("pearson"), use = "complete.obs")
    ACPMATRIXcor
    p.ACPMATRIXcor <- rcorr(ACPMATRIX) 
    p.ACPMATRIXcor 
     
    cor.mtest <- function(ACPMATRIX, ...) {
      mat <- as.matrix(ACPMATRIX)
      n <- ncol(mat)
      p.mat<- matrix(NA, n, n)
      diag(p.mat) <- 0
      for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
          tmp <- cor.test(mat[, i], mat[, j], ...)
          p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
        }
      }
      colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
      p.mat
    }
     
    p.mat <- cor.mtest(ACPMATRIX)
    head(p.mat[,1:12]) 
    p.mat 
     
    corrplot(ACPMATRIXcor, type="upper", order="hclust", method="color", addCoef.col = "black",
             tl.col="black", tl.cex = 0.5, tl.srt=45, is.corr=FALSE, 
             p.mat = p.mat, sig.level = 0.06, insig = "blank",
             title = "table des corrélations p-value 6%")
     
    library(psych)
    pairs.panels (ACPMATRIX, method = ("pearson"), hist.col = "#00AFBB", density = TRUE, ellipses = TRUE)
    Mon jeu de données et donc maintenant l'objet ACPMATRIX. J'ai rajouté tout le script servant à la construction du graphique de corrplot pour plus de compréhension.
    Malheureusement, je ne parviens toujours pas à obtenir des coefficients égaux, je suppose que j'ai encore interverti un ACPMATRIX avec un ACPMATRIXcor mais malgré de nombreuses tentatives, pas moyen de trouver où est la faute. Je ne maîtrise pas bien le script cor.mtest qu'un ami m'a fourni brut de pomme sans explications...

    Je vous remercie énormément pour l'aide que vous me procurez c'est vraiment gentil à vous !!!

  8. #8
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    1) Le code est redondant :
    - corrplot::rcorr renvoie une liste de 3 membres
    r : la matrice de corrélation
    n : le nombre d'observations
    P [P majuscule] : la matrice des p-value, la diagonale est mise à NA (ce qui est logique) mais si tu veux la remplacer par des 1, il suffit alors d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res <- rcoor( donnees)
    diag( res$P) <- 1
    Donc si tu utilises corrplot pour calculer, il est inutile de recalculer la matrice de corrélation par cor et la matrice des p.value par cor.mtest.
    Par contre, rcorr demande une matrice en entrée, si les données sont un data.frame, il faut les transformer par as.matrix( donnees).

    - cor.mtest existe dans le package corrplot, il est inutile de le reprogrammer. Il renvoie une liste de 3 membres :
    p [p minuscule] : les p value. Ici la diagonale est mise à zéro
    lowCI et uppCI : matrices des bornes inférieures et supérieurs de l'estimation de la corrélation.

    2) J'ai essayé ton script sur les données mtcars (qu'on peut charger par data( mtcars)), je n'ai aucune différence dans les coefficients de corrélation. La seule différence se trouve dans la visualisation. En utilisant dans corrplot la méthode "hclust" pour l'argument order à la place de la méthode par défaut (original) pour organiser la matrice, il y a permutation de lignes et de colonnes. Par exemple, sur les données mtcars, la variable carb qui se trouve en première ligne/colonne de corrplot est reléguée en dernière ligne/colonne de pairs.panels. SI tu conservais cette méthode hclust mais tu modifiais la méthode d'agrégation (hclust.method), tu aurais d'autres permutations.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai simplifié le script pour supprimer les redondances dont vous parliez, j'espère que je n'ai pas encore fait de fautes... Je suis désolé de faire le boulet mais je ne suis pas sûr d'avoir compris tout ce que vous m'avez dit malheureusement...
    Désormais j'utilise ce script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    M <- cor(ACPMATRIX, use = "complete.obs")
    col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
    corrplot(M, method ="color", type = "upper", col=col(200),
             addCoef.col = "black", tl.col="black", tl.srt=45)
     
     
    pairs.panels (ACPMATRIX, method = ("pearson"), hist.col = "#00AFBB", density = TRUE, ellipses = TRUE)
    Et pourtant même si les valeurs des coefficients de corrélations ne sont pas drastiquement différents, ils n'en reste pas moins non-égaux, j'ai mis mes sorties graphiques en pièce jointe !
    Je ne vous embêterai pas plus après votre réponse je me contenterai des résultats du package Psych, c'est surtout pour comprendre mes erreurs...
    Merci beaucoup !
    Images attachées Images attachées

  10. #10
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Le problème que tu as est un peu vicieux. Il faut lire attentivement l'aide de pairs.panels pour supposer que le calcul de la corrélation n'utilise pas le même critère que le calcul 'standard' comme tu le fais, cf. 1ère ligne après Value :
    A scatter plot matrix (SPLOM) is drawn in the graphic window. The lower off diagonal draws scatter plots, the diagonal histograms, the upper off diagonal reports the Pearson correlation (with pairwise deletion).
    Après vérification en regardant le code source de la fonction, c'est en effet le cas. pairs.panels utilise bien l'approche "pairwise.complete.obs" pour le calcul de la corrélation (argument use de cor). Si les données n'ont pas de valeurs manquantes, cela ne change rien. Par contre s'il y a des valeurs manquantes, le traitement est différent. Supposons 3 variables. Il y a une valeur manquante en première ligne de la 1ère variable, et c'est la seule valeur manquante. "complete.obs" supprimera cette première ligne et fera donc :
    "pairwise.complete.obs" fera un calcul du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    M[1,2] <- M[2,1] <- cor( don[-1,1], don[-1,2])
    M[1,3] <- M[3,1] <- cor( don[-1,1], don[-1,2])
    M[2,3] <- M[3,2] <- cor( don[,2], don[,3])
    Dans ce cas, la matrice résultante peut poser des problèmes comme le signale la page d'aide de cor :
    Finally, if use has the value "pairwise.complete.obs" then the correlation or covariance between each pair of variables is computed using all complete pairs of observations on those variables. This can result in covariance or correlation matrices which are not positive semi-definite, as well as NA entries if there are no complete pairs for that pair of variables.
    Dans le premier cas, M est bien une matrice de corrélation mais pas (obligatoirement) dans le second cas.

    Tes différences doivent donc provenir du fait que tu as des valeurs manquantes et tu devrais retrouver les mêmes résultats dans les 2 cas si tu calcules cor avec l'option "pairwise.complete.obs" pour l'argument use mais tu visualiser alors les corrélations deux à deux et non pas une véritable matrice de corrélation.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Oula mes compétences ne m'auraient jamais permis de déceler tout cela ! Effectivement en utilisant pairwise.complete.obs avec cor je retrouve les mêmes résultats que pais.panel.
    Merci beaucoup pour toute cette aide sans laquelle je n'aurais pas pu affiner mes interprétations !
    Merci encore et bonne continuation !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/09/2015, 22h02
  2. [PDF] Données affichées différentes selon l'outil d'affichage utilisé
    Par Jipété dans le forum Bureautique
    Réponses: 4
    Dernier message: 02/10/2014, 11h53
  3. INDEX pas utilisé avec les <
    Par vodnok dans le forum Débuter
    Réponses: 6
    Dernier message: 07/03/2008, 10h11
  4. [Interface graphique]Composant différents selon le PC
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/08/2005, 10h05
  5. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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