• Aucun résultat trouvé

Contributions

Dans le document Brise Glace-R (ouvrir la voie aux pˆo (Page 65-68)

> 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 + )

Dans le document Brise Glace-R (ouvrir la voie aux pˆo (Page 65-68)