Introducción.

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:

Puedes descargarlos desde aquí

mi_url = "http://www3.uah.es/marcos_marva/CursoAmbientales/practicas/datos/p1-robles2019.csv"
robles = read.table(file = mi_url, sep = ";", header = TRUE, dec ="," )
# quantile(robles$Hierro)

Ejercicio 1

  • Calcula la media y la cuasidesviación típica muestral de la variable Nitrogeno.

    Usaremos las funcioens mean y sd

    mean(robles$Nitrogeno)
    ## [1] 3.293737
    sd(robles$Nitrogeno)
    ## [1] 0.6415097
  • Repite el cálculo para los primeros 14 individuos de la tabla.

    Recuerda que 1:10 genera la sucesión 1, 2, 3,…, 10, y que los corchetes [] sirven para referirse a los elementos de un vector/tabla

    mean(robles$Nitrogeno[1:14])
    ## [1] 3.506857
    sd(robles$Nitrogeno[1:14])
    ## [1] 0.6564765
  • Repite el cálculo para los individuos que recibieron tratamiento. Ahora seleccionamos los individuos tales que Tratamiento == TRUE

    mean(robles$Nitrogeno[robles$Tratamiento == TRUE])
    ## [1] 3.256263
    sd(robles$Nitrogeno[1:14])
    ## [1] 0.6564765
  • Repite el cálculo anterior en función de la variable Zona. Comenta los resultados. Indicación: usa la función aggregate() Para no tener que repetir el cálculo 4 veces, usamos la función `aggregate()``:

    aggregate(robles$Nitrogeno ~ robles$Zona, FUN = mean)
    ##   robles$Zona robles$Nitrogeno
    ## 1           1         3.675000
    ## 2           2         3.300833
    ## 3           3         2.549857
    ## 4           4         3.482091

    Se aprecia que en las zonas 1, 2 y 4 las concentraciones medias son similares, y en la zona 3 es inferior.

    En el caso de la desviación típica muestral

    aggregate(robles$Nitrogeno ~ robles$Zona, FUN = sd)
    ##   robles$Zona robles$Nitrogeno
    ## 1           1        0.8000555
    ## 2           2        0.2664613
    ## 3           3        0.4316231
    ## 4           4        0.5848168

    La dispersión es dispar; de menor a mayor, zona 2, 3, 4 y 1.

  • A todo esto, ¿crees que la media es una buena medida de centralización para describir los datos?.

    Indicación: usa dos herramientas complementarias: una visual (boxplots) y otra numérica (el coeficiente de asimetría). Para este último hay que

    • Instalar un nuevo paquete de R: copia y ejecuta (sólo una vez) install.packages("EnvStats").
    • Carga el paquete en memoria (cada sesión en que uses esta función): library(EnvStats)
    • Usa la función skewness() para calcular el coeficiente de asimetría

    Queremos asegurarnos de que las submuestras son unimodales y simétricas. Podemos usar sendos boxplots para visualizar este hecho

    boxplot(robles$Nitrogeno ~ robles$Zona)
    stripchart(robles$Nitrogeno ~ robles$Zona, add = T, vertical = T)

    Su forma corrobora grosso modo que los datos sigen una campana de Gauss. Recuerda que para muestras elegidas al azar no podemos esperar observas simetrías perfectas.

    Si queda duda de la simetría, podemos calcular los coeficientes de simetría

    # Ejecuta esto sólo una vez
    # install.packages("EnvStats")
    library(EnvStats)
    ## Warning: package 'EnvStats' was built under R version 4.0.5
    ## 
    ## Attaching package: 'EnvStats'
    ## The following objects are masked from 'package:stats':
    ## 
    ##     predict, predict.lm
    ## The following object is masked from 'package:base':
    ## 
    ##     print.default
    aggregate(robles$Nitrogeno ~ robles$Zona, FUN = skewness)
    ##   robles$Zona robles$Nitrogeno
    ## 1           1        0.7681653
    ## 2           2       -1.6421193
    ## 3           3        0.1711374
    ## 4           4       -0.4269967

    Puede que R de algunos avisos (warnings); no les hagas caso.

    Se observa que todos los coeficientes están entre -2 y 2, que son los valores de referencia, lo que corrobora la primera conclusión (obtenida a partir de la inspección visual).

Ejercicio 2

¿Cuál es el valor mínimo que alcanza la variable Magnesio? ¿En qué individuo se observa? Indicación: usa la función which()

min(robles$Magnesio)
## [1] 0.267
which(robles$Magnesio == min(robles$Magnesio))
## [1] 34 35

Ejercicio 3

  • ¿Cuántas observaciones corresponden a robles con una concentración de Potasio mayor o igual que 2? Puedes recuperar los valores del Potasio de los robles que tienen más de 2 de Potasio

    robles$Potasio[robles$Potasio >= 2]
    ##  [1] 2.632 2.495 2.396 2.197 2.233 2.533 2.667 2.416 2.333 2.267 2.611 2.982
    ## [13] 2.833 2.050 2.566

    y, a continuación, calcular la longitud de dicho vector

    length(robles$Potasio[robles$Potasio >= 2])
    ## [1] 15

    Otra alternativa es comparar cada elemento del vector robles$Potasio con 2

    robles$Potasio >= 2
    ##  [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
    ## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [25] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE
    ## [37] FALSE  TRUE

    para obtener TRUEs y FALSEs según se cumpla o no esa condición. Recuerda que TRUE vale 1 y FALSE cero, con lo que sumas todos esos unos y ceros obtienes la cantidad deseada

sum(robles$Potasio >= 2)
## [1] 15
  • ¿Qué porcentaje de robles tiene una concentración de Potasio mayor o igual que 2

    Basta con dividir el número anterior entre el número total de robles y multiplicar por 100

    (sum(robles$Potasio >= 2)/nrow(robles)) * 100
    ## [1] 39.47368

Ejercicio 4

Ahora calcula la media de la variable Nitrogeno para aquellas observaciones en las que Potasio es mayor o igual que 2. Compárala con la media que has calculado en el anterior apartado. Haz lo mismo con la cuasidesviación típica. Basta con calcular ambas medias

mean(robles$Nitrogeno)
## [1] 3.293737
mean(robles$Nitrogeno[robles$Potasio >= 2])
## [1] 3.570467

en el segundo caso la media es ligeramente superior, y las cuasidesviaciones típicas

sd(robles$Nitrogeno)
## [1] 0.6415097
sd(robles$Nitrogeno[robles$Potasio >= 2])
## [1] 0.5133733

Ejercicio 5

A partir del boxplot de la variable Magnesio, ¿observas algún dato atípico? ¿Qué posición ocupa en la tabla?

boxplot(robles$Magnesio)

Sí, hay uno. Para calcular la posición que ocupa

pb = boxplot(robles$Magnesio)

which(robles$Magnesio == pb$out)
## [1] 17

Ejercicio 6

Representa los boxplots de la variable Magnesio para cada una de las zonas, ¿observas algún patrón?

boxplot(robles$Magnesio ~ robles$Zona)
stripchart(robles$Magnesio ~ robles$Zona, method = "jitter", col="blue", add=TRUE, pch = 21, vertical = T)

No olvides representar los puntos sobre los boxplots. Y sí, se observan ciertas tendencias:

  • En la zona 4 parece haber menos Magnesio.
  • En la zona 1 parece estar menos variabilidad.
  • Los valores más altos se encuentran en las zonas 2 y 3