mardi 8 février 2011

Représenter visuellement une matrice de corrélation

Quand on a plusieurs variables numériques, on peut faire une matrice de corrélation pour voir le coefficient de corrélation entre toutes les variables prises 2 à 2. Mais une telle matrice n'est pas toujours très agréable à lire. Voici une méthode pour représenter visuellement une matrice de corrélation. Cela donnera au final le graphique suivant :



Pour chaque corrélation, on a le nuage de points et le coefficient de corrélation (avec le degré de significativité).

Voici tout d'abord le code pour créer les variables et pour avoir une matrice de corrélation classique :

v1<-c(1,2,4,5,7) # création d'un vecteur v1
v2<-c(7,8,5,9,8) # création d'un vecteur v2
v3<-c(7,5,3,2,1) # création d'un vecteur v3
tab<-matrix(data=c(v1,v2,v3), nrow=5, ncol=3, byrow=F) # création d'une matrice contenant les 3 vecteurs
colnames(tab)=c("variable 1","variable 2","variable 3") # on donne un nom à chaque colonne
cor(tab) # matrice de corrélation classique

Voici maintenant le code pour obtenir le graphique ci-dessus.

# Il faut d'abord créer la fonction suivante (nommée panel.cor)
panel.cor <- function(x, y, digits=2, prefix="", cex.cor)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- (cor(x, y))
    txt <- format(c(r, 0.123456789), digits=digits)[1]
    txt <- paste(prefix, txt, sep="")
    if(missing(cex.cor)) cex <- 0.8/strwidth(txt)

    test <- cor.test(x,y)
    # borrowed from printCoefmat
    Signif <- symnum(test$p.value, corr = FALSE, na = FALSE,
                  cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
                  symbols = c("***", "**", "*", ".", " "))

    text(0.5, 0.5, txt, cex = cex * abs(r))
    text(.8, .8, Signif, cex=cex, col=2)
}

# Puis on utilise la fonction pairs()
pairs(tab[,c(1,2,3)], lower.panel=panel.smooth, upper.panel=panel.cor)

remarque: la fonction panel.cor et l'idée du graphique proviennent du lien suivant (j'ai légèrement modifié le code pour afficher le signe du coefficient de corrélation) :
http://addictedtor.free.fr/graphiques/RGraphGallery.php?graph=137

lundi 31 janvier 2011

Trouver les éléments communs à deux vecteurs

Pour récupérer les éléments qui sont présents simultanément dans deux vecteurs, on peut utiliser la fonction intersect. Voici un exemple:


a <- c("lapin", "cheval", "loup") # création du premier vecteur
b <- c("renard", "lapin", "chien") # création du second vecteur
intersect(a,b) # le résultat affichera le mot "lapin" qui est commun aux deux vecteurs

mercredi 26 janvier 2011

Une bonne initiation à R (et en français)

Voici une très bonne introduction à R en français, sur le site du zéro :

http://www.siteduzero.com/tutoriel-3-374508-effectuez-vos-etudes-statistiques-avec-r.html

Ce tutoriel part vraiment de zéro, mais contient de nombreuses informations très utiles pour démarrer sur de bonnes bases.

lundi 10 janvier 2011

Afficher deux graphiques (ou plus) dans une même fenêtre

Pour afficher plusieurs graphiques dans une même fenêtre, il faut utiliser la fonction par() avant de lancer les graphiques. Voici un exemple:

a <- c(1,2,3)
b <- c(4,5,6)
par(mfrow = c(1,2))
barplot(a)
barplot(b)

Dans l'exemple précédent, les 2 graphiques seront l'un à côté de l'autre. Si on veut les 2 graphiques l'un au-dessus de l'autre, il faut utiliser :

par(mfrow = c(2,1))

mercredi 15 décembre 2010

Nommer les données dans un nuage de points

Voici un exemple permettant d'afficher le nom des données dans un nuage de points:

a <- c(1,2,3) # coordonnées x de 3 points
b <- c(4,5,6) # coordonnées y
nom <- c("a", "b", "c") # noms des 3 points
plot(a,b) # nuage de points
text(a,b,nom) # affichage des noms des points

On peut remarquer que les noms s'affichent par-dessus les points, ce qui n'est pas très lisible. Pour afficher les noms sans les points, voici ce qu'il faut faire:

plot(a,b, type= "n") # nuage de points sans afficher les points
text(a,b,nom) # affichage des noms des points