Matrice des corrélations...

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

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Matrice des corrélations...

Messagepar Romain Lecachey » 12 Juin 2007, 13:42

Bonjour à tous !

J'ai un script permettant de décrire les résultats des corrélations entre variables dans une matrice.
Voici le code que j'obtiens :

Code : Tout sélectionner

testCorr <- function(nomFichier1 , nomFichier2 ,type_image , donnees)
{
library(ade4) #charge la librairie ade4 nécéssaire pour les calculs des corrélations
NbVariables <- length(factor(colnames(donnees)))
panel.cor <- function(echantillon1, echantillon2, digits=3, prefix="", cex.cor)
{
    usr <- par("usr"); on.exit(par(usr)) # création de la matrice
    par(usr = c(0, 1, 0, 1)) # séparation de chaque case de la matrice en plusieurs pour l'affichage des différents éléments
    r <- abs(cor(echantillon1, echantillon2)) # transformation de la valeur de test en valeur absolue
    txt <- format(c(r, 0.123456789), digits=digits)[1] # gère la police des caractères affichés
    txt <- paste(prefix, txt, sep="") # affiche la valeur de test
    if(missing(cex.cor)) cex <- 0.7/strwidth(txt)  # gère la police d'affichage au cas où cex.cor est manquant

    test <- cor.test(echantillon1, echantillon2)  # effectue le test 
   
myPal <- colorRampPalette( c("green", "red") ) # construit une palette de couleurs : ici dégradé du vert au rouge pour la représentation
Signif <- symnum(test$p.value, corr = FALSE, na = FALSE,
                  cutpoints = c(0,0.001,0.01,0.05,0.10,1),
                  symbols = c(myPal(5)[1],myPal(5)[2],myPal(5)[3],myPal(5)[4],myPal(5)[5]))
          polygon(c(0,1,1,0),c(0,0,1,1),border="black",col=Signif)   
          text(0.5, 0.5, txt, cex = cex,col="black")
}

bitmap(nomFichier1,type_image,width=7,height=7,res=72,pointsize=12) # sauvegarde du graphique à l'endroit indiqué en paramètre de la fonction
pairs(donnees[,c(1:NbVariables)],lower.panel=panel.smooth, upper.panel=panel.cor) # matrice des corrélations
dev.off()

db <- donnees[,c(1:NbVariables)]            # tracé des droites pour vérifier la normalité
pca1 <- dudi.pca(db, scannf = FALSE, nf = 3)
assign("db",db,envir=sys.frame(0))
bitmap(nomFichier2,type_image,width=5,height=5,res=72,pointsize=12) # tracé du cercle des corrélations
s.corcircle(pca1$co, clabel = 1,grid = TRUE,box=TRUE,  fullcircle = TRUE)
dev.off()

}


ça marche nickel avec les couleurs et tout mais je voudrais savoir si c'est possible d'obtenir les noms des différentes variables sur les abscisses et ordonnées plutôt que sur la diagonale ??
Merci d'avance pour toute suggestion !
à+

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 13 Juin 2007, 19:54

Bonjour,


Essaie ça :

Code : Tout sélectionner

testCorr <- function(nomFichier1 , nomFichier2 ,type_image , donnees)
{
library(ade4) #charge la librairie ade4 nécéssaire pour les calculs des corrélations
NbVariables <- ncol(donnees)
labs <- colnames(donnees)
panel.cor <- function(echantillon1, echantillon2, digits=3, prefix="", cex.cor)
    {
    usr <- par("usr"); on.exit(par(usr)) # création de la matrice
    par(usr = c(0, 1, 0, 1)) # séparation de chaque case de la matrice en plusieurs pour l'affichage des différents éléments
    r <- abs(cor(echantillon1, echantillon2)) # transformation de la valeur de test en valeur absolue
    txt <- format(c(r, 0.123456789), digits=digits)[1] # gère la police des caractères affichés
    txt <- paste(prefix, txt, sep="") # affiche la valeur de test
    if(missing(cex.cor)) cex <- 0.7/strwidth(txt)  # gère la police d'affichage au cas où cex.cor est manquant

    test <- cor.test(echantillon1, echantillon2)  # effectue le test

    myPal <- colorRampPalette( c("green", "red") ) # construit une palette de couleurs : ici dégradé du vert au rouge pour la représentation
    Signif <- symnum(test$p.value, corr = FALSE, na = FALSE,
                  cutpoints = c(0,0.001,0.01,0.05,0.10,1),
                  symbols = myPal(5))
    polygon(c(0,1,1,0),c(0,0,1,1),border="black",col=Signif)
    text(0.5, 0.5, txt, cex = cex,col="black")
    }
   
panels.diag <- function(...){
    bob <- sys.frames()[[3]]
    u <- get("i",envir=bob)
    mtext(labs[u],2)
    mtext(labs[u],3)
    }
   
bitmap(nomFichier1,type_image,width=7,height=7,res=72,pointsize=12) # sauvegarde du graphique à l'endroit indiqué en paramètre de la fonction
pairs(donnees[,c(1:NbVariables)],lower.panel=panel.smooth, upper.panel=panel.cor,diag.panel=panels.diag,labels=NULL) # matrice des corrélations
dev.off()

db <- donnees[,c(1:NbVariables)]            # tracé des droites pour vérifier la normalité
pca1 <- dudi.pca(db, scannf = FALSE, nf = 3)

bitmap(nomFichier2,type_image,width=5,height=5,res=72,pointsize=12) # tracé du cercle des corrélations
s.corcircle(pca1$co, clabel = 1,grid = TRUE,box=TRUE,  fullcircle = TRUE)
dev.off()

}


A priori ça marche si ça déconne, il te faut jouer sur le chiffre 3 de bob <- sys.frames()[[3]], pour des histoires d'environnement, pour pouvoir récupérer le i de la boucle de pairs.

Maxime

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Messagepar Romain Lecachey » 14 Juin 2007, 09:02

Merci à vous deux pour votre réponse !

C'est à peu près le résultat que je souhaite obtenir sauf que je voudrais avoir ces noms de variables en haut de chaque colonne et à gauche de chaque ligne de la matrice !
Est-ce possible ? Quitte à rajouter une ligne et une colonne à la matrice pour les afficher ?
Encore merci,

Romain

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Messagepar Romain Lecachey » 14 Juin 2007, 10:24

C'est bon !
J'obtiens ce que je voulais sans avoir besoin d'aggrandir la matrice.
Vous cherchez quelqu'un pour vous écrire intégralement le code ?

C'est vrai que je m'étais concentré sur la réponse de maxime, je n'avais pas approfondi votre réponse, néanmoins cette réponse marche très bien, je m'escuse d'avoir précipité les choses.

Problème résolu !!
Merci de votre aide...
à+

Romain


Retourner vers « Questions en cours »

Qui est en ligne

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

cron