8  Contrastes de hipótesis paramétricos de una y dos poblaciones

En esta práctica se muestra cómo realizar los principales constrastes de hipótesis parámetricos de una y dos poblaciones. En particular se muestran los siguientes contrastes:

También se muestra cómo calcular el tamaño muestral requerido para realizar un contraste de hipótesis con un nivel de significación y una potencia determinados.

8.1 Ejercicios Resueltos

Para la realización de esta práctica se requieren los siguientes paquetes:

library(tidyverse)
# Incluye los siguientes paquetes:
# - readr: para la lectura de datos.
# - dplyr: para el preprocesamiento y manipulación de datos.
# - purrr: para aplicar funciones a vectores.
library(broom) # para convertir las listas con los resúmenes de los modelos de regresión a formato organizado.
library(tidymodels) # para realizar contrastes de hipótesis en formato tidy.
library(pwr) # para el cálculo de tamaños muestrales.
library(knitr) # para el formateo de tablas.

broomdplyrknitrpwrreadrtidymodelstidyr

Si se va a usar Copilot para resolver los ejercicios se recomienda añadir el siguiente contexto al comienzo del script o al fichero r.instructions.md.

---
name: "Reglas de programación para R"
applyTo: "**/*.[rR], **/*.qmd"
---

## Reglas de programación para R

- Usar tidyverse para todas las tareas de preprocesamiento (dplyr/tidyr/readr/stringr/lubridate/forcats/purrr).
- Preferir tuberías con |> (o %>% si se usa en el archivo).
- Evitar la manipulación de datos en base R (merge, aggregate, subset) a menos que se solicite explícitamente.
- Mantener el código legible y usar verbos explícitos: select, mutate, summarise, group_by, pivot_longer/wider.
- Cuando no haya ambigüedad no antepongas el nombre del paquete a la función.
- En los nombres de variables y valores respetar el uso de mayúsculas y minúsculas (camelCase o snake_case) y ser consistente en todo el código.
- No generar nuevos data frames, ni modificar los asistentes, salvo cuando se indique explícitamente.
- Utiliza el prefijo `df_` para los nombres de los data frames.
- Organizar las salidas con la función tidy del paquete broom y mostrar solo las columnas relevantes (estimate, std.error, statistic, p.value).
- Mostrar los data frames o las tablas con la función kable del paquete knitr.
- Para gráficos usar ggplot2 y mantener un estilo limpio y profesional.

Ejercicio 8.1 Para averiguar si en una determinada población existen menos hombres que mujeres se plantea el siguiente contraste de hipótesis sobre la proporción de hombres que hay en la población:

\[\begin{align*} H_0 &: p=0.5\\ H_1 &: p<0.5 \end{align*}\]

Para ello se ha tomado una muestra aleatoria con reemplazamiento de 10 personas.

  1. Suponiendo cierta la hipótesis nula, ¿qué distribución sigue la variable que mide el número de hombres en la muestra de tamaño 10?

    Suponiendo cierta la hipótesis nula, es decir, que la proporción de hombres en la población es 0.5, el número de hombres en una muestra aleatoria con reemplazamiento de 10 personas sigue una distribución Binomial \(B(10, 0.5)\).

  2. Suponiendo cierta la hipótesis nula, ¿cuál es la probabilidad de que en la muestra se obtengan 0 hombres? ¿Se aceptaría la hipótesis nula en tal caso?

    Tenemos que calcular la probabilidad de 0 hombres con la distribución \(B(10, 0.5)\).

    Para calcular la probabilidad de obtener 0 hombres con la distribución binomial \(B(10, 0.5)\), podemos utilizar la función pbinom del paquete stats de R.
    Parámetros:
    • q: número de éxitos (en este caso, número de hombres) para el que queremos calcular la probabilidad. En este caso, 0.
    • size: número de ensayos (tamaño de la muestra). En este caso, 10.
    • prob: probabilidad de éxito en cada ensayo (proporción de hombres en la población). En este caso, 0.5.
    pbinom(0, 10, 0.5)
    [1] 0.0009765625
    Calcular la probabilidad de obtener 0 hombres en una muestra aleatoria con reemplazamiento de 10 personas tomadas de una población con el mismo número de hombres y mujeres utilizando la distribución binomial B(10, 0.5).

    Como se ve, la probabilidad de obtener 0 hombres en una muestra aleatoria con reemplazamiento de 10 personas tomadas de una población con el mismo número de hombres y mujeres es muy baja, por lo que, en este caso rechazaríamos la hipótesis nula sin dudarlo.

  3. Suponiendo cierta la hipótesis nula, si se decide rechazarla cuando en la muestra haya 2 o menos hombres, ¿cuál es el riesgo de equivocarse?

    Tenemos que calcular la probabilidad de haya 2 o menos hombres con la distribución \(B(10, 0.5)\).

    pbinom(2, 10, 0.5)
    [1] 0.0546875
    Calcular la probabilidad de obtener 2 o menos hombres en una muestra aleatoria con reemplazamiento de 10 personas tomadas de una población con el mismo número de hombres y mujeres utilizando la distribución binomial B(10, 0.5).

    La probabilidad de cometer un error de tipo I (rechazar la hipótesis nula cuando es cierta) es 0.0547.

  4. Si el máximo riesgo de error de tipo I \(\alpha\) que se tolera es 0.05, ¿qué número de hombres en la muestra formarían la región de rechazo de la hipótesis nula?

    Si el máximo riesgo de error de tipo I se establece en \(\alpha=0.05\), solo podría rechazarse la hipótesis nula si en la muestra aleatoria con reemplazamiento de 10 personas se obtuviese 0 o 1 hombres. Si se obtuviesen 2 hombres ya no se podría rechazar la hipótesis nula porque la probabilidad de equivocarnos es mayor de 0.05 como se ha visto en el apartado anterior.

  5. Suponiendo que la proporción real de hombres en la población fuese de 0.4, ¿cuál es la potencia del contraste para la región de rechazo del apartado anterior?

    La potencia de un contraste es \(1-\beta\), donde \(\beta\) es la probabilidad de cometer un error de tipo II (aceptar la hipótesis nula cuando es falsa).

    Tenemos que calcular la probabilidad de haya 1 o menos hombres con la distribución \(B(10, 0.4)\).

    pbinom(1, 10, 0.4)
    [1] 0.0463574
    Calcular la probabilidad de obtener 1 o menos hombres en una muestra aleatoria con reemplazamiento de 10 personas tomadas de una población con una proporción real de hombres del 40% utilizando la distribución binomial B(10, 0.4).

    La potencia del contraste suponiendo que la proporción real de hombres en la población es 0.4, es 0.0464 que es muy baja.

  6. Si en lugar de una muestra de tamaño 10 se tomase una muestra de tamaño 100, y haciendo uso de la aproximación de una distribución binomial mediante una normal, ¿qué número de hombres en la muestra formarían la región de rechazo para un riesgo \(\alpha=0.05\)? ¿Qué potencia tendría ahora el contraste si la proporción real de hombres fuese de 0.4? ¿Es mejor o peor contraste que el anterior?

    Si tomamos una muestra de 100 personas, entonces el número de hombres en la muestra si en la población hay el mismo número de hombres que de mujeres sigue una distribución binomial \(B(100,0.5)\), que puede aproximarse mediante una distribución normal \(N(50,5)\), así que tenemos que calcular el percentil 5 de esta distribución.

    Para calcular el percentil 5 de la distribución normal \(N(50, 5)\), podemos utilizar la función qnorm del paquete stats de R.
    Parámetros:
    • p: probabilidad para la cual queremos calcular el percentil. En este caso, 0.05.
    • mean: media de la distribución normal. En este caso, 50.
    • sd: desviación estándar de la distribución normal. En este caso, 5.
    qnorm(0.05, 50, 5)
    [1] 41.77573
    Calcular el percentil 5 de una distribución normal con media 50 y desviación estándar 5.

    Por tanto, para un riesgo \(\alpha=0.05\), rechazaremos la hipótesis nula si en la muestra se obtienen 41 o menos hombres.

    Si la proporción real de hombres fuese de 0.4, la potencia del contraste es la probabilidad de obtener 41 o menos hombres con una distribución binomial \(B(100, 0.4)\).

    pbinom(41, 100, 0.4)
    [1] 0.6225327
    Calcular la probabilidad de obtener 41 o menos hombres en una muestra aleatoria con reemplazamiento de 100 personas tomadas de una población con una proporción real de hombres del 40% utilizando la distribución binomial B(100, 0.4).

    Ahora la potencia del contraste ha aumentado hasta 0.6225 que es mucho mayor que la del contraste anterior.

Ejercicio 8.2 Se sabe que para que un fármaco sea efectivo, la concentración de su principio activo debe ser de al menos 16 mg/mm\(^3\). Una farmacia va a comprar un lote de este medicamento, pero antes quiere asegurarse de que los medicamentos del lote son efectivos y para ello analiza la concentración de principio activo en una muestra aleatoria de 10 envases tomados del lote, obteniendo los siguientes resultados en mg/mm\(^{3}\):

17.6 19.2 21.3 15.1 17.6 18.9 16.2 18.3 19.0 16.4
  1. Crear un conjunto de datos con los datos de la muestra.

    df <- data.frame(concentracion = c(17.6, 19.2, 21.3, 15.1, 17.6, 18.9, 16.2, 18.3, 19.0, 16.4 ))
    library(tidyverse)
    df <- tibble(concentracion = c(17.6, 19.2, 21.3, 15.1, 17.6, 18.9, 16.2, 18.3, 19.0, 16.4 ))
    Crear un data frame df con una columna llamada concentracion que contenga los siguientes valores: 17.6, 19.2, 21.3, 15.1, 17.6, 18.9, 16.2, 18.3, 19.0, 16.4.
  2. Realizar un contraste de hipótesis para ver si la concentración media de principio activo es diferente de 18 mg/mm\(^3\).

    Tenemos que realizar el contraste bilateral

    \[\begin{align*} H_0 &: \mu=18\\ H_1 &: \mu\neq 18 \end{align*}\]

    Para realizar un contraste de hipótesis para la media de una población podemos utilizar la función t.test del paquete stats.
    Parámetros:
    • x: vector numérico con los datos de la muestra.
    • mu: valor de la media que se establece en la hipótesis nula.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf.level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.

    Si queremos mostrar la salida del test en formato de tabla podemos utilizar la función tidy del paquete broom.

    library(broom)
    library(knitr)
    tidy(t.test(df$concentracion, mu = 18)) |> kable()
    estimate statistic p.value parameter conf.low conf.high method alternative
    17.96 -0.0707795 0.9451211 9 16.68158 19.23842 One Sample t-test two.sided
    Para realizar un contraste de hipótesis para la media de una población podemos utilizar la función t_test de la colección de paquetes tidymodels.
    Parámetros:
    • response: variable numérica con los datos de la muestra.
    • mu: valor de la media que se establece en la hipótesis nula.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf_level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    library(tidymodels)
    df |> 
        t_test(response = concentracion, mu = 18) |> 
        kable() 
    statistic t_df p_value alternative estimate lower_ci upper_ci
    -0.0707795 9 0.9451211 two.sided 17.96 16.68158 19.23842
    Realizar un contraste de hipótesis para ver si media de la columna concentracion del data frame df es diferente de 18.

    Como el p-valor del contraste es 0.9451 que es mucho mayor que el riesgo \(\alpha=0.05\), no rechazamos la hipótesis nula.

    Obsérvese que el valor de la media muestral es 17.96 que está muy cerca del valor que establece la hipótesis nula, por lo que sería una locura reRechazar la hipótesis nula con esta muestra.

  3. Realizar un contraste de hipótesis para ver si la concentración media de principio activo es diferente de 19.5 mg/mm\(^3\).

    Tenemos que realizar el contraste bilateral

    \[\begin{align*} H_0 &: \mu=19.5\\ H_1 &: \mu\neq 19.5 \end{align*}\]

    tidy(t.test(df$concentracion, mu = 19.5)) |> 
        kable()
    estimate statistic p.value parameter conf.low conf.high method alternative
    17.96 -2.725012 0.0234149 9 16.68158 19.23842 One Sample t-test two.sided
    library(tidymodels)
    df |> 
        t_test(response = concentracion, mu = 19.5) |> 
        kable() 
    statistic t_df p_value alternative estimate lower_ci upper_ci
    -2.725012 9 0.0234149 two.sided 17.96 16.68158 19.23842
    Realizar un contraste de hipótesis para ver si media de la columna concentracion del data frame df es diferente de 19.5.

    Como el p-valor del contraste es 0.0234 que es menor que el riesgo \(\alpha=0.05\), rechazamos la hipótesis nula y concluimos que la concentración media es significativamente diferente de 19.5.

    Obsérvese que ahora el valor de la media muestral es 17.96 está mucho más lejos del valor que establece la hipótesis nula, por lo que tiene más lógica rechazar la hipótesis nula.

  4. Si el fabricante del lote asegura haber aumentado la concentración de principio activo con respecto a anteriores lotes, en los que la media era de 17 mg/mm\(^3\), ¿podemos aceptar la afirmación del fabricante?

    Ahora tenemos que realizar el contraste unilateral

    \[\begin{align*} H_0 &: \mu=17\\ H_1 &: \mu> 17 \end{align*}\]

    tidy(t.test(df$concentracion, mu = 17, alternative = "greater")) |> 
        kable()
    estimate statistic p.value parameter conf.low conf.high method alternative
    17.96 1.698709 0.0617985 9 16.92404 Inf One Sample t-test greater
    library(tidymodels)
    df |> 
        t_test(response = concentracion, mu = 19.5, alternative = "greater") |> 
        kable() 
    statistic t_df p_value alternative estimate lower_ci upper_ci
    -2.725012 9 0.9882925 greater 17.96 16.92404 Inf
    Realizar un contraste de hipótesis para ver si media de la columna concentracion del data frame df es mayor que 17.

    Como el p-valor del contraste es 0.0618 que es mayor que el riesgo \(\alpha=0.05\), no podemos rechazar la hipótesis nula y concluimos que con esta muestra no hay pruebas significativas de que la afirmación del fabricante sea cierta.

  5. ¿Cuál sería el tamaño muestral requerido para poder detectar una diferencia de 0.5 mg/mm\(^{3}\) más con un nivel de significación \(\alpha=0.05\) y una potencia \(1-\beta=0.8\)?

    Para calcular el tamaño muestral requerido para poder detectar una diferencia de 0.5 mg/mm\(^3\) más con un nivel de significación \(\alpha=0.05\) y una potencia \(1-\beta=0.8\), podemos utilizar la función pwr.t.test del paquete pwr de R.
    Parámetros:
    • d: tamaño del efecto que se quiere detectar, que se calcula como la diferencia entre la media que se quiere detectar y la media establecida en la hipótesis nula, dividido por la desviación estándar de la población.
    • sig.level: nivel de significación deseado. En este caso, sería 0.05.
    • power: potencia deseada para el contraste. En este caso, sería 0.8.
    • type: tipo de contraste que se va a realizar. En este caso, sería “one.sample” porque se trata de un contraste para la media de una población.
    • alternative: tipo de hipótesis que se va a realizar. En este caso, sería “two.sided” porque se trata de un contraste para dos grupos diferentes.
    library(pwr)
    efecto <- 0.5 / sd(df$concentracion)
    pwr.t.test(d = efecto, sig.level = 0.05, power = 0.8, type = "one.sample", alternative = "two.sided") |> 
        tidy() |> 
        kable()
    n sig.level power
    102.2074 0.05 0.8
    Calcular el tamaño muestral requerido para poder detectar una diferencia de 0.5 mg/mm^3 más con un nivel de significación alpha=0.05 y una potencia 1-beta=0.8 utilizando  del paquete pwr de R.

Ejercicio 8.3 El conjunto de datos biblioteca.csv contiene los resultados de una encuesta realizada en una universidad, sobre si el alumnado utiliza habitualmente (al menos una vez a la semana) la biblioteca.

  1. Crear conjunto de datos con los datos de la muestra a partir del fichero biblioteca.csv.

    df <- read.csv("https://aprendeconalf.es/estadistica-practicas-r/datos/biblioteca.csv")
    library(tidyverse)
    df <- read_csv("https://aprendeconalf.es/estadistica-practicas-r/datos/biblioteca.csv")
    Crear un data frame df a partir de la siguiente URL: https://aprendeconalf.es/estadistica-practicas-r/datos/biblioteca.csv.
  2. Contrastar si el porcentaje de alumnos que utiliza habitualmente la biblioteca es superior al 40%.

    Tenemos que realizar el contraste unilateral

    \[\begin{align*} H_0 &: p = 0.4\\ H_1 &: p > 0.4 \end{align*}\]

    Para realizar un contraste de hipótesis para la proporción de una población podemos utilizar la función prop.test del paquete stats.
    Parámetros:
    • x: número de éxitos en la muestra. En este caso, el número de alumnos que utilizan habitualmente la biblioteca.
    • n: tamaño de la muestra. En este caso, el número total de alumnos encuestados.
    • p: proporción esperada bajo la hipótesis nula. En este caso, 0.4.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf.level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    library(broom)
    library(knitr)
    frec <- table(df$respuesta)
    tidy(prop.test(frec["si"], nrow(df), p = 0.4, alternative = "greater")) |> 
        kable()
    estimate statistic p.value parameter conf.low conf.high method alternative
    0.4705882 0.442402 0.2529827 1 0.3238772 1 1-sample proportions test with continuity correction greater
    Para realizar un contraste de hipótesis para la proporción de una población podemos utilizar la función prop_test de la colección de paquetes tidymodels.
    Parámetros:
    • response: variable categórica con los datos de la muestra.
    • p: proporción esperada bajo la hipótesis nula. En este caso, 0.4.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • success: categoría de la variable respuesta que se considera como éxito. En este caso, “si”.
    • conf_level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    library(tidymodels)
    library(knitr)
    df  |> 
        prop_test(response = respuesta, p = 0.4, alternative = "greater", success = "si") |>
        kable()
    statistic chisq_df p_value alternative
    0.442402 1 0.2529827 greater
    Realizar un contraste de hipótesis para ver si el porcentaje de alumnos que utiliza habitualmente la biblioteca es superior al 40%.

    Como el p-valor del contraste es 0.253, que es mayor que el riesgo \(\alpha=0.05\), no rechazamos la hipótesis nula.

Ejercicio 8.4 Un estudio trata de averiguar si existen diferencias significativas en la edad media a la que los niños de África y Europa comienzan a andar por sí solos. Los investigadores obtuvieron los siguientes datos para la edad al comenzar a andar (expresada en meses):

África 9.5 10.5 9.0 9.8 10.0 13.0 10.0 13.5 10.0 9.8
Europa 12.5 9.5 13.5 13.8 12.0 13.8 12.5 9.5 12.0 13.5 12.0 12.0
  1. Crear un conjunto de datos con los datos de la muestra.

    df <- data.frame(
        edad = c(9.5, 10.5, 9.0, 9.8, 10.0, 13.0, 10.0, 13.5, 10.0, 9.8, 12.5, 9.5, 13.5, 13.8, 12.0, 13.8, 12.5, 9.5, 12.0, 13.5, 12.0, 12.0),
        continente = factor(c(rep("África", 10), rep("Europa", 12)))
    )
    library(tidyverse)
    df <- tibble(
        edad = c(9.5, 10.5, 9.0, 9.8, 10.0, 13.0, 10.0, 13.5, 10.0, 9.8, 12.5, 9.5, 13.5, 13.8, 12.0, 13.8, 12.5, 9.5, 12.0, 13.5, 12.0, 12.0),
        continente = factor(c(rep("África", 10), rep("Europa", 12)))
    )
    Crear un data frame df con dos columnas: edad, que contenga los siguientes valores: 9.5, 10.5, 9.0, 9.8, 10.0, 13.0, 10.0, 13.5, 10.0, 9.8, 12.5, 9.5, 13.5, 13.8, 12.0, 13.8, 12.5, 9.5, 12.0, 13.5, 12.0 y continente que contenga los siguientes valores: África para las primeras 10 filas y Europa para las siguientes 12 filas.
  2. Realizar un contraste de hipótesis con un nivel de significación de 0.05 para ver si existen diferencias estadísticamente significativas entre las edades medias a las que comienzan a andar los niños de África y los de Europa.

    Tenemos que realizar el contraste bilateral

    \[\begin{align*} H_0 &: \mu_A = \mu_E \\ H_1 &: \mu_A \neq \mu_E \end{align*}\]

    Realizamos primero el test F para la comparación de las varianzas de las dos poblaciones.

    Para realizar un contraste de comparación de varianzas podemos usar la función var.test del paquete stats.
    Parámetros:
    • formula: fórmula con la variable respuesta y la variable explicativa separadas por el símbolo ~.
    • data: data frame que contiene las variables de la fórmula.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf.level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    var.test(edad ~ continente, data = df) |> 
        tidy() |> 
        kable()
    estimate num.df den.df statistic p.value conf.low conf.high method alternative
    1.055843 9 11 1.055843 0.9164489 0.2942791 4.130538 F test to compare two variances two.sided
    Realizar un contraste de hipótesis para comparar las varianzas de la columna edad según la columna continente del data frame df.

    Como el p-valor del contraste es 0.9164, que es mayor que el riesgo \(\alpha=0.05\), no se rechaza la hipótesis nula y concluimos que no hay una diferencia estadísticamente significativas entre las varianzas de las dos poblaciones.

    A continuación realizamos el contraste de comparación de medias.

    Para realizar un contraste de hipótesis para la diferencia de medias de dos población independientes utilizar la función t.test del paquete stats.
    Parámetros:
    • formula: fórmula con la variable respuesta y la variable explicativa separadas por el símbolo ~.
    • data: data frame que contiene las variables de la fórmula.
    • var.equal: valor lógico que indica si se asume que las varianzas de las dos poblaciones son iguales o no. Por defecto es FALSE, es decir, no se asume que las varianzas son iguales.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf.level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    t.test(edad ~ continente, data = df, var.equal = TRUE) |> 
        tidy() |> 
        kable()
    estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high method alternative
    -1.706667 10.51 12.21667 -2.698189 0.0138327 20 -3.026086 -0.3872469 Two Sample t-test two.sided
    Para realizar un contraste de hipótesis para la diferencia de medias de dos población independientes podemos utilizar la función t_test de la colección de paquetes tidymodels.
    Parámetros:
    • formula: fórmula con la variable respuesta y la variable explicativa separadas por el símbolo ~.
    • data: data frame que contiene las variables de la fórmula.
    • var_equal: valor lógico que indica si se asume que las varianzas de las dos poblaciones son iguales o no. Por defecto es FALSE, es decir, no se asume que las varianzas son iguales.
    • alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”.
    • conf_level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.
    library(tidymodels)
    df |> 
        t_test(edad ~ continente, var.equal = TRUE) |> 
        kable() 
    statistic t_df p_value alternative estimate lower_ci upper_ci
    -2.698189 20 0.0138327 two.sided -1.706667 -3.026086 -0.3872469
    Realizar un contraste de hipótesis para la diferencia de medias de la columna edad según la columna continente del data frame df. Asumir varianzas iguales o no en función del resultado del contraste de varianzas. 

    Como el p-valor del contraste es 0.0138 que es menor que el riesgo \(\alpha=0.05\), podemos rechazar la hipótesis nula y se concluye que existe una diferencia estadísticamente significativa entre las edades medias a las que comienzan a andar los niños de África y Europa.

    Aunque se ha planteado un contraste bilateral, observando el intervalo de confianza para la diferencia entre la edad media de los niños de África y los de Europa, que es completamente negativo, se puede concluir con un 95% de confianza que los niños de África comienzan a andar entre 0.3872 meses y 3.261 meses antes que los niños de Europa en promedio.

Ejercicio 8.5 El conjunto de datos hipertension.csv contiene datos de la presión arterial de una muestra de individuos hipertensos, antes y después de aplicarles tres tratamientos (Placebo, IECA y Antagonista del Calcio + Diurético).

  1. Crear un conjunto de datos con los datos de la muestra.

    df <- read.csv("https://aprendeconalf.es/estadistica-practicas-r/datos/hipertension.csv")
    library(tidyverse)
    df <- read_csv("https://aprendeconalf.es/estadistica-practicas-r/datos/hipertension.csv")
    glimpse(df)
    Rows: 100
    Columns: 15
    $ ...1      <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
    $ NOMBRE    <chr> "SGL", "JCZ", "APZ", "NDG", "CLO", "LFZ", "OAR", "…
    $ EDAD      <dbl> 57, 40, 30, 44, 38, 48, 41, 31, 39, 31, 34, 27, 32…
    $ SEXO      <chr> "Mujer", "Mujer", "Hombre", "Hombre", "Mujer", "Ho…
    $ ESTATURA  <dbl> 165, 154, 156, 181, 184, 179, 159, 153, 172, 154, …
    $ PESO      <dbl> 93, 80, 74, 88, 86, 73, 70, 57, 55, 50, 64, 57, 54…
    $ ESTRES    <dbl> 42, 30, 21, 33, 36, 22, 31, 12, 21, 24, 32, 20, 30…
    $ PAD_INI   <dbl> 80, 92, 87, 84, 88, 70, 91, 84, 69, 84, 88, 85, 83…
    $ PAD_FIN   <dbl> 84, 89, 83, 79, 80, 82, 80, 73, 67, 77, 75, 83, 80…
    $ PAS_INI   <dbl> 180, 167, 148, 167, 170, 148, 173, 140, 155, 153, …
    $ PAS_FIN   <dbl> 155, 140, 130, 141, 142, 128, 132, 123, 115, 135, …
    $ TAB_INI   <chr> "si", "no", "no", "si", "si", "si", "no", "no", "n…
    $ TAB_FIN   <chr> "si", "no", "no", "no", "si", "si", "no", "no", "n…
    $ CAR_ISQUE <chr> "si", "no", "no", "si", "no", "no", "no", "no", "n…
    $ FARMACO   <chr> "Antagonista Calcio + Diurético", "Antagonista Cal…
    Crear un data frame df a partir del fichero csv con la siguiente URL: https://aprendeconalf.es/estadistica-practicas-r/datos/hipertension.csv.
  2. Realizar un contraste de hipótesis para ver si hay la media de la presión sistólica ha disminuido significativamente.

    Tenemos que realizar el contraste de hipótesis unilateral

    \[\begin{align*} H_0 &: \mu_I = \mu_F \\ H_1 &: \mu_I > \mu_F \end{align*}\]

    t.test(df$PAS_INI, df$PAS_FIN, paired = TRUE, alternative = "greater") |> 
        tidy() |> 
        kable()
    estimate statistic p.value parameter conf.low conf.high method alternative
    28.49 31.74278 0 99 26.99975 Inf Paired t-test greater
    library(tidymodels)
    df |> 
    mutate(PAS_DIF = PAS_INI - PAS_FIN) |> 
        t_test(response = PAS_DIF, alternative = "greater") |> 
        kable() 
    statistic t_df p_value alternative estimate lower_ci upper_ci
    31.74278 99 0 greater 28.49 26.99975 Inf
    Realizar un contraste de hipótesis de muestras pareadas para ver si la media de la columna PAS_INI es mayor que la media de la columna PAS_FIN del data frame df.

    Como el p-valor del contraste es prácticamente 0, que es mucho menor que el riesgo \(\alpha=0.05\), podemos rechazar con contundencia la hipótesis nula y se concluye que existe una diferencia estadísticamente muy significativa entre las medias de la presión arterial sistólica antes y después del tratamiento.

  3. Realizar el mismo contraste de antes, pero para cada tratamiento por separado.

    df |> 
        nest(data = -FARMACO) |> 
        mutate(test = map(data, ~ tidy(t.test(.x$PAS_INI, .x$PAS_FIN, paired = TRUE, alternative = "greater")))) |> 
        unnest(test) |>
        select(-data) |> 
        kable()
    FARMACO estimate statistic p.value parameter conf.low conf.high method alternative
    Antagonista Calcio + Diurético 26.63636 99.52715 0 32 26.18303 Inf Paired t-test greater
    Placebo 18.63636 58.37322 0 32 18.09557 Inf Paired t-test greater
    IECA 39.85294 145.42329 0 33 39.38915 Inf Paired t-test greater
    df |> 
    mutate(PAS_DIF = PAS_INI - PAS_FIN) |> 
    nest(data = -FARMACO) |> 
        mutate(test = map(data, ~ t_test(x = .x, response = PAS_DIF, paired = TRUE, alternative = "greater"))) |> 
        unnest(test) |>
        select(-data) |> 
        kable()
    FARMACO statistic t_df p_value alternative estimate lower_ci upper_ci
    Antagonista Calcio + Diurético 99.52715 32 0 greater 26.63636 26.18303 Inf
    Placebo 58.37322 32 0 greater 18.63636 18.09557 Inf
    IECA 145.42329 33 0 greater 39.85294 39.38915 Inf
    Realizar un contraste de hipótesis de muestras pareadas para ver si la media de la columna PAS_INI es mayor que la media de la columna PAS_FIN del data frame df para cada tratamiento de la columna FARMACO por separado.

    Como se puede observar, todos los p-valores son menores que el nivel de significación \(\alpha=0.05\), por lo que se puede concluir que existe una diferencia estadísticamente muy significativa entre las medias de la presión arterial sistólica antes y después de cada tratamiento. Si observamos los intervalos de confianza, se observa que la mayor diferencia entre se da para el tratamiento IECA, después el Antagonista del Calcio y finalmente el Placebo.

Ejercicio 8.6 Un profesor universitario ha tenido dos grupos de clase a lo largo del año: uno con horario de mañana y otro de tarde. En el de mañana, sobre un total de 80 alumnos, han aprobado 55; y en el de tarde, sobre un total de 90 alumnos, han aprobado 32. ¿Se puede afirmar que hay diferencias significativas entre los porcentajes de aprobados en ambos grupos?

Tenemos que realizar el contraste bilateral

\[\begin{align*} H_0 &: p_M = p_T \\ H_1 &: p_M \neq p_T \end{align*}\]

Para realizar un contraste de hipótesis para la diferencia de proporciones de dos población independientes utilizar la función prop.test del paquete stats.
Parámetros: - x: vector numérico con el número de éxitos en cada grupo. - n: vector numérico con el tamaño de cada grupo. - alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”. - conf.level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.

library(broom)
library(knitr) 
# Aplicamos el test de comparación de proporciones.
prop.test(c(55, 32), c(80, 90)) |>
    tidy() |> 
    # Multiplicamos por 100 todas las columnas para obtener porcentajes.
    mutate(across(c(estimate1, estimate2, conf.low, conf.high), ~ .x * 100)) |> 
    kable()
estimate1 estimate2 statistic p.value parameter conf.low conf.high method alternative
68.75 35.55556 17.37244 3.07e-05 1 17.83764 48.55125 2-sample test for equality of proportions with continuity correction two.sided

Para realizar un contraste de hipótesis para la diferencia de proporciones de dos población independientes podemos utilizar la función prop_test de la colección de paquetes tidymodels.
Parámetros: - formula: fórmula con la variable respuesta y la variable explicativa separadas por el símbolo ~. - alternative: tipo de contraste que se va a realizar (“two.sided” para bilateral, “less” para unilateral izquierda y “greater” para unilateral derecha). Por defecto es “two.sided”. - success: categoría de la variable respuesta que se considera como éxito. En este caso, “aprobado”. - conf_level: nivel de confianza deseado para el intervalo de confianza. Por defecto es 0.95.

library(tidymodels)
library(knitr)
# Creamos un data frame con los datos de la muestra.
df <- data.frame(
    grupo = factor(c(rep("mañana", 80), rep("tarde", 90))),
    calificacion = factor(c(rep("aprobado", 55), rep("suspenso", 25), rep("aprobado", 32), rep("suspenso", 58)))
)
# Aplicamos el test de comparación de proporciones.
df |> 
    prop_test(formula = calificacion ~ grupo, alternative = "two.sided", success = "aprobado") |> 
    kable()
statistic chisq_df p_value alternative lower_ci upper_ci
17.37244 1 3.07e-05 two.sided 0.1783764 0.4855125
Realizar un contraste de hipótesis para la diferencia de proporciones de dos población independientes para ver si hay diferencias significativas entre los porcentajes de aprobados en ambos grupos.

Como el p-valor del contraste es prácticamente 0, que es mucho menor que el riesgo \(\alpha=0.05\), podemos rechazar con contundencia la hipótesis nula y se concluye que existe una diferencia estadísticamente muy significativa entre los porcentajes de aprobados en la mañana y la tarde. Si observamos el intervalo de confianza para diferencia entre la proporción de aprobados en la mañana y la tarde, que es completamente positivo, se concluye con un 95% de confianza que el porcentaje de aprobados en la mañana es significativamente mayor que en la tarde.

8.2 Ejercicios propuestos

Ejercicio 8.7 El fichero pulso.csv contiene información sobre el pulso de un grupo de pacientes que han realizado distintos ejercicios: pulso en reposo (pulse1), pulso después de hacer ejercicio (pulse2), tipo de ejercicio (ran, 1=correr, 2=andar), sexo (sex, 1=hombre, 2=mujer) y peso (weight).

  1. Contrastar si el pulso en reposo está por debajo de 75 pulsaciones.

  2. ¿Qué tamaño muestral sería necesario para detectar una diferencia de 2 pulsaciones más en la media de las pulsaciones en reposo, con un nivel de significación 0.05 y una potencia de 0.9?

  3. Contrastar si el pulso después de correr está por encima de 85 pulsaciones.

  4. Contrastar si el porcentaje de personas con taquicardia leve (número de pulsaciones en reposo por encima de 90) supera el 5%.

  5. ¿Se puede afirmar que el ejercicio aumenta las pulsaciones con una significación de 0.05? ¿y con una significación 0.01?

  6. ¿Existe una diferencia significativa entre las medias de las pulsaciones después de andar y después de correr?

  7. ¿Existe una diferencia significativa entre la media de las pulsaciones en reposo de hombres y mujeres? ¿Y entre las medias de las pulsaciones después de correr?