Ejercicio 1

En un estudio sobre contaminación, se ha medido la concentración de un compuesto químico en el agua de una quebrada en dos momentos diferentes. Se ha obtenido una muestra de 10 observaciones en cada uno de los dos momentos.

Los datos son los siguientes:

concentracion1 <- c(0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4)
concentracion2 <- c(0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5)

Se desea saber si la concentración del compuesto ha aumentado significativamente entre los dos momentos.

PREGUNTA 1. ¿Cuál procedimiento estadístico puede usar para conocer si ocurrió un aumento significativo entre los dos momentos, o si la diferencia está dentro de la variación al azar entre las muestras?

PREGUNTA 2. Plantear una hipótesis nula y al menos una alterna.

Cálculos

  1. El estadístico de contraste es la diferencia de medias:
# concentraciones obtenidas en los dos momentos
todas_conc <- c(concentracion1, concentracion2)

# Diferencia observada entre los dos grupos
dif_observada <- mean(todas_conc[11:20]) - mean(todas_conc[1:10])
cat("Diferencia observada:", dif_observada, "\n")
## Diferencia observada: 0.1

PREGUNTA 3. ¿Por qué se resta concentración 2 menos concentración 1, y no al contrario?

  1. Aleatorización de los datos. Se permutan las concentraciones de los dos momentos en conjunto y se calcula la diferencia de medias. Se repite este proceso 10000 veces.
# Número de permutaciones para la prueba de aleatorización
n_permuta <- 10000

# Realizar permutaciones y calcular la diferencia entre los grupos
results <- replicate(n_permuta, {
  shuffled <- sample(todas_conc)
  mean(shuffled[11:20]) - mean(shuffled[1:10])
})

PREGUNTA 4. ¿Cuántos valores tiene el objeto results?

  1. El valor-p nos indica la probabilidad de observar una diferencia tan extrema como 0.1 (o más extrema) si no hubiera diferencia entre las mediciones de concentración, \(H_0: [conc. 2] - [conc. 1]= 0\)
# Calcular el valor-p
p_valor <- sum(results >= dif_observada) / n_permuta
p_valor
## [1] 0.2451

PREGUNTA 5. ¿Cuál es el valor-p máximo que se acepta generalmente para concluir que es seguro rechazar la hipótesis nula?

Visualización

Gráficamente, la distribución de las diferencias de medias con la permutación es la siguiente:

library(ggplot2)
ggplot(data.frame(results = results), aes(x = results)) +
  geom_histogram(binwidth = 0.05, fill = "lightblue", color = "black") +
  geom_vline(xintercept = dif_observada, color = "red", linetype = "dashed") +
  labs(x = "Diferencia en Medias", y = "Frecuencia")

# Imprimir resultados
cat("Diferencia observada:", dif_observada, "\n")
## Diferencia observada: 0.1
cat("P-value:", p_valor, "\n")
## P-value: 0.2451

PREGUNTA 6. Disminuya el ancho de los “bins”, cambie el color de relleno de las barras, cambie la línea roja entrecortada a una continua.

PREGUNTA 7. Escriba una leyenda descriptiva de la gráfica (Figura 1. Histograma de …)

Interpretación de los resultados

PREGUNTA 8. Interprete los resultados y concluya sobre si hay o no diferencias en la concentración del contaminante entre los dos momentos de medición.

Ejercicio 2

Queremos conocer si hubo diferencias entre la distribución de las frecuencias de valores de medidas de ozono (ppm) de los meses de mayo a junio y los meses de julio a septiembre de 1973, en la ciudad de Nueva York.

Datos

Utilizarán datos del paquete datasets de R. En particular, utilizarán el conjunto de datos airquality, el cual contiene la variable de interés: Ozone.

library(datasets)
data(airquality)
head(airquality)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

PREGUNTA 1. ¿Cuál es el uso del comando head?

Selección de los dos grupos de datos

Como queremos comparar las distribuciones de la variable en dos periodos de tiempo (mayo-junio y julio-septiembre), deberán extraer los datos para cada periodo, utilizando la variable “Month” como clasificador.

# Datos de ozono para mayo-junio
ozono_may_jun <- airquality$Ozone[airquality$Month %in% c(5, 6)]

# Datos de ozono para julio-septiembre
ozono_jul_sep <- airquality$Ozone[airquality$Month %in% c(7, 8, 9)]

PREGUNTA 2. Calcular la media de la concentración de ozono en cada período

Calculo del Intervalo de Confianza con “bootstrapping”

Para estimar el intervalo de confianza para la media de la variable Ozone en los dos períodos, se utilizará la técnica de “bootstrapping”. En este caso, se realizarán 10000 remuestreos con reemplazo de los datos originales y se calculará la media de la variable Ozone en cada remuestreo.

library(boot)
# bootstrapping para mayo-junio
boot_may_jun <- boot(ozono_may_jun, statistic = function(data, indices) {
  return(mean(data[indices], na.rm = TRUE))
}, R = 10000)

# bootstrapping para julio-septiembre
boot_jul_sep <- boot(ozono_jul_sep, statistic = function(data, indices) {
  return(mean(data[indices], na.rm = TRUE))
}, R = 10000)

# Calcular el intervalo de confianza de cada período
boot_ci_may_jun <- boot.ci(boot_may_jun, type = "basic")
boot_ci_jul_sep <- boot.ci(boot_jul_sep, type = "basic")

# print results in a table
boot_ci_may_jun$basic[4:5]
## [1] 17.47102 31.25881
boot_ci_jul_sep$basic[4:5]
## [1] 41.74784 56.78224

PREGUNTA 3. Elaborar una tabla con las siguientes columnas: “Periodo”, “Límite Inferior CI”, “Media”, “Límite Superior CI”. La tabla debe llevar su leyenda descriptiva en la parte superior (Tabla 1. Intervalo de confianza para ….)

Visualización de los resultados

Visualizar los intervalos de confianza de las medias de ozono en los dos periodos, utilizando un gráfico de caja para cada período, e indicando la media con un punto rojo.

Primero, se creará un data frame con los datos separados por periodo de acuerdo a una variable “periodo”.

# Crear un data frame con los datos separados por periodo
library(tidyr)
library(dplyr)
ozono_df <- bind_rows(
  data.frame(
    periodo = "Mayo-Junio",
    ozono = ozono_may_jun
  ),
  data.frame(
    periodo = "Julio-Septiembre",
    ozono = ozono_jul_sep
  )
) %>%
  drop_na()  # tidyr's way to remove NA values

PREGUNTA 4. El ‘data frame’ ozono_df ¿cuántas columnas (variables) tiene y de que tipo son?

Ahora vamos a crear un gráfico de caja para visualizar los intervalos de confianza de las medias de ozono en los dos periodos.

library(ggplot2)
# Extract confidence intervals from boot.ci objects
ci_may_jun <- boot_ci_may_jun$basic[4:5]  # This gets the lower and upper bounds
ci_jul_sep <- boot_ci_jul_sep$basic[4:5]

# Create a data frame with the confidence intervals
ci_df <- data.frame(
  periodo = c("Mayo-Junio", "Julio-Septiembre"),
  lower = c(ci_may_jun[1], ci_jul_sep[1]),
  upper = c(ci_may_jun[2], ci_jul_sep[2])
)
ggplot(ozono_df, aes(x = factor(periodo, levels = c("Mayo-Junio", "Julio-Septiembre")), y = ozono)) +
  geom_boxplot(fill = "lightblue", alpha = 0.5) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 3, fill = "red") +
  geom_errorbar(data = ci_df,
                aes(y = (lower + upper)/2, ymin = lower, ymax = upper),
                width = 0.3,        # made slightly wider
                color = "darkred",
                linewidth = 1.2,        # made slightly thicker
                alpha = 0.8) +
  labs(
       x = "Periodo", 
       y = "Concentración de ozono") +
  theme_bw()  # optional: uses a different theme

PREGUNTA 4. Elaborar una leyenda descriptiva para la gráfica (Figura 2. Gráfico de caja …). Las líneas horizontales rojas representan los intervalos de confianza en cada periodo.

PREGUNTA 5. Explique por qué el intervalo de confianza es mucho menor que la dispersión de los datos en el gráfico de caja.

PREGUNTA 6. Interprete los resultados y concluya sobre si hay o no diferencias en la concentración de ozono entre los dos periodos.

PREGUNTA 7. Si encontró diferencias entre los dos períodos, indique alguna causa de esa diferencia en la concentración de ozono en la ciudad

Ejercicio 3

Datos y asignación

En una población de 487 semillas de la especie Thespesia populnea, la longitud ápice-base de las semillas tiene una 𝜇 = 10.15 mm y una 𝜎 = 1.60 mm. Asumiendo una distribución normal de los datos, complete lo que se pide a continuación (debe presentar los códigos utilizados en cada caso, excepto el de la gráfica):

PREGUNTA 1. ¿Cuántas semillas tienen una longitud mayor de 11 mm?

PREGUNTA 2. ¿Cuál es la probabilidad de que una semilla seleccionada al azar tenga una longitud mayor de 11 mm?

PREGUNTA 3. Construya una gráfica de la distribución normal de los datos, sombreando el área por debajo de 11 mm. Nota: ver el código en el archivo dist-normal.Rmd para la gráfica de la distribución normal.

PREGUNTA 4. ¿Cuál es la probabilidad de que una semilla seleccionada al azar tenga una longitud entre 9 y 11 mm?

PREGUNTA 5. De la población queremos extraer las 100 semillas más grandes.  ¿Cuál es el tamaño menor aceptable de semilla para seleccionar las 100 más grandes?