Los datos que aparecen en el fichero p1-robles.csv
se
refieren a un estudio realizado sobre un robledal cercano a una planta
industrial, parte de los cuales se visualizan en la tabla. Se han
seleccionado robles
Sobre cada árbol se han medido las concentraciones (mg/kg) de ocho elementos químicos en sus hojas:
Instrucciones:
mi_url = "http://www3.uah.es/marcos_marva/CursoAmbientales/practicas/datos/p1-robles2019.csv"
robles = read.table(file = mi_url, sep = ";", header = TRUE, dec ="," )
con esto has creado la tabla (data.frame, en la jerga de R)
robles
que contiene los datos arriba mencionados
Clasifica las variables del estudio en cualitativas, cuantitativas discretas y cuantitativas continuas.
Cualitativas nominales son variadad
, zona
y
tratamiento
. Cuantitativas discretas no hay, y continuas
son todas las concentraciones de los 8 elementos químicos.
¿Hay alguna variable cualitativa ordinal?
No, ninguna.
¿Cuántos robles hay de cada variedad?
La tabla de frecuencias absolutas nos dice Cuántos robles hay de cada variedad
table(robles$Variedad)
##
## A B
## 14 24
¿Qué porcentaje de los robles estudiados pertenecen a la variedad B?
El porcentaje se obtiene de la tabla de recuencias relativas
n = nrow(robles)
table(robles$Variedad)/n
##
## A B
## 0.3684211 0.6315789
que es la tabla en la que cada una de las frecuencias absolutas está dividida entre el total de datos. Esto da la proporción (tanto por uno) de robles de cada tipo. Al multiplicar por 100 se obtiene el tanto por ciento.
Construye el diagrama de barras de la variable
Zona
e interpreta los resultados
Para construir el diagrama de barras se usa
barplot(table(robles$Zona),
col = "green",
main = "Ubicación por zonas",
xlab = " Zona",
ylab = "Frecuencia")
se observa que donde más robles hay es en la zona 2, luego en la 4, en la 1 y en la 2. Para obtener valores exactos (número de robles) es preferible calcular la tabla de frecuencias aboslutas
table(robles$Zona)
##
## 1 2 3 4
## 8 12 7 11
Calcula la media, la mediana y el histograma de la variable
Nitrogeno
. Comenta los resultados.
La media es
mean(robles$Nitrogeno)
## [1] 3.293737
La mediana
median(robles$Nitrogeno)
## [1] 3.2895
y el histograma
hist(robles$Nitrogeno,
col = "brown",
main = "Concentración Nitrógeno ",
xlab = "mg/kg",
ylab = "Número de robles")
Se observa que la distribuión de los datos es unimodal y muy simétrica, lo que es totalmente coherente con el hecho de que la media y la mediana sean prácticamente iguales.
Calcula la media, la mediana y el histograma de la variable
Hierro
. Comenta los resultados.
En este caso la media es
mean(robles$Hierro)
## [1] 0.02989474
La mediana
median(robles$Hierro)
## [1] 0.0145
y el histograma
hist(robles$Hierro,
col = "orange",
main = "Concentración de Hierro",
xlab = "mg/kg",
ylab = "Frecuencia")
La concentración de hierro varía de 0 a 0.07, aunque ningún individuo tiene concentraciones de hierro entre 0.03 y 0.05. De hecho, los valores del hierro se agrupan en dos zonas: los que tienen concentraciones menores de 0.03 y los que las tienen entre 0.05 y 0.07. Este hecho sugiere la existencia de dos grupos de robles, aunque de momento no tenemos explicación. Es decir, desconocemos si este hecho se relaciona con el comportamiento de alguna otra variable.
La distribuión de los datos sigue siendo unimodal, pero es muy asimétrica; el gráfico incluso sugiere la existencia de dos grupos. La media es mayor (casi el doble) que la mediana, lo que se explica por la asimetréa (a la derecha) de los datos. De hecho, la media (approx 0.03) está en una zona en la que hay muy pocos datos, por lo que no resulta muy descriptiva del conjunto de datos del que se calcula.
Considera la variable Hierro
, calcula su
histograma y su boxplot. Compara lo que te dice cada una de las
figuras.
par(mfrow = c(1,2))
hist(robles$Hierro,
main = "Concentración de Hierro",
xlab = "mg/kg",
ylab = "Frecuencia")
boxplot(robles$Hierro,
main = "Concentración de Hierro",
ylab = "mg/kg")
par(mfrow = c(1,1))
En el histograma se aprecia de forma evidente que los datos están
agrupados en dos bloques. No hay ningún roble con una concentración de
Hierro
entre 0.03 y 0.05.
En el boxplot esto no es tan evidente (aunque algo se intuye). Se observa una distribución no uniforme de los datos: están muy concentrados por debajo de la mediana (bigote inferior próximo a la caja y mitad inferior de la caja muy estrecha) y por encima del tercer cuartil (bigote superio próximo a la caja). Están muy dispersos entre la mediana y el tercer cuartil (mitad superior de la caja).
Si sobreimpresionamos los valores en el boxplot
boxplot(robles$Hierro,
main = "Concentración de Hierro",
ylab = "mg/kg")
stripchart(robles$Hierro,
method = "jitter", add = TRUE,
pch=19, col= "red", cex=0.5, vertical = TRUE)
se evidencia la no homogeneidad en la distribución de los datos y el
hecho de que ningún roble presenta una concentración de
Hierro
entre 0.03 y 0.05.
Cosas de R: fíjate en que en stripchart
el argumento vertical
vale TRUE
. Por defecto,
el boxplot se representa verticalmente, pero los puntos horizontalmente
(no sólo se usan con el boxplot, claro). Por eso hay que añadir, o bien
en boxplot
el argumento horizontal = TRUE
, o
bien en stripchart
el argumeto
vertical = TRUE
. Si haces las dos cosas simultaneamente,
seguirás sin ver los puntos sobre el boxplot.
Calcula los cuartiles de la variable Hierro
e
interpretalos.
quantile(robles$Hierro)
## 0% 25% 50% 75% 100%
## 0.0070 0.0110 0.0145 0.0590 0.0630
Quiere decir que
¿Entre qué valores se mueve el 80% central de la muestra
respecto de la variable Magnesio
? Se trata de los
valores que están por encima del percentil 10 y por debajo del percentil
90
quantile(robles$Magnesio, probs = c(0.1, 0.9))
## 10% 90%
## 0.2949 0.4881
Construye una tabla de frecuencias para la variable
Hierro
con 8 intervalos de clase entre 0 y 0.08.
Para calcular la tabla de frecuencias absolutas primero hay que definir los extremos de los subintervalos.
(cortes = seq(from = 0, to = 0.08, length.out = 9))
## [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08
A continuación, asigna a cada valor de la variable
Hierro
la clase a la que pertenece
(clases = cut(robles$Hierro, breaks = cortes, include.lowest = TRUE))
## [1] (0.05,0.06] (0.05,0.06] (0.05,0.06] (0.05,0.06] (0.06,0.07] (0.02,0.03]
## [7] (0.05,0.06] (0.06,0.07] (0.05,0.06] (0.05,0.06] (0.01,0.02] (0.01,0.02]
## [13] (0.01,0.02] (0.01,0.02] [0,0.01] (0.01,0.02] (0.01,0.02] (0.01,0.02]
## [19] (0.01,0.02] (0.01,0.02] [0,0.01] [0,0.01] (0.02,0.03] (0.06,0.07]
## [25] (0.06,0.07] (0.05,0.06] (0.06,0.07] (0.05,0.06] (0.01,0.02] [0,0.01]
## [31] (0.01,0.02] (0.01,0.02] (0.01,0.02] [0,0.01] [0,0.01] [0,0.01]
## [37] [0,0.01] [0,0.01]
## 8 Levels: [0,0.01] (0.01,0.02] (0.02,0.03] (0.03,0.04] ... (0.07,0.08]
Finalmente, recoger todo esto en una tabla
table(clases)
## clases
## [0,0.01] (0.01,0.02] (0.02,0.03] (0.03,0.04] (0.04,0.05] (0.05,0.06]
## 9 13 2 0 0 9
## (0.06,0.07] (0.07,0.08]
## 5 0
¿Cuántos robles tienen una concentración de
Hierro
entre 0.05 y 0.06? Se observa en la tabla
que hay 9
¿Qué porcentaje de robles tiene una concentración menor o igual que 0.06? Hay que sumar la el total de robles con una concentración menor o igual que 0.06 y luego dividir entre el total de robles (y multiplicar por 100, claro)
((9+13+2+9)/n)*100
## [1] 86.84211
Otra opción ión directa es usar la función cumsum()
.
(tablaAcumulada = cumsum(table(clases)))
## [0,0.01] (0.01,0.02] (0.02,0.03] (0.03,0.04] (0.04,0.05] (0.05,0.06]
## 9 22 24 24 24 33
## (0.06,0.07] (0.07,0.08]
## 38 38
para obtener la tabla de frecuencias acumuladas y, a continuación calcular la tabla de frecuencias relativas acumuladas
tablaAcumulada/nrow(robles)
## [0,0.01] (0.01,0.02] (0.02,0.03] (0.03,0.04] (0.04,0.05] (0.05,0.06]
## 0.2368421 0.5789474 0.6315789 0.6315789 0.6315789 0.8684211
## (0.06,0.07] (0.07,0.08]
## 1.0000000 1.0000000
Representa un histograma para la variable Hierro
agrupando los valores en 6 clases de la misma longitud (entre 0 y 0.08).
Explica el resultado y compáralo con el otro histograma
calculado
Adapta el comando que has usado antes para agrupar la variable
Hierro
en 8 clases al caso de 6 clases
cortes = seq(from = 0, to = 0.08, length.out = 7)
hist(robles$Hierro,
col = "gray",
breaks = cortes,
main = "Concentración de hierro", xlab = "mg/kg", ylab = "Número de robles")
Aparentemente hay menos barras (4) que clases (hemos definido 6), lo
que sucede es con esta nueva forma de agrupar los robles en clases hay 2
clases vacías (ningún roble presenta una concentración de
Hierro
dentro de dichas clases).
Observa que los histogramas son diferentes; resumir datos hace que perdamos información, y no siempre nos daremos cuenta.