> mes.couleurs <- c("red", "blue", "goldenrod", "darkseagreen4")
> par(las = 1, mar = c(4, 4, 3, 2))
> plot(ufc.reduit$dbh.cm, ufc.reduit$height.m, xlab = "Diam. (cm)", + ylab = "Haut. (m)", col = mes.couleurs[ufc.reduit$species])
> legend("bottomright", legend = levels(ufc.reduit$species), col = mes.couleurs, + lty = rep(NULL, 4), pch = rep(19, 4), bty = "n")
Diam. (cm)
Haut. (m)
Figure 9.5 – Trac´e de la hauteur en fonction du diam`etre pour les arbres d’esp`eces les plus courantes rep´er´ees par la couleur.
9.6 Contributions
Les contributeurs `a Ront ´ecrit des paquetages qui facilitent la construction des graphiques. Nous allons explorer ici certains d’entre eux. Leur documentation est un d´efi car le code est en constante r´evision et d´eveloppement.
9.6.1 Treillis
Le treillis est un outil plutˆot formel de virtuosit´e graphique. Ils permettent une grande souplesse dans la production de graphiques conditionnels. L’impl´ementation du treillis dansRest nomm´ee lattice et elle est ´ecrite/maintenue par Deepayan Sankar.
On charge le paquetagelatticeau moyen de la fonctionrequire, comme c’est expliqu´e en d´etail Section4.5.
> require(lattice)
Le but delatticeest de simplifier la production de graphiques simples et de haute qualit´e permettant l’exploration de donn´ees multi-dimensionnelles.
Nous avons d´ej`a vu l’utilisation de ces graphiques dans le chapitre de l’ ´Etude de cas (chapitre 3) o`u nous avons trac´e la hauteur en fonction du diam`etre pour chaque esp`ece, ainsi que les distributions de diam`etre aussi pour chaque esp`ece. Nous pouvons obtenir d’autres graphiques utiles avec un minimum d’embaras, par exemple, en se concentrant sur les quatre esp`eces les plus prolifiques des donn´ees ufc (figure 9.6).
> ufc <- read.csv("../data/ufc.csv") # ufc est un data-frame
> ufc$diam.cm <- ufc$dbh/10 # diam est en cm
> ufc$haut.m <- ufc$height/10 # haut est en m`etres tres
> ufc$haut.m[ufc$haut.m < 0.1] <- NA
> ufc <- ufc[complete.cases(ufc), ]
> ufc$species[ufc$species %in% c("F", "FG")] <- "GF"
> ufc$especes <- factor(ufc$species)
> les.quatre <- levels(ufc$especes)[order(table(ufc$especes), decreasing = TRUE)][1:4]
Les panneaux dans la liste ci-dessous sont directement report´es sur la figure 9.6 et ne correspondent pas n´ecessairement
`
a la position de ce que vous verrez `a l’´ecran.
Panneau en haut `a gauche :
> densityplot(~diam.cm | especes, data = ufc,
+ subset = especes %in% les.quatre)
Panneau en haut `a droite :
> bwplot(diam.cm ~ especes, data = ufc, subset = especes %in% les.quatre) Panneau en bas `a gauche :
> histogram(~diam.cm | especes, data = ufc,
+ subset = especes %in% les.quatre)
Panneau en bas `a droite :
On aurait pu charger une image et utilisercontourplot()pour repr´esenter les courbes de densit´e (m3/ha).
diam.cm
Density
0.000 0.005 0.010 0.015 0.020 0.025 0.030
0 50 100
●●●●●
● ●●●●
●● ●
●●●●●●●●●●●●●●●● ●●●● ●●●●●●●●●● ●
●●● ●●● ● ●●●●●●
DF
●●
●●
●●
●●●●●●●●● ●●●● ●●●●●●●●●●●●●●●●● ●●●●●●●●
● ● ●●●●●●●●●●●●●●●●●●
● ●●●●●●●●●● ●●●●●● ●
●●●●●●● ●●●●● ●●●●●● ●●● ●●●●●●●●●●●●● ●
●
GF
●● ●
●● ● ●●●
● ● ●●●●● ●●●●● ● ●●
● ●
●●●●●●● ●
●●●●●●● ●●●●● ●●●●● ●●●●● ●● ●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●
●● ●●●●●●●●●●●●●●●●● ●●
●●●● ●●●●●● ●●●●● ●●●●●●●●● ●● ●●●●
WC
0 50 100
0.000 0.005 0.010 0.015 0.020 0.025 0.030
●●● ●●●●
● ●● ●●● ●● ●●●●●●●●●●● ●● ●
● ● ●
WP
diam.cm
20 40 60 80 100
DF GF WC WP
●
●
●
●
●
●
●●
●
●
●
●
●
●
diam.cm
Percent of Total
0 10 20 30 40
20 40 60 80 100 120
DF GF
WC
20 40 60 80 100 120
0 10 20 30 40 WP
Figure 9.6 – Exemple de trac´e lattice, montrant l’information sur le diam`etre conditionn´ee par esp`eces. Le panneau du haut `a gauche montre les courbes de densit´e empirique des diam`etres, le panneau d’`a cˆot´e montre des boˆıtes `a moustaches, en bas `a gauche, des histogrammes et son voisin est laiss´e vide pour les raisons ci-dessus.
Les graphiques produits parlatticesont hautement personnalisable. Par exemple, si nous devions tracer la hauteur en fonction de la hauteur pr´edite pour les six esp`eces de plus grand nombre d’arbres, utilisant le mod`ele d’attribution
9.6. CONTRIBUTIONS 67
`
a effets mixtes du chapitre 3, et ajouter quelques droites d’illustration au graphique, nous pourrions le faire avec le code ci-dessous. Tout d’abord, nous ajustons un mod`ele adapt´e et extrayons les pr´evisions, `a ˆetre utilis´es comme des attributions.
> require(nlme)
> require(nlme)
> hd.lme <- lme(I(log(height.m)) ~ I(log(dbh.cm)) * + species, random = ~I(log(dbh.cm)) | plot, + data = ufc)
> ufc$p.height.m <- exp(predict(hd.lme, level = 1))
> top.six <- levels(ufc$species)[order(table(ufc$species), + decreasing = TRUE)][1:6]
> require(MASS)
Ensuite nous construisons le graphique, en ajoutant une nouvelle fonction qui sera ex´ecut´ee dans chaque panneau.
Cette version produit un diagramme de dispersion repr´esent´e par des points, ajoute une diagonale 1:1, une droite de r´egression lin´eaire ajust´ee aux donn´ees du panneau et une courbe de lissage ajust´e local (loess) noire.
xyplot(height.m ~ p.height.m | species, data = ufc, + xlab = "Hauteur pr´edite (m)",
+ ylab = "Hauteur mesur´ee (m)", + panel = function(x, y) { + panel.xyplot(x, y)
+ panel.abline(0, 1, col = "blue", lty = 2) + panel.abline(lm(y ~ x), col = "red") + panel.abline(rlm(y ~ x), col = "purple") + panel.loess(x, y, col = "black")
+ },
+ subset = species %in% top.six
+ )
Hauteur prédite (m)
Hauteur mesurée (m)
10
Figure 9.7 – Un trac´e lattice de la hauteur mesur´ee en fonction de la hauteur pr´edite par esp`eces les plus fournies. La droite pointill´ee est la premi`ere diagonale, la rouge pleine est de r´egression robuste et la courbe noire de lissage loess.
Si vous ˆetes inquiet pour le panneau des m´el`ezes de l’ouest (WL), essayez le mˆeme exercice en utilisant une r´egression lin´eaire au lieu du mod`ele d’attribution `a effets mixtes ! Il faudrait faire les modifications suivantes des valeurs pr´edites :
> hd.lm <- lm(I(log(height.m)) ~ I(log(dbh.cm)) * species, data = ufc)
> ufc$p.height.m <- exp(predict(hd.lm))
On peut changer l’ordre des panneaux en utilisant l’optionindex.cond. On peut aussi ajouter d’autres commandes dans chacun d’eux.?xyplot est tr`es utile pour nous ici, il donne une information d´etaill´ee sur les diverses options et des exemples attractifs que l’on peut adapter `a son utilisation personnelle.
Le code source est toujours en d´eveloppement rapide. Par exemple, pour obtenir un trac´e en treillis avec des points, des droites de r´egression de meilleur ajustement et des lissages superpos´es nous n’avons besoin que du code suivant :
> xyplot(height.m ~ p.height.m | species, data = ufc, + xlab = "Hauteur pr´edite (m)",
+ ylab = "Hauteur mesur´ee (m)", + type = c("p", "r", "smooth"), + subset = species %in% top.six + )