Gráficos en R (Andrés Mellado)

Download Report

Transcript Gráficos en R (Andrés Mellado)

Gráficos en R
Seminario CEH-CEDEX
21-22 Febrero, 2011
¿Porqué los gráficos?
1. Simplificar lo tedioso y lo complejo.
2. Ayuda visual. Concordante con los ojos.
3. Más accesible que una tabla.
4. Permite entender y memorizar mejor.
(William Playfair, pionero de la estadística gráfica)
¿Cuándo utilizar gráficos?
•Datos < 20, presentar en una tabla.
•Si hay que aclarar un gráfico con números, utilizar tabla.
•Pero algunos autores discuten que la apariencia es importante…
•Tufte presenta un índice para medir la cantidad de información
irrelevante en un gráfico:
O el % de tinta del gráfico que puede ser borrado sin afectar los datos
¿Qué hay que pedir a un gráfico?
Entendibilidad
1. ¿Permite el gráfico visualizar las relaciones entre las variables?
2. ¿Interactúan los elementos (color, tamaño…) en el gráfico para maximizar
nuestra percepción de las relaciones entre las variables?
Claridad
1. ¿Son los elementos del gráfico claramente distinguibles?
2. ¿Son los elementos más importantes del gráfico visualmente prominentes?
Consistencia
1. ¿Son los elementos de los gráficos consistentes en gráficos anteriores?
2. ¿Hay nuevos elementos que requieren una descripción adicional?
¿Qué hay que pedir a un gráfico?
Eficiencia
1. ¿los elementos del gráfico representan eficientemente los datos?
2. ¿Hay elementos en el gráfico que sirven a más de un propósito?
Necesidad
1. ¿Es el gráfico útil para representar estos datos?
2. ¿Es cada elemento en el gráfico necesario?
Confiabilidad
1. ¿Están los datos adecuadamente colocados en la región de datos?
2. ¿Están los datos representados adecuadamente por la escala?
Gráficos distorsionados
• Un gráfico no distorsiona si la representación visual de los datos es
consistente con la representación numérica
• Intrusión de diseñadores artísticos, tienden a llenar los gráficos de
elementos decorativos e inútiles que distraen, ya que piensan que los
datos son aburridos. Esto ocurre en periódicos y revistas del kiosco.
• Gráficos tendenciosos. Ver en televisión, dependiendo del canal
(elección de colores llamativos, posiciones relevantes, formas
diferentes...)
Gráficos distorsionados
Gráficos distorsionados
Gráficos distorsionados
¡¡cuidado con los gráficos que se nos
presentan!!!
Leer bien las escalas y las variables
presentadas.
Gráficos circulares (Pie Charts)
Común entre personas no profesionales en estadística
Si en muchas de las situaciones donde se usan se suprimieran
se ahorrarían muchas hojas de papel.
A veces se presenta un gráfico de pastel para mostrar que en
una muestra el 50% son hombres y el 50% mujeres (?!?!?!?)
Hombres
Mujeres
Hombres
Mujeres
Gráficos circulares (pie charts)
read.table("C:/AMDDATOSR/embalses2009.txt", header=T)-> emb2009;
attach(emb2009)
table (tipo) = tipotable
pie (tipotable, col=c(1:8), main= " Tipos Embalses")
Tipos Embalses
7
9
1
13
10
12
11
Gráficos de barras
0
500
1000
1500
tN <- table(Ni <- stats::rpois(10000, lambda=5))
r <- barplot (tN, col=rainbow(20))
lines (r, tN, type='h', col='red', lwd=2)
0
2
4
6
8
10
12
14
Boxplot o Caja de Tukey
read.table("C:/AMDDATOSR/INDAGUAFLASH.txt", header=T)-> INDAGUAFLASH
attach(INDAGUAFLASH)
50
100
150
200
boxplot ( IBMWP ~ cuenca, col=c("yellow","blue" , "green","red" ))
ALEGRIA
ENXOE
FLUMEN
SAVE
Boxplots o Cajas de Tukey
Podemos añadir más modificaciones:
boxplot ( IBMWP ~ cuenca, col=c("yellow","blue" , "green","red" ),
notch = TRUE, main = "IBMWP por cuencas", ylab="IBMWP",
xlab="cuenca", varwidth=T)
100
50
IBMWP
150
200
IBMWP por cuencas
ALEGRIA
ENXOE
FLUMEN
cuenca
SAVE
Histogramas
# Generamos 100 datos aleatorios de una Chi2
x <- rchisq(100, df = 4)
hist(x, freq = FALSE, nclass=9, ylim = c(0, 0.2),col=4)
0.10
0.05
0.00
Density
0.15
0.20
Histogram of x
0
5
10
x
15
Histogramas
#Comparemos con la funcion de probabilidad Chi2
curve (dchisq (x, df = 4), col = 2, lty = 2, lwd = 2, add = TRUE)
0.10
0.05
0.00
Density
0.15
0.20
Histogram of x
0
5
10
x
15
Histogramas
read.table("C:/AMDDATOSR/embalses2008.txt", header=T)->
emb2008; attach(emb2008)
hist (area, breaks = 15, ylab="nº embalses", xlab="superficie (Ha)",
main="histograma de superficie de embalses", label=T,
col=(palette(gray(1-seq(0,1,len=8)))))
20
10
0
nº embalses
30
40
histograma de superficie de embalses
0
1000
3000
superficie (Ha)
5000
Diagramas de densidad de Kernel
density (IBMWP) -> densibmwp
plot (densibmwp, main= "Densidad índice IBMWP", xlab= "IBMWP",
ylab= " densidad",xlim=c(0,300))
polygon (densibmwp, col=1)
0.004
0.000
densidad
0.008
Densidad índice IBMWP
0
50
100
150
IBMWP
200
250
300
Representando 2 variables
#EJEMPLO: DISPERSIÓN
read.table ("C:/AMDDATOSR/INDAGUAFLASH.txt", header=T)-> INDAGUAFLASH
attach(INDAGUAFLASH)
20
30
0
10
20
30
40
head (INDAGUAFLASH)
20
30
5 10
100 150 200
5 10
20
NFAM
50
IBMWP
10
20
IASPT
0
plot (INDAGUAFLASH[,3:6], col=3,
pch=19)
30
40
cuenca SITE IVAM NFAM IBMWP IASPT
1 ALEGRIA ALE-1 4.00 23 111 4.83
2 ALEGRIA ALE-2 4.63 28 132 4.71
3 ALEGRIA ALE-5b 6.82 21 113 5.38
4 ALEGRIA ALE-10 4.00 19 81 4.26
5 ALEGRIA ALE-15 5.40 26 138 5.31
6 ALEGRIA ALE-15b 6.82 13 87 6.69
30
0
5 10
IVAM
0
5 10
20
30
50
100 150 200
Representando 2 variables
#EJEMPLO: DISPERSIÓN
read.table ("C:/AMDDATOSR/INDAGUAFLASH.txt", header=T)-> INDAGUAFLASH
attach (INDAGUAFLASH)
5 15
plot (INDAGUAFLASH[,3:6], col=cuenca,
pch=19)
30
2
4
IVAM
150
5 15
NFAM
50
IBMWP
3 4 5 6
cuenca SITE IVAM NFAM IBMWP IASPT
1 ALEGRIA ALE-1 4.00 23 111 4.83
2 ALEGRIA ALE-2 4.63 28 132 4.71
3 ALEGRIA ALE-5b 6.82 21 113 5.38
4 ALEGRIA ALE-10 4.00 19 81 4.26
5 ALEGRIA ALE-15 5.40 26 138 5.31
6 ALEGRIA ALE-15b 6.82 13 87 6.69
3 4 5 6
6
head (INDAGUAFLASH)
30
IASPT
2
4
6
50
150
Representando 2 variables
#EJEMPLO: SEN(X)
#Preparamos los datos, un vector x (secuencia de 41 elementos de 1 a 2pi)
#y otro vector y = seno(x)
0.0
-0.5
-1.0
y
plot (x, y, col="red", cex=2)
curve (sin, add=T, lwd=2)
0.5
1.0
x <- seq ( from=1, to=2*pi, length=41 )
y <- sin(x)
1
2
3
4
x
5
6
Representando 2 variables
Ciclos de atributos de símbolos:
3 colores (col) y 3 tamaños (cex):
-1.0
-0.5
0.0
y
0.5
1.0
1.5
color <- c("red", "blue", "green")
plot (x, y, col=color, cex=1:3, lwd=4, ylim = c(-1,1.5))
lines (x,y, lwd=2)
1
2
3
4
x
5
6
Representando 2 variables
EJEMPLO GRAFICOS PERFILES PROFUNDIDAD:EMBALSE DE BÚBAL
read.table("C:/AMDDATOSR/R perfiles embalses2009.txt", header=T)>perf2009
attach(perf2009)
#Dividimos nuestra matriz por el factor código de embalse, COD,
split (perf2009,COD)-> perf2009
attach(perf2009$BUB)
head(perf2009$BUB)
COD DEP COND DO Temp pH
126 BUB 0.0 147 10.37 19.40 8.34
127 BUB 1.0 146 10.66 18.59 8.39
128 BUB 2.0 146 10.44 18.44 8.42
129 BUB 2.9 146 10.51 18.27 8.44
130 BUB 4.0 146 10.57 18.18 8.47
131 BUB 5.0 141 11.25 17.48 8.44
Representando 2 variables
EJEMPLO GRAFICOS PERFILES PROFUNDIDAD:EMBALSE DE BÚBAL
Ejemplo, perfil de temperatura:
plot (Temp, DEP, type="o", col = "red", main= "Embalse de Búbal",
cex.main=.8, pch = 20, cex = 1, ylab="profundidad (m)", xlab="temperarura
(ºC)", font=1, cex.axis=.7, cex.lab=.8, lwd=.7, col.axis="black", ylim=c(53,0),
mgp=c(1.5, .6, 0))
axis ( 3, cex.axis=.7, tck=-.03, mgp=c(1.5,.6,0))
#savePlot ("BUBtemp",type = "emf")
Representando 2 variables
EJEMPLO GRAFICOS PERFILES PROFUNDIDAD:EMBALSE DE BÚBAL
Ejemplo, perfil de temperatura:
Embalse de Búbal
10
12
14
16
18
8
10
12
14
16
18
20
30
40
50
profundidad (m)
10
0
8
temperarura (ºC)
Gráficos tridimensionales
EJEMPLO: Visualizar un MDT
# (3) Visualizing a simple DEM model
z <- 2 * volcano
x <- 10 * (1:nrow(z))
y <- 10 * (1:ncol(z))
persp (x, y, z, theta = 135, phi = 30, col = "green3", scale = FALSE, ltheta = 120, shade = 0.75, border = NA, box = FALSE)
Gráficos tridimensionales
EJEMPLO:
Sinc(
8
6
4
2
0
-2
-10
r)
10
5
Y
0
-5
X0
-5
5
10-10
Gráficos Multivariantes
GRAFICOS DE ESTRELLAS (función star)
Ejemplo, ÍNDICES BIÓTICOS EN LAS ESTACIONES Aguaflash:
read.table ("C:/AMDDATOSR/INDAGUAFLASH.txt", header=T)-> INDAGUAFLASH
attach(INDAGUAFLASH)
stars (INDAGUAFLASH[,3:6], label=SITE ,cex=0.5, key.loc = c(18, 2.3))
ALE-1
ALE-2
ALE-5b
ALE-10
ALE-15
ALE-15b
ALE-16b
ALE-17
ALE-20
ALE-31
ENXOE1_1
ENXOE1_2
ENXOE2_1
ENXOE2_2
ENXOE3
ENXOE6_3
ENXOE6_3b
ENXOE7_1
ENXOE7_2
ENXOE7_3
ENXOE7_4
ENXOE7_5
FLU-1
FLU-2
FLU-9
FLU-4
FLU-4b
FLU-7
FLU-6
FLU-8
FLU-10
FLU-5
FLU-3
SAVE-1
SAVE-2
SAVE-3
SAVE-4
SAVE-6
SAVE-7
SAVE-8
SAVE-9
SAVE-10
NFAM
IBMWP
SAVE-11
SAVE-12
IVAM
IASPT
Gráficos Multivariantes
GRAFICOS DE ESTRELLAS (función star)
Ejemplo, GRUPOS FITOPLANCTON POR TIPOS EMBALSES DEL EBRO:
read.table("C:/AMDDATOSR/fitotipos.txt", header=T)->fitotipos
attach(fitotipos)
stars (fitotipos, label=type ,cex=0.5,
draw.segments=TRUE, key.loc=c(8, 2))
Gráficos Multivariantes
GRAFICOS DE ESTRELLAS (función star)
Ejemplo, GRUPOS FITOPLANCTON POR TIPOS EMBALSES DEL EBRO:
read.table("C:/AMDDATOSR/fitotipos.txt", header=T)->fitotipos
attach(fitotipos)
1
7
9
10
11
12
Chryso
13
Chloro
Conju
Baci
Crypto
Eugle
Cyano
Dino
Gráficos de Regresión
Modelos Lineales Generalizados (funciones: glm, abline, plot)
Ejemplo: IASPT ~ IVAM (datos INDAGUAFLASH)
4
3
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.8479 0.5292 3.492 0.00119 **
IVAM
0.5800 0.1059 5.478 2.56e-06 ***
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
2
summary (model)
IVAM
5
6
7
glm (IASPT ~ IVAM)-> model
plot (IASPT, IVAM, pch=19)
abline (model, col=4, lwd=2)
3
4
5
IASPT
6
Gráficos de Regresión
Modelos Lineales Generalizados (funciones: glm, abline, plot)
Ejemplo: IASPT ~ IVAM (datos INDAGUAFLASH)
Normal Q-Q
2
Residuals vs Fitted
4.5
5.0
1
0
-1
5.5
-2
18
-1
0
2
Predicted values
Theoretical Quantiles
Scale-Location
Residuals vs Leverage
0.5
0.5
1
11
0
1.0
Std. Pearson resid.
2
31
4218
25
Cook's
31
3.0
1
-1
1.5
4.0
0.0
Std. deviance resid.
3.5
31
-2
3.0
par(mfrow = c(2,2))
plot (model)
-2
Std. deviance resid.
1
0
-1
31 18
-2
Residuals
glm (IASPT~IVAM)-> model
plot (IASPT, IVAM, pch=19)
abline (model, col=4, lwd=2)
42
2
42
3.5
4.0
4.5
5.0
Predicted values
5.5
0.00
0.05
0.5
distance
0.10
Leverage
0.15
Gráficos de Regresión
Modelos Lineales (funciones: glm, lm, abline, plot). Intervalos de confianza.
Ejemplo: IASPT ~ IVAM (datos INDAGUAFLASH)
30
10
20
Adjsted R-squared: 0.3819
0
Chla (µg/L)
lm (chla~pt)-> model
plot (pt, chla, pch=19, xlab ="P total (µg/L) ", ylab= "Chla (µg/L)")
abline (model, col=4, lwd=2)
newx <- seq (min(pt), max(pt), 0.01)
c <- predict (model, newdata=data.frame (pt=newx), interval="prediction")
d <- predict (model, newdata=data.frame (pt=newx), interval="confidence")
lines (newx, c[,2], lty=2, col="grey")
lines (newx, c[,3], lty=2, col="grey")
lines (newx, d[,2], lty=2, col= "red")
lines (newx, d[,3], lty=2, col= "red")
text (20,30,"Adjsted R-squared: 0.3819")
40
read.table ("C:/AMDDATOSR/embalses2009.txt", header=T)-> emb2009
attach (emb2009)
0
20
40
P total (µg/L)
60
80
Gráficos de Clasificación
GRAFICOS DE CLUSTERS. DENDROGRAMAS (función agnes_paquete cluster)
Ejemplo jerárquico: UPGMA (tipos embalses ~ fitoplancton)
read.table("C:/AMDDATOSR/embalses2009.txt", header=T)-> emb2009; attach(emb2009)
agnes ( log (emb2009 [, 43:51]+2), method="average") -> UPGMA
plot (UPGMA, main="clasificación UPGMA embalses")
41
56
30
54
36
42
55
46
13
34
37
16
35
14
19
31
log(emb2009[, 43:51] + 2)
Agglomerative Coefficient = 0.72
9
38
15
26
27
33
17
47
53
29
21
39
52
6
4
43
18
57
5
32
50
28
23
44
24
25
3
49
0
2
7
48
1
45
20
2
11
22
12
8
4
40
51
Height
6
10
8
clasificación UPGMA embalses
Gráficos de Clasificación
GRAFICOS DE CLUSTERS
Ejemplo no jerárquico: K-Means (tipos embalses ~ fitoplancton)
read.table ("E:/AMDDATOSR/embalses2009.txt", header=T)-> emb2009
attach(emb2009)
emb2009 [,43:48] -> algasembalses
library (stats)
kmeans (algasembalses, 5, iter.max=100) -> kmemb2009
kmemb2009
K-means clustering with 5 clusters of sizes 1, 43, 2, 4, 7
Clustering vector:
[1] 2 2 2 2 2 2 2 5 2 3 2 2 2 2 2 2 5 2 2 2 2 4 5 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2
[39] 2 4 4 2 2 5 2 2 5 5 2 5 2 2 2 4 2 3 2
Gráficos de Clasificación
GRAFICOS DE CLUSTERS
Ejemplo no jerárquico: K-Means
#Ahora los podemos representar en un plano de ordenación, ej. PCA
library (ade4)
dudi.pca( log (algasembalses+1), scannf=F, nf=2)-> pca
pca
data.frame
1 $tab
2 $li
3 $l1
4 $co
5 $c1
nrow
57
57
57
6
6
ncol
6
2
2
2
2
content
modified array
row coordinates
row normed scores
column coordinates
column normed scores
plot (pca$li, pch=19, col=kmemb2009$cluster, cex=1.25)
Gráficos de Clasificación
GRAFICOS DE CLUSTERS
Ejemplo no jerárquico: K-Means
as.factor (kmemb2009$cluster)-> kmgr
s.class ( pca$li, kmgr, cstar=T, cellipse=T, cpoint=.75, clabel=.6)
d=2
3
2
4
1
5
Gráficos de Ordenación
BIPLOTS DE ORDENACIÓN (ej. CCA: Análisis Canónico de Correspondencias)
función cca_paquete ADE4)
data (rpjdl)
millog <- log (rpjdl$mil + 1)
iv1 <- cca (rpjdl$fau, millog, scan = FALSE)
plot(iv1)
Gráficos de Ordenación
BIPLOTS DE ORDENACIÓN (ej. CCA: Análisis Canónico de Correspondencias)
función cca_paquete ADE4)
C.50
d = 0.2
d = 0.5
88
75
89
74
84
86
7977 71
80
82
72
85
87 78
91 83 76
68 63
67
50
81
150
65 69
94151
73
66
100 70
96
5562 54
64
135
90
105
104
97
35
101
93
131
133
143
106
53
136
51
146
102
56
92103 137
148
49
33
59
147154
52
138
140134
107
11
39
57
142
41
149 95132
958
61
60
44
139
168
164
163
167
170
175
169
34
156
177
110
176
46
31
174
173
159
180
42
141
181
109
153
158
172
38
171
43
10
3637
157
162
145
179
182
161
160
45
144
99
178
98
166
17
48
118
119
155
321329
165
127
115
117
152
12
25
108
113
128
124
19
47
120
123
28
16
30
114
24
121
122
111
112
125
20
27
26
22
126
14
15
116
3 18
130
21
129
23
40
57
8
6
21
4
C1
C2
C16
C8
(Intercept)
C.25
ROCH
Loadings
C4
d = 0.5
C.50
C.25
C1
C2
(Intercept)
C4
C8C16
ROCH
Scores and predictions
Correlation
d = 0.5
Axis2
SC
Axis8
Axis3
Axis4
Axis6
Axis5
Axis1
Axis7
POHP SU
SM
LM
SH
SO
CNEl
PP
SN
TM SS CA
LA
EC
CC
JT
OO
ST
PM
CH
MC
PB
PV
LS
EH
SP
TT
SE
PC
PR
AR
AA
UE
CB
FC
GG
ER
Rl
CP
MSOH
SBSA
PD
GT
AC
MO
Inertia axes
Species
OL
Eigenvalues
Gráficos de Ordenación
BIPLOTS DE ORDENACIÓN (ej. CCA: Análisis Canónico de Correspondencias)
función cca_paquete ADE4)
d=2
C.50
C1
OL
MOAC
GT
PD
OH
AR
C.25
SP
EH
MC
LA
PP
SO
El
CN
MS
SU
C2
UE
C4
C8
CA
LS
CH
SS
ROCH
CPRl
SA
FC
GG
ER
CBAA
SB
OOTM
SN
STJT
EC
PC
PM CC
PB
TT
PR
SEPV
SM
SH
LM
HP
PO
SC