La probabilidad es una herramienta fundamental en el análisis estadístico, ya que nos permite cuantificar la incertidumbre y tomar decisiones informadas en un mundo lleno de variabilidad. Desde la medicina hasta la ingeniería, la probabilidad nos ayuda a modelar y comprender eventos aleatorios, como el resultado de un tratamiento médico o el rendimiento de un nuevo material. Además, la probabilidad es la base de muchos modelos estadísticos complejos que utilizamos para predecir resultados futuros y tomar decisiones estratégicas en diversos campos. Por lo tanto, comprender y aplicar adecuadamente la probabilidad es esencial para cualquier persona que trabaje con datos y desee obtener conclusiones significativas y confiables.
En la biología, la probabilidad se utiliza para modelar eventos genéticos, estudiar la distribución de especies en un ecosistema y predecir la propagación de enfermedades. En la ingeniería ambiental, la probabilidad se aplica para analizar la calidad del agua, predecir la contaminación atmosférica y evaluar el impacto ambiental de proyectos de construcción. Dominar los conceptos básicos de la probabilidad es fundamental para avanzar en estos campos y para utilizar eficazmente herramientas estadísticas más avanzadas.
Una probabilidad es un número que cuantifica la posibilidad de que ocurra un evento específico. Se encuentra en el rango de 0 hasta 1, donde 0 significa que el evento es imposible y 1 significa que el evento es seguro de ocurrir. Las probabilidades intermedias indican el grado de certeza asociado con la ocurrencia del evento. Las probabilidades se pueden expresar como fracciones, decimales o porcentajes, y se utilizan en una amplia gama de disciplinas, desde la estadística y las matemáticas hasta la biología y la ingeniería ambiental, para cuantificar la incertidumbre y tomar decisiones informadas.
Este documento se centra en la aplicación práctica de R, en lugar de abordar en detalle la teoría completa de la probabilidad. Aunque se describirán los conceptos y temas básicos de probabilidad, la comprensión profunda de la teoría es más adecuada para el trabajo en clases de la asignatura correspondiente.
En estadística, un evento se refiere a un resultado específico que puede suceder. Para describir la probabilidad de que ocurra un evento \(A\), se utiliza la probabilidad, representada como \(Pr(A)\). En los extremos, \(P(A) = 0\) indica que A no puede suceder, y \(P(A) = 1\) indica que \(A\) ocurre con certeza absoluta.
Por ejemplo, lanzar una moneda justa. Consideremos el evento \(A\) como “obtener cara”. En este caso, la probabilidad de que ocurra el evento \(A\) es \(P(A) = 0.5\), ya que hay dos resultados posibles (cara o cruz) y ambos son igualmente probables.
En estadística, la frecuencia de un evento se refiere al número de veces que ocurre un evento en un conjunto de observaciones. La probabilidad, por otro lado, es una medida de la posibilidad de que ocurra un evento. En el contexto de las frecuencias, podemos relacionarlas con la probabilidad al considerar la frecuencia relativa, que es la proporción de veces que ocurre un evento en relación con el número total de observaciones. Por ejemplo, si lanzamos una moneda 100 veces y obtenemos cara 50 veces, la frecuencia relativa de cara sería \(50/100 = 0.5\), lo que coincide con la probabilidad teórica de obtener cara en un lanzamiento justo.
En R, el uso de TRUE y FALSE se relaciona con la probabilidad y las frecuencias de eventos. TRUE se interpreta como 1 y FALSE como 0. Por ejemplo, si queremos contar el número de veces que ocurre un evento, podemos usar una condición que devuelva TRUE cuando el evento ocurra y FALSE cuando no. Luego, al sumar los TRUE, obtenemos la frecuencia de ese evento.
En el siguiente ejemplo tenemos un vector datos que contiene los resultados de lanzar un dado justo 100 veces. Si queremos contar cuántas veces obtuvimos un 6, podemos hacerlo de la siguiente manera:
# Simulación de 100 lanzamientos de un dado
datos <- sample(1:6, 100, replace = TRUE)
# Contar cuántas veces se obtuvo un 6
frecuencia_seis <- sum(datos == 6)
# Calcular la frecuencia relativa
probabilidad_seis <- frecuencia_seis / length(datos) En RStudio quedaría de la siguiente manera:
En este caso, datos == 6 devuelve un
vector de valores lógicos (TRUE o FALSE) que indican si cada lanzamiento
resultó en un 6. Al sumar estos valores lógicos, obtenemos el número
total de veces que se obtuvo un 6, lo que nos permite calcular la
frecuencia relativa (probabilidad) de ese evento en los 100
lanzamientos.
Ahora bien, para ejemplificar mejor creamos un vector
temperaturas que contiene las temperaturas
diarias en grados Celsius durante una semana. Queremos contar cuántos
días la temperatura fue mayor o igual a 30 grados.
# Datos de temperatura diaria
temperaturas <- c(28, 32, 29, 31, 30, 27, 33)
# Contar cuántos días la temperatura fue mayor o igual a 30 grados
dias_calurosos <- sum(temperaturas >= 30)
# Mostrar el resultado
print(paste("Días con temperaturas de 30 grados o más:", dias_calurosos))En RStudio quedaría de la siguiente manera:
Observaras que temperaturas >= 30
devuelve un vector de valores lógicos que indica si cada día cumplió con
la condición de tener una temperatura mayor o igual a 30 grados. Al
sumar estos valores lógicos, obtenemos el número total de días que
cumplieron con esta condición.
Es la probabilidad de que ocurra un evento dado que otro evento ya sucedió. La cantidad \(P(A│B)\) representa “la probabilidad de que ocurra A, dado que B ya ha ocurrido”, y viceversa si escribimos \(P(B|A)\).
Si \(P(A|B) = P(A)\), entonces los dos eventos son independientes; si \(P(A│B)\) es diferente de \(P(A)\), entonces los dos eventos son dependientes. Generalmente, no se puede asumir que \(P(A│B)\) sea igual a \(P(B│A)\).
Consideremos los eventos A y B definidos previamente para el lanzamiento de un dado. Ya sabemos que \(P(A) = 1/2\). Ahora pensemos en \(P(A│B)\). ¿Cuál es la probabilidad de obtener un 4 o más, dado que ha salido un número par? Dado que hay tres números pares, 2, 4 y 6, la probabilidad de obtener un 4 o más, asumiendo que ha salido un número par, es \(2/3\). Por lo tanto, en este contexto, \(P(A│B)\) es diferente de \(P(A)\), lo que indica que los dos eventos no son independientes.
Veamos un ejemplo en R donde se busca simular el lanzamiento de un dado. Supongamos que queremos calcular la probabilidad de obtener un número par (evento A) dado que hemos obtenido un número mayor que 3 (evento B). Primero, generaremos una gran cantidad de lanzamientos de dados y luego calcularemos la probabilidad condicional.
# Simulación de lanzamiento de dado
n_lanzamientos <- 10000
dados <- sample(1:6, n_lanzamientos, replace = TRUE)
# Contar los casos favorables para los eventos A y B
A <- sum(dados %% 2 == 0) # Números pares
B <- sum(dados > 3) # Números mayores que 3
# Contar los casos favorables para A y B ocurriendo juntos
A_y_B <- sum(dados %% 2 == 0 & dados > 3)
# Calcular la probabilidad condicional Pr(A|B)
Pr_A_cond_B <- A_y_B / B
print(Pr_A_cond_B)En RStudio quedaría de la siguiente manera:
La probabilidad condicional \(P(A|B)\) es la probabilidad de obtener un número par dado que hemos obtenido un número mayor que 3.
La intersección en probabilidad se refiere a la ocurrencia simultánea de dos eventos. Es el conjunto de elementos que pertenecen a ambos eventos. En términos más simples, la intersección de dos eventos A y B (denotada como \(A ∩ B)\) es el evento que ocurre cuando ambos eventos suceden al mismo tiempo. Por ejemplo, si A es “obtener un número par al lanzar un dado” y B es “obtener un número mayor que 3 al lanzar un dado”, entonces la intersección de A y B sería “obtener un 4 o un 6 al lanzar un dado”.
Veamos un ejemplo donde queremos calcular la probabilidad de obtener un número par (A) y mayor que 3 (B) al lanzar un dado justo de 6 caras.
# Definimos los eventos A y B
evento_A <- c(2, 4, 6) # Obtener un número par
evento_B <- c(4, 5, 6) # Obtener un número mayor que 3
# Calculamos la intersección de A y B
interseccion <- intersect(evento_A, evento_B)
# Calculamos la probabilidad de la intersección
prob_interseccion <- length(interseccion) / 6 # Total de posibles resultados en un dado
# Mostramos el resultado
cat("La probabilidad de la intersección de A y B es:", prob_interseccion, "\n")En RStudio quedaría de la siguiente manera:
Observaras que la intersección de los eventos A y B es el conjunto {4, 6}, ya que estos son los números que cumplen ambas condiciones. La probabilidad de que ocurra la intersección es 2/6 o aproximadamente 0.3333.
La unión de dos eventos se refiere a la ocurrencia de al menos uno de ellos. Es decir, la unión de dos eventos A y B (denotada como A ∪ B) se cumple si ocurre A, B o ambos. La probabilidad de la unión de dos eventos se determina sumando las probabilidades de cada evento individual y luego restando la probabilidad de su intersección, ya que esta se cuenta dos veces si ambos eventos suceden.
Por ejemplo, si tenemos dos eventos A y B, la probabilidad de su unión \((A ∪ B)\) se calcula como:
\[P(A ∪ B) = P(A) + P(B) - P(A ∩)\]
Esto se debe a que la probabilidad de que ocurra A o B es la suma de las probabilidades de \(A y B\), pero debemos restar la probabilidad de que ambos ocurran simultáneamente para evitar contarla dos veces.
La unión de eventos es un concepto fundamental en la teoría de la probabilidad y se utiliza para calcular la probabilidad de eventos conjuntos o combinados en diversos escenarios. Por ejemplo se podría estudiar la probabilidad de que una especie de planta crezca en dos áreas diferentes. Si la probabilidad de que la planta crezca en el área A es del 30% y en el área B es del 40%, la probabilidad de que la planta crezca en al menos una de las dos áreas \((A ∪ B)\) sería la suma de estas probabilidades menos la probabilidad de que crezca en ambas áreas al mismo tiempo.
# Probabilidad de crecimiento en el área A
prob_A <- 0.30
# Probabilidad de crecimiento en el área B
prob_B <- 0.40
# Probabilidad de crecimiento en ambas áreas al mismo tiempo
prob_A_interseccion_B <- prob_A * prob_B
# Probabilidad de crecimiento en al menos una de las dos áreas (A ∪ B)
prob_union <- prob_A + prob_B - prob_A_interseccion_B
# Imprimir resultado
cat("La probabilidad de que la planta crezca en al menos una de las dos áreas es:", prob_union, "\n")En RStudio quedaría de la siguiente manera:
El complemento de un evento en probabilidad se refiere a todos los resultados posibles que no pertenecen al evento en cuestión. En términos simples, si tienes un evento \(A\), entonces el complemento de \(A\) (denotado como \(A^'\)) consiste en todos los resultados posibles que no están en \(A\).
La probabilidad del complemento de un evento \(A\) se calcula como la probabilidad de que ocurra cualquier resultado posible que no esté en \(A\). Matemáticamente, se expresa como:
\[P(A') = 1 - P(A)\]
Esto se debe a que la probabilidad total de todos los resultados posibles es 1, y la probabilidad de que ocurra el evento A más la probabilidad de que ocurra el complemento de A debe sumar 1.
Por ejemplo, si lanzas un dado de seis caras, la probabilidad de sacar un número impar (evento A) es \(3/6 = ½\), ya que hay tres resultados posibles (1, 3, 5) que son impares.
Por lo tanto, la probabilidad del complemento de sacar un número impar (es decir, sacar un número par) es \(1 - 1/2 = ½\), ya que hay tres resultados posibles (2, 4, 6) que son pares.
Para los temas de este manual, un ejemplo sería suponer que estamos estudiando la presencia de una especie de planta en un área específica de un bosque. Definimos el evento A como “encontrar la planta en una ubicación seleccionada”. El complemento de A (A’) sería “no encontrar la planta en esa ubicación”. Si la probabilidad de encontrar la planta en una ubicación seleccionada es del 0.3 (30%), entonces la probabilidad de no encontrarla en esa ubicación sería del 0.7 (70%), ya que la suma de ambas probabilidades debe ser igual a 1.
# Probabilidad de encontrar la planta en una ubicación seleccionada
probabilidad_encontrar_planta <- 0.3
# Probabilidad de no encontrar la planta en esa ubicación (complemento)
probabilidad_no_encontrar_planta <- 1 - probabilidad_encontrar_planta
# Mostrar resultados
cat("La probabilidad de no encontrar la planta en esa ubicación es:", probabilidad_no_encontrar_planta, "\n")En RStudio quedaría de la siguiente manera:
Una variable aleatoria es una función que asigna un valor numérico a cada posible resultado de un experimento aleatorio. Por ejemplo, al lanzar un dado, la variable aleatoria podría ser el número que aparece en el dado. Las distribuciones de probabilidad explican cómo se distribuyen las probabilidades de los diferentes resultados posibles de una variable aleatoria.
Existen dos tipos principales de variables aleatorias: discretas y continuas. Las variables aleatorias discretas toman valores separados y contables, como los resultados de lanzar un dado (1, 2, 3, 4, 5, 6). En cambio, las variables aleatorias continuas pueden tomar cualquier valor dentro de un intervalo, como la altura de una persona o la temperatura.
Por lo tanto, es razonable considerar que las variables aleatorias están vinculadas a una función que define estas probabilidades, conocida como distribución de probabilidad. En esta sección, se explorarán algunas formas básicas de resumir las variables aleatorias y cómo se abordan sus respectivas distribuciones de probabilidad desde una perspectiva estadística.
Las realizaciones, en el contexto de las variables aleatorias y las distribuciones de probabilidad, son los valores específicos que puede tomar una variable aleatoria en un experimento aleatorio. Por ejemplo, si consideramos una variable aleatoria que representa el resultado de lanzar un dado, las realizaciones posibles serían los números del 1 al 6, ya que esos son los resultados individuales posibles de ese experimento.
Otro ejemplo es considerar una variable aleatoria que representa la temperatura máxima diaria en una ciudad durante el verano. Las realizaciones de esta variable serían las diferentes temperaturas máximas que realmente se registran cada día. Por ejemplo, si durante una semana las temperaturas máximas fueron 30°C, 32°C, 29°C, 31°C, 28°C, 33°C y 30°C, entonces esas serían las realizaciones de la variable aleatoria “temperatura máxima diaria en verano”.
Las variables aleatorias son funciones que asignan un valor numérico a cada uno de los resultados posibles de un fenómeno aleatorio. Hay dos categorías principales: las variables aleatorias discretas, que pueden tomar un conjunto contable de valores. Por ejemplo, el número de veces que se lanza una moneda hasta que sale cara es una variable aleatoria discreta, ya que solo puede tomar valores enteros como 1, 2, 3, etc. Por otro lado, las variables aleatorias continuas pueden tomar cualquier valor dentro de un intervalo dado. Por ejemplo, la altura de una persona es una variable aleatoria continua, ya que puede ser cualquier valor en un rango, como 150 cm, 150.5 cm, etc.
Las variables aleatorias discretas son un concepto fundamental en la teoría de la probabilidad y la estadística. Las variables aleatorias discretas se utilizan para modelar experimentos aleatorios en los que los resultados son contables y se pueden enumerar.
Una variable aleatoria discreta asigna un valor numérico a cada resultado posible de un experimento aleatorio. Por ejemplo, considera el lanzamiento de un dado justo. La variable aleatoria X podría representar el número que aparece en el dado después de lanzarlo. Los posibles valores de X serían {1, 2, 3, 4, 5, 6}, que son los resultados posibles de lanzar un dado.
La función de probabilidad de una variable aleatoria discreta asigna a cada valor posible de la variable su probabilidad de ocurrencia. Esta función de probabilidad debe cumplir dos condiciones:
La probabilidad de que la variable aleatoria tome algún valor específico debe ser mayor o igual a cero para todos los valores posibles.
La suma de todas las probabilidades para todos los posibles valores de la variable aleatoria debe ser igual a uno.
El número de crías nacidas por camada en una especie de mamífero. Esta variable aleatoria discreta representa el número de crías que nacen en cada camada de una especie de mamífero en particular. Por ejemplo, en una especie de ratón, la variable aleatoria podría tomar valores como 1, 2, 3, o más crías, dependiendo del tamaño de la camada. La función de probabilidad asociada asignaría a cada uno de estos valores la probabilidad de que ocurran en una camada.
Se menciona tambien el nivel de contaminación en un río en un punto específico. Esta variable aleatoria discreta puede representar diferentes niveles de contaminación en un río en un punto de muestreo específico. Por ejemplo, podría tener valores como 1 (bajo), 2 (medio) y 3 (alto), donde cada valor representa un nivel de contaminación diferente. La función de probabilidad asociada describiría la probabilidad de que el nivel de contaminación sea bajo, medio o alto en ese punto de muestreo.
Una variable aleatoria continua es aquella que puede asumir un número infinito de valores dentro de un intervalo específico. A diferencia de las variables aleatorias discretas, que solo pueden tomar valores específicos, las variables aleatorias continuas pueden adoptar cualquier valor dentro de un rango.
Para ilustrar su funcionamiento, se puede considerar un ejemplo relacionado con la temperatura del agua en un lago. Si se desea medir la temperatura del agua en grados Celsius, esta variable es continua porque puede tener cualquier valor dentro de un rango, como 20.5°C, 20.6°C, 20.7°C, y así sucesivamente, hasta un número infinito de decimales.
Para describir una variable aleatoria continua, se utiliza una función de densidad de probabilidad (PDF, por sus siglas en inglés), que indica la probabilidad de que la variable aleatoria tome un valor específico. La integral de la PDF sobre un intervalo proporciona la probabilidad de que la variable aleatoria caiga dentro de ese intervalo.
Por ejemplo, si la PDF de la temperatura del agua en un lago sigue una distribución normal con una media de 20°C y una desviación estándar de 1°C, se puede calcular la probabilidad de que la temperatura esté entre 19°C y 21°C integrando la PDF sobre ese intervalo.
En resumen, las variables aleatorias continuas pueden tomar un número infinito de valores dentro de un intervalo y se describen mediante una función de densidad de probabilidad, que especifica la probabilidad de que la variable tome valores en diferentes intervalos.
# Supongamos que la temperatura sigue una distribución normal
# con media de 20°C y desviación estándar de 1°C
media <- 20
desviacion <- 1
# Creamos un vector de valores de temperatura
temperaturas <- seq(15, 25, by = 0.1)
# Calculamos la Función de Distribución de Probabilidad para cada temperatura
pdf <- dnorm(temperaturas, mean = media, sd = desviacion)
# Creamos un dataframe con los resultados
resultados <- data.frame(Temperatura = temperaturas, PDF = pdf)
# Mostramos los primeros registros del dataframe
head(resultados)
# Creamos el gráfico de barras
barplot(resultados$PDF, names.arg = resultados$Temperatura,
xlab = "Temperatura", ylab = "Densidad de Probabilidad",
col = "skyblue", border = "black", space = 0.5,
main = "Densidad de Probabilidad de Temperaturas")En RStudio quedaría de la siguiente manera
Para una variable aleatoria discreta \(X\) con función de masa de probabilidad $P(X = x_i) = p_i $, la media (o esperanza) se calcula como:
\[μ=E(X)=∑ixi⋅pi\]
La varianza de \(X\) se calcula como:
\[σ2=Var(X)=∑i(xi-μ)2⋅pi\]
Aquí, \(𝑥_𝑖\)son los posibles valores que puede tomar la variable aleatoria discreta, \(𝑝_𝑖\) son las probabilidades correspondientes de cada valor, \(𝜇\) es la media y \(𝜎^2\)es la varianza.
El siguiente ejemplo trata de un estudio de biodiversidad en un área protegida, se registraron las siguientes frecuencias de avistamientos diarios de cierta especie de ave:
| Número de avistamientos (X) | Probabilidad (P(X)) |
|---|---|
| 0 | 0.05 |
| 1 | 0.15 |
| 2 | 0.30 |
| 3 | 0.25 |
| 4 | 0.15 |
| 5 | 0.10 |
# Definir los valores de la variable aleatoria (número de avistamientos)
X <- c(0, 1, 2, 3, 4, 5)
# Definir las probabilidades correspondientes
P <- c(0.05, 0.15, 0.30, 0.25, 0.15, 0.10)
# Calcular la media
media <- sum(X * P)
cat("La media es:", media, "\n")
# Calcular la varianza
varianza <- sum((X - media)^2 * P)
cat("La varianza es:", varianza, "\n")En RStudio quedaría de la siguiente manera:
Las distribuciones de probabilidad estándar o comunes son modelos matemáticos que describen cómo se distribuyen los valores de una variable aleatoria en una población. Estas distribuciones son importantes en estadística porque permiten hacer inferencias sobre una población basándose en una muestra de datos. Estas distribuciones tienen funciones de densidad o de masa de probabilidad asociadas que describen la probabilidad de que la variable aleatoria tome un valor específico o esté dentro de cierto intervalo específico.
La distribución de Bernoulli es un tipo de distribución de probabilidad discreta que describe el resultado de un experimento aleatorio que puede tener dos resultados posibles: éxito (generalmente representado por 1) o fracaso (generalmente representado por 0). Esta distribución se caracteriza por un parámetro p, que es la probabilidad de éxito en un solo ensayo independiente. La función de masa de probabilidad de la distribución de Bernoulli está dada por:
\[ f(x; p) = \begin{cases} p & \text{si } x = 1 \\ 1 - p & \text{si } x = 0 \end{cases} \]
Donde x es el resultado del experimento (0 para fracaso, 1 para éxito) y \(p\) es la probabilidad de éxito.
Supongamos que tenemos una especie de planta en la que la probabilidad de que una semilla germine correctamente (éxito) es del 0.8, mientras que la probabilidad de que no germine (fracaso) es del 0.2. Podemos modelar este experimento con una distribución de Bernoulli, donde el éxito se representa con 1 y el fracaso con 0.
# Definir la probabilidad de éxito
p <- 0.8
# Probabilidad de éxito
prob_exito <- p
cat("La probabilidad de éxito es:", prob_exito, "\n")
# Probabilidad de fracaso
prob_fracaso <- 1 - p
cat("La probabilidad de fracaso es:", prob_fracaso, "\n")En RStudio quedaría de la siguiente manera:
La distribución binomial es un modelo de probabilidad que describe el número de éxitos en una serie de ensayos independientes unos de otros, con un resultado de éxito o fracaso en cada ensayo. Los ensayos deben cumplir con las siguientes condiciones: el número fijo de ensayos (denotado como “n”), los ensayos son independientes y la probabilidad de éxito en cada ensayo es constante (denotada como “p”).
En resumen, la distribución binomial se utiliza para modelar el número de éxitos en un número planteado de ensayos independientes, donde cada ensayo tendrá como resultado solo dos opciones (éxito o fracaso), con una probabilidad fija de éxito en cada ensayo.
Un ejemplo de aplicación de la distribución binomial podría ser el estudio de la eficacia de un sistema de tratamiento de aguas residuales para eliminar un contaminante específico. Supongamos que se realiza un estudio para determinar la eficiencia de un sistema de filtración en la eliminación de un contaminante químico presente en el agua residual. Cada muestra de agua se considera un ensayo independiente, y el sistema de filtración tiene una probabilidad fija de éxito (eliminación del contaminante) en cada muestra. La distribución binomial podría utilizarse para modelar el número de muestras en las que el sistema de filtración tiene éxito en eliminar el contaminante, de acuerdo con el número total de muestras tomadas y la eficiencia conocida del sistema.
Para simular el ejemplo de la distribución binomial en R, podemos
usar la función rbinom para generar
muestras aleatorias. Supongamos que queremos simular la eliminación de
un contaminante químico en 20 muestras de agua, se sabe que la
probabilidad de que una muestra esté contaminada es del 0.1.
# Número total de muestras
n <- 20
# Probabilidad de que una muestra esté contaminada
p <- 0.1
# Valores posibles para el número de muestras contaminadas
x <- 0:n
# Función de masa de probabilidad (PMF) de la distribución binomial
pmf <- dbinom(x, size = n, prob = p)En RStudio quedaría de la siguiente manera:
La función pbinom en R se utiliza para
calcular la función de distribución acumulada (CDF) de una distribución
binomial. La distribución binomial modela el número de éxitos en una
secuencia de ensayos independientes, donde cada ensayo tiene una
probabilidad fija de éxito. La función
pbinom calcula la probabilidad de que el
número de éxitos sea menor o igual a un valor dado.
q: El valor hasta el cual se desea calcular la probabilidad acumulada.
size: El número total de ensayos.
prob: La probabilidad de éxito en un ensayo individual.
lower.tail : Un valor lógico que indica si se
calcula la probabilidad acumulada desde el lado inferior de la
distribución (menor o igual a q,
TRUE por defecto) o desde el lado superior
(mayor que q,
FALSE).
La función devuelve la probabilidad acumulada de que el número de
éxitos sea menor o igual a q en una
distribución binomial con parámetros size
y prob.
Veamos un ejemplo donde se calcula la probabilidad acumulada de obtener 5 o menos éxitos en 10 ensayos, donde la probabilidad de éxito en un ensayo individual es del 30%. Puedes ajustar los valores de n y p según tus necesidades y utilizar la función pbinom para calcular la probabilidad acumulada para diferentes valores de q.
# Definir los parámetros de la distribución binomial
n <- 10 # Número total de ensayos
p <- 0.3 # Probabilidad de éxito en un ensayo individual
# Calcular la probabilidad acumulada de obtener 5 o menos éxitos
q <- 5
prob_acumulada <- pbinom(q, size = n, prob = p)
# Imprimir el resultado
cat("La probabilidad acumulada de obtener 5 o menos éxitos es:", prob_acumulada, "\n")En RStudio quedaría de la siguiente manera:
La función qbinom en R se utiliza para
calcular el cuantil de una distribución binomial. Un cuantil es el valor
de la variable aleatoria que corresponde a una cierta probabilidad
acumulada. En el contexto de la distribución binomial, el cuantil es el
número de éxitos que se espera obtener en un número dado de ensayos,
dados una probabilidad de éxito en un ensayo individual y una
probabilidad acumulada.
p: La probabilidad acumulada deseada.
size: El número total de ensayos.
prob: La probabilidad de éxito en un ensayo individual.
lower.tail: Un valor lógico que indica si se debe calcular la cola inferior (TRUE, por defecto) o la superior (FALSE) del cuantil.
La función devuelve el cuantil correspondiente al valor p dado. Por
ejemplo, qbinom(0.5, 10, 0.3) devolverá el
cuantil para el cual la probabilidad acumulada de obtener ese valor o
menos es del 50% en una distribución binomial con 10 ensayos y una
probabilidad de éxito del 30%.
# Definir los parámetros de la distribución binomial
n <- 10 # Número total de ensayos
p <- 0.3 # Probabilidad de éxito en un ensayo individual
# Calcular el cuantil para una probabilidad acumulada específica
prob_acumulada <- 0.5
cuantil <- qbinom(prob_acumulada, n, p)
# Imprimir el resultado
print(paste("El cuantil para una probabilidad acumulada del 50% es:", cuantil))En RStudio quedaría de la siguiente manera:
La Distribución de Poisson es una distribución de probabilidad discreta que sirve para describir el número de eventos que ocurren en un intervalo de tiempo o espacio fijo, dado que estos eventos ocurren con una tasa promedio constante e independiente de cuánto tiempo o espacio haya transcurrido desde el último evento. En biología y en ingeniería ambiental, la Distribución de Poisson se utiliza para modelar la ocurrencia de eventos raros pero que suceden de manera aleatoria e independiente, como la llegada de especies invasoras a un ecosistema, el número de bacterias en una muestra de agua o la cantidad de lluvia en un área en un período de tiempo específico.
Para aplicar la Distribución de Poisson, es necesario conocer la tasa promedio de ocurrencia de los eventos (\(λ\), lambda). Con esta información, se pueden calcular diversas probabilidades, como la probabilidad de que ocurran exactamente \(k\) eventos en un intervalo dado \((P(X=k))\) o la probabilidad de que ocurran menos de \(k\) eventos \((P(X<k))\).
La Distribución de Poisson es especialmente útil cuando se cumplen ciertas condiciones, como eventos que ocurren de forma independiente, la tasa promedio de ocurrencia es constante y los eventos son raros en comparación con el intervalo de tiempo o espacio considerado. En biología, por ejemplo, puede aplicarse para modelar la tasa de mutaciones en una secuencia genética, la cantidad de individuos de una especie en un área determinada o el número de nacimientos en una población.
En ingeniería ambiental, la Distribución de Poisson se usa para modelar la frecuencia de fallas en sistemas, la contaminación por ciertas sustancias en un área geográfica específica o la ocurrencia de eventos extremos como inundaciones o sequías. Al comprender y aplicar la Distribución de Poisson, los investigadores y profesionales pueden tomar decisiones informadas sobre gestión ambiental, planificación urbana, control de calidad y otras áreas relacionadas con el medio ambiente.
Tomemos el ejemplo antes mencionado del número de bacterias que se encuentran en una muestra de agua en un intervalo de tiempo específico. Suponiendo que en promedio hay cinco bacterias por mililitro de agua.
# Parámetros de la Distribución de Poisson
lambda <- 5 # Tasa promedio de bacterias por mililitro de agua
volumen_muestra <- 1 # Volumen de la muestra en mililitros
# Generar secuencia de valores para el eje x (número de bacterias)
x <- 0:15
# Calcular la probabilidad de que haya x bacterias en la muestra
probabilidades <- dpois(x, lambda * volumen_muestra)
# Graficar la Distribución de Poisson
plot(x, probabilidades, type = "h", lwd = 10, col = "lightgreen",
xlab = "Número de bacterias", ylab = "Probabilidad",
main = "Distribución de Poisson para bacterias en una muestra de agua")En RStudio quedaría de la siguiente manera:
Veamos otro ejemplo donde modelamos la cantidad de contaminantes en un cuerpo de agua, como un río, en un cierto intervalo de tiempo. Supongamos que, en promedio, se detectan 5 contaminantes por semana en un río en particular.
# Parámetros de la Distribución de Poisson
lambda <- 5 # Tasa promedio de contaminantes por semana
n <- 20 # Número máximo de contaminantes a considerar en la gráfica
# Generar secuencia de valores para el eje x (número de contaminantes)
x <- 0:n
# Calcular la probabilidad de que haya x contaminantes
probabilidades <- dpois(x, lambda)
# Graficar la Distribución de Poisson
plot(x, probabilidades, type = "h", lwd = 10, col = "lightblue",
xlab = "Número de contaminantes por semana", ylab = "Probabilidad",
main = "Distribución de Poisson para Contaminantes en un Río")
# Calcular y agregar la línea punteada roja para la media
media_poisson <- lambda
abline(v = media_poisson, col = "red", lty = 2)
# Agregar texto explicativo sobre la media
text(media_poisson + 1, max(probabilidades) / 2,
"Media de la Distribución de Poisson", pos = 2, col = "red")En RStudio quedaría de la siguiente manera:
Las funciones de densidad de probabilidad habituales son funciones matemáticas que representan la distribución de probabilidad de una variable aleatoria. Estas funciones indican cómo se distribuyen las probabilidades de los distintos valores que puede asumir la variable aleatoria.
La Distribución Uniforme es un tipo de distribución de probabilidad
continua en la que cada valor dentro de un intervalo dado tiene la misma
probabilidad de ocurrir. En otras palabras, todos los valores posibles
dentro del intervalo tienen una densidad de probabilidad constante. Esto
significa que la probabilidad de que una variable aleatoria caiga en
cualquier subintervalo del intervalo dado es proporcional al tamaño de
ese subintervalo en relación con el tamaño total del intervalo. Veámoslo
gráficamente para una mejor comprensión y además usaremos la función
dunif que calcula la densidad de
probabilidad de la distribución uniforme en un punto específico o en un
vector de puntos.
x: El punto o vector de puntos en los que se calculará la densidad de probabilidad.
min: El límite inferior del rango de la distribución uniforme (por defecto es 0).
max: El límite superior del rango de la distribución uniforme (por defecto es 1).
log: Un valor lógico que indica si se devuelve el logaritmo natural de la densidad en lugar de la densidad en sí (por defecto es FALSE).
Ahora veamos el script:
# Definir los parámetros de las distribuciones uniformes
x1 <- runif(1000, -0.4, 1.1)
x2 <- runif(1000, 0.223, 0.410)
# Crear el gráfico
par(mfrow=c(1,2))
hist(x1, prob=TRUE, col="skyblue", main="X ~ UNIF(-0.4, 1.1)", xlab="Valores", ylab="Densidad")
curve(dunif(x, -0.4, 1.1), add=TRUE, col="blue", lwd=2)
hist(x2, prob=TRUE, col="salmon", main="X ~ UNIF(0.223, 0.410)", xlab="Valores", ylab="Densidad")
curve(dunif(x, 0.223, 0.410), add=TRUE, col="red", lwd=2)En RStudio quedaría de la siguiente manera:
Las curvas sobre los histogramas muestran las funciones de densidad de probabilidad de las distribuciones uniformes correspondientes.
Ahora veamos un ejemplo que representa una muestra de tamaños de organismos en un ecosistema, generados de forma uniforme entre 0.1 y 1 metro. El histograma muestra la distribución de estos tamaños, y la curva representa la función de densidad de probabilidad uniforme para este rango de tamaños.
# Generar datos simulados de tamaños de organismos
tamaños <- runif(100, 0.1, 1) # Supongamos que los tamaños van de 0.1 a 1 metro
# Crear histograma de los tamaños
hist(tamaños, breaks=10, col="lightblue", main="Distribución de Tamaños de Organismos", xlab="Tamaño (metros)", ylab="Frecuencia")
# Agregar la densidad de probabilidad uniforme
curve(dunif(x, 0.1, 1), add=TRUE, col="darkblue", lwd=2)En RStudio quedaría de la siguiente manera:
La distribución normal, también conocida como la distribución de Gauss, es una de las distribuciones de probabilidad más importantes en estadística. Se caracteriza por ser simétrica alrededor de su media, con la forma de una campana. La distribución normal está determinada por dos parámetros: su media \(μ\) y su desviación estándar \(σ\). La función de densidad de probabilidad de la distribución normal está dada por la fórmula:
\[f(x∣μ,σ^2 )=1/√(2πσ^2 ) e^(-(x-μ)^2/(2σ^2 )) \]
Donde:
\(x\) es la variable aleatoria.
\(μ\) es la media de la distribución.
\(σ^2\) es la varianza de la distribución.
La distribución normal es importante porque muchos fenómenos naturales y sociales tienden a distribuirse de manera aproximadamente normal. Además, es fundamental en la teoría de la inferencia estadística y se utiliza en numerosos campos de la biología y la ingeniería ambiental.
Los aspectos claves a considerar en la Distribución Normal son los siguientes:
Teóricamente, X puede tomar cualquier valor de \(−∞ a ∞\).
Como se mencionó anteriormente, los parámetros \(µ\) y \(σ\) describen directamente la media y la desviación estándar de la distribución, siendo el cuadrado de esta última, \(σ ^2\), la varianza.
En la práctica, el parámetro de media es finito \(-∞ < µ < ∞\), y el parámetro de desviación estándar es estrictamente positivo y finito \(0 < σ < ∞\).
Si tienes una variable aleatoria \(X ∼ N(µ,σ)\), entonces puedes crear una nueva variable aleatoria \(Z = (X − µ)/σ\), lo que significa que \(Z ∼ N(0,1)\). Esto se conoce como estandarización de \(X\).
Aquí tienes un script para ejemplificar la Distribución Normal donde
se crea una secuencia de valores x entre -5 y 5,
seq para crear una secuencia fina de
valores para x y se calcula la densidad de probabilidad utilizando la
función dnorm con media=0 y desviación
estándar=1, para finalmente graficar con la función
plot.
# Crear una secuencia de valores para X
x <- seq(-5, 5, length=100)
# Calcular la densidad de probabilidad para cada valor de X
y <- dnorm(x, mean=0, sd=1)
# Graficar la distribución normal
plot(x, y, type="l", lwd=2, col="blue",
xlab="Valores de X", ylab="Densidad de probabilidad",
main="Distribución Normal")En RStudio quedaría de la siguiente manera:
Tip: en el renglón inmediato a las siguientes instrucciones manda llamar la variable y para que se impriman en la consola la secuencia de valores.
La función pnorm obtiene las
probabilidades del lado izquierdo bajo la densidad normal especificada.
Al igual que con dnorm, si no se proporcionan valores para los
parámetros, R establece automáticamente mean=0 y sd=1. Tambien puedes
encontrar diferencias de resultados de
pnorm para encontrar cualquier área
deseada cuando proporcionas los valores deseados en el argumento \(q\). Por ejemplo:
# Calcular la probabilidad acumulada para x = 1 en una distribución normal estándar
probabilidad <- pnorm(1)
print(probabilidad)
# Calcular la probabilidad acumulada para x = 2 en una distribución normal estándar
probabilidad <- pnorm(2)
print(probabilidad)
# Calcular la probabilidad acumulada para x = -1 en una distribución normal estándar
probabilidad <- pnorm(-1)
print(probabilidad)En RStudio quedaría de la siguiente manera:
Lo anterior ejemplifica el uso de la función
pnorm (considera que puede haber algunos
errores de redondeo menores en este tipo de cálculos). Para verificar lo
anterior tenemos el siguiente script:
xvals <- seq(-5, -2, length=300)
fx <- dnorm(xvals, mean=-3.42, sd=0.2)
plot(xvals, fx, type="l", xlim=c(-4.4, -2.5), main="Distribución N(-3.42,0.2)", xlab="x", ylab="f(x)")
abline(h=0, col="gray")
abline(v=c(-3.62, -3.22), lty=3:2)
legend("topleft", legend=c("-3.62\n(media - 1 desv. estándar)", "\n-3.22\n(media + 1 desv. estándar)"), lty=2:3, bty="n")En RStudio quedaría de la siguiente manera:
Ahora bien, puedes añadir el área sombreada entre \(µ ± σ\), utilizando
polygon, para lo cual necesitas los
vértices de la forma de interés. Para obtener una curva suave, utiliza
la secuencia fina xvals y el correspondiente fx como se define en el
código, y utiliza el subconjunto de vectores lógicos para restringir la
atención a aquellas ubicaciones de \(x\) tales que \(−3.62 ≤ x ≤ −3.22\).
xvals <- seq(-5, -2, length=1000)
mu <- -3.42
sigma <- 0.2
fx <- dnorm(xvals, mean=mu, sd=sigma)
plot(xvals, fx, type="l", xlim=c(-4.4, -2.5), ylim=c(0, 5), xlab="x", ylab="f(x)",
main="Distribución N(-3.42, 0.2)")
abline(h=0, col="gray")
abline(v=c(mu-1*sigma, mu+1*sigma), lty=3:3)
polygon(c(mu-1*sigma, xvals[xvals <= mu-1*sigma], mu-1*sigma), c(0, fx[xvals <= mu-1*sigma], 0), col="gray")
legend("topleft", legend=c("-3.62\n(media - 1 sd)", "\n-3.22\n(media + 1 sd)"), lty=2:3, bty="n")En RStudio quedaría de la siguiente manera:
Aquí tienes un ejemplo de la distribución normal utilizando los datos de las longitudes y anchos de carapacho y plastrón de tortugas, primero necesitaríamos tener una muestra de datos para poder calcular la media y la desviación estándar. Una vez que tengamos esos valores, podemos utilizar la función dnorm para generar la curva de densidad de probabilidad normal.
# Ejemplo de datos de longitud del carapacho de tortugas
longitud_carapacho <- c(200, 210, 220, 230, 240, 250, 260, 270, 280, 290)
# Calcular la media y la desviación estándar
media <- mean(longitud_carapacho)
desviacion_estandar <- sd(longitud_carapacho)
# Crear una secuencia de valores para x
xvals <- seq(190, 300, length=1000)
# Calcular la densidad de probabilidad para cada valor de x
fx <- dnorm(xvals, mean=media, sd=desviacion_estandar)
# Graficar la distribución normal
plot(xvals, fx, type="l", xlim=c(190, 300), xlab="Longitud carapacho (mm)", ylab="Densidad de probabilidad",
main="Distribución Normal de Longitud de Carapacho de Tortugas")
# Definir los límites de la zona sombreada
limite_inferior <- media - desviacion_estandar
limite_superior <- media + desviacion_estandar
# Crear los vértices para la zona sombreada
vertices <- data.frame(
x = c(limite_inferior, seq(limite_inferior, limite_superior, length=100), limite_superior),
y = c(0, dnorm(seq(limite_inferior, limite_superior, length=100), mean=media, sd=desviacion_estandar), 0)
)
# Agregar el área sombreada al gráfico
polygon(vertices, col="skyblue", border=NA)Este código agregará un área sombreada entre ±1 desviación estándar de la media en tu gráfico de distribución normal de la longitud del carapacho de tortugas. Puedes ajustar los valores de limite_inferior y limite_superior para cambiar el intervalo de la zona sombreada según tus necesidades.
En RStudio quedaría de la siguiente manera:
Ahora bien, para importar datos de un
archivo CSV y utilizarlos en el script, primero necesitas asegurarte de
que tienes el paquete
readr instalado e
importado. Luego, puedes usar la función read_csv para
cargar los datos desde el archivo CSV.
# Ejemplo de datos de longitud del carapacho de tortugas
# longitud_carapacho <- c(200, 210, 220, 230, 240, 250, 260, 270, 280, 290)
# Importar datos desde un archivo CSV (previamente guardado desde Excel)
# datos_tortugas <- read.csv("ruta/del/archivo/datos_tortugas.csv")
# Usar los datos de longitud del carapacho de tortugas del dataset importado
# longitud_carapacho <- datos_tortugas$Longitud_carapacho_mm
# Calcular la media y la desviación estándar
media <- mean(longitud_carapacho)
desviacion_estandar <- sd(longitud_carapacho)
# Crear una secuencia de valores para x
xvals <- seq(190, 300, length=1000)
# Calcular la densidad de probabilidad para cada valor de x
fx <- dnorm(xvals, mean=media, sd=desviacion_estandar)
# Graficar la distribución normal
plot(xvals, fx, type="l", xlim=c(190, 300), xlab="Longitud carapacho (mm)", ylab="Densidad de probabilidad",
main="Distribución Normal de Longitud de Carapacho de Tortugas")
# Definir los límites de la zona sombreada
limite_inferior <- media - desviacion_estandar
limite_superior <- media + desviacion_estandar
# Crear los vértices para la zona sombreada
vertices <- data.frame(
x = c(limite_inferior, seq(limite_inferior, limite_superior, length=100), limite_superior),
y = c(0, dnorm(seq(limite_inferior, limite_superior, length=100), mean=media, sd=desviacion_estandar), 0)
)
# Agregar el área sombreada al gráfico
polygon(vertices, col="skyblue", border=NA)Tip: En este script, debes reemplazar “ruta/del/archivo/datos_tortugas.csv” con la ruta real donde guardaste el archivo CSV de Excel con los datos de las tortugas.
La función qnorm se utiliza para
calcular los cuantiles de la distribución normal. Un cuantil es un valor
en una distribución que divide a los datos en partes iguales, de modo
que una fracción dada de los datos está por debajo de ese valor. En el
caso de la distribución normal estándar (media = 0, desviación estándar
= 1), qnorm devuelve el valor
correspondiente al percentil especificado.
Por ejemplo, qnorm(0.5) devuelve 0, ya
que el percentil 0.5 (o mediana) de una distribución normal estándar es
0. qnorm(0.95) devuelve aproximadamente
1.645, ya que el 95% de los datos en una distribución normal estándar
están por debajo de 1.645 desviaciones estándar por encima de la
media.
La sintaxis básica de qnorm es
qnorm(p, mean = 0, sd = 1), donde
p es el percentil deseado y mean y
sd son opcionales y representan la media y la desviación
estándar de la distribución normal, respectivamente. Si no se
especifican, se asumen valores predeterminados de 0 y
1, respectivamente.
El siguiente ejemplo muestra los cuantiles de la distribución normal
estándar en función de los percentiles. Los cuantiles se calculan
utilizando la función qnorm con una
secuencia de percentiles del 1 al 99%. Luego, se grafican los cuantiles
en el eje y contra los percentiles en el eje x. Las líneas de referencia
en el gráfico muestran el cuantil para el percentil 0.5 (que es la
mediana) y el cuantil 0 (que es la media de la distribución normal
estándar).
# # Cuantiles de la distribución normal estándar
percentiles <- seq(0.01, 0.99, by = 0.01)
cuantiles <- qnorm(percentiles)
# Graficar los cuantiles
plot(percentiles, cuantiles, type = "l", col = "blue", lwd = 2,
xlab = "Percentil", ylab = "Cuantil",
main = "Cuantiles de la Distribución Normal Estándar")
# Añadir líneas de referencia
abline(h = 0, col = "gray", lty = 2)
abline(v = 0.5, col = "red", lty = 2)En RStudio quedaría de la siguiente manera:
Recuerda que la función q opera con base en la probabilidad de la cola inferior (izquierda). Por lo tanto, para encontrar un cuantil basado en una probabilidad de la cola superior (derecha), es necesario restarla de la probabilidad total de 1.
En algunos métodos y modelos estadísticos, es común suponer que los datos observados siguen una distribución normal. Puedes verificar esta suposición utilizando los cuantiles teóricos de la distribución normal, obtenidos con la función qnorm. Calcula un rango de valores de cuantiles para tus datos observados y compáralos con los cuantiles de una distribución normal estándar. Esta herramienta visual se conoce como un gráfico cuantil-cuantil normal o QQ plot y es útil cuando se visualiza junto con un histograma. Si los puntos trazados no se alinean en una línea recta, entonces los cuantiles de tus datos no coinciden con los de una distribución normal, y la suposición de que tus datos son normales podría no ser válida.
Para realizar un QQ plot, puedes utilizar la función
qqnorm, que toma tus datos en bruto y
genera el gráfico correspondiente. Por ejemplo, si quieres verificar si
los pesos de un conjunto de datos siguen una distribución normal, puedes
utilizar esta función.
# Ejemplo de datos de temperatura ambiental
temperaturas <- c(18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65)
# Calcular la media y la desviación estándar
media <- mean(temperaturas)
desviacion_estandar <- sd(temperaturas)
# Crear una secuencia de valores para x
xvals <- seq(10, 70, length=1000)
# Calcular la densidad de probabilidad para cada valor de x
fx <- dnorm(xvals, mean=media, sd=desviacion_estandar)
# Graficar la distribución normal
plot(xvals, fx, type="l", xlim=c(10, 70), xlab="Temperatura (°C)", ylab="Densidad de probabilidad",
main="Distribución Normal de Temperaturas Ambientales")
# Definir los límites de la zona sombreada
limite_inferior <- media - desviacion_estandar
limite_superior <- media + desviacion_estandar
# Crear los vértices para la zona sombreada
vertices <- data.frame(
x = c(limite_inferior, seq(limite_inferior, limite_superior, length=100), limite_superior),
y = c(0, dnorm(seq(limite_inferior, limite_superior, length=100), mean=media, sd=desviacion_estandar), 0)
)
# Agregar el área sombreada al gráfico
polygon(vertices, col="skyblue", border=NA)
# Mostrar histograma
hist(temperaturas, breaks=10, col="lightblue", xlab="Temperatura (°C)", ylab="Frecuencia",
main="Histograma de Temperaturas Ambientales")
# QQ plot
qqnorm(temperaturas)
qqline(temperaturas, col = 2)En RStudio quedaría de la siguiente manera:
Recuerda que puedes cambiar la instrucción donde se generan el vector de datos de temperaturas por datos importados desde Excel o de tipos csv con read.csv o read.xlsx según sea el caso.
La función rnorm se utiliza para
generar números aleatorios a partir de una distribución normal. Toma
como argumentos el número de muestras que deseas generar
(n), la media
(mean) y la desviación estándar
(sd) de la distribución normal. Por
ejemplo, si deseas generar 100 números aleatorios de una distribución
normal con media 0 y desviación estándar 1, puedes usar
rnorm(100, mean = 0, sd = 1).
Ahora bien, puedes usar la función rnorm especificando los valores de n, mean (media) y sd (desviación estándar) de la siguiente manera:
# Generar 7 números aleatorios de una distribución normal con media mu y desviación estándar sigma
n <- 7
mu <- 0
sigma <- 1
datos <- rnorm(n, mean = mu, sd = sigma)Ambos ejemplos quedarían en RStudio de la siguiente manera:
Podemos usar rnorm,
qqnorm, y
qqline para examinar en qué medida el
conjunto de datos hipotéticamente observados, son verdaderamente
normales y como varían en el contexto de un gráfico QQ.
El siguiente código genera 51 valores normales estándar y produce un gráfico QQ normal correspondiente, luego hace lo mismo para un conjunto de datos separado de n = 510.
# Generar datos simulados
datos_simulados1 <- rnorm(n=51)
datos_simulados2 <- rnorm(n=510)
# Crear gráficos QQ normales
qqnorm(datos_simulados1, main="Gráfico QQ normal de datos generados N(0,1); n=51")
qqline(datos_simulados1, col="gray")
qqnorm(datos_simulados2, main="Gráfico QQ normal de datos generados N(0,1); n=510")
qqline(datos_simulados2, col="gray")En RStudio quedaría de la siguiente manera:
Recuerda que puedes ver la gráfica en una ventana por separado dando clic en el botón zoom del panel inferior izquierdo. Tendrías algo asi:
Veamos ahora un ejemplo aplicado de cómo podrías usar rnorm con datos simulados de altura de plantas de flora endémica del estado de Tabasco, México:
# Generar datos ficticios de altura de árboles
altura_encino <- rnorm(100, mean = 15, sd = 2) # Altura promedio 15 m, desviación estándar 2 m
altura_palo_rosa <- rnorm(100, mean = 10, sd = 1.5) # Altura promedio 10 m, desviación estándar 1.5 m
# Crear un vector combinado de alturas
alturas <- c(altura_encino, altura_palo_rosa)
# QQ plot
qqnorm(alturas)
qqline(alturas, col = "red")
# Agregar etiquetas
legend("topleft", legend="Altura de Arboles", pch=20, col="black")En RStudio quedaría de la siguiente manera:
La distribución t de Student ’s es una distribución de probabilidad continua generalmente utilizada cuando se trata con estadísticas estimadas a partir de una muestra de datos. Es muy parecida a la distribución normal estándar: tiene forma de campana, es simétrica y unimodal, y está centrada en cero. La diferencia es que mientras que una distribución normal se utiliza típicamente para tratar con una población, la distribución t trata con una muestra de una población.
Para la distribución \(t\) no tienes que definir parámetros per se, pero debes elegir la distribución \(t\) apropiada a través de un entero estrictamente positivo \(ν > 0\); esto se denomina grados de libertad (\(gl\)), llamado así porque representa el número de componentes individuales en el cálculo de una estadística dada que son “libres de cambiar”. Asimila que a la distribución t como la representación de una familia de curvas y considerar los grados de libertad como el “selector” que utilizas para decirte qué versión particular de la densidad usar. La ecuación precisa para la densidad de la distribución \(t\) tampoco es especialmente útil en un entorno introductorio, aunque es útil recordar que la probabilidad total debajo de cualquier curva \(t\) es igual a \(1\).
Para una distribución \(t\), las funciones \(d\), \(da\), \(q\) y \(fva\) representan la densidad, la distribución acumulada (probabilidades izquierdas), el cuantil y las funciones de generación de variables aleatorias.
La fórmula general para la distribución t de Student es:
\[f(t;v)=(Γ((v+1)/2))/(√vπΓ (v/2) ) (1+t^2/v)^(-(v+1)/2)\]
La distribución \(t\) es similar a la distribución normal estándar, pero tiene colas más gruesas, lo que significa que es más probable que valores extremos ocurran en una muestra pequeña. A medida que el tamaño de la muestra aumenta, la distribución t se asemeja a la distribución normal estándar.
La distribución \(t\) es fundamental en la inferencia estadística, ya que proporciona una manera de cuantificar la incertidumbre asociada con estimaciones basadas en muestras pequeñas.
Los primeros argumentos, \(x\), \(q\), \(p\) y \(n\), respectivamente, proporcionan el valor (o valores) relevante para estas funciones; el segundo argumento en todas ellas son los grados de libertad \(ν\).
La mejor manera de tener una impresión de la familia \(t\) es a través de una visualización. El siguiente script muestra la distribución normal estándar, así como la curva de distribución \(t\) con \(ν = 1\), \(ν = 6\) y \(ν = 20\) grados de libertad.
# Secuencia de valores para x
x <- seq(-4, 4, length=1000)
# Densidad de probabilidad de la distribución normal estándar
dnorm_standard <- dnorm(x)
# Densidad de probabilidad de la distribución t con diferentes grados de libertad
dt_1 <- dt(x, df=1)
dt_6 <- dt(x, df=6)
dt_20 <- dt(x, df=20)
# Gráfico de las distribuciones
plot(x, dnorm_standard, type="l", col="blue", lwd=2, ylim=c(0, 0.4),
xlab="Valor", ylab="Densidad de probabilidad", main="Distribución Normal vs t-distribution")
lines(x, dt_1, col="red", lty=2, lwd=2)
lines(x, dt_6, col="green", lty=3, lwd=2)
lines(x, dt_20, col="purple", lty=4, lwd=2)
# Leyenda
legend("topright", legend=c("Normal", "t-distribution (df=1)", "t-distribution (df=6)", "t-distribution (df=20)"),col=c("blue", "red", "green", "purple"), lty=c(1, 2, 3, 4), lwd=2)Este código genera un gráfico que muestra la distribución normal estándar en azul y la distribución \(t\) con diferentes grados de libertad en rojo \((df=1)\), verde \((df=6)\) y morado \((df=20)\).
La observación clave que se desprende del gráfico anterior es cómo la función de densidad t cambia en comparación con la distribución N(0,1) a medida que aumentan los grados de libertad (df). Para valores pequeños de ν cerca de 1, la distribución t es más baja en términos de su moda, con más probabilidad en colas notablemente más amplias. Se da que la densidad t se aproxima a la densidad normal estándar a medida que \(ν → ∞\). Como ejemplo, observa que la cola superior del 5 por ciento de la distribución normal estándar está definida por el siguiente valor:
Cuyo resultado es : [1] 1.644854 El mismo extremo superior de la distribución t se presenta con valores de df de ν = 1, ν = 6 y ν = 20, respectivamente.
Los resultados son:
[1] 6.313752
[1] 1.94318
[1] 1.724718
En contraste con la distribución normal estándar, la mayor concentración de probabilidad en las colas de la densidad t resulta en valores de cuantil más extremos para una probabilidad específica. Sin embargo, esta extensión disminuye a medida que aumenta el número de grados de libertad (df), lo que coincide con la mejora de la distribución t en su aproximación a la distribución normal estándar.
Una distribución de muestreo es una forma de distribución de probabilidad que se relaciona específicamente con las estadísticas extraídas de muestras. A menudo, los parámetros de estas distribuciones, como la media y la desviación estándar, son desconocidos y se estiman a partir de muestras. Cualquier estadística calculada a partir de una muestra se puede ver como una variable aleatoria, lo que significa que diferentes muestras de la misma población pueden proporcionar valores distintos para la misma estadística debido a la variabilidad inherente. Esto es fundamental para entender y modelar en análisis estadísticos.
En cuanto a la distribución de muestreo, su punto central de equilibrio es la media, mientras que su desviación estándar se conoce como error estándar. Esta distinción en la terminología refleja cómo las probabilidades ahora están asociadas con cantidades calculadas a partir de muestras en lugar de con observaciones directas. Las fórmulas teóricas para las distribuciones de muestreo dependen de las distribuciones originales de los datos y del tamaño de la muestra.
Esta sección discutirá estas ideas y ofrecerá ejemplos prácticos, centrándose en dos estadísticas comunes: la media de muestra y la proporción de muestra.
El promedio aritmético es posiblemente la medida más comúnmente utilizada para resumir un conjunto de datos y representar su centralidad. Desde una perspectiva matemática, la variabilidad inherente en una media de muestra estimada se explica de la siguiente manera: formalmente, consideramos una variable aleatoria llamada (\(\bar{X}\)), que representa la media de una muestra de tamaño \(n\) tomada de la variable aleatoria original X, donde las observaciones individuales se denotan como x1, x2,…, xn. Se asume que estas observaciones tienen una media verdadera finita, comprendida entre \(-∞ y ∞\), así como una desviación estándar verdadera que también es finita, con valores entre 0 e infinito. Las condiciones para determinar la distribución de probabilidad de una media de muestra dependen de si se conoce o no el valor de la desviación estándar.
Situación 1: Desviación Estándar Conocida
Cuando conocemos el valor verdadero de la desviación estándar \(σX\):
Si la variable \(X\) es normal, su distribución de muestreo también es normal, con una media \(μX\) y un error estándar \(σX /√n\).
Aun si \(X\) no es normal, su distribución de muestreo se aproxima a la normalidad cuando el tamaño de la muestra es grande, mejorando indefinidamente conforme \(n → ∞\), según el teorema del límite central (TLC).
Situación 2: Desviación Estándar Desconocida
En situaciones comunes, no conocemos la verdadera desviación estándar de la distribución de las mediciones originales que generaron los datos de muestra. En estos casos, sustituimos \(σX\) por \(sX\), la desviación estándar de los datos de la muestra. Sin embargo, esta sustitución introduce variabilidad adicional que afecta la distribución de la media de la muestra.
Los valores estandarizados de la distribución de muestreo de \(X\) siguen una distribución \(t\) con \(ν = n - 1\) grados de libertad; esta estandarización depende de la muestra.
Adicionalmente, si la \(n\) es pequeña, es necesario asumir que la distribución de \(X\) es normal para la validación de la distribución \(T\) de la muestra de \(X\).
La naturaleza de la distribución de muestreo de \(X\) depende de si conocemos la verdadera desviación estándar de las observaciones y del tamaño de la muestra. Aunque el TLC sugiere que la normalidad se aproxima incluso si la distribución de las observaciones originales no es normal, esta aproximación es más confiable con muestras grandes \((n ≥30)\). Si usamos \(sX\) para calcular el error estándar de \(X\), la distribución de muestreo es la distribución \(t\), lo que también es más confiable con muestras grandes \((n ≥ 30)\).
La distribución de la varianza muestral sigue una distribución chi-cuadrado \((χ²)\). Si tomamos una muestra de tamaño \(n\) de una población normalmente distribuida, entonces la varianza muestral \((s²)\) sigue una distribución chi-cuadrado con \(n - 1\) grados de libertad \(\chi^2_{n-1}\). En otras palabras, si \(X1, X2, ..., Xn\) son variables aleatorias independientes e idénticamente distribuidas, cada una con una distribución normal con media \(μ\) y varianza \(σ²\), entonces la variable aleatoria:
\[((n-1)s^2)/σ^2 \]
sigue una distribución chi-cuadrado con \(n - 1\) grados de libertad.
Esta distribución es asimétrica.
Un intervalo de confianza (IC) es un intervalo definido por un límite inferior (l) y un límite superior (u), utilizado para señalar los posibles valores de un parámetro de población verdadero correspondiente a los datos observados en la muestra. La interpretación de este intervalo permite establecer un “nivel de confianza” de que un parámetro verdadero de interés se encuentra entre tales límites (superior e inferior), a menudo expresado como un porcentaje. Los intervalos de confianza son una herramienta construida directamente a partir de la distribución de muestreo del estadístico de interés.
Es importante tener en cuenta que el nivel de confianza suele expresarse como un porcentaje, de modo que construirías un intervalo de confianza del \(100 × (1 - α)\) por ciento, donde \(0 < α < 1\) es una “cantidad de probabilidad de cola”; además, los tres intervalos más comunes se definen con \(α = 0.1\) (un intervalo del 90 por ciento), \(α = 0.05\) (un intervalo del 95 por ciento) o \(α = 0.01\) (un intervalo del 99 por ciento).
Un intervalo de confianza sirve para declarar que con una confianza del \(100 x (1 - α)%\) , el valor verdadero de cierto parámetro se encuentra en algún lugar entre el límite inferior y superior.
Los intervalos de confianza pueden construirse de diferentes maneras, dependiendo del tipo de estadístico y, por lo tanto, de la forma de la distribución de muestreo correspondiente. Para poblaciones o muestras con distribuciones simétricas, como la distribución \(t\) de Student o distribución normal, la estructura del intervalo es,
\[ IC_{(1-\alpha) \cdot 100\%} = (\text{parámetro estimado} \pm \text{valor crítico} \times \text{error estándar}) \]
donde el parámetro estimado es la estadística de muestra de interés, el valor crítico es un valor de la versión estandarizada de la distribución de muestreo que corresponde a α, y el error estándar es la desviación estándar de la distribución de muestreo. El producto del valor crítico y el error estándar se denomina componente de error del intervalo; la resta del componente de error del valor de la estadística proporciona el límite inferior, y la adición proporciona el límite superior.
El intervalo de confianza proporciona los límites que abarcan el porcentaje central \(100 × (1 − α)\) de la distribución de muestreo. Posteriormente, se utiliza para realizar interpretaciones sobre el valor del parámetro verdadero estimado por la estadística de interés.
Un intervalo de confianza para la media ofrece un rango de valores en el cual se pronostica que se encuentra la verdadera media de una población con un determinado nivel de confianza. Por ejemplo, si se dispone de una muestra aleatoria de n observaciones provenientes de una población con distribución normal, con parámetros $μ y σ^2 $. Para este intervalo hay dos opciones, la primera estructura de un IC es el caso donde σ^2 es conocida y la media muestral es \(\bar{X}_n\):
IC con una confianza del \(100(1- \alpha)\% = [ \bar{x} - Z_{\frac{\alpha}{2}} \frac{\sigma}{\sqrt{n}} \leq \mu \leq \bar{x} + Z_{\frac{\alpha}{2}} \frac{\sigma}{\sqrt{n}} ]\)
Donde \(Z_{\frac{\alpha}{2}} \text{ es } P(Z > Z_{\frac{\alpha}{2}}) = \frac{\alpha}{2}\) Ahora, en RStudio para \(Z_{\frac{\alpha}{2}}\) entonces la instrucción que nos da ese cuantil es \(Z_{\frac{\alpha}{2}} = \texttt{qnorm}\left(\frac{\alpha}{2}, \text{lower.tail} = F\right)\).
La segunda estructura es el caso de un IC donde \(\sigma^2\) es desconocida y la media muestral es \(\bar{X}_n\):
El IC para la media \(\mu\) con \(\sigma^2\) desconocida con una confianza del \(100(1-\alpha)\%\) es:
\[ IC = \left[ \bar{x}_n - t_{\frac{\alpha}{2},n-1} \frac{S}{\sqrt{n}} \leq \mu \leq \bar{x}_n + t_{\frac{\alpha}{2},n-1} \frac{S}{\sqrt{n}} \right] \]
Donde \(t_{\frac{\alpha}{2},n-1}\) es \(P(t > t_{\frac{\alpha}{2}}) = \frac{\alpha}{2}\).
La instrucción en RStudio para obtener \(t_{\frac{\alpha}{2}}\) es:
\[ \texttt{qt}(\alpha/2, n-1, \text{lower.tail} = F) \]
Veamos una aplicación en el siguiente script:
# Se desea estimar la concentración promedio del elemento G en la mezcla H,
# para lo cual se mostró una muestra aleatoria de n =36 mediciones de la mezcla H.
# Además se sabe que su distribución es normal con σ=.3. La concentración promedio
# se estimó 2.6. Calcular un intervalo de confianza al 95% para la concentración
# promedio.
alfa<- .05
n<- 36
media<- 2.6
desv_est <-.3
val_critico <-qnorm(alfa/2,lower.tail=F)
error_est <- desv_est/sqrt(n)
IC_Inf<- media - val_critico*error_est
IC_Sup<- media + val_critico*error_est
print(paste("El límite inferior es", IC_Inf,"y el límite de confianza superior es",IC_Sup))En RStudio quedaría de la siguiente manera:
Concluimos que los IC para la media con una confianza del 95% son 2.50 y 2.69.
Tip:Además
de usar la estructura del IC en RStudio, en el algunos casos podemos
usar la función t.test() cuando usamos a la distribución t
(desviación estándar desconocida) o z.test (la desviación
es conocida). La instrucción t.test() solo nos servirá cuando tengamos
vectores numéricos con la información de las muestras a comparar.
Verifica que tienes instalado la paquetería “BSDA”
Para usar t.test, los argumentos para el IC de la media
con varianza desconocida son: la muestra y el nivel de confianza,
observemos como se resuelve el siguiente script:
# Se sabe que la esperanza de vida del lagarto espinoso sigue una distribución normal.
# Se tomó una muestra aleatoria de 20 lagartos:
# 8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15
# Obtenga un intervalo de confianza del 95% para la media.
x<- c(8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15)
t<- t.test(x,conf.level = 0.95)
t$conf.intEl intervalo que se obtiene se extrae de la lista que arroja t.test, por eso llamamos a la variable $conf.int de nuestra t (la lista que crea t.test).
En RStudio quedaría de la siguiente manera:
Concluimos que con una confianza del 95%, la media estará entre 9.12 y 11.87.
La estructura de un IC para la varianza es:
IC con \(100(1-\alpha)\%\) de confianza: \[ IC = \left[ \frac{(n-1)S^2}{X_{\frac{\alpha}{2},n-1}^2} \leq \sigma^2 \leq \frac{(n-1)S^2}{X_{1-\frac{\alpha}{2},n-1}^2} \right] \]
Cuando usamos una tabla de probabilidad de una distribución Ji-Cuadrada de cola derecha, la notación para el valor crítico es \(X_{\frac{\alpha}{2}, n-1}^2\) para el límite inferior y \(X_{1-\frac{\alpha}{2}, n-1}^2\) para el límite superior, donde:
\(P\left(X^2_{\text{con } n-1} > X_{\frac{\alpha}{2}, n-1}^2\right) = \frac{\alpha}{2}\)
y
\(P\left(X^2_{\text{con } n-1} > X_{1-\frac{\alpha}{2}, n-1}^2\right) = 1-\frac{\alpha}{2}\)
En RStudio, si usamos la notación para la distribución de cola
derecha, obtendremos el cuantil con la instrucción
qchisq(α/2,n-1,lower.tail=F) y
qchisq(1- α/2,n-1,lower.tail=F), respectivamente.
Igualmente, podemos usar la función var.test(), donde
los argumentos serán el vector de información de la muestra y el nivel
de confianza.
Retomemos el ejemplo de los lagartos espinosos, para calcular un IC para la varianza. Veamoslo en el siguiente script:
# Se sabe que la esperanza de vida del lagarto espinoso sigue una distribución normal.
# Se tomó una muestra aleatoria de 20 lagartos:
# 8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15
# Obtenga un intervalo de confianza del 95% para la varianza.
x<- c(8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15)
n <- 20
s <- sd(x)
s2 <- var(x)
a<- .05
qchisq(a/2,n-1,lower.tail=F)
qchisq(1-(a/2),n-1,lower.tail=F)
IC_Inf<- ((n-1)*s2)/qchisq(a/2,n-1,lower.tail=F)
IC_Sup<- ((n-1)*s2)/qchisq(1-(a/2),n-1,lower.tail=F)
print(paste("El límite inferior es", IC_Inf,"y el límite superior es",IC_Sup))Concluimos que con una confianza del 95%, el límite inferior de la varianza es 5.02247529359059 y el límite superior es 18.5257614841545.
Existe también un intervalo de confianza para la diferencia de dos medias de dos muestras que provienen de poblaciones distribuidas normalmente, con parámetros $μ y σ^2 $. Esta diferencia sirve para determinar si existe una diferencia significativa entre las medias de esas muestras.
Para este intervalo hay tres casos:
IC con 100(1- α)% de confianza:\[ \left[ (\bar{x}_1 - \bar{x}_2) - Z_{\frac{\alpha}{2}} \sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}},\; (\bar{x}_1 - \bar{x}_2) + Z_{\frac{\alpha}{2}} \sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}} \right] \]
Donde \(Z_{\frac{\alpha}{2}}\) es \(P(Z > Z_{\frac{\alpha}{2}}) = \frac{\alpha}{2}\).
Ahora, en RStudio para \(Z_{\frac{\alpha}{2}}\), la instrucción que
nos da ese cuantil es qnorm(α/2,lower.tail=F) .
Veamos un ejemplo:
# Queremos comparar los niveles medios de dióxido de carbono (CO2) en el aire entre
# un área industrial altamente desarrollada y una zona rural con pocas actividades
# industriales durante 30 días, para eso se busca el intervalo de confianza del 96% que nos proporcionaría
# un rango dentro del cual es probable que se encuentre la verdadera diferencia media
# en los niveles de CO2 entre el área industrial y la zona rural en la población.
# Este análisis nos ayudaría a comprender mejor el impacto de las actividades
# industriales en la calidad del aire y, por lo tanto, en el medio ambiente.
# Del área industrial, la media de los niveles del C02 fue 500 ppm y se sabe que la varianza es 70; de la
# zona rural la media de los niveles del C02 fue de 200 ppm y varianza 55.
# Suponga los datos con varianza conocida.
a<-0.04
m1<-500
m2<-200
n1<- 30
n2 <-30
var1<-70
var2<-55
valor_critico<- qnorm(a/2,lower.tail=F)
error_est<- sqrt(((var1^2)/n1)+((var2^2)/n2))
lim_inf<- (m1-m2)-(valor_critico*error_est)
lim_sup<- (m1-m2)+(valor_critico*error_est)
print(paste("Con una confianza del 96%, el límite inferior es", lim_inf,"y el límite superior es",lim_sup))En RStudio quedaría de la siguiente manera:
Con una confianza del 96%, el límite inferior es 266.62 y el límite superior es 333.38.
IC con 100(1- α)% de confianza: \[ \left[ (\bar{x}_1 - \bar{x}_2) - t_{\frac{\alpha}{2}, n_1+n_2-2} \cdot S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}},\; (\bar{x}_1 - \bar{x}_2) + t_{\frac{\alpha}{2}, n_1+n_2-2} \cdot S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}} \right] \]
Sea
\[ S_p^2 = \frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2} \]
Donde \(t_{\frac{\alpha}{2}, n_1+n_2-2}\) se calcula en RStudio con la instrucción: \[ t_{\frac{\alpha}{2}, n_1+n_2-2} = \texttt{qt}\left(\frac{\alpha}{2}, n_1+n_2-2, \text{lower.tail} = F\right) \]
# Se desea conocer el Intervalo de confianza del 95% de la diferencia de los
# porcentajes medio de pacientes curados de acné con el uso de dos tratamientos distintos
# durante 10 años. Se supone que las varianzas son distintas pero iguales.
# t1= .50,.55,.58,.75,.77,.66,.90,.85,.90,.91
# t2= 0.78, 0.65, 0.92, 0.71, 0.84, 0.57, 0.96, 0.89, 0.73, 0.61
t1<- c(.50,.55,.58,.75,.77,.66,.90,.85,.90,.91)
t2<- c(0.78, 0.65, 0.92, 0.71, 0.84, 0.57, 0.96, 0.89, 0.73, 0.61)
T<- t.test(t1,t2,var.equal=TRUE, conf.level=.95)
T$conf.intPara este caso, usamos la instrucción de t.test, ahora argumentando a nuestra segunda variable y con var.equal=TRUE, indicamos que las varianzas son distintas pero iguales.
Concluimos que con una confianza del 95%, el IC de la diferencia de los porcentajes medios estará entre -.0166 y .1078.
IC con 100(1- α)% de confianza:
\[ \left[ (\bar{x}_1 - \bar{x}_2) - t_{\frac{\alpha}{2}, v} \sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}},\; (\bar{x}_1 - \bar{x}_2) + t_{\frac{\alpha}{2}, v} \sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}} \right] \]
Sea
\[ v = \frac{\left(\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}\right)^2}{\frac{\left(\frac{S_1^2}{n_1}\right)^2}{n_1 - 1} + \frac{\left(\frac{S_2^2}{n_2}\right)^2}{n_2 - 1}} \]
Donde $t_(α/2,v) $ se calcula en Rstudio con la instrucción
qt(α/2,v,lower.tail=F)
# Se obtuvo la siguiente información de dos muestras, se desea el contenido medio de ortofósforo químico
# en el agua del río Grijalva y el río Usumacinta.
# media desv. est n
# Grijalva 3.5 3 15
# Usumacinta 1.5 0.75 12
# Suponiendo que las observaciones provienen de poblaciones normales con varianzas distintas,
# encuentre un intervalo de confianza al 90% para la diferencia de contenido medio entre los dos ríos.
# Solución. Necesitamos el IC para la diferencia de medias con varianza desconocida y distintas.
m1<- 3.5
m2<- 1.5
s1 <-3
s2<- 0.75
n1 <- 15
n2<- 12
a <- 0.10
v <- (((s1^2/n1) + (s2^2/n2))^2) / ((((s1^2/n1)^2) / (n1-1)) + (((s2^2/n2)^2) / (n2-2)))
val_critico <- qt(a/2,v,lower.tail=F)
IC_Inf<- (m1-m2)- (val_critico* sqrt((s1^2/n1) + (s2^2/n2)))
IC_Sup<- (m1-m2)+ (val_critico* sqrt((s1^2/n1) + (s2^2/n2)))
print(paste("El límite inferior es", IC_Inf,"y el límite superior es",IC_Sup))En RStudio quedaría de la siguiente manera:
Tip: la instrucción t.test() solo nos servirá cuando tengamos vectores numéricos con la información de las muestras a comparar.
El cociente de varianzas se calcula para estimar el rango dentro del cual se espera que se encuentre el verdadero cociente de varianzas de dos poblaciones con un cierto nivel de confianza. Esto es útil en diversas situaciones donde se desea comparar la variabilidad entre dos poblaciones o grupos. Para calcular el intervalo de confianza para el cociente de varianzas estructura es la siguiente:
IC del 100(1- α)% de confianza= \[ \frac{S_1^2}{S_2^2} F_{1-\frac{\alpha}{2}, n_2-1, n_1-1} \leq \frac{\sigma_1^2}{\sigma_2^2} \leq \frac{S_1^2}{S_2^2} F_{\frac{\alpha}{2}, n_2-1, n_1-1} \]
Donde el valor crítico \(F_{1-\frac{\alpha}{2}, n_2-1, n_1-1}\) del límite inferior corresponde al valor que se encuentra en una tabla de probabilidad con distribución F de cola derecha, donde \(P(F_{\text{con } n_2-1 \text{ gl}, n_1-1 \text{ gl}} > F_{1-\frac{\alpha}{2}, n_2-1, n_1-1}) = 1 - \frac{\alpha}{2}\) y el valor crítico del límite superior \(F_{\frac{\alpha}{2}, n_2-1, n_1-1}\) es \(P(F_{\text{con } n_2-1 \text{ gl}, n_1-1 \text{ gl}} > F_{\frac{\alpha}{2}, n_2-1, n_1-1}) = \frac{\alpha}{2}\).
En RStudio, las instrucciones para los límites inferior y superior son \(qf(1 - \frac{\alpha}{2}, n_2-1, n_1-1, \text{lower.tail} = F)\) y \(qf\left(\frac{\alpha}{2}, n_2-1, n_1-1, \text{lower.tail} = F\right)\), respectivamente.
Tip: si tenemos los vector de la información de las muestras a las que les estamos comparando la varianza, usamos la instrucción var.test(), donde los argumentos serán, nuestros vectores y el nivel de confianza.
Veamos un ejemplo de la aplicación y cálculo de este intervalo de confianza con ambos métodos, en el siguiente script:
# Supongamos que estamos interesados en comparar la variabilidad de las temperaturas
# registradas en el municipio de Comalcalco por dos estaciones meteorológicas diferentes
# durante un período de 14 días. Queremos calcular un intervalo de confianza del 90%
# para el cociente de las varianzas de las temperaturas registradas por estas dos estaciones.
# Asuma que las muestras provienen de poblaciones normales.
# Método 1
x<- c(34,36,39,31,33,26,45,34,39,38,37,42,33,36)
y<- c(33,45,39,32,29,28,40,37,36,35,36,39,35,40)
v<- var.test(x,y,conf.level= 0.90)
v$conf.intEn RStudio quedaría de la siguiente manera:
Observemos que con una confianza del 90% el intervalo para el cociente de varianzas con la instrucción var.test() es (0.41,2.75).
# Método 2
s2_1 <- var(x)
s2_2 <- var(y)
n1<- 14
n2<- 14
a<-.10
qf(1-a/2,n2-1,n1-1,lower.tail = F)
qf(a/2,n2-1,n1-1,lower.tail = F)
IC_inf <- (s2_1/s2_2)*qf(1-a/2,n2-1,n1-1,lower.tail = F)
IC_sup <-(s2_1/s2_2)*qf(a/2,n2-1,n1-1,lower.tail = F)
print(paste("El límite inferior es", IC_inf,"y el límite superior es",IC_sup))En RStudio quedaría de la siguiente manera:
Vemos que el intervalo para el cociente de varianzas con una confianza del 90% usando la propia estructura del IC es (0.41,2.75).
Hay distintas maneras de graficar el intervalo de confianza, retomemos algunos ejemplos para observar sus gráficas.
# Se desea estimar la concentración promedio del elemento G en la mezcla H,
# para lo cual se mostró una muestra aleatoria de n =36 mediciones de la mezcla H.
# Además se sabe que su distribución es normal con σ=.3. La concentración promedio
# se estimó 2.6. Calcular un intervalo de confianza al 95% para la concentración
# promedio.
alfa<- .05
n<- 36
media<- 2.6
desv_est <-.3
val_critico <-qnorm(alfa/2,lower.tail=F)
error_est <- desv_est/sqrt(n)
IC_Inf<- media - val_critico*error_est
IC_Sup<- media + val_critico*error_est
print(paste("El límite inferior es", IC_Inf,"y el límite de confianza superior es",IC_Sup))
# Crear un dataframe para graficar
df <- data.frame(Variable = c("Intervalo de Confianza"),
Valor = c(media))
# Gráfico
ggplot(df, aes(x = Variable, y = Valor, ymin = IC_Inf, ymax = IC_Sup)) +
geom_point(color = "blue", size = 5) +
geom_errorbar(color = "red", width = 0.5) +
labs(title = "Intervalo de Confianza al 95% para la Concentración Promedio",
x = "", y = "Valor") +
theme_minimal() + ylim(2,3)+
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())El gráfico que se genera se ve así en RStudio:
# Se sabe que la esperanza de vida del lagarto espinoso sigue una distribución normal.
# Se tomó una muestra aleatoria de 20 lagartos:
# 8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15
# Obtenga un intervalo de confianza del 95% para la varianza.
x<- c(8, 12, 14, 7, 9, 10, 13, 11, 6, 8, 15, 7, 10, 12, 9, 11, 13, 14, 6, 15)
n <- 20
s <- sd(x)
s2 <- var(x)
a<- .05
qchisq(a/2,n-1,lower.tail=F)
qchisq(1-(a/2),n-1,lower.tail=F)
IC_Inf<- ((n-1)*s2)/qchisq(a/2,n-1,lower.tail=F)
IC_Sup<- ((n-1)*s2)/qchisq(1-(a/2),n-1,lower.tail=F)
print(paste("El límite inferior es", IC_Inf,"y el límite superior es",IC_Sup))
# Crear un dataframe para graficar
df <- data.frame(Varianza = c("Intervalo de Confianza"),
Valor = c(s2))
# Gráfico
ggplot(df, aes(x=Varianza, y=Valor)) +
geom_bar(width=0.3, fill="PINK", colour="black", stat="identity") +
geom_errorbar(aes(ymin=IC_Inf, ymax=IC_Sup), width = 0.2) +
ylab("Valor") + ggtitle("Intervalo de confianza al 95% para la varianza")Otro ejemplo:
# Queremos comparar los niveles medios de dióxido de carbono (CO2) en el aire entre
# un área industrial altamente desarrollada y una zona rural con pocas actividades
# industriales durante 30 días, para eso se busca el intervalo de confianza del 96% que nos proporcionaría
# un rango dentro del cual es probable que se encuentre la verdadera diferencia media
# en los niveles de CO2 entre el área industrial y la zona rural en la población.
# Este análisis nos ayudaría a comprender mejor el impacto de las actividades
# industriales en la calidad del aire y, por lo tanto, en el medio ambiente.
# Del área industrial, la media de los niveles del C02 fue 500 ppm y se sabe que la varianza es 70; de la
# zona rural la media de los niveles del C02 fue de 200 ppm y varianza 55.
# Suponga los datos con varianza conocida.
a<-0.04
m1<-500
m2<-200
n1<- 30
n2 <-30
var1<-70
var2<-55
valor_critico<- qnorm(a/2,lower.tail=F)
error_est<- sqrt(((var1^2)/n1)+((var2^2)/n2))
lim_inf<- (m1-m2)-(valor_critico*error_est)
lim_sup<- (m1-m2)+(valor_critico*error_est)
print(paste("Con una confianza del 96%, el límite inferior es", lim_inf,"y el límite superior es",lim_sup))
# Crear un dataframe para graficar
df <- data.frame(diferencia = c("Intervalo de Confianza"),
Valor = c(m1-m2))
# Gráfico
ggplot(df, aes(x=diferencia, y=Valor)) +
geom_bar(width=0.3, fill="RED", colour="black", stat="identity") +
geom_errorbar(aes(ymin=lim_inf, ymax=lim_sup), width = 0.2) +
ylab("Valor") + ggtitle("Intervalo de confianza al 96% para la diferencia de medias") En RStudio quedaría de la siguiente manera:
Otro tipo de gráfico de barras es el siguiente, donde usaremos datos generados aleatoriamente:
# Generar datos de ejemplo
set.seed(123)
datos <- rnorm(50, mean = 10, sd = 2) # muestra de datos
# Calcular intervalo de confianza para la muestra
intervalo_confianza <- t.test(datos)$conf.int
media <- mean(datos)
# Crear vector con los límites inferiores de cada intervalo de confianza
inferior <- intervalo_confianza[1]
# Crear vector con los límites superiores de cada intervalo de confianza
superior <- intervalo_confianza[2]
# Crear la gráfica
plot(1, media, type = "b", ylim = c(inferior - 1, superior + 1),
xlim = c(0.5, 1.5), xlab = "Muestra", ylab = "Media",
main = "Intervalo de Confianza para la Media")
# Agregar barras de error
segments(1, inferior, 1, superior)En RStudio quedaría de la siguiente manera:
Ampliamos la gráfica:
Una prueba de hipótesis es un cálculo estadístico que se utiliza para tomar decisiones basadas en datos observados. Se utiliza para determinar si hay suficiente evidencia en una muestra de datos para rechazar una afirmación (hipótesis nula), acerca de una población en favor de una afirmación alternativa (hipótesis alternativa.
Al iniciar una prueba de hipótesis, el primer paso es establecer las dos hipótesis: la hipótesis nula, que se considera como la hipótesis de referencia o de no cambio y es la afirmación asumida como verdadera, y la hipótesis alternativa, que es la afirmación que se busca probar en contra de la hipótesis nula. El analista siempre comienza asumiendo que la hipótesis nula (\(H_0\)) es verdadera y luego utiliza los datos muestrales para determinar si la evidencia respalda más la hipótesis alternativa (\(H_1\)) que la hipótesis nula (\(H_0\)). Finalmente, se llega a una de dos conclusiones: se rechaza \(H_0\) y se concluye que Ha es verdadera, o se acepta (no se rechaza) \(H_0\) como verdadera.
Las hipótesis nula y alternativa se denotan como \(H_0\) y \(H_1\), respectivamente, y se escriben de la siguiente manera:
\[ H_0: \ldots \\ H_1: \ldots \]
Usualmente, la hipótesis nula se define como una igualdad (\(=\)) a un valor nulo. Por el contrario, la hipótesis alternativa suele definirse en términos de una desigualdad con respecto al valor nulo, de hecho, puede haber tres tipos de hipótesis alternativa:
Cuando \(H_1\) se define en términos de una declaración de menos que, con <, es unilateral; a esto se le llama una prueba de cola inferior.
Cuando \(H_1\) se define en términos de una declaración de mayor que, con >, es unilateral; a esto se le llama una prueba de cola superior.
Cuando \(H_1\) se define simplemente en términos de una declaración diferente a, con ≠, es bilateral; a esto se le llama una prueba de dos colas.
A partir de las hipótesis, podremos ver que estadístico de prueba se ajusta más a los datos de nuestra población o muestra.
Un estadístico de prueba es una medida numérica calculada a partir de los datos de una muestra, que se utiliza para evaluar la validez de una hipótesis. El estadístico de prueba se compara con un valor crítico o se utiliza para calcular un valor p, que indica la probabilidad de obtener un resultado igual o más “extremo” que el observado si la hipótesis nula es cierta. El estadístico de prueba es una herramienta fundamental en la inferencia estadística y se utiliza para tomar decisiones sobre si rechazar o no la hipótesis nula en función de la evidencia proporcionada por los datos muestrales.
Hay diferentes tipos de estadísticos de prueba, el estadístico a usar depende de sobre qué estadístico se tienen las hipótesis, asi como la información que se tiene. Este tipo de información, en un ejemplo práctico, se proporciona en el planteamiento del problema de manera implícita o explícita.
El valor \(P\) representa la probabilidad que se utiliza para expresar la fuerza de la evidencia, si existe alguna, en contra de la hipótesis nula. De manera más precisa, se calcula como la probabilidad de obtener el estadístico de prueba observado, o uno más extremo, bajo la suposición de que la hipótesis nula es verdadera.
El proceso para calcular un valor \(P\) varía según el tipo de estadística en análisis y la naturaleza de la hipótesis alternativa. En este contexto, se emplean los siguientes conceptos:
En una prueba de cola inferior, el valor \(P\) representa la probabilidad en la cola izquierda de la distribución de muestreo relevante.
Para una prueba de cola superior, el valor \(P\) indica la probabilidad en la cola derecha.
En una prueba bilateral, el valor \(P\) es la suma de las probabilidades en ambas colas. Cuando la distribución de muestreo es simétrica (como en distribuciones normales o \(t\)), esto equivale al doble del área en una de las colas. En resumen, a medida que el estadístico de prueba se vuelve más extremo, el valor \(P\) tiende a disminuir. Y cuanto menor sea el valor \(P\), mayor será la evidencia estadística en contra de la hipótesis nula asumida.
En conclusión, cuanto más grande sea el estadístico de prueba, menor será el valor \(P\). Cuanto menor sea el valor \(P\), mayor será la cantidad de evidencia estadística en contra de la verdad supuesta de 〖$H_〗_0 $.
Para cada prueba de hipótesis, se asume un nivel de significancia, denotado como \(α\). Esto se utiliza para calificar el resultado de la prueba. El nivel de significancia define un punto de corte, en el cual decides si hay suficiente evidencia para considerar que \(H_0\) es incorrecta y favorecer en su lugar a \(H_1\).
Si el valor \(p\) es mayor o igual a \(α\), entonces se concluye que no hay evidencia suficiente en contra de la hipótesis nula, por lo tanto, se mantiene \(H_0\) en comparación con \(H_1\).
Si el valor \(p\) es menor a \(α\), entonces el resultado de la prueba es estadísticamente significante, esto implica que hay suficiente evidencia en contra de la hipótesis nula y por tanto, se rechaza a favor de la hipótesis alternativa.
La región crítica en una prueba de hipótesis es el conjunto de valores posibles para el estadístico de prueba que llevan a la decisión de rechazar la hipótesis nula. Estos valores críticos están determinados por el nivel de significancia de la prueba, denotado usualmente por \(α\) (alpha) y del tipo de prueba (de cola izquierda, cola derecha o de dos colas) . Cuando el valor del estadístico de prueba cae dentro de la región crítica, se rechaza la hipótesis nula en favor de la hipótesis alternativa.
En los próximos temas, se llevará a cabo la identificación de cada uno de los componentes mencionados mediante ejercicios prácticos, empleando la notación correspondiente para estos cálculos y utilizando RStudio como herramienta de apoyo.
Los estadísticos se calculan operando las variables según la estructura que se muestra para cada caso. Después definimos la región de rechazo, con ayuda de los cuantiles:
Si usamos el caso donde la varianza es conocida, usamos la
instrucción qnorm(p,lower.tail=F) donde p es \(\frac{\alpha}{2}\) o \(\alpha\), según sea el par de hipótesis; o
bien, el caso donde la varianza es desconocida y usamos
qt(p, n-1, lower.tail=F), donde p nuevamente es \(\frac{\alpha}{2}\) o \(\alpha\).
Veamos paso a paso como se realiza una prueba de hipótesis de la media en RStudio, con el siguiente script:
# Se ha observado el tiempo en que se degrada una bolsa de bioplásticos y se sabe
# que el tiempo sigue una distribución normal con varianza = 20 . Se desea probar que
# el tiempo promedio en que tarda en degradarse es mayor a 180 días. Los resultados de una
# muestra de 50 bolsas fueron: 184, 231, 172, 209, 221, 157, 164, 196, 215, 221, 222,
# 236, 195, 182, 163, 159, 211, 177, 223, 204, 170, 201, 157, 206, 231, 222, 184, 233,
# 232, 209, 229, 156, 194, 230, 190, 174, 218, 186, 199, 163, 197, 238, 171, 217, 159,
# 205, 198, 238, 226, 228. Considere un nivel de confianza del 90%.
#Nos piden PH para la media con varianza conocida
# Ho: mu ≤ 180 vs Ha: mu > 180
# llamamos x a nuestro vector con información de la muestra
x <- c (184, 231, 172, 209, 221, 157, 164, 196, 215, 221, 222, 236, 195, 182, 163, 159, 211,
177, 223, 204, 170, 201, 157, 206, 231, 222, 184, 233, 232, 209, 229, 156, 194, 230,
190, 174, 218, 186, 199, 163, 197, 238, 171, 217, 159, 205, 198, 238, 226, 228)
#estimamos la media
media_muestral<- mean(x)
#valor de mu que se está probando
mu <- 180
varianza <- 20
sd <- sqrt(20)
a <-.10 #a=(1-nivel de confianza)
n <- 50
#estadístico de prueba
zo <- (media_muestral-mu)/(sd/sqrt(n))
#Rechazamos Ho si zo > z(a)
qnorm(a,lower.tail = F)
if(zo>qnorm(a,lower.tail = F)) print("Rechazamos Ho con una confianza del 90%") else print("Con una confianza del 90% no rechazamos Ho")La instrucción if() nos ayuda a condicionar la
conclusión de nuestra prueba, si se cumple la condición de la región de
rechazo, entonces rechazamos la \(H_0\).
Este ejemplo se ve en la consola de la siguiente forma:
Como en los intervalos de confianza, en algunos casos podemos usar
t.test(), esta vez llamado a otro elemento de la lista que
nos arroja esta instrucción, veremos un ejemplo donde podemos hacer una
prueba de hipótesis de dos formas, primero utilizando al propio
estadístico y las fórmula:
# Se desea probar si un medidor de pH funciona correctamente,
# para lo cual se reunieron 10 muestras de sustancias muestrales,
# es decir, de pH= 7. Se procedió a medir el pH de cada sustancia,
# los resultados fueron los siguuientes:
# 7.07, 7, 7.1, 6.97, 7, 7.03, 7.01, 7.01, 6.98, 7.08
# ¿Se puede decir con una confianza del 95% que el medidor sirve correctamente?
# Método 1
# Nos piden PH para le media con varianza desconocida
# Ho: mu=7 vs Ha: mu≠7
x <-c(7.07, 7, 7.1, 6.97, 7, 7.03, 7.01, 7.01, 6.98, 7.08)
media_muestral <- mean(x)
mu <- 7
n <- 10
var_muestral<-var(x)
sd_muestral<-sd(x)
a <- .05
to <- (media_muestral- mu)/(sd_muestral/sqrt(n))
#Rechazo Ho si |to|>t(a/2,n-1)
if (abs(to) > qt(a/2,n-1,lower.tail = F)) print("Rechazamos Ho") else print("No rechazamos Ho")El resultado que se observa en la consola de RStudio es:
Con una confianza del 95%, no rechazamos $〖H_〗_0 $, no hay evidencia estadística para afirmar que \(μ\) es distinta de 7.
Y con t.test():
# Se desea probar si un medidor de pH funciona correctamente,
# para lo cual se reunieron 10 muestras de sustancias muestrales,
# es decir, de pH= 7. Se procedió a medir el pH de cada sustancia,
# los resultados fueron los siguuientes:
# 7.07, 7, 7.1, 6.97, 7, 7.03, 7.01, 7.01, 6.98, 7.08
# ¿Se puede decir con una confianza del 95% que el medidor sirve correctamente?
# Método 2
# Nos piden PH para le media con varianza desconocida
# Ho: mu=7 vs Ha: mu≠7
x <- c(7.07, 7, 7.1, 6.97, 7, 7.03, 7.01, 7.01, 6.98, 7.08)
t<-t.test(x,mu=7,conf.level=0.95)
# ¿Qué elementos forman parte de la lista de una prueba t?
names(t.test(x))
p_value<- t$p.value
#La conclusión será: Rechazamos Ho si p-value es menor al nivel de significancia a (alfa)
# y no rechazamos Ho si p-value es mayor a alfa
if(p_value<.05) print("Con una confianza del 95%, rechazamos Ho") else if (p_value>.05) print("Con una confianza del 95%, no rechazamos Ho")La conclusión resulta:
Observemos con ambos métodos, con una confianza del 95%, la conclusión es que no se rechaza 〖$H_〗_0 $, esto quiere decir que no hay suficiente evidencia estadística para demostrar que \(μ\) es diferente de 7.
Veamos cómo se realiza una prueba de hipótesis de la varianza en RStudio:
# Un biólogo está estudiando la variabilidad en el tamaño de las células de una
# especie particular de alga unicelular bajo ciertas condiciones de cultivo. El biólogo
# tiene una muestra de 15 células y quiere determinar con una confianza del 90% si la
# varianza en el tamaño de estas células es diferente del valor de referencia reportado
# en la literatura para esta especie en condiciones normales de crecimiento.El valor de
# referencia es que la varianza es de 25, y la varianza que se obtuvo de la muestra fue 40.
#Se nos pide una prueba de hipótesis para la varianza
# Ho: σ^2= 25 vs Ha: σ^2≠25
sigma_2<-25
s_2<-40
n<-15
a<-.10
chi_2<-((n-1)*(s_2))/sigma_2 #estadístico de prueba χo^2
chi_2
#Rechazamos Ho si χo^2 ∉ [ χ^2(1-a/2,n-1),χ^2(a/2,n-1)
qchisq(1-(a/2),n-1,lower.tail=F)
qchisq((a/2),n-1,lower.tail=F)
# Condicionamos el resultado
if(chi_2< qchisq(1-(a/2),n-1,lower.tail=F)|chi_2 >qchisq(a/2,n-1,lower.tail=F)) print("Rechazamos Ho") else if(qchisq(1-(a/2),n-1,lower.tail=F)<= chi_2 & chi_2 <= qchisq(a/2,n-1,lower.tail=F)) print("No rechazamos Ho")La instrucciones clave son, además de identificar nuestras variables
y asignarles un nombre, qchisq(p,n-1,lower.tail=F) donde p
es \(\frac{\alpha}{2}\) y \(\alpha\) , según la región de rechazo. Ese
valor será el que compararemos con nuestro estadístico de prueba.
Por automaticidad, condicionamos nuestra conclusión con ayuda de la
función if().
La conclusión se obtiene en la consola:
Con una confianza del 90%, no rechazamos Ho, por tanto no hay suficiente evidencia estadística para decir que la varianza es distinta de 25.
El primero paso es identificar todas las variables y traerlas al environment de RStudio. Con eso podremos calcular primero nuestra estadístico de prueba , después las instrucciones que serán clave para concluir si hay que rechazar o no a \(H_0\), serán las que nos ayuden a calcular la región de rechazo, o sea, los cuantiles.
Los cuantiles que son de utilidad en esta PH son
qnorm(a/2,lower.tail=F),
-(qnorm(a,lower.tail=F)) y
qnorm(a,lower.tail=F), según el par de hipótesis que
tengamos.
Para todos los casos, podemos automatizar la conclusión, con un
if(), donde la condición es que si se cumple el caso de la
región de rechazo, nos muestre “Se rechaza \(H_0\)”, por ejemplo,
if(abs(Zo)>qnorm(a/2,lower.tail=F)) print(“Rechazamos Ho”) else if(abs(Zo)<=qnorm(a/2,lower.tail=F)) print(“No rechazamos Ho”)
o if(to>t(a,v,lower.tail=F)) print(“Rechazamos Ho”)
Veamos cómo se realiza una prueba de hipótesis de la diferencia de medias con varianza conocida en RStudio:
# Se está analizando el gasto promedio de estudiantes de diferentes divisiones de la UJAT.
# Se sabe que la diferencia de medias entre los gastos promedio de estudiantes de la DACBIOL y DACB
# siguen una distribución normal con varianza = 50 para DACBIOL y varianza=65 para DACB
# Con a=.05, pruebe la hipótesis de que la diferencia de la media de las dos divisiones es mayor a 100.
Gastos_diarios <- read_excel("Downloads/Gastos diarios.xlsx")
# View(Gastos_diarios)
print(Gastos_diarios)
#Se nos pide una prueba de hipótesis para la diferencia de medias con varianza conocida
# Ho: (μ1-μ2)≤100 vs Ha: (μ1-μ2)>100
DACBIOL<- Gastos_diarios$DACBIOL
DACB<- Gastos_diarios$DACB
m1 <- mean(DACBIOL)
m2 <- mean(DACB)
n1<-length(DACBIOL)
n2<- length(DACB)
do<- 100
var1 <- 500
var2 <- 650
a<-.05
Zo<- ((m1-m2)-do)/ sqrt((var1/n1) + (var2/n2)) #Estadístico de prueba
Zo
#Rechazamos Ho si Zo>Z(a,lower.tail=F)
qnorm(a,lower.tail=F)
if(abs(Zo)>qnorm(a,lower.tail=F)) print("Rechazamos Ho")else if(abs(Zo)<=qnorm(a,lower.tail=F)) print("No rechazamos Ho")El Excel que se importó contiene los siguientes datos sobre el gasto promedio de 50 alumnos por división:
Y así se ven los resultados en la consola:
Con una confianza del 95%, rechazamos H_0, esto quiere decir que no hay evidencia estadística para afirmar que la diferencia de las medias es menor o igual a 100.
Analicemos un caso de una prueba de hipótesis de la diferencia de medias con varianza desconocida y distintas en RStudio:
Tip:
recordemos el uso de la instrucción t.test() cuando tenemos
dos variables (vectores).
# Se quiere investigar si hay una diferencia significativa en la altura promedio de dos
# variedades de plantas de tomate, A y B. La variedad A ha sido sometida a un nuevo tipo
# de fertilizante, mientras que la variedad B ha sido cultivada de manera estándar sin
# tratamiento adicional. Se sabe que sigue una distribución normal. Con una confianza del 90%, pruebe la hipótesis alternativa de que la diferencia
# de las medias de las plantas de tomate A y B, es diferente de 0. Las muestras fueron:
A<- c(1.17, 0.89, 1.44, 0.78, 1.32, 1.03, 1.25, 0.96, 1.12, 0.73, 1.39, 1.02, 1.21,
0.88, 1.47, 0.67, 1.15, 0.81, 1.26, 1.04, 1.35, 0.69, 1.07, 1.49, 1.11)
B<- c(2.09, 1.23, 1.95, 0.63, 1.32, 2.17, 1.04, 1.81, 2.35, 0.87, 1.59, 2.43,
0.72, 2.02, 1.46, 2.22, 0.98, 2.11, 1.68, 0.56, 2.30, 1.14, 1.77)
#Se nos pide una prueba de hipótesis para la diferencia de medias con varianzas desconocidas y distintas
# Ho: (μ1-μ2)=0 vs Ha: (μ1-μ2)≠0
m1 <- mean(A)
m2 <- mean(B)
n1<- 25
n2<- 23
s2_1<-var(A)
s2_2<- var(B)
a<-0.10
#Método 1
t<- t.test(A,B,alternative="two.sided",conf.level=.90)
names(t)
t$p.value
if(t$p.value>a) print("No rechazamos Ho") else if(t$p.value<a) print("Rechazamos Ho")En la consola de RStudio se vería de la siguiente manera:
Resultado usando el propio estadístico t y la región de rechazo:
# Se quiere investigar si hay una diferencia significativa en la altura promedio de dos
# variedades de plantas de tomate, A y B. La variedad A ha sido sometida a un nuevo tipo
# de fertilizante, mientras que la variedad B ha sido cultivada de manera estándar sin
# tratamiento adicional. Se sabe que sigue una distribución normal. Con una confianza del 90%, pruebe la hipótesis alternativa de que la diferencia
# de las medias de las plantas de tomate A y B, es diferente de 0. Las muestras fueron:
A<- c(1.17, 0.89, 1.44, 0.78, 1.32, 1.03, 1.25, 0.96, 1.12, 0.73, 1.39, 1.02, 1.21,
0.88, 1.47, 0.67, 1.15, 0.81, 1.26, 1.04, 1.35, 0.69, 1.07, 1.49, 1.11)
B<- c(2.09, 1.23, 1.95, 0.63, 1.32, 2.17, 1.04, 1.81, 2.35, 0.87, 1.59, 2.43,
0.72, 2.02, 1.46, 2.22, 0.98, 2.11, 1.68, 0.56, 2.30, 1.14, 1.77)
#Se nos pide una prueba de hipótesis para la diferencia de medias con varianzas desconocidas y distintas
# Ho: (μ1-μ2)=0 vs Ha: (μ1-μ2)≠0
m1 <- mean(A)
m2 <- mean(B)
n1<- 25
n2<- 23
s2_1<-var(A)
s2_2<- var(B)
a<-0.10
#Mètodo 2
#estadístico de prueba t
to <- (m1-m2)/ sqrt((s2_1/n1) + (s2_2/n2))
to
#Rechazamos Ho si |to|> qt(a/2,v,lower.tail=F)
v <- (((s2_1/n1) + (s2_2/n2))^2) / ((((s2_1/n1)^2) / (n1-1)) + (((s2_2/n2)^2) / (n2-2)))
qt(a/2,v, lower.tail=F)
if(abs(to)>qt(a/2,v, lower.tail=F)) print("Rechazamos Ho")else if(abs(to)<qt(a/2,v, lower.tail=F)) print("No rechazamos Ho")En RStudio se vería de la siguiente manera:
Obtuvimos el mismo resultado para el estadístico \(t\) y principalmente, la misma conclusión: con una confianza del 90%, no hay evidencia estadística para afirmar que la diferencia entre las medias, es 0.
En RStudio podemos calcular los cuantiles que delimitaran la región
de rechazo con las instrucciones qt(), por ejemplo para la
región de rechazo del primer conjunto de hipótesis será \(\underline{\text{qt}(1-\alpha/2, n_1-1,n_2-1,
\text{lower.tail}=F)}\) y \(\underline{\text{qt}\left(\frac{\alpha}{2}, n_1-1,
n_2-1, \text{lower.tail}=F\right)}\), para el límite inferior y
superior respectivamente.
# Se están investigando 53 chiquiguaos, se quiere probar que el largo del caparazón tiene
# la misma varianza que el ancho del caparazón. Los datos son los siguiente:
# library(readxl). Considere un nivel de confianza del 90%.
Chiquiguaos <- read_excel("Downloads/Chiquiguaos.xlsx")
print(Chiquiguaos)
#Se nos pide una prueba de hipótesis para el cociente de varianzas de dos poblaciones
#Ho:σ^2_1=σ^2_2 vs Ha: σ^2_1≠ σ^2_2
x<- Chiquiguaos$`Ancho caparazón`
y<- Chiquiguaos$`Largo caparazón`
var(x)
var(y)
n1<- 53
n2<- 53
a<- .9
Fo<- var(x)/ var(y) #Estadístico de prueba
#Rechazamos Fo si ∉ [ F(1-a/2,n1-1,n2-1),F(a/2,n1-1,n2-1]
linf<- qf(1-a/2,n1-1,n2-1,lower.tail=F)
lsup<- qf(a/2,n1-1,n2-1,lower.tail=F)
if(Fo < linf | Fo > lsup) print("Rechazamos Ho") else if(linf<= Fo & Fo <= lsup) print("No rechazamos Ho")En RStudio quedaría de la siguiente manera:
Concluimos que con una confianza del 90%, rechazamos Ho, podemos decir que no hay evidencia estadística suficiente para afirmar que el ancho yel largo de los caparazones de los chiquiguaos (Chelydra rossignonii) tienen la misma varianza.
Cuando se analizan todas estas variantes de pruebas de hipótesis estadísticas, se destaca un elemento recurrente: entender el significado de un valor p y su relevancia para el problema planteado en relación con las hipótesis. Dado que las pruebas de hipótesis estadísticas frecuentemente se utilizan en diversos ámbitos de investigación, resulta crucial examinar de manera concisa conceptos afines.
Hacer una prueba de hipótesis tiene como propósito obtener un valor p que permita cuantificar la evidencia en contra de la afirmación nula H0. Si este valor p es menor que un nivel de significancia predefinido α, usualmente establecido en 0.05 o 0.01, se rechaza la hipótesis nula a favor de la hipótesis alternativa, HA. Sin embargo, es importante señalar que esta metodología es objeto de críticas justificadas debido a que la elección de α es esencialmente arbitraria; por lo tanto, la decisión de rechazar o no la hipótesis nula puede variar únicamente en función del valor de α.
Al considerar el resultado correcto de una prueba específica, es necesario evaluar si H0 es verdadera o no. En caso de que H0 sea verdadera, sería adecuado retenerla; por el contrario, si HA es la verdadera, se debería rechazar H0. No obstante, es importante tener en cuenta que determinar esta “verdad” en la práctica es prácticamente imposible. Por tanto, resulta útil analizar teóricamente qué tan efectiva es una prueba de hipótesis en particular para llegar a una conclusión acertada.
Para evaluar la validez del rechazo o la retención de la hipótesis nula, es crucial identificar dos tipos de errores:
-El error de Tipo I ocurre cuando se rechaza incorrectamente una H0 verdadera. La probabilidad de cometer este tipo de error, en cualquier prueba de hipótesis, es equivalente al nivel de significancia α.
Si tu valor p es menor que α, rechazas la hipótesis nula. Sin embargo, si la nula es realmente verdadera, el α define directamente la probabilidad de que la rechaces incorrectamente. Esto se conoce como un error de Tipo I. En otras palabras, el nivel de significancia α representa la probabilidad de cometer un error de Tipo I al rechazar incorrectamente una hipótesis nula verdadera. Generalmente, α se fija de antemano en un valor pequeño, como 0.05 o 0.01, para controlar el riesgo de cometer este tipo de error. La aplicación de la Corrección de Bonferroni resulta fundamental debido a la presencia natural de errores de Tipo I, que se deben a la variación aleatoria. Este fenómeno nos conduce a abordar el desafío de las pruebas múltiples. Cuando llevas a cabo numerosas pruebas de hipótesis, es esencial ejercer precaución al informar simplemente la cantidad de resultados estadísticamente significativos, ya que conforme incrementas el número de pruebas, aumentas la probabilidad de obtener resultados erróneos. Por ejemplo, al realizar 20 pruebas con un nivel de significancia α = 0.05, en promedio una será un falso positivo; si llevas a cabo 40 o 60 pruebas, es probable que encuentres más falsos positivos.
La Corrección de Bonferroni ofrece una solución para atenuar el problema de las pruebas múltiples y reducir la incidencia de errores de Tipo I. Esta corrección sugiere que al realizar un total de N pruebas de hipótesis independientes, cada una con un nivel de significancia α, debes ajustar el nivel de significancia a αB = α/N para cualquier interpretación de la significancia estadística. No obstante, es importante señalar que esta corrección representa la solución más simple al problema de las pruebas múltiples y puede ser objeto de críticas por su enfoque conservador, lo cual puede presentar problemas cuando N es grande.
La implementación de la Corrección de Bonferroni y otras medidas correctivas se han desarrollado con el propósito de formalizar estrategias para prevenir la ocurrencia de errores de Tipo I en el contexto de las pruebas múltiples. Sin embargo, en términos generales, es suficiente tener en cuenta la posibilidad de que la hipótesis nula pueda ser verdadera, incluso si el valor p se considera pequeño.
Demostremos la tasa de error Tipo I mediante simulación numérica (generar aleatoriamente muestras de datos hipotéticas):
typeI.tester <- function(mu0, sigma, n, alpha, ITERACIONES = 10000) {
pvals <- rep(NA, ITERACIONES) # Inicializar vector para almacenar los valores p
# Iterar a través de las ITERACIONES
for (i in 1:ITERACIONES) {
temporary.sample <- rnorm(n = n, mean = mu0, sd = sigma) # Generar una muestra
temporary.mean <- mean(temporary.sample) # Calcular la media de la muestra
temporary.sd <- sd(temporary.sample) # Calcular la desviación estándar de la muestra
# Calcular el valor p usando la distribución t
pvals[i] <- 1 - pt((temporary.mean - mu0) / (temporary.sd / sqrt(n)), df = n - 1)
}
# Calcular la proporción de valores p menores que alpha (tasa de error Tipo I)
return(mean(pvals < alpha))
}
typeI.tester(mu0=0,sigma=1,n=40,alpha=0.05)La función typeI.tester ha sido diseñada con el propósito de generar ITERACIONES muestras provenientes de una distribución normal específica.
Puedes ajustar el número de ITERACIONES para crear menos muestras completas, lo que acelerará el tiempo de cálculo, aunque resultará en tasas simuladas con mayor variabilidad. Cada muestra completa, de tamaño n y compuesta por medidas hipotéticas, es generada utilizando la función rnorm, donde la media se establece igual al parámetro mu0 y la desviación estándar igual a sigma. El nivel de significancia deseado se define mediante el parámetro alpha. Dentro del bucle for, se calcula la media y la desviación estándar de cada muestra generada. El valor p calculado en cada iteración se guarda en un vector predefinido llamado pvals. Por lo tanto, el vector lógico pvals<alpha contiene valores TRUE/FALSE correspondientes; el valor TRUE indica el rechazo de la hipótesis nula, mientras que el valor FALSE indica su retención.
La tasa de error Tipo I se determina calculando la media de este vector lógico, lo que representa la proporción de TRUEs (es decir, la proporción general de “rechazos de hipótesis nulas”) obtenidos a partir de las muestras simuladas. Es importante recordar que las muestras se generan aleatoriamente, por lo que los resultados pueden variar ligeramente cada vez que se ejecuta la función. La validez de esta función radica en que las muestras generadas provienen de una distribución con la media realmente establecida en el valor nulo (es decir, μA = μ0). Por lo tanto, cualquier rechazo estadístico de esta afirmación, obtenido con un valor p menor que el nivel de significancia α, sería claramente incorrecto y puramente resultado de la variabilidad aleatoria.
Retomemos el script con el resultado en la consola:
La tasa de error Tipo I simulada se encuentra cercana al valor preestablecido de alfa=0.05.
Este resultado es comprensible desde un punto de vista teórico: si la distribución real tiene una media igual al valor nulo, es esperable observar esos valores “extremos” de las estadísticas de prueba en la práctica con una frecuencia igual a α. Sin embargo, la complejidad radica en que en la práctica la verdadera distribución es desconocida, lo que subraya nuevamente que el rechazo de cualquier \(H_0\) no puede interpretarse como evidencia de la verdad de \(H_1\). Es posible que la muestra observada siga la hipótesis nula pero produzca un valor extremo de la estadística de prueba por pura casualidad, independientemente de cuán pequeña sea esa posibilidad.
Los problemas asociados con los errores de Tipo I podrían implicar que sería preferible llevar a cabo una prueba de hipótesis con un valor α más bajo. Sin embargo, esta solución no resulta tan sencilla; disminuir el nivel de significancia para cualquier prueba específica conlleva directamente a un aumento en la posibilidad de cometer un error de Tipo II.
Un error de Tipo II ocurre cuando la hipótesis nula es falsa pero no se rechaza debido a que el valor p obtenido en la prueba no es lo suficientemente bajo para cumplir con el nivel de significancia establecido (α). Esto puede ocurrir cuando el tamaño de la muestra es insuficiente para detectar la verdadera diferencia o efecto entre las poblaciones, o cuando la variabilidad de los datos es alta.
El error de Tipo II, a menudo simbolizado como β en el análisis estadístico, indica la probabilidad de no rechazar la hipótesis nula cuando la hipótesis alternativa es cierta. Esta probabilidad está influenciada por diversos factores, como el tamaño de la muestra, el efecto observado y el nivel de significancia establecido.
Resulta sencillo verificar que la tasa de error de Tipo I coincide con el nivel de significancia establecido y, por lo tanto, puede reducirse al disminuir α. Por otro lado, controlar la tasa de error de Tipo II implica un delicado equilibrio que puede involucrar el tamaño de la muestra, el nivel de significancia, la variabilidad de las observaciones y la magnitud de la diferencia entre el valor verdadero y el valor nulo. Aunque este problema sea en su mayoría de naturaleza académica, dado que la “verdad” suele ser desconocida en la práctica, la relación directa entre la tasa de error de Tipo II y el poder estadístico a menudo desempeña un papel fundamental en la planificación de la recopilación de datos, especialmente al considerar los requisitos de tamaño de muestra, como se explorará en la próxima sección.
Demostremos el uso de la función typeII.tester, que sirve para calcular la tasa de error Tipo II, en un caso de simulación numérica.
typeII.tester <- function(mu0, muA, sigma, n, alpha, ITERACIONES = 10000) {
pvals <- rep(NA, ITERACIONES) # Vector para almacenar los valores p
for (i in 1:ITERACIONES) {
temporary.sample <- rnorm(n = n, mean = muA, sd = sigma) # Generar muestra desde muA
temporary.mean <- mean(temporary.sample) # Calcular media de la muestra
temporary.sd <- sd(temporary.sample) # Calcular desviación estándar de la muestra
pvals[i] <- 1 - pt((temporary.mean - mu0) / (temporary.sd / sqrt(n)), df = n - 1) # Calcular valor p
}
return(mean(pvals >= alpha)) # Calcular tasa de error Tipo II
}
typeII.tester(mu0=0,muA=0.5,sigma=1,n=30,alpha=0.05) Esta función es similar a typeI.tester. Los parámetros como el valor nulo, la desviación estándar de las mediciones originales, el tamaño de la muestra, el nivel de significancia y el número de iteraciones permanecen iguales que en la función anterior. Además, ahora se incluye la media alternativa, que proporciona la media “verdadera” μA bajo la cual se generan las muestras. De manera similar a antes, en cada iteración se genera una muestra aleatoria de tamaño n, se calcula su media y desviación estándar, y se determina el valor p adecuado para la prueba utilizando la función pt con la estadística de prueba estandarizada habitual, con df=n-1.
El resultado que se obtuvo en la consola es:
Por tanto, una tasa de error tipo II (también conocida como beta) de 0.14 significa que hay una probabilidad del 14% de no rechazar la hipótesis nula cuando la hipótesis alternativa es verdadera. En otras palabras, es la probabilidad de no detectar un efecto o diferencia real cuando realmente existe. Una tasa de error tipo 2 más baja indica una mayor capacidad del test para detectar diferencias o efectos en la población. Por lo tanto, en este caso, una tasa de error tipo 2 del 0.14 sugiere que el test tiene una probabilidad del 14% de no detectar un efecto real, lo que podría ser considerado como una capacidad de detección moderada.
Es importante tener en cuenta el poder estadístico potencial de cualquier prueba de hipótesis. El poder estadístico representa la probabilidad de rechazar correctamente una hipótesis nula que en realidad es falsa. Si una prueba tiene una tasa de error de Tipo II de β, su poder estadístico se calcula simplemente restando 1 menos β. Es preferible que una prueba tenga un poder lo más alto posible. La relación directa con la probabilidad de error de Tipo II implica que todos los factores que influyen en el valor de β también tienen un impacto directo en el poder. Por conveniencia, una prueba de hipótesis que tiene un poder mayor que 0.8 se considera estadísticamente potente.
Con frecuencia, los investigadores buscan entender la relación entre el poder y el tamaño de la muestra (aunque es crucial recordar que esto es solo uno de los factores determinantes del poder). Antes de iniciar la recopilación de datos para examinar una hipótesis específica, es probable que tengas una idea del posible valor real del parámetro de interés basado en investigaciones anteriores o estudios preliminares. Este conocimiento previo resulta útil para determinar el tamaño adecuado de la muestra y estar seguro de cuál debería ser el tamaño de la muestra para llevar a cabo una prueba estadísticamente poderosa y rechazar correctamente H0 si la verdadera media es realmente la media de la hipótesis alternativa.
La función que nos da el poder estadístico se llama power.tester:
typeII.tester <- function(mu0, muA, sigma, n, alpha, ITERACIONES = 10000) {
pvals <- rep(NA, ITERACIONES) # Vector para almacenar los valores p
for (i in 1:ITERACIONES) {
temporary.sample <- rnorm(n = n, mean = muA, sd = sigma) # Generar muestra desde muA
temporary.mean <- mean(temporary.sample) # Calcular media de la muestra
temporary.sd <- sd(temporary.sample) # Calcular desviación estándar de la muestra
pvals[i] <- 1 - pt((temporary.mean - mu0) / (temporary.sd / sqrt(n)), df = n - 1) # Calcular valor p
}
return(mean(pvals >= alpha)) # Calcular tasa de error Tipo II
}
power.tester <- function(nvec, ...) {
nlen <- length(nvec) # Calcula la longitud del vector nvec
result <- rep(NA, nlen) # Crea un vector result con longitud nlen, inicializado con NA
pbar <- txtProgressBar(min = 0, max = nlen, style = 3) # Crea una barra de progreso con 0 progreso inicial y máximo igual a nlen
for (i in 1:nlen) { # Itera sobre cada tamaño de muestra en nvec
result[i] <- 1 - typeII.tester(n = nvec[i], ...) # Calcula la potencia del test para el tamaño de muestra actual
setTxtProgressBar(pbar, i) # Actualiza la barra de progreso con el progreso actual del bucle
}
close(pbar) # Cierra la barra de progreso
return(result) # Devuelve el vector result, que contiene las potencias calculadas
}
sample.sizes <- 5:100 # Define los tamaños de muestra a considerar
pow <- power.tester(nvec = sample.sizes, mu0 = 0, muA = 0.6, sigma = 1.2, alpha = 0.01, ITERACIONES=5000) # Calcula la potencia para los tamaños de muestra dados
pow
minimum.n <- sample.sizes[min(which(pow >= 0.8))] # Encuentra el tamaño de muestra mínimo que alcanza una potencia del 80%
minimum.nEsta función power.tester calcula la potencia de un test estadístico para diferentes tamaños de muestra especificados en el vector nvec. Utiliza la función typeII.tester para calcular la tasa de error tipo 2 para cada tamaño de muestra, y devuelve un vector con las potencias calculadas.
El resultado indica que si el tamaño de tu muestra es al menos 43, una prueba de hipótesis bajo estas condiciones particulares debería tener un buen poder estadístico (basado en la salida simulada aleatoriamente en ‘pow’ en esta instancia).
El análisis de la varianza (ANOVA), en su forma más simple, se utiliza para comparar múltiples medias en una prueba de equivalencia. En ese sentido, es una extensión directa de la prueba de hipótesis que compara dos medias. Existe una variable continua a partir de la cual se calculan las medias de interés, y al menos una variable categórica que indica cómo definir los grupos para esas medias. En esta parte del manual, explorarás las ideas que rodean al ANOVA y verás cómo comparar las medias divididas primero por una variable categórica (ANOVA de una vía) y luego por múltiples variables categóricas (ANOVA de múltiples factores).
El ANOVA de una vía, o análisis de la varianza de una vía, es una técnica estadística que se utiliza para comparar las medias de tres o más grupos independientes con el fin de determinar si al menos uno de los grupos difiere significativamente de los demás. Esta técnica descompone la variabilidad total de los datos en dos componentes: la variabilidad entre los grupos y la variabilidad dentro de los grupos. Mediante una prueba de hipótesis, se evalúa si existe una diferencia significativa entre las medias de los grupos. Si el valor p de la prueba ANOVA es menor que un nivel de significancia predefinido (generalmente 0.05), se concluye que al menos uno de los grupos difiere significativamente de los demás.
La hipótesis y la verificación diagnóstica en el ANOVA de una vía se refieren al proceso de establecer y evaluar las hipótesis estadísticas necesarias para realizar un análisis de varianza de una vía. En este contexto, la hipótesis nula (H0) establece que las medias de todos los grupos son iguales, mientras que la hipótesis alternativa (H1) sugiere que al menos una de las medias es diferente.
Para verificar estas hipótesis, se utiliza la técnica del ANOVA, que descompone la variabilidad total de los datos en diferentes fuentes de variabilidad, como la variabilidad entre grupos y la variabilidad dentro de los grupos. Se calcula una estadística de prueba (F) que compara la variabilidad entre grupos con la variabilidad dentro de los grupos. Si la varianza entre grupos es significativamente mayor que la varianza dentro de los grupos, se rechaza la hipótesis nula y se concluye que al menos una de las medias es diferente.
\[ H_0: \mu_1 = \mu_2 = \dots = \mu_k \]
\[ H_1: \text{al menos uno de } \mu_1, \mu_2, \dots, \mu_k \text{ es diferente} \]
no todas son iguales (alternativamente, al menos una difiere)
Además de la prueba F, es importante realizar una verificación diagnóstica para asegurarse de que se cumplen los supuestos del ANOVA, como la normalidad de los residuos y la homogeneidad de las varianzas. Estas verificaciones diagnósticas ayudan a garantizar la validez de los resultados del ANOVA.
Si las condiciones de igualdad de varianzas o normalidad no se cumplen, esto no implica que los resultados carezcan por completo de valor, pero sí afectará la capacidad general de detectar diferencias reales en las medias . Siempre es recomendable verificar estas condiciones antes de aplicar el ANOVA; También es importante mencionar que no es necesario que los grupos tengan el mismo número de observaciones para realizar la prueba (en ese caso se consideran desequilibrados). Sin embargo, si los grupos están desequilibrados, la prueba será más sensible a posibles efectos adversos si las suposiciones de igualdad de varianzas y normalidad no se cumplen adecuadamente.
Para simular un ejemplo con datos ficticios pero representativos, consideremos mediciones de calidad del aire (PM2.5) en tres ciudades: Monterrey, Ciudad de México (CDMX) y Guadalajara. Supongamos que tenemos datos de PM2.5 para cinco días en cada ciudad. Vamos a generar datos ficticios y luego realizar un ANOVA de una vía para comparar si hay diferencias significativas en la concentración de PM2.5 entre las tres ciudades.
El script quedaría de la siguiente manera:
set.seed(123) # Para reproducibilidad
n <- 5 # Número de días de datos
monterrey <- rnorm(n, mean = 25, sd = 5) # Datos de Monterrey
cdmx <- rnorm(n, mean = 30, sd = 7) # Datos de CDMX
guadalajara <- rnorm(n, mean = 28, sd = 6) # Datos de Guadalajara
datos <- data.frame(Ciudad = rep(c("Monterrey", "CDMX", "Guadalajara"), each = n),
PM2.5 = c(monterrey, cdmx, guadalajara))
# Visualización de los datos
boxplot(PM2.5 ~ Ciudad, data = datos, xlab = "Ciudad", ylab = "PM2.5",
main = "Concentración de PM2.5 por Ciudad")
# Prueba de normalidad (usando la prueba de Shapiro-Wilk)
shapiro.test(datos$PM2.5)
# Prueba de homogeneidad de varianzas (usando la prueba de Bartlett)
bartlett.test(PM2.5 ~ Ciudad, data = datos)
# ANOVA de una vía
anova_result <- aov(PM2.5 ~ Ciudad, data = datos)
summary(anova_result)Una vez ejecutado el script podemos concluir lo siguiente :
Normalidad de los datos: La prueba de Shapiro-Wilk no rechaza la hipótesis nula de normalidad para ninguna de las ciudades (\(p > 0.05\)) , lo que sugiere que los datos podrían provenir de una distribución normal.
Homogeneidad de varianzas: La prueba de Bartlett no rechaza la hipótesis nula de homogeneidad de varianzas entre las tres ciudades (\(p > 0.05\)) lo que indica que las varianzas de los datos son aproximadamente iguales.
Diferencias significativas: El ANOVA muestra que hay diferencias significativas en la concentración de PM2.5 entre las tres ciudades (\(p < 0.05\)). Posteriormente, se podría realizar pruebas de comparaciones múltiples para determinar cuáles ciudades difieren entre sí.
En resumen, con estos resultados podemos afirmar que existe evidencia estadística para afirmar que hay diferencias significativas en la concentración de PM2.5 entre Monterrey, CDMX y Guadalajara.
En RStudio quedaría de la siguiente manera:
Ahora veamos un ejemplo que consiste en el análisis de la variación en el crecimiento de plantas expuestas a diferentes condiciones de luz. Supongamos que se realiza un experimento donde se tienen tres grupos de plantas expuestas a diferentes niveles de luz: grupo 1 (baja intensidad de luz), grupo 2 (media intensidad de luz) y grupo 3 (alta intensidad de luz). El objetivo es determinar si hay diferencias significativas en la altura de las plantas después de un mes de exposición a estas condiciones de luz.
En este caso, la variable respuesta sería la altura de las plantas (una variable numérica continua) y la variable explicativa sería el nivel de luz (una variable categórica con tres niveles: baja, media y alta intensidad de luz).
El análisis de ANOVA de una vía se utilizaría para determinar si existe una diferencia significativa en la altura de las plantas entre los tres grupos. Si el resultado del ANOVA indica que hay diferencias significativas, se pueden realizar pruebas post hoc para identificar qué grupos difieren entre sí. Este tipo de análisis es común en estudios de ecología, agronomía y otras disciplinas relacionadas con las ciencias biológicas y ambientales.
El script quedaría de la siguiente manera:
# Datos de ejemplo
altura_plantas <- data.frame(
Altura = c(12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40),
Luz = factor(rep(c("Baja", "Media", "Alta"), each = 5))
)
# ANOVA de una vía
modelo_anova <- aov(Altura ~ Luz, data = altura_plantas)
res_anova <- summary(modelo_anova)
# Pruebas de normalidad
shapiro.test(altura_plantas$Altura)
# Prueba de homogeneidad de varianzas
bartlett.test(Altura ~ Luz, data = altura_plantas)
# Grafico de los datos
boxplot(Altura ~ Luz, data = altura_plantas,
xlab = "Intensidad de Luz", ylab = "Altura de Plantas",
main = "Efecto de la Luz en el Crecimiento de Plantas")La conclusión de la prueba de ANOVA en el ejemplo anterior es que existe una diferencia significativa en la altura de las plantas en función de la intensidad de luz a la que fueron expuestas. Esto se basa en un valor de p-valor menor que 0.05 en la prueba de ANOVA, lo que indica que al menos una de las medias de altura de las plantas en los diferentes niveles de intensidad de luz es significativamente diferente de las demás.
En RStudio quedaría de la siguiente manera:
Otro ejemplo consiste en generar un conjunto de datos ficticios que representen el crecimiento de las raíces de Halocnemum strobilaceum bajo diferentes niveles de salinidad. Luego realizaremos un análisis de varianza (ANOVA) para determinar si hay diferencias significativas en el crecimiento de las raíces entre los diferentes tratamientos de salinidad. Finalmente, discutiremos las posibles conclusiones ecológicas que se pueden extraer de los resultados del experimento.
El script en R quedaría de la siguiente manera:
# Creación de los datos
datos <- data.frame(
tratamiento = factor(rep(c("control", "baja", "media", "alta"), each = 5)),
crecimiento = c(12, 14, 13, 11, 15, 10, 9, 11, 8, 10, 6, 5, 7, 4, 6, 9, 10, 11, 12, 13)
)
# Prueba de normalidad de los datos
shapiro_test <- shapiro.test(datos$crecimiento)
shapiro_test
# Prueba de homogeneidad de varianzas
bartlett_test <- bartlett.test(crecimiento ~ tratamiento, data = datos)
bartlett_test
# Evaluación de diferencias significativas
if (bartlett_test$p.value > 0.05) {
# Si la prueba de Bartlett no es significativa, usamos ANOVA normal
res_anova <- aov(crecimiento ~ tratamiento, data = datos)
anova_res <- summary(res_anova)
} else {
# Si la prueba de Bartlett es significativa, usamos ANOVA de Welch
res_anova <- oneway.test(crecimiento ~ tratamiento, data = datos, var.equal = FALSE)
anova_res <- summary(res_anova)
}
# Mostrar resultados de ANOVA
anova_resLa prueba de normalidad de Shapiro-Wilk para los datos de crecimiento de raíces de Halocnemum strobilaceum no mostró evidencia significativa (p = 0.056) de que los datos no se distribuyan normalmente, por lo que se puede asumir que cumplen con este supuesto para el análisis de varianza (ANOVA).
La prueba de Bartlett para la homogeneidad de varianzas entre los grupos no fue significativa (p = 0.208), lo que indica que se cumple con el supuesto de homogeneidad de varianzas para realizar un ANOVA clásico.
Con base en el ANOVA de una vía realizado, se encontró una diferencia significativa entre los tratamientos de salinidad en el crecimiento de las raíces de Halocnemum strobilaceum (F(3, 16) = 6.75, p = 0.004). Posteriormente, se podrían realizar pruebas post hoc para determinar qué tratamientos difieren significativamente entre sí.
En conclusión, los resultados sugieren que la salinidad tiene un efecto significativo en el crecimiento de las raíces de Halocnemum strobilaceum, lo que podría tener implicaciones ecológicas importantes en términos de adaptación de las plantas a ambientes salinos.
En RStudio quedaría de la siguiente manera:
El ANOVA de dos vías, también conocido como ANOVA de dos factores, es una extensión del ANOVA de una vía que se utiliza para analizar la influencia simultánea de dos variables categóricas (factores) en una variable continua. Este tipo de ANOVA es útil cuando se quiere estudiar cómo dos factores afectan a una variable de interés, así como la interacción entre estos factores.
En el ANOVA de dos vías, los factores pueden ser independientes o estar relacionados. Por ejemplo, en un experimento agrícola, se podrían estudiar los efectos de dos tipos de fertilizantes (factores A y B) en el crecimiento de las plantas, así como la interacción entre ambos factores.
El procedimiento para realizar un ANOVA de dos vías es similar al de un ANOVA de una vía, pero en este caso se consideran dos factores y sus interacciones. Se calculan las sumas de cuadrados, los grados de libertad, los promedios de cuadrados y el estadístico F para cada factor y para la interacción. Además, se realiza una prueba de hipótesis para determinar si hay efectos significativos de los factores y de la interacción en la variable de interés.
Veamos el siguiente ejemplo comenzando con el establecimiento del conjunto de hipótesis
El script sería el siguiente:
# Cargar los datos en un dataframe
datos <- data.frame(
Fertilizante_A = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
Fertilizante_B = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
Crecimiento = c(10, 12, 15, 11, 14, 16, 9, 10, 12)
)
# Instalar el paquete car (si aún no está instalado)
install.packages("car")
# Cargar el paquete car
library(car)
# Realizar la prueba de homogeneidad de varianzas con Bartlett
bartlett.test(Crecimiento ~ Fertilizante_A * Fertilizante_B, data = datos)
# ANOVA de dos vías
modelo_anova <- aov(Crecimiento ~ Fertilizante_A * Fertilizante_B, data = datos)
summary(modelo_anova)
# Interpretación de los resultados
# Si el valor p es menor que el nivel de significancia (por ejemplo, 0.05), se rechaza la hipótesis nula
# y se concluye que hay diferencias significativas en el crecimiento de las plantas debido a los tipos de fertilizantes A y B,
# así como su interacción.En la consola apreciaras los siguientes resultados:
Estos significan lo siguiente:
Para el factor A (Fertilizante_A), el valor p asociado al estadístico F es 0.1705, lo que indica que no hay una diferencia significativa en el crecimiento de las plantas entre los dos tipos de fertilizantes A.
Para el factor B (Fertilizante_B), el valor p asociado al estadístico F es 0.0179, lo que sugiere que hay una diferencia significativa en el crecimiento de las plantas entre los dos tipos de fertilizantes B.
Para la interacción entre los factores A y B (Fertilizante_A: Fertilizante_B), el valor p asociado al estadístico F es 0.5425, lo que indica que no hay una interacción significativa entre los dos tipos de fertilizantes en términos de su efecto sobre el crecimiento de las plantas.
En conclusión, los resultados sugieren que el tipo de fertilizante B tiene un efecto significativo en el crecimiento de las plantas, mientras que el tipo de fertilizante A y la interacción entre ambos no tienen efectos significativos. Sin embargo, es importante considerar el tamaño de la muestra y la interpretación específica del contexto experimental antes de sacar conclusiones definitivas.
Para crear un gráfico de puntos y líneas que muestre la interacción entre los factores Fertilizante A y Fertilizante B en relacion con el crecimiento de las plantas, agrega las siguientes líneas al script anterior:
# Cargar librería necesaria
library(ggplot2)
# Crear el gráfico de interacción de dos vías
ggplot(datos, aes(x = Fertilizante_A, y = Crecimiento, color = Fertilizante_B)) +
geom_point() +
geom_line(aes(group = Fertilizante_B)) +
labs(x = "Fertilizante A", y = "Crecimiento", color = "Fertilizante B") +
ggtitle("Gráfico de Interacción de Dos Vías")La grafica resultante es la siguiente:
Cada punto representa una observación y las líneas conectan los puntos correspondientes a cada nivel de Fertilizante B para visualizar la interacción entre ambos factores.
Un siguiente ejemplo consiste en realizar un ANOVA de dos vías con la variable “sexo” y “especies de tilapia” y luego graficar la interacción entre ambas variables, puedes utilizar el siguiente script:
# Crear un dataframe con los datos
datos <- data.frame(
especies = rep(c("tilapia1", "tilapia2", "tilapia3"), each = 4),
sexo = rep(c("M", "F"), times = 6),
peso = c(25, 28, 27, 30, 26, 29, 24, 27, 28, 31, 25, 30)
)
# Realizar el ANOVA de dos vías
resultado_anova <- aov(peso ~ especies * sexo, data = datos)
# Resumen del ANOVA
summary(resultado_anova)
# Gráfico de interacción
library(ggplot2)
ggplot(datos, aes(x = especies, y = peso, color = sexo, group = sexo)) +
geom_point() +
geom_line() +
labs(x = "Especies de Tilapia", y = "Peso", color = "Sexo") +
ggtitle("Interacción entre Sexo y Especies de Tilapia en el Peso")Los datos resultantes en la consola son los siguientes:
La variable “especies” no tiene un efecto significativo en el peso de las tilapias, ya que el valor p asociado al factor “especies” es de 0.23723, que es mayor que cualquier nivel de significancia comúnmente utilizado (por ejemplo, 0.05).
La variable “sexo” tiene un efecto significativo en el peso de las tilapias, dado que el valor p asociado al factor “sexo” es menor a 0.05 (0.00778), lo que indica que hay diferencias significativas en el peso entre sexos.
La interacción entre las variables “especies” y “sexo” no es significativa, ya que el valor p asociado a la interacción es de 0.86068, lo que indica que la influencia del sexo en el peso no varía significativamente entre las diferentes especies de tilapia.
La grafica resultante seria la siguiente:
La conclusión sería que, en este estudio, el peso de las tilapias parece verse afectado significativamente por el sexo, pero no por la especie ni por la interacción entre especie y sexo.
En RStudio quedaría de la siguiente manera:
La prueba de Kruskal-Wallis constituye un método estadístico no paramétrico empleado para identificar diferencias significativas entre tres o más grupos independientes respecto a una variable ordinal o continua. Su funcionamiento radica en la comparación de las medianas de dichos grupos para determinar si tales diferencias poseen relevancia estadística. Esta prueba se sustenta en las siguientes premisas:
Las hipótesis para la prueba son:
H_0: Las medianas de los grupos son todas iguales.
H_1: Las medianas de los grupos no son todas iguales.
*(alternativamente,al menos una mediana de grupo difiere).*
Esta prueba es no paramétrica, lo que significa que no se basa en cuantiles de una distribución paramétrica estandarizada (como la distribución normal) o alguna de sus funciones. En la misma línea que el ANOVA es una generalización de la prueba t de dos muestras, la prueba ANOVA de Kruskal-Wallis es una generalización de la prueba de Mann-Whitney para dos medianas. También se conoce como la prueba de suma de rangos de Kruskal-Wallis, y se utiliza la distribución chi-cuadrado para calcular el valor p.
La prueba de Kruskal-Wallis es una alternativa a la prueba paramétrica ANOVA cuando los supuestos de esta última no se cumplen.
El siguiente ejemplo introductorio genera un gráfico de boxplot para visualizar la distribución de los datos en cada grupo, realiza la prueba de Kruskal-Wallis para determinar si hay diferencias significativas entre los grupos y muestra un QQ plot de los residuos del modelo lineal.
# # Cargar librerías necesarias
library(ggplot2)
library(car)
# Datos de ejemplo
set.seed(123)
grupo1 <- rnorm(30, mean = 5, sd = 1)
grupo2 <- rnorm(30, mean = 6, sd = 1)
grupo3 <- rnorm(30, mean = 7, sd = 1)
# Crear un dataframe con los datos
datos <- data.frame(
Grupo = rep(c("Grupo 1", "Grupo 2", "Grupo 3"), each = 30),
Valor = c(grupo1, grupo2, grupo3)
)ahí
# Gráfico de boxplot
ggplot(datos, aes(x = Grupo, y = Valor)) +
geom_boxplot() +
labs(title = "Boxplot de los grupos",
x = "Grupo",
y = "Valor")
# Prueba de Kruskal-Wallis
kruskal.test(Valor ~ Grupo, data = datos)
# Gráfico QQ plot de los residuos
modelo <- lm(Valor ~ Grupo, data = datos)
residuos <- resid(modelo)
qqPlot(residuos)Las gráficas resultantes son las siguientes:
En el gráfico de boxplot, se observa claramente que hay diferencias en la distribución de los valores entre los tres grupos. Las medianas de los grupos parecen estar separadas, lo que respalda los resultados de la prueba de Kruskal-Wallis.
En el QQplot de los residuos, las desviaciones de la línea diagonal indican que los residuos no están distribuidos normalmente. Esto sugiere que el modelo lineal podría no ser la mejor opción para estos datos y que otros métodos estadísticos no paramétricos, como la prueba de Kruskal-Wallis, son más apropiados.
Ahora bien, con base en los resultados obtenidos en la consola:
El valor de chi-cuadrado de la prueba de Kruskal-Wallis es de 43.556 con 2 grados de libertad, y el valor p es extremadamente pequeño (3.482e-10). Esto indica que hay evidencia significativa para rechazar la hipótesis nula de que las medianas de los grupos son iguales. En otras palabras, al menos una de las medianas de los grupos difiere significativamente de las demás.
Veamos ahora un ejemplo donde un grupo de biólogos está investigando el efecto de diferentes concentraciones de un contaminante en el crecimiento de tres especies diferentes de plantas acuáticas. Para ello, recolectan muestras de estas plantas de tres sitios diferentes en un río y miden la altura de las plantas como indicador de su crecimiento.
Los datos recolectados se ven así:
Grupo 1 (control): Alturas de plantas acuáticas en el sitio A (sin contaminación).
Grupo 2: Alturas de plantas acuáticas en el sitio B (baja concentración de contaminante).
Grupo 3: Alturas de plantas acuáticas en el sitio C (alta concentración de contaminante).
Para analizar si hay diferencias significativas en el crecimiento entre las tres especies de plantas acuáticas en los diferentes sitios, los biólogos deciden utilizar la prueba de Kruskal-Wallis.
El planteamiento de las hipótesis sería:
Hipótesis nula (H_0): Las medianas de las alturas de las plantas acuáticas son iguales en los tres grupos (no hay efecto significativo de la concentración del contaminante en el crecimiento de las plantas).
Hipótesis alternativa (H_1): Al menos una mediana de altura de planta acuática difiere de las demás en los tres grupos (hay efecto significativo de la concentración del contaminante en el crecimiento de las plantas).
El script para este ejemplo es el siguiente:
# Crear un data frame con los datos
datos <- data.frame(
Altura = c(20, 25, 30, 22, 27, 32, 18, 23, 28),
Grupo = factor(rep(1:3, each = 3), labels = c("Control", "Baja", "Alta"))
)
# Realizar el test de Kruskal-Wallis
resultado <- kruskal.test(Altura ~ Grupo, data = datos)
print(resultado)
# Graficar boxplot
boxplot(Altura ~ Grupo, data = datos, col = "lightblue", main = "Altura de plantas acuáticas por grupo")
# Gráfico QQ plot de los residuos
modelo <- lm(Altura ~ Grupo, data = datos)
residuos <- resid(modelo)
qqPlot(residuos)Las gráficas resultantes son las siguientes:
La interpretación de la gráfica siguiente se realiza considerando la distribución de las alturas de las plantas acuáticas en los tres grupos (control, baja y alta concentración de contaminante). Lo anterior nos indica que hay diferencias significativas en el crecimiento de las plantas acuáticas debido a la concentración del contaminante.
Por otro lado tenemos, los puntos de la gráfica QQ parecen seguir principalmente la línea diagonal, lo que sugiere que los residuos del modelo se ajustan razonablemente bien a una distribución normal. Esto fortalece la validez de los resultados obtenidos de la prueba de Kruskal-Wallis y sugiere que las conclusiones basadas en este análisis son confiables.
Ahora bien, los resultados obtenidos en la consola:
Con base en los resultados de la prueba de Kruskal-Wallis, donde se obtiene un valor de chi-cuadrado de 0.8 con 2 grados de libertad y un valor p de 0.6703, no hay suficiente evidencia para rechazar la hipótesis nula. Esto significa que no hay diferencias significativas en las medianas de las alturas de las plantas acuáticas entre los tres grupos de concentración de contaminante. En otras palabras, no se encontró un efecto significativo de la concentración del contaminante en el crecimiento de las plantas acuáticas en este estudio.
Los modelos de regresión constituyen una herramienta esencial en estadística, empleada para examinar la relación entre una variable dependiente y una o más variables independientes. Estos modelos resultan especialmente valiosos al analizar cómo una o más variables explicativas influyen en una variable de interés, facilitando la predicción y la toma de decisiones fundamentadas.
En un modelo de regresión, la variable dependiente (o respuesta) se expresa como una función de una o más variables independientes (o predictores), acompañada de un término de error que captura la variabilidad no explicada por las variables independientes. La estructura precisa de esta función se determina mediante el tipo de modelo de regresión utilizado, que puede variar desde modelos lineales básicos hasta modelos más sofisticados que incorporan interacciones y no linealidades. Uno de los modelos de regresión más conocidos y utilizados es el modelo de regresión lineal, que asume una relación lineal entre las variables.
Un ejemplo de Regresión Lineal Simple podría ser el estudio de la relación entre la temperatura y el crecimiento de un organismo. Supongamos que un biólogo está interesado en determinar cómo la temperatura afecta la tasa de crecimiento de una especie de planta en un entorno controlado.
Para ello, el biólogo recolecta datos de crecimiento de la planta a diferentes temperaturas y luego utiliza un modelo de regresión lineal simple para analizar la relación entre la temperatura (variable independiente) y la tasa de crecimiento (variable dependiente).
Los datos podrían ser los siguientes:
| Temperatura (°C) | Crecimiento (cm/día) |
|---|---|
| 20 | 0.5 |
| 25 | 0.8 |
| 30 | 1.2 |
| 35 | 0.9 |
| 40 | 0.6 |
El objetivo sería ajustar una línea recta a estos datos que represente la relación entre la temperatura y la tasa de crecimiento. El modelo de regresión lineal simple tendría la forma:
\[ \text{crecimiento} = \beta_0 + \beta_1 \times \text{temperatura} + \epsilon \]
Donde: - crecimiento es la tasa de crecimiento de la planta.
β_0 y β_1son los coeficientes que se estiman a partir de los datos.
temperatura es la temperatura en grados Celsius.
ε es el término de error.
el script para el ejemplo antes mencionado quedaría de la siguiente manera:
# Datos
temperatura <- c(20, 25, 30, 35, 40)
crecimiento <- c(0.5, 0.8, 1.2, 0.9, 0.6)
# Crear un dataframe
datos <- data.frame(temperatura, crecimiento)
# Ajustar el modelo de regresión lineal simple
modelo <- lm(crecimiento ~ temperatura, data = datos)
# Resumen del modelo
summary(modelo)
# Gráfico de dispersión y línea de regresión
plot(temperatura, crecimiento, main = "Relación entre Temperatura y Crecimiento de la Planta",
xlab = "Temperatura (°C)", ylab = "Crecimiento (cm/día)")
abline(modelo, col = "red")
# Interpretación del modelo
coeficientes <- coef(modelo)
cat("La ecuación de regresión es: Crecimiento =", coeficientes[1], "+", coeficientes[2], "* Temperatura\n")
cat("Por cada grado Celsius de aumento en la temperatura, se espera un aumento de", coeficientes[2], "cm/día en la tasa de crecimiento.\n")El resultado en la consola es el siguiente:
Basado en los resultados del modelo de regresión lineal:
• El coeficiente de la temperatura (0.0060) no es significativamente diferente de cero (p-value = 0.781), lo que sugiere que no hay una relación significativa entre la temperatura y el crecimiento de las plantas en este conjunto de datos.
• El coeficiente de determinación ajustado (Adjusted R-squared) es -0.2933, lo que indica que el modelo no explica bien la variabilidad en el crecimiento de las plantas.
• El análisis de la varianza (F-statistic) muestra un valor de 0.09278, con un p-value de 0.7806, lo que confirma que el modelo no es significativo.
En resumen, según estos resultados, no hay evidencia suficiente para afirmar que la temperatura tenga un efecto significativo en el crecimiento de las plantas en este caso particular. Es posible que otros factores no considerados en el modelo puedan estar influyendo en el crecimiento de las plantas.
Veamos otro ejemplo de regresión lineal simple que consiste en el estudio de la relación entre la concentración de un contaminante en el suelo y la profundidad a la que se encuentra. Supongamos que se han tomado mediciones de la concentración de un contaminante en diferentes puntos de un suelo y también se ha registrado la profundidad a la que se tomaron las muestras. El objetivo es determinar si existe una relación lineal entre la concentración del contaminante y la profundidad.
Los datos podrían ser los siguientes:
| Muestra | Profundidad (cm) | Concentración (mg/kg) |
|---|---|---|
| 1 | 10 | 5.2 |
| 2 | 20 | 4.8 |
| 3 | 30 | 4.5 |
| 4 | 40 | 4.0 |
| 5 | 50 | 3.7 |
Para analizar si existe una relación lineal entre la profundidad y la concentración, se puede utilizar la regresión lineal simple. La hipótesis nula sería que no hay una relación significativa entre la profundidad y la concentración del contaminante, mientras que la hipótesis alternativa sería que sí existe una relación significativa.
Hipótesis nula (H_0): no hay una relación significativa entre la profundidad y la concentración del contaminante.
Hipótesis alternativa (H_1): sí existe una relación significativa entre la profundidad y la concentración del contaminante.
El modelo de regresión lineal simple tendría la forma:
\[ concentracion= β_0+β_1×profundidad+ε \]
Donde:
concentracion : es la concentración del contaminante en el suelo (variable dependiente).
profundidad : es la profundidad a la que se tomó la muestra (variable independiente).
\(β_0\) : es el intercepto, que representa la concentración esperada cuando la profundidad es 0.
\(β_1\): es la pendiente, que representa el cambio esperado en la concentración por cada unidad de cambio en la profundidad temperatura es la temperatura en grados Celsius.
\(ε\) es el término de error, que representa la variabilidad no explicada por el modelo.
El script para el ejemplo anterior quedaría de la siguiente manera:
# Datos
profundidad <- c(10, 20, 30, 40, 50)
concentracion <- c(5.2, 4.8, 4.5, 4.0, 3.7)
# Crear un dataframe con los datos
datos <- data.frame(profundidad, concentracion)
# Ajustar el modelo de regresión lineal
modelo <- lm(concentracion ~ profundidad, data = datos)
# Mostrar los coeficientes y el resumen del modelo
coeficientes <- coef(modelo)
print(coeficientes)
summary(modelo)
# Gráfico de dispersión y línea de regresión
plot(concentracion ~ profundidad, data = datos, main = "Regresión lineal simple",
xlab = "Profundidad (cm)", ylab = "Concentración (mg/kg)")
abline(modelo, col = "red")El resultado obtenido en la consola es el siguiente:
El modelo de regresión lineal obtenido es:
\[ concentracion= 5.58-0.038×profundidad \]
Los coeficientes del modelo indican lo siguiente:
• El intercepto es 5.58, lo que significa que cuando la profundidad es 0, la concentración esperada es de 5.58 unidades.
• La pendiente es -0.038, lo que indica que por cada unidad adicional de profundidad, se espera una disminución de 0.038 unidades en la concentración del contaminante en el suelo.
El valor p asociado al coeficiente de la profundidad es muy bajo (0.0001739), lo que sugiere que la relación entre la profundidad y la concentración es estadísticamente significativa.
El coeficiente de determinación (R-cuadrado) ajustado es alto (0.9927), lo que indica que el modelo explica muy bien la variabilidad de la concentración explicada por la profundidad.
Basado en estos resultados, podemos afirmar que hay una fuerte relación inversa entre la profundidad y la concentración del contaminante en el suelo, donde a mayor profundidad, la concentración tiende a disminuir significativamente.
Lo anterior se puede apreciar en el grafico generado por el script:
La regresión lineal múltiple es una técnica estadística que se utiliza para modelar la relación entre una variable dependiente (o respuesta) y dos o más variables independientes (o predictores). Funciona extendiendo el concepto de regresión lineal simple, donde solo hay una variable independiente, a un modelo que incluye múltiples variables independientes.
El objetivo de la regresión lineal múltiple es encontrar una ecuación lineal que describa la relación entre las variables independientes y la variable dependiente. Esta ecuación tiene la forma:
\[ Y =β_0 + β_1 X_1+ β_2 X_2+... + β_p X_p + ϵ\]
Donde:
\(Y\) es la variable dependiente.
\(β_0\) es la intersección o término constante.
\(β_1, β_2, …,β_p\) son los coeficientes que representan la relación entre las variables independientes y la variable
\(4X_1, X_2, … , X_p\) son las variables independientes.
\(ϵ\) es el término de error, que representa la variabilidad no explicada por el modelo.
El proceso para ajustar un modelo de regresión lineal múltiple implica estimar los coeficientes \(β\)que minimizan la suma de los cuadrados de los errores (la diferencia entre los valores observados y los predichos por el modelo). Esto se hace utilizando métodos como el método de mínimos cuadrados.
Una vez ajustado el modelo, se pueden realizar pruebas de hipótesis para determinar si los coeficientes son significativamente diferentes de cero, lo que indicaría una relación significativa entre las variables independientes y la variable dependiente. También se pueden obtener intervalos de confianza para los coeficientes y realizar diagnósticos para verificar si se cumplen las suposiciones del modelo, como la linealidad, la homocedasticidad y la normalidad de los residuos.
En el análisis de regresión múltiple, es importante tener en cuenta varios conceptos relacionados con variables que pueden afectar los resultados del modelo. Aquí hay una explicación de tres conceptos clave:
Variable Latente (Lurking Variable):Una variable latente es una variable que no se incluye en el modelo de regresión, pero que influye en la relación entre las variables independientes y la variable dependiente. Esta variable puede sesgar los resultados si no se tiene en cuenta. Por ejemplo, en un estudio sobre el impacto de un pesticida en el crecimiento de las plantas (variable dependiente), la calidad del suelo podría ser una variable latente. La calidad del suelo puede influir tanto en el efecto del pesticida como en el crecimiento de las plantas, pero si no se mide ni se controla, podría sesgar los resultados del estudio.
Variable de Confusión (Confounding): Una variable de confusión es una variable que está relacionada tanto con la variable independiente como con la variable dependiente, lo que puede llevar a conclusiones erróneas sobre la relación entre estas dos variables si no se controla. Por ejemplo, si se está estudiando la relación entre la contaminación del aire (variable independiente) y la incidencia de enfermedades respiratorias (variable dependiente) en una población, el tabaquismo podría ser una variable de confusión. El tabaquismo está relacionado tanto con la contaminación del aire como con las enfermedades respiratorias, por lo que si no se controla, podría distorsionar la verdadera relación entre la contaminación del aire y las enfermedades respiratorias.
Variable Extraña (Extraneous Variable):Una variable extraña es una variable que no tiene un interés directo en el estudio, pero que puede afectar a la variable dependiente. Estas variables deben ser controladas o tenidas en cuenta en el análisis para evitar sesgos en los resultados. Por ejemplo, si se está estudiando sobre la migración de aves (variable dependiente) en relación con la disponibilidad de alimento (variable independiente), factores como la temperatura, la presencia de depredadores o la disponibilidad de agua podrían considerarse variables extrañas. Estos factores pueden influir en la migración de las aves pero no son el foco principal del estudio. Sin embargo, es importante tenerlos en cuenta para evitar que afecten los resultados del estudio.
Para ilustrar estos conceptos en un ejemplo simple en R, supongamos que queremos estudiar la relación entre la cantidad de fertilizante (variable independiente) y el crecimiento de plantas (variable dependiente) en un experimento de biología. Consideremos que también tenemos una variable latente, la calidad del suelo, que podría influir en el crecimiento de las plantas pero no la estamos midiendo.
El script quedaría de la siguiente manera:
set.seed(123)
fertilizante <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
calidad_suelo <- c(2, 3, 4, 5, 6, 7, 8, 9, 10, 11) # Variable latente
crecimiento_plantas <- c(3, 4, 6, 7, 8, 9, 10, 11, 12, 13)
datos <- data.frame(fertilizante, calidad_suelo, crecimiento_plantas)
## realizamos un modelo de regresión lineal múltiple para ver cómo el fertilizante y la
## calidad del suelo afectan al crecimiento de las plantas
modelo <- lm(crecimiento_plantas ~ fertilizante + calidad_suelo, data = datos)
summary(modelo)La consola de R nos estaría mostrando los siguientes resultados:
Este modelo de regresión lineal múltiple muestra que el fertilizante tiene un efecto significativo en el crecimiento de las plantas, como lo indica el coeficiente estimado de 1.09697 (p-valor < 0.001). Sin embargo, la calidad del suelo no pudo ser estimada debido a singularidades en los datos.
La interpretación de los resultados se ve limitada por la falta de estimación de la calidad del suelo. Esto puede deberse a varias razones, como la falta de variabilidad en la calidad del suelo en los datos recopilados, o una correlación perfecta entre la calidad del suelo y otra variable incluida en el modelo.
Dado que el coeficiente de determinación ajustado es alto (0.9907), podemos concluir que el modelo explica casi la totalidad de la variabilidad en el crecimiento de las plantas utilizando las variables disponibles. Sin embargo, la falta de estimación de la calidad del suelo sugiere que este modelo puede no ser completamente representativo de la realidad y puede requerir una revisión más detallada de los datos y variables involucradas.
Veamos ahora un ejemplo utilizando las variables
contaminante,
temperatura y
humedad para predecir la
calidad_aire. Los gráficos de diagnóstico
te ayudarán a evaluar la validez de las suposiciones del modelo, como la
linealidad, la homocedasticidad y la normalidad de los residuos.
# Paso 1: Cargar los datos (datos ficticios)
datos <- data.frame(
contaminante = c(10, 15, 20, 25, 30),
temperatura = c(20, 25, 30, 35, 40),
humedad = c(50, 55, 60, 65, 70),
calidad_aire = c(25, 30, 35, 40, 45)
)
# Paso 2: Crear el modelo de regresión lineal múltiple
modelo <- lm(calidad_aire ~ contaminante + temperatura + humedad, data = datos)
# Paso 3: Analizar los resultados
summary(modelo)
# Paso 4: Crear gráficos
par(mfrow = c(2, 2)) # Para mostrar varios gráficos en una sola ventana
plot(modelo) # Gráficos de diagnósticoEste script te va generar un mensaje de alerta:
El mensaje de advertencia que recibes indica que el ajuste del modelo es casi perfecto, lo cual puede llevar a que algunos resultados en el resumen del modelo sean poco confiables. Esto suele ocurrir cuando hay una alta correlación entre las variables predictoras, lo que se conoce como multicolinealidad. Para abordar este problema, puedes considerar algunas opciones:
Eliminar variables predictoras redundantes: Si algunas variables están altamente correlacionadas, puedes eliminar una de ellas para reducir la multicolinealidad.ç
Regularización: Utilizar técnicas de regularización como la regresión ridge o la regresión lasso puede ayudar a reducir el impacto de la multicolinealidad en el modelo.
Reducción de dimensionalidad: Si tienes muchas variables predictoras, considera utilizar técnicas de reducción de dimensionalidad como el análisis de componentes principales (PCA) para reducir la multicolinealidad.
Utilizar un subconjunto de datos: Si es posible, trabajar con un subconjunto de datos que no presente tanta multicolinealidad puede ayudar a obtener resultados más confiables.
Usemos el siguiente ejemplo donde tenemos las siguientes variables: largo, ancho y alto de caparazon de tortugas y el peso de un total de 50 observaciones.
En RStudio cargamos los datos desde Excel, utilizando el panel superior derecho y dando clic en Import Dataset, para después seleccionar From Excel como lo ilustra la siguiente imagen:
Te aparecerá una ventana donde deberás seleccionar el botón Browse y buscar el archivo .xlsx con los datos a analizar:
Una vez importado el dataset, genera el siguiente script en RStudio:
library(readxl)
library(MASS) # Necesario para stepAIC
# Carga de datos
library(readxl)
datos<- read_excel("Downloads/MORFOLOGÍA_TORTUGAS.xlsx")
View(datos)
# Análisis de correlación
round(cor(x = datos), 4)
# Visualización de la correlación con ggplot2
library(ggplot2)
library(GGally)
ggpairs(datos, lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axislabels = "none")
x0<- datos$`Peso (kg)`
x1<- datos$`Ancho (cm)`
x2<- datos$`Largo (cm)`
x3<- datos$`Alto (cm)`El código carga la información desde un archivo Excel, para esto usa a la instrucción read_excel() y a ese data set se le asigna el nombre de “datos”.
Después se realiza un análisis de correlación y visualización utilizando ggplot2.
Esta tabla de correlación nos dice que los datos presentan correlaciones altas y positivas entre las medidas morfológicas de las tortugas. Específicamente, las correlaciones entre el ancho, alto y largo son muy cercanas a 1, lo que indica una relación casi perfecta entre estas variables. Además, la correlación entre el peso y las demás medidas morfológicas también es alta, aunque ligeramente menor que la correlación entre las dimensiones. Esto sugiere que el peso de las tortugas está fuertemente asociado con su tamaño en términos de ancho, alto y largo, lo cual es una observación esperada, ya que es probable que las tortugas más grandes pesen más.
La gráfica que arroja la instrucción ggpairs se ve así:
En la segunda parte del script se ajusta un modelo de regresión lineal con las variables de respuesta y predictoras especificadas, donde la variable dependiente es el peso (\(x0\)) y la demás variables son independientes x1, x2 y x3 (ancho, largo y alto, respectivamente). La instrucción lm() nos da un modelo de regresión lineal ajustado.
# Ajuste del modelo de regresión lineal
modelo <- lm(x0 ~x1+x2+x3 , data = datos)
summary(modelo)
AIC(modelo)Lo que se ve en la consola es:
El AIC proporciona una medida de la calidad relativa de un modelo estadístico para un conjunto dado de datos. Toma en cuenta la bondad de ajuste del modelo, pero penaliza la complejidad del modelo, lo que ayuda a evitar el sobreajuste. Cuanto menor sea el valor del AIC, mejor se considera el ajuste del modelo. En este caso el AIC de nuestro modelo es -123.78. Entonces, ¿cómo mejoramos el modelo? Una de las maneras es hacer todas las combinaciones posibles de variables independientes, escogiendo como mejor alternativa aquella que nos arroje un AIC menor. Todas estas combinaciones es posible hacerlas con la función step().
La función step() es parte del paquete stats y se utiliza principalmente para realizar el proceso de selección de variables en modelos lineales, utilizando diferentes criterios de información como AIC (criterio de información de Akaike) o BIC (criterio de información bayesiano). La función step() realizará iterativamente una selección de variables, añadiendo o eliminando una variable a la vez, y evaluará cómo afecta esto al criterio de información seleccionado. El proceso continuará hasta que no se pueda mejorar el criterio de información mediante la adición o eliminación de ninguna variable.
El proceso de selección de variables puede realizarse en diferentes direcciones, como “forward” (añadiendo variables una a una), “backward” (eliminando variables una a una) o “both” (considerando ambas direcciones). La función step() permite especificar la dirección deseada.
En este caso usamos la función step() como se muestra:
# Selección de variables usando stepAIC
step_model <- step(modelo, direction = "both", trace=1)
summary(step_model)Obtenemos también el resumen del nuevo modelo así como el valor de AIC, con las funciones summary() y AIC() respectivamente.
El modelo con el que nos quedamos después de usar la función step() es el último de todo el informe, que coincide con el que se muestra inicialmente en el resumen del modelo.
O sea, y= 1.03983 + .20348x1.
Es importante realizar una prueba de hipótesis sobre los coeficientes del modelo para concluir que la función efectivamente toma a la variable x1, donde B1 sea distinto de 0.
Esta prueba está en el siguiente script:
# Prueba de hipótesis del coeficiente
#ho: B1=0 vs ha: B1≠0
summary(step_model)
valor_p <- .0000000000000002 # se obtiene del resumen del nuevo modelo
a<- .05
if(valor_p<a)print("Se rechaza Ho")
#dado que el valor p es menor a alfa, rechazamos Ho: no hay evidencia
# suficiente para decir que B1 es igual a 0
#Modelo de regregión final que se obtiene del summary(step_model)
print("Y=1.03983+.02348x1")Entonces, una vez concluido que B1 sí es distinto de 0, ocupamos a y= 1.03983 + .02348x1 como nuestro modelo de regresión lineal ajustado óptimo. La ecuación especifica que para cada unidad adicional del ancho del caparazón, el peso de la tortuga aumenta en 0.02348 unidades. Además, el término constante 1.03983 representa el valor esperado del peso cuando el ancho del caparazón es igual a cero.
Para finalizar esta primera parte, falta validar el modelo y probar la hipótesis de que existe correlación entre variables. Si tu modelo de regresión lineal solo tiene una variable independiente, técnicamente no puedes calcular una correlación múltiple, ya que este término implica la relación entre múltiples variables independientes y la variable dependiente en un contexto de regresión múltiple.
Sin embargo, puedes considerar la relación entre la variable independiente y la variable dependiente como una medida de correlación simple en este caso. La correlación simple, en el contexto de una regresión lineal, se refiere a la relación entre una sola variable independiente y la variable dependiente. En este caso el coeficiente de correlación de Pearson entre la variable independiente y la variable dependiente es igual al coeficiente de regresión estandarizado. Un valor de coeficiente de regresión estandarizado cercano a 1 o -1 indica una fuerte correlación entre la variable independiente y la variable dependiente, mientras que un valor cercano a 0 indica una correlación débil.
El siguiente script incluye nuevamente el resumen del modelo óptimo, donde nos enfocamos en “Adjusted R Squared”.
> # Validacion de correlación simple
> summary(step_model)
Call:
lm(formula = y ~ x1, data = datos)
Residuals:
Min 1Q Median 3Q Max
-0.11123 -0.01820 -0.01298 0.07658 0.09747
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.03983 0.10794 9.634 8.47e-13 ***
x1 0.20348 0.00519 39.210 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.06627 on 48 degrees of freedom
Multiple R-squared: 0.9697, Adjusted R-squared: 0.9691
F-statistic: 1537 on 1 and 48 DF, p-value: < 2.2e-16
Es un valor muy cercano al 1, por lo tanto concluimos que existe una fuerte correlación entre el peso de la tortuga y el ancho del caparazón.
Como segunda parte, comenzaremos pronosticando el peso de una tortuga asignándole valores a las variables independientes, observe el script:
#Pronóstico del peso de una tortuga
x_1 <- 75
x_2 <- 100
x_3 <- 30
peso <- 1.03983 +.02348*(x_1)
pesoEl resultado es:
Se pronostica que la tortuga pesará alrededor de 2.8 kg.
Es claro que con el análisis que ya se vio anteriormente, gracias a que nuestro modelo solo considera a la variable x1 (ancho), por eso no vemos a los demás valores que se asignaron involucrados en el pronóstico.
Gracias las herramientas estudiadas en capítulos pasados, podemos
calcular intervalos de confianza con la función confint(),
los resultado de la consola se muestran a continuación:
RStudio nos da los intervalos de confianza del 95% de todos los coeficientes de nuestro modelo, en este caso nos dice que con una confianza del 95%, Bo \(ϵ (0.8228,1.2568)\) y B1 \(ϵ (0.193,0.2129)\).
La transformación de variables numéricas es un proceso utilizado para modificar la distribución o la estructura de las variables numéricas. Esto se hace con el objetivo de mejorar la interpretación de los datos o mejorar el rendimiento de los modelos estadísticos o de aprendizaje automático.
Las razones principales para realizar transformaciones incluyen:
Normalización de la distribución: En muchos análisis estadísticos, se asume que los datos siguen una distribución normal o gaussiana. Sin embargo, en la práctica, esto no siempre es cierto. Las transformaciones se utilizan para hacer que las distribuciones de datos sean más cercanas a una distribución normal, lo que facilita la aplicación de técnicas estadísticas paramétricas.
Estabilización de la varianza: Algunos modelos estadísticos, como la regresión lineal, asumen que la varianza de los errores es constante en todas las observaciones. Si los datos tienen una varianza que aumenta o disminuye con el valor medio de la variable, se puede utilizar una transformación para estabilizar la varianza.
Linealización de relaciones: En el caso de la regresión lineal, se asume una relación lineal entre las variables predictoras y la variable de respuesta. Sin embargo, si esta relación no es lineal, se pueden realizar transformaciones en las variables para linealizar la relación.
Reducción de sesgo: Algunas variables pueden tener sesgos que afectan negativamente el rendimiento de los modelos. Las transformaciones se pueden usar para reducir o eliminar estos sesgos y hacer que los datos sean más apropiados para el modelado.
Es importante tener en cuenta que las transformaciones alteran los datos originales, por lo que es crucial entender cómo estas modificaciones afectan la interpretación de los resultados. Además, es necesario considerar las implicaciones teóricas y prácticas de las transformaciones en el contexto específico del problema de análisis de datos.
Existen diferentes tipos de transformaciones, en los siguientes apartados veremos sus ejemplos.
Supongamos que tienes una variable de ingresos que está sesgada hacia la derecha. Puedes aplicar una transformación logarítmica para hacer que la distribución sea más simétrica.
Veamos las instrucciones del siguiente script:
# Definir los datos originales de ingresos
ingresos <- c(1000, 1500, 2000, 2500, 3000)
# Mostrar los datos originales
print("Datos originales:")
print(ingresos)
# Aplicar la transformación logarítmica
ingresos_transformados <- log(ingresos)
# Mostrar los datos transformados
print("Datos transformados:")
print(ingresos_transformados)Los datos originales son los valores reales de los ingresos. Por ejemplo, si tienes ingresos de 1000, 1500, 2000, 2500 y 3000 dólares, estos son los montos reales que las personas ganan.
Después de aplicar la transformación logarítmica que se hace con la
instrucción log(), los datos transformados representan los
logaritmos naturales de los ingresos originales. Esto significa que cada
valor transformado es el exponente al que debes elevar el número de
Euler (aproximadamente 2.71828) para obtener el ingreso original.
Por ejemplo, si el logaritmo natural de un ingreso es 6.907755, esto significa que el ingreso original es igual a exp(6.907755), lo que da como resultado aproximadamente 1000 (el primer ingreso en la lista original).
Las diferencias entre los valores transformados no se pueden interpretar de la misma manera que las diferencias entre los valores originales. Por ejemplo, una diferencia de 1 en los datos transformados no significa necesariamente la misma diferencia en los ingresos originales. La interpretación de las diferencias en los datos transformados puede ser más complicada y no se relaciona directamente con los cambios en los valores originales.
Si tienes una variable con una distribución sesgada hacia la derecha pero no quieres aplicar una transformación tan drástica como el logaritmo, puedes probar con la raíz cuadrada.
Veamos las instrucciones para esta transformación en el siguiente script:
# Definir los datos originales de pH de cuerpos de agua en Tabasco
pH_cuerpos_agua <- c(5.6, 6.2, 7.1, 8.3, 9.5, 10.0)
# Aplicar la transformación de raíz cuadrada
pH_cuerpos_agua_transformados <- sqrt(pH_cuerpos_agua)
# Crear un vector de nombres para los cuerpos de agua
cuerpos_agua <- c("Cuerpo 1", "Cuerpo 2", "Cuerpo 3", "Cuerpo 4", "Cuerpo 5", "Cuerpo 6")
# Graficar los datos originales y transformados
plot(pH_cuerpos_agua, type = "o", col = "blue", pch = 16, ylim = c(0, max(pH_cuerpos_agua) * 2), xlab = "Cuerpos de Agua", ylab = "pH", main = "Datos Originales y Transformados del pH de Cuerpos de Agua en Tabasco")
points(pH_cuerpos_agua_transformados, type = "o", col = "red", pch = 16)
legend("topright", legend = c("Originales", "Transformados"), col = c("blue", "red"), pch = 16)Este código crea una gráfica que muestra tanto los datos originales como los transformados del pH de los cuerpos de agua en Tabasco. Los datos originales están representados por puntos azules conectados por líneas, mientras que los datos transformados están representados por puntos rojos conectados por líneas.
Finalmente, la gráfica que compara los datos es:
Esta transformación escala tus datos para que tengan una media de cero y una desviación estándar de uno, lo que puede ser útil para ciertos modelos de aprendizaje automático.
Observemos esta transformación en el siguiente script:
# Generar datos de altura de cedros en un rango de 15 a 20
altura_cedros <- seq(15, 20, length.out = 15)
# Aplicar estandarización
altura_estandarizada <- scale(altura_cedros)
# Crear un vector de nombres para los cedros
cedros <- paste("Cedro", 1:length(altura_cedros))
# Graficar los datos originales y estandarizados
plot(altura_cedros, type = "o", col = "blue", pch = 16, ylim = c(min(altura_cedros) * 1.1, max(altura_cedros) * 1.1), xlab = "Cedros", ylab = "Altura", main = "Altura de Cedros (Original y Estandarizada)")
points(altura_estandarizada, type = "o", col = "red", pch = 16)
legend("topleft", legend = c("Original", "Estandarizada"), col = c("blue", "red"), pch = 16)
axis(1, at = 1:length(cedros), labels = cedros)En la consola se obtiene:
Se generó una gráfica que muestra tanto los datos originales (en azul) como los datos estandarizados (en rojo) de la altura de los cedros en un rango de 15 a 20.
La prueba Z, o prueba Z de una muestra, constituye una herramienta estadística empleada para establecer si la media de una muestra difiere significativamente de una media poblacional conocida o asumida. Esta prueba, una de las más básicas y usuales en estadística inferencial, se aplica cuando se dispone de datos numéricos y se posee información sobre la desviación estándar poblacional. Se fundamenta en la distribución normal estándar y se emplea para contrastar hipótesis concernientes a la media de una población.
Fundamentos de la prueba Z:
La hipótesis nula ($H_0 $) establece que no hay diferencia significativa entre la media de la muestra y la media poblacional: \(μ=μ0\) (donde \(μ\) es la media poblacional y \(μ0\) es el valor de la media poblacional bajo consideración).
La hipótesis alternativa ($H_1 $) establece que hay una diferencia significativa entre la media de la muestra y la media poblacional: \(μ≠ μ0\).
La fórmula general es: \(Z = \frac{\bar{x} - \mu}{\frac{\sigma}{\sqrt{n}}}\)
Donde: - \(x ̅\) es la media de la muestra.
\(μ\) es la media poblacional conocida o asumida.
\(σ\) es la desviación estándar poblacional conocida o asumida.
\(n\) es el tamaño de la muestra.
Tip: Para recordar estas regiones críticas, revisa el capítulo de Pruebas de Hipótesis.
Los pasos para realizar una prueba Z son los siguientes:
Formular las hipótesis.
Recopilar los datos:
Recolecta los datos de la muestra de interés. Debes tener la media muestral, la media poblacional conocida o asumida, la desviación estándar poblacional conocida o asumida, y el tamaño de la muestra n.
Calcular el estadístico de prueba Z
Determinar el nivel de significancia α
Encontrar los valores críticos:
Utiliza una tabla de distribución normal estándar o una función estadística para encontrar los valores críticos correspondientes a tu nivel de significancia. Estos valores críticos delimitan las regiones de rechazo para la prueba.
Compara el valor calculado del estadístico de prueba Z con los valores críticos. Si el valor calculado de Z cae dentro de la región de rechazo, se rechaza la hipótesis nula y se acepta la hipótesis alternativa. Si no cae dentro de la región de rechazo, no se puede rechazar la hipótesis nula.
Basado en tu decisión, interpreta los resultados de la prueba. Si se rechaza la hipótesis nula, concluye que hay evidencia suficiente para afirmar que la media de la muestra es significativamente diferente de la media poblacional. Si no se rechaza la hipótesis nula, no hay suficiente evidencia para afirmar que hay una diferencia significativa.
Recuerda que la prueba Z es apropiada cuando la desviación estándar poblacional es conocida o cuando el tamaño de la muestra es grande (usualmente n> 30), en alguno casos la desviación se asume o se supone. Si no se conoce la desviación estándar poblacional o si el tamaño de la muestra es pequeño, se deben usar pruebas alternativas, como la prueba t que se verá más adelante.
Veamos un ejemplo sencillo y después podremos analizar uno con datos que podremos interpretar:
Supongamos que tenemos una muestra de 20 personas y queremos saber si su altura promedio es significativamente diferente de 170 cm (media poblacional asumida). Los datos son los siguientes:
# Ho: μ=170 vs Ha: μ≠170.
# Alturas de muestra
alturas <- c(168, 171, 172, 169, 170, 173, 169, 170, 171, 172, 168, 169, 170, 171, 172, 168, 169, 170, 171, 172)
# Tamaño de la muestra
n <- length(alturas)
# Media poblacional asumida
mu <- 170
# Desviación estándar poblacional asumida (en este ejemplo, se asume una desviación estándar poblacional de 5)
sigma <- 5
# Calcular el estadístico de prueba Z
Z <- (mean(alturas) - mu) / (sigma / sqrt(n))
# Nivel de significancia
alpha <- 0.05
# Valor crítico (utilizando el cuantil superior de la distribución normal estándar)
valor_critico <- qnorm(1 - alpha/2)
# Mostrar el valor calculado de Z y el valor crítico
print(paste("Valor calculado de Z:", Z))
print(paste("Valor crítico:", valor_critico))
# Tomar una decisión
if (abs(Z) > valor_critico) {
print("Se rechaza la hipótesis nula")
} else {
print("No se rechaza la hipótesis nula")Mostramos resultados de la consola:
Observamos que se sigue la regla de decisión y en este caso no se rechaza H_0 puesto que el valor absoluto de Z no está fuera de la región de aceptación.
Ahora, Supongamos que estamos interesados en determinar si un nuevo medicamento tiene un efecto significativo en el peso promedio de los ratones. La media poblacional conocida del peso de los ratones antes del tratamiento es de 25 gramos, con una desviación estándar poblacional de 3 gramos. Después del tratamiento, la muestra de 50 ratones tiene un peso promedio de 28 gramos.
# Ho: μ=25 vs Ha: μ≠25.
# Parámetros del problema
mu <- 25 # Media poblacional conocida
sigma <- 3 # Desviación estándar poblacional conocida
n <- 50 # Tamaño de la muestra
x_bar <- 28 # Media de la muestra
# Calcular el estadístico de prueba Z
Z <- (x_bar - mu) / (sigma / sqrt(n))
# Nivel de significancia
alpha <- 0.05
# Valor crítico (utilizando el cuantil superior de la distribución normal estándar)
valor_critico <- qnorm(1 - alpha/2)
# Mostrar el valor calculado de Z y el valor crítico
print(paste("Valor calculado de Z:", Z))
print(paste("Valor crítico:", valor_critico))
# Tomar una decisión
if (abs(Z) > valor_critico) {
print("Se rechaza la hipótesis nula")
} else {
print("No se rechaza la hipótesis nula")
}El valor de Z resultó 7.07, que es claramente mayor a 1.95 (valor crítico), por lo tanto se rechaza la hipótesis nula, con una confianza del 95% no hay suficiente evidencia estadística para decir que la media poblacional es 25.
La prueba F es una herramienta estadística utilizada para comparar la variabilidad entre dos o más grupos. Es comúnmente aplicada en dos contextos principales: análisis de varianza (ANOVA) y comparaciones de modelos de regresión. La prueba F se basa en la comparación de las varianzas de las muestras para determinar si son significativamente diferentes entre sí.
En un análisis de varianza (ANOVA), la prueba F se utiliza para determinar si hay diferencias significativas en las medias de tres o más grupos. Por otro lado, en comparaciones de modelos de regresión, la prueba F se utiliza para evaluar si agregar o eliminar variables explicativas mejora significativamente la capacidad de predicción del modelo.
Pasos para realizar una prueba F:
Hipótesis nula (H0): Las varianzas de los grupos son iguales.
Hipótesis alternativa (Ha): Al menos una de las varianzas de los grupos es diferente.
Cálculo del estadístico de prueba F: El estadístico de prueba F se calcula como el cociente entre la varianza entre grupos y la varianza dentro de los grupos.
Comparación con el valor crítico: Se compara el valor calculado de F con un valor crítico obtenido de una distribución F bajo la hipótesis nula.
Toma de decisión:
Si el valor calculado de F es mayor que el valor crítico, se rechaza la hipótesis nula, lo que sugiere que al menos una de las varianzas de los grupos es diferente.
Si el valor calculado de F no es mayor que el valor crítico, no se puede rechazar la hipótesis nula.
Analicemos el ejemplo del siguiente script:
Supongamos que un equipo de investigación está estudiando la actividad enzimática en diferentes tejidos de plantas (hojas y tallos) para comprender mejor los procesos metabólicos en las plantas. Quieren determinar si hay diferencias significativas en la variabilidad de la actividad enzimática entre estos dos tipos de tejidos.
Para ello, han medido la actividad enzimática en 20 muestras diferentes de cada tipo de tejido (hojas y tallos) y quieren realizar una prueba F para comparar las varianzas de la actividad enzimática entre los tejidos.
# Definición de la actividad enzimática para hojas (20 muestras)
hojas <- c(10, 12, 15, 11, 14, 9, 10, 13, 11, 12,
13, 15, 14, 12, 11, 10, 12, 11, 13, 14)
# Definición de la actividad enzimática para tallos (20 muestras)
tallos <- c(8, 9, 10, 11, 12, 9, 10, 11, 12, 13,
9, 10, 11, 10, 9, 8, 12, 11, 10, 11)
# Realizar la prueba F
resultado <- var.test(hojas, tallos)
# Mostrar el resultado
print(resultado)En este ejemplo, cada tipo de tejido (hojas y tallos) tiene 20
muestras diferentes de actividad enzimática. La función
var.test() realiza la prueba F para comparar las varianzas
entre los dos grupos de tejidos. El resultado mostrará el valor del
estadístico de prueba F, el valor p y otras informaciones. Si el valor p
es menor que el nivel de significancia elegido (a menos que se
establezca lo contrario, es este valor será usualmente 0.05), se rechaza
la hipótesis nula y se concluye que al menos una de las varianzas es
significativamente diferente.
El Valor p es 0.3163, que es mayor a nuestra alfa .05, por lo tanto no rechazamos Ho, concluimos que con una confianza del 95% , hay suficiente evidencia estadística para decir que las varianzas de ambos grupos si iguales.
La prueba T de Student, también conocida como Test-T o simplemente prueba T, es una herramienta estadística que utiliza un estadístico de prueba que sigue una distribución T de Student ( que vimos con anterioridad). Esta prueba se emplea en estadística para determinar si hay una diferencia significativa entre las medias de dos grupos, o para determinar si la media de una muestra es significativamente diferente de una media poblacional hipotética. Funciona comparando la diferencia entre las medias con la variabilidad de los datos.
Como mencionamos con anterioridad, la prueba T se basa en la distribución T de Student, que es una distribución de probabilidad que tiene en cuenta la variabilidad de una muestra pequeña. La distribución T tiene en cuenta el tamaño de la muestra y es similar a la distribución normal, pero con colas ligeramente más anchas.
Para realizar una prueba T, se siguen estos pasos:
Formular las hipótesis nula (\(H_0\)) y alternativa ($H_1 $).
Calcular la diferencia entre las medias de las muestras (o entre la media muestral y la media poblacional).
Calcular la desviación estándar de las diferencias (o de la muestra si se compara con una media poblacional).
Calcular el estadístico T dividiendo la diferencia entre las medias por la desviación estándar de las diferencias.
Determinar los grados de libertad (fd) (número de observaciones menos 1).
Calcular el valor p utilizando la distribución T de Student y los grados de libertad.
Comparar el valor p con un umbral predefinido (alfa) para tomar una decisión sobre la hipótesis nula.
Si el valor p es menor que alfa, se rechaza la hipótesis nula y se concluye que hay una diferencia significativa entre las medias. Si el valor p es mayor que alfa, no se puede rechazar la hipótesis nula y no se concluye que haya una diferencia significativa.
Utilicemos un conjunto de datos ficticios, genéricos y adecuado para el análisis datos de una muestra de tamaña n=20, donde se calcula la media y la desviación estándar, y luego se realiza una prueba T de Student para verificar si la media de la muestra es significativamente diferente de un valor hipotético de 10. También grafica la distribución de los datos junto con la distribución T y la distribución normal para comparación visual.
# Generar datos ficticios
set.seed(123) # Para reproducibilidad
datos <- rnorm(20, mean = 10, sd = 2) # Datos normales con media 10 y desviación estándar 2
# Calcular estadísticas descriptivas
media <- mean(datos)
desviacion_estandar <- sd(datos)
n <- length(datos)
# Calcular t de Student
t_valor <- (media - 10) / (desviacion_estandar / sqrt(n))
# Calcular los grados de libertad (n-1 en este caso)
grados_libertad <- n - 1
# Calcular el p-valor
p_valor <- 2 * pt(-abs(t_valor), df = grados_libertad) # Se utiliza 2 * para la prueba bilateral
# Imprimir resultados
cat("Media:", media, "\n")
cat("Desviación estándar:", desviacion_estandar, "\n")
cat("T valor:", t_valor, "\n")
cat("Grados de libertad:", grados_libertad, "\n")
cat("P valor:", p_valor, "\n")
# Realizar un gráfico de la distribución t con los datos y la distribución normal estándar
hist(datos, prob = TRUE, col = "lightblue", main = "Distribución de Datos y Comparación con t y Normal")
curve(dt(x, df = grados_libertad), from = min(datos), to = max(datos), add = TRUE, col = "red")
curve(dnorm(x, mean = mean(datos), sd = sd(datos)), from = min(datos), to = max(datos), add = TRUE, col = "blue")
legend("topright", legend = c("Distribución t", "Distribución normal"), col = c("red", "blue"), lty = 1)En RStudio quedaría de la siguiente manera:
Para un ejemplo más específico, calcula y compara la altura promedio de dos especies de árboles diferentes utilizando la prueba t de Student. También se muestra un histograma de las alturas de las dos especies de árboles junto con las curvas de densidad de la distribución t y la distribución normal estándar para visualizar la comparación.
# Altura promedio de las dos especies de árboles
altura_especie_1 <- c(10, 12, 15, 13, 11, 14, 16, 12, 13, 15)
altura_especie_2 <- c(11, 13, 14, 15, 12, 14, 16, 13, 14, 15)
# Calcular estadísticas descriptivas
media_especie_1 <- mean(altura_especie_1)
desviacion_estandar_especie_1 <- sd(altura_especie_1)
n_especie_1 <- length(altura_especie_1)
media_especie_2 <- mean(altura_especie_2)
desviacion_estandar_especie_2 <- sd(altura_especie_2)
n_especie_2 <- length(altura_especie_2)
# Calcular t de Student
t_valor <- (media_especie_1 - media_especie_2) / sqrt((desviacion_estandar_especie_1^2 / n_especie_1) + (desviacion_estandar_especie_2^2 / n_especie_2))
# Calcular los grados de libertad
grados_libertad <- n_especie_1 + n_especie_2 - 2
# Calcular el p-valor
p_valor <- 2 * pt(-abs(t_valor), df = grados_libertad) # Se utiliza 2 * para la prueba bilateral
# Imprimir resultados
cat("Altura especie 1 - Media:", media_especie_1, " Desviación estándar:", desviacion_estandar_especie_1, "\n")
cat("Altura especie 2 - Media:", media_especie_2, " Desviación estándar:", desviacion_estandar_especie_2, "\n")
cat("T valor:", t_valor, "\n")
cat("Grados de libertad:", grados_libertad, "\n")
cat("P valor:", p_valor, "\n")
# Realizar un gráfico de la distribución t con los datos y la distribución normal estándar
datos_combinados <- c(altura_especie_1, altura_especie_2)
hist(datos_combinados, prob = TRUE, col = "lightblue", main = "Distribución de Alturas de Árboles y Comparación con t y Normal")
curve(dt(x, df = grados_libertad), from = min(datos_combinados), to = max(datos_combinados), add = TRUE, col = "red")
curve(dnorm(x, mean = mean(datos_combinados), sd = sd(datos_combinados)), from = min(datos_combinados), to = max(datos_combinados), add = TRUE, col = "blue")
legend("topright", legend = c("Distribución t", "Distribución normal"), col = c("red", "blue"), lty = 1)En RStudio quedaría de la siguiente manera:
En este caso, el valor p = 0.444454744570581 es mayor que 0.05 (nivel de significancia comúnmente utilizado), no habría evidencia suficiente para rechazar la hipótesis nula de que no hay diferencia en las alturas medias entre las dos especies de árboles.
Ahora bien, si solo quieres hacer el cálculo del valor t , usa el siguiente código con la función t.test:
# Altura promedio de las dos especies de árboles
altura_especie_1 <- c(10, 12, 15, 13, 11, 14, 16, 12, 13, 15)
altura_especie_2 <- c(11, 13, 14, 15, 12, 14, 16, 13, 14, 15)
# Realizar la prueba t de dos muestras
resultado_prueba <- t.test(altura_especie_1, altura_especie_2)
# Mostrar el resultado de la prueba
print(resultado_prueba)El código realiza una prueba T de dos muestras para comparar las alturas promedio de las dos especies de árboles. El resultado de la prueba muestra un valor de p = 0.445, no hay evidencia suficiente para rechazar la hipótesis nula de que no hay diferencia en las alturas medias entre las dos especies de árboles.
En RStudio quedaría de la siguiente manera:
La Prueba de Wilcoxon, conocida también como la Prueba de Rangos con Signos de Wilcoxon, se emplea como una herramienta estadística no paramétrica para contrastar dos muestras relacionadas. Este método se aplica cuando se desea comparar muestras donde se ha evaluado la misma variable en dos momentos o condiciones diferentes para un mismo grupo de individuos.
Inicialmente, se plantean dos hipótesis: la hipótesis nula (H0), que sugiere que no hay una diferencia significativa entre las muestras, y la hipótesis alternativa (H1), que señala la existencia de una diferencia significativa. Luego, se procede a ordenar las diferencias absolutas, obteniendo la diferencia entre cada par de observaciones relacionadas y organizándolas en orden ascendente.
Seguidamente, se asigna un rango a cada diferencia absoluta, comenzando desde el menor (rango 1) hasta el mayor (rango N, donde N es el número total de diferencias).
Después, se calcula el estadístico de prueba (W), que consiste en la suma de los rangos de las diferencias con signo positivo o negativo, según la dirección de la diferencia.
Para concluir, se interpreta el resultado comparando el valor calculado del estadístico de prueba con el valor crítico de la distribución de Wilcoxon. Si el valor obtenido es inferior al valor crítico, se rechaza la hipótesis nula, indicando así la presencia de una diferencia significativa entre las muestras.
La Prueba de Wilcoxon es útil cuando los datos no cumplen con los supuestos de normalidad requeridos por pruebas paramétricas como la Prueba T de Student. Se utiliza en una variedad de disciplinas, especialmente en estudios médicos y de ciencias sociales, donde se comparan medidas repetidas en el mismo grupo de sujetos.
Veamos un ejemplo, donde primero creamos dos muestras antes y después
de un tratamiento, cada una con 30 observaciones generadas
aleatoriamente. Luego, usamos la función wilcox.test para
realizar la prueba de Wilcoxon para muestras pareadas, indicando que
nuestras muestras están emparejadas con el argumento paired = TRUE.
# Crear datos de ejemplo
set.seed(123) # Para reproducibilidad
antes <- rnorm(30, mean = 100, sd = 15) # Muestra antes del tratamiento
despues <- antes + rnorm(30, mean = 5, sd = 10) # Muestra después del tratamiento
# Realizar la prueba de Wilcoxon
resultado <- wilcox.test(antes, despues, paired = TRUE)
print(resultado)
# Interpretar el resultado
if (resultado$p.value < 0.05) {
print("Hay una diferencia significativa entre las muestras.")
} else {
print("No hay una diferencia significativa entre las muestras.")
}Interpretamos el resultado imprimiendo un mensaje dependiendo del valor p obtenido en la prueba. Si el valor p es menor que 0.05, concluimos que hay una diferencia significativa entre las muestras.
En RStudio quedaría de la siguiente manera:
El siguiente ejemplo, datos_diversidad representa un dataframe hipotético que contiene datos de diversidad de especies antes y después de un cambio ambiental en diferentes sitios de muestreo. La prueba de Wilcoxon se utiliza para determinar si hay una diferencia significativa en la diversidad de especies antes y después del cambio ambiental en los diferentes sitios de muestreo.
# Crear un dataframe con datos de diversidad biológica antes y después
datos_diversidad <- data.frame(
especies = c(20, 22, 18, 25, 21, 23, 19, 24, 20, 22),
diversidad_antes = c(0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4),
diversidad_despues = c(0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5)
)
# Realizar la prueba de Wilcoxon
resultado <- wilcox.test(datos_diversidad$diversidad_antes, datos_diversidad$diversidad_despues, paired = TRUE, exact = FALSE)
# Imprimir el resultado
print(resultado)El resultado en la consola es el siguiente:
Estos resultados sugieren que hay evidencia significativa para rechazar la hipótesis nula de que no hay diferencia entre la diversidad biológica antes y después del tratamiento. Con un valor p de 0.005264, que es menor que un nivel de significancia típico de 0.05, podemos concluir que existe una diferencia significativa en la diversidad biológica antes y después del tratamiento.
Por último tenemos los scripts que realizan las siguientes pruebas:
• Prueba de rangos con signos de Wilcoxon en una muestra única.
# Datos de peso en kg de 10 murciélagos (ejemplo)
peso_murcielagos <- c(0.5, 0.8, 1.2, 1.0, 0.7, 1.5, 1.3, 1.1, 0.9, 1.4)
peso_murcielagos <- peso_murcielagos + 0.001 # se suma un valor pequeño a cada peso y evitar los ceros
# Estadísticas descriptivas
media <- mean(peso_murcielagos)
mediana <- median(peso_murcielagos)
rango_intercuartil <- IQR(peso_murcielagos)
# Visualización
par(mfrow=c(2,2))
# Boxplot con puntos de jitter
boxplot(peso_murcielagos, col="lightblue", main="Boxplot con Jitter")
points(jitter(rep(1, length(peso_murcielagos)), 0.1), peso_murcielagos, col="red")
# Histograma
hist(peso_murcielagos, col = "lightblue", border = "black",
main = "Histograma de pesos de murciélagos", xlab = "Peso (kg)", ylab = "Frecuencia")
abline(v=media, col="red", lwd=2)
abline(v=mediana, col="blue", lwd=2)
# Gráfico de densidad
plot(density(peso_murcielagos), main="Densidad de pesos de murciélagos", xlab="Peso (kg)", ylab="Densidad")
abline(v=mediana, col="blue", lwd=2)
abline(v=0.5, col="red", lwd=2)
# Prueba de rangos con signos de Wilcoxon
wilcox <- wilcox.test(peso_murcielagos, mu = 0.5, alternative = "two.sided")
# Tamaño del efecto
tamanio_efecto <- effsize::cohen.d(peso_murcielagos, f = mediana, hedges.correction = FALSE)
# Reporte
cat("Prueba de rangos con signos de Wilcoxon en una muestra única\n")
cat("Estadísticas de la prueba:\n")
print(wilcox)
cat("\nTamaño del efecto (d de Cohen):\n")
print(tamanio_efecto)Los gráficos resultantes son:
Y los resultados obtenidos en la consola son:
Para la prueba de rangos con signos de Wilcoxon, se encontró una estadística V de 55 y un valor p de 0.001953. Esto indica que hay evidencia significativa para rechazar la hipótesis nula de que la mediana del peso de los murciélagos es igual a 0.5, sin embargo, el cálculo del tamaño del efecto (d de Cohen) arrojó un resultado de NA (no disponible), lo que sugiere que no se pudo calcular el tamaño del efecto. Esto puede ser debido a la falta de variabilidad en los datos o a alguna otra razón técnica.
## Prueba de la suma de rangos de Wilcoxon
# Requisitos previos
library(ggplot2)
library(effsize)
library(rstatix)
# Datos de muestra (peso en kg)
set.seed(123)
peso_hembras <- rnorm(20, mean = 0.5, sd = 0.1)
peso_machos <- rnorm(20, mean = 0.7, sd = 0.15)
peso_todos <- c(peso_hembras, peso_machos)
grupo <- rep(c("Hembra", "Macho"), each = 20)
# Estadísticas descriptivas
summary(peso_todos)
# Visualización
ggplot(data.frame(peso = peso_todos, grupo = grupo), aes(x = grupo, y = peso)) +
geom_boxplot(fill = "lightblue", color = "black") +
geom_jitter(width = 0.2, alpha = 0.7) +
geom_hline(yintercept = median(peso_todos), color = "red", linetype = "dashed", size = 1) +
geom_hline(yintercept = 0.6, color = "blue", linetype = "dashed", size = 1) +
labs(title = "Distribución del peso por género", x = "Género", y = "Peso (kg)")
# Hipótesis y pruebas preliminares
# Aquí no se realizan pruebas preliminares específicas, ya que se asume que los datos cumplen con los supuestos de la prueba de Wilcoxon
# Cálculos
wilcox_suma <- wilcox_test(peso_todos ~ grupo, data = data.frame(peso_todos, grupo), paired = FALSE)
# Tamaño del efecto
tamanio_efecto_suma <- cohen.d(peso_todos ~ grupo, data = data.frame(peso_todos, grupo), hedges.correction = FALSE)
# Reporte
cat("Prueba de la suma de rangos de Wilcoxon\n")
cat("Estadísticas de la prueba:\n")
print(wilcox_suma)
cat("\nTamaño del efecto (d de Cohen):\n")
print(tamanio_efecto_suma)Los gráficos resultantes del script son los siguientes:
Y los resultados obtenidos en la consola son:
Con los datos anteriores podemos concluir que
La prueba de la suma de rangos de Wilcoxon arroja un valor p significativamente bajo (p = 0.0000451), lo que indica que hay una diferencia significativa en el peso entre las hembras y los machos de la especie.
El tamaño del efecto (d de Cohen) es -1.59473, lo que se considera un efecto grande. Esto sugiere que la diferencia en el peso entre hembras y machos es considerablemente grande.
# Requisitos previos
library(dplyr)
library(ggplot2)
library(effsize)
library(rstatix)
# Datos de demostración
set.seed(123)
pesos_antes <- rnorm(10, mean = 100, sd = 10)
pesos_despues <- pesos_antes + rnorm(10, mean = 2, sd = 1)
# Convertir a tibble
df_pesos <- tibble(
antes = pesos_antes,
despues = pesos_despues
)
# Estadísticas descriptivas
summary(df_pesos)
# Visualización
ggplot(df_pesos, aes(x = "", y = antes)) +
geom_boxplot(fill = "lightblue") +
geom_jitter(width = 0.1) +
labs(title = "Distribución de pesos antes del tratamiento", x = "", y = "Peso") +
theme_minimal()
ggplot(df_pesos, aes(x = "", y = despues)) +
geom_boxplot(fill = "lightblue") +
geom_jitter(width = 0.1) +
labs(title = "Distribución de pesos después del tratamiento", x = "", y = "Peso") +
theme_minimal()
# Prueba de rangos con signos de Wilcoxon en muestras pareadas
wilcox_pareado <- wilcox.test(df_pesos$antes, df_pesos$despues, paired = TRUE)
# Tamaño del efecto
tamanio_efecto_pareado <- effsize::cohen.d(df_pesos$antes, df_pesos$despues, hedges.correction = FALSE)
# Reporte
cat("Prueba de rangos con signos de Wilcoxon en muestras pareadas\n")
cat("Estadísticas de la prueba:\n")
print(wilcox_pareado)
cat("\nTamaño del efecto (d de Cohen):\n")
print(tamanio_efecto_pareado)Los gráficos resultantes son los siguientes:
Los resultados en la consola de RStudio son:
Los resultados de la prueba de rangos con signos de Wilcoxon en muestras pareadas muestran un valor p significativamente bajo (p = 0.001953), lo que sugiere que hay evidencia suficiente para rechazar la hipótesis nula de que no hay diferencia en los pesos de las tilapias antes y después del tratamiento. Esto indica que hay una diferencia significativa en los pesos de las tilapias antes y después del tratamiento.
El tamaño del efecto (d de Cohen) obtenido es -0.2239883, lo que se considera un efecto pequeño según la interpretación convencional de Cohen. Esto significa que, aunque la diferencia en los pesos es estadísticamente significativa, el tamaño de la diferencia es pequeño desde el punto de vista práctico.
Los ejercicios siguientes fueron seleccionados de fuentes en línea y creados utilizando datos hipotéticos. Esta práctica se llevó a cabo con el objetivo de proporcionar ejemplos ilustrativos y contextualizados para entender conceptos y técnicas específicas. Es importante destacar que, aunque los ejercicios se basan en datos ficticios, su estructura y contenido están diseñados para representar situaciones plausibles y aplicables en el ámbito al que pertenecen.
Distribución de frecuencias
Encuentre la frecuencia absoluta de cada tipo de sangre O, B, A y AB.
Encuentre la frecuencia relativa de cada tipo de sangre O, B, A y AB.
Complete la tabla de frecuencia
Calcule la frecuencia absoluta acumulada
Calcule la frecuencia relativa acumulada
Chiapaneca y 3 avistamientos de la Tangara Oaxaqueña. Encuentre la tabla de frecuencia que corresponde.
Medidas de tendencia central y distribución
38 g, 42 g, 36 g, 40 g, 40 g, 39 g, 41 g, 37 g, 43 g, 44 g,
38 g, 40 g, 42 g, 35 g, 39 g, 43 g, 37g, 41 g, 38 g, 44g
Encuentre la mediana de los datos.
Calcule la media del peso corporal de un ratón que fue sometido a una dieta.
¿Es posible identificar una moda en los pesos de los ratones?
250 ms, 270 ms, 280 ms, 290 ms, 260 ms, 255 ms, 275 ms, 285 ms, 300 ms, 310 ms,
260 ms, 265 ms, 270 ms, 280 ms, 280 ms, 305 ms, 290 ms, 275 ms, 285 ms, 295 ms.
¿Existe una moda en los tiempos de reacción?
¿Cuál es el tiempo de reacción promedio en el grupo de participantes?
Área 1: 25 individuos
Área 2: 20 individuos
Área 3: 18 individuos
Área 4: 30 individuos
Área 5: 22 individuos
Área 6: 26 individuos
Área 7: 28 individuos
Área 8: 24 individuos
Área 9: 27 individuos
Área 10: 21 individuos
Hallar cuánto cobran de media por hora.
¿Sería idéntica la respuesta si los 60 cobraran de media 4,00 a la hora?
45, 50, 65, 30, 55, 40, 75, 60, 35, 70,
48, 58, 42, 68, 52, 38, 80, 62, 33, 72.
Calcular el IQR
Calcula la varianza de las edades
Calcula la desviación estándar de las edades de los pacientes.
5, 14, 10, 6, 11, 4, 9, 12, 7, 15, 8, 4, 13, 6, 9, 14, 11, 5, 10, 4, 12, 8, 6, 13, 15, 3, 11, 7, 9, 16, 5, 12, 10,
14, 6, 8, 4, 13, 15, 11, 7, 5, 9, 3, 16, 12, 10, 8, 14, 6.
Calcula la media de las longitudes de las ballenas jorobadas.
Calcula el rango de las longitudes de las ballenas jorobadas.
Calcula la varianza y la desviación estándar de las longitudes de las ballenas jorobadas.
Intervalos de confianza
190 157 172 130 266 193 185 170 183 152 212 97 200 162 158 132 203 111 164 244
Una empresa eléctrica fabrica focos que tienen una duración aproximadamente distribuida de forma normal con una desviación estándar de 40 horas. Si una muestra de 30 focos tiene una duración promedio de 780 horas, encuentre un intervalo de confianza de 96 % para la media de la población de todos los focos que produce esta empresa.
Los siguientes datos, registrados en días, representan el tiempo de recuperación para pacientes que se tratan al azar con uno de dos medicamentos para curar infecciones graves en la vejiga:
Encuentre un intervalo de confianza de 99% para la diferencia μ2 – μ1 en el tiempo promedio de recuperación para los dos medicamentos, suponga poblaciones normales con varianzas iguales.
Estimar la media y la varianza.
Determinar el intervalo de confianza para la varianza con un nivel de confianza del 95%.
Un fabricante de automóviles pone a prueba dos nuevos métodos de ensamblaje de motores respecto al tiempo en minutos. Los resultados para el método \(n_1 = 31\), \(s_{1}^2 = 50\) y para el método \(n_2 = 25\), \(s_{2}^2 = 24\) Construir un intervalo de confianza del 90% para el cociente de varianzas.
Se intenta estudiar la influencia de la hipertensión en los padres sobre la presión sanguínea de los hijos. Para ello se seleccionan dos grupos de niños, unos con padres de presión sanguínea normal (grupo 1) y otro con uno de sus padres hipertenso (grupo 2), obteniéndose las siguientes presiones sistólicas:
Hallar un intervalo de confianza para la diferencia de medias del 95%, suponiendo que las varianzas en las dos poblaciones de niños son desconocidas e iguales.
\(n_1 = 13\), \(\bar{X}_1 = 4\), \(s_1 = 3\)
\(n_2 = 11\), \(\bar{X}_2 = 5\), \(s_2 = 2.2\)
Suponiendo que el tiempo de desarrollo en la población Ai sigue una distribución N(\(μ_i\), \(σ_i\)), para i= 1, 2, se pide:
Hallar un intervalo de confianza para el cociente de varianzas al nivel 0.80.
Obtener un intervalo de confianza para \(µ₁ -μ_2\), con nivel de confianza 0.95 (suponiendo igualdad de varianzas).
Prueba de Hipótesis
DATOS: 2150 1950 2170 1860 2050 2120 1920 1850 2230
Establecer las hipótesis nula y alternativa y realizar el contraste correspondiente utilizando α=0.05.
Construir un intervalo de confianza para μ.
Probar la hipótesis que la varianza poblacional es 1700 gr.
Se desea analizar el contenido de vitamina A en la sangre en trabajadores a nivel del mar y en altura obteniendo los siguientes datos: Nivel del mar: 25.2 30.4 46.9 51 46.4 48.5 39.3 55.9 34.3 31.2 40.7 29.8 35.7 40.1 En altura : 43.7 62.6 61.6 74.8 36.8 68.6 69.3 67 44 49 56.8 48.4 42.4 47.1 Pruebe la hipótesis que el trabajo en altura hace aumentar el contenido medio de vitamina A en la sangre usando un nivel de significación de 0.05. Considere varianzas iguales.
Los siguientes datos representan el crecimiento (en cms.) de Protothaca Thaca (almeja común)en dos sectores costeros de la región de Antofagasta:
Pruebe la hipótesis que la varianza del crecimiento en Coloso es menor que 0.05, usando un nivel de significación de 0.01.
Pruebe la hipótesis que la varianza del crecimiento en Bolsico es mayor que 0.03, usando un nivel de significación de 0.05.
Normales (X) : 146 142 135 140 154 163 138 168
Hospitalizados (Y) : 164 176 165 172 169 171
Pruebe la hipótesis de que la presión sistólica promedio de los sujetos hospitalizados es mayor que la de los sujetos normales, usando un nivel de significación de 0.05. Suponga varianzas iguales.
Antes de instalación : n=8 \(S_x^2= 101.17\)
Después de instalación: m=9 \(S_y^2= 94.73\)
Pruebe la hipótesis de que las varianzas del porcentaje de impurezas antes y después de la instalación del nuevo dispositivo son iguales. Use un nivel de significación de 0.05
Regresión lineal simple y múltiple
Ajustar un modelo de regresión lineal simple que relacione el flujo total de calor y (kilowatts) con la deflexión radial de los rayos desviados x4 (milirradianes).
Formar la tabla de análisis de varianza y probar la significancia de la regresión.
Determinar un intervalo de confianza de 99% para la pendiente.
Determinar un intervalo de confianza de 95% para el flujo promedio de calor, cuando la deflexión radial es 16.5 milirradianes.
Ajustar un modelo de regresión lineal simple a los datos.
Probar la hipótesis Ha: B1= 0.
Determinar un intervalo de confianza de 95% para la pendiente.
Determinar un intervalo de confianza de 95% para la pureza media, cuando el porcentaje de hidrocarburos es 1.00.
Ajustar un modelo de regresión múltiple que relaciona el CO2 del producto (y) con el solvente total (x_6) y el consumo de hidrogeno (x_7).
Probar la significancia de la regresión.
¿Qué podemos concluir con el coeficiente de determinación ajustado del modelo?
Establecer intervalos de confianza de 95% para \(B_6\) y \(B_7\)
Ajustar un modelo de regresión lineal múltiple que relacione la calidad del vino con esos regresores.
Probar la significancia de la regresión. ¿A qué conclusiones se puede llegar?
Soluciones
| F.Abs. Acumulada | F. relativa | F. Rel.Acumulada | |
|---|---|---|---|
| A | 14 | 0.15384615 | 0.1538462 |
| AB | 17 | 0.03296703 | 0.1868132 |
| B | 24 | 0.07692308 | 0.2637363 |
| O | 91 | 0.73626374 | 1.0000000 |
| Especie | Frecuencia_Abs | Frecuencia_Abs_Acumulada | Frecuencia_Rel | Frecuencia_Rel_Acumulada |
|---|---|---|---|---|
| Ceiba | 25 | 25 | 0.36764706 | 0.3676471 |
| Tabebuia | 18 | 43 | 0.26470588 | 0.6323529 |
| Brosimum | 12 | 55 | 0.17647059 | 0.8088235 |
| Enterolobium | 8 | 63 | 0.11764706 | 0.9264706 |
| Ficus | 5 | 68 |
| Especie | Frec_Absoluta | Frec_Abs_Acumulada | Frec_Relativa | Frec_Rel_Acumulada |
|---|---|---|---|---|
| Ceiba | 15 | 15 | 0.36585366 | 0.3658537 |
| Tabebuia | 10 | 25 | 0.24390244 | 0.6097561 |
| Brosimum | 8 | 33 | 0.19512195 | 0. |
Tamaño promedio de la población= 24.1
a)IQR= 24.25; b) Varianza= 223.2526; c) Desviación estándar= 14.94
a)Media= 9.3 ; b)IQR= 6; c) Varianza= 14.33673 y desviación estándar= 3.7864
Intervalo de confianza para la media con varianza desconocida. Con una confianza del 90%, el verdadero valor de la media estará en el intervalo de (158.1737, 189.9263).
Intervalo de confianza para la media con varianza conocida. Con una confianza del 96%, el verdadero valor de la media de la vida de los focos estará en el intervalo de (765.001538, 794.998461).
Intervalo de confianza para la diferencia de medias con varianza desconocida e iguales. Con una confianza del 99%, el valor verdadero de la diferencia de medias estará en el intervalo de (0.70, 3.30).
Intervalo de confianza para la varianza. Con una confianza del 95%, el verdadero valor de la varianza estará en el intervalo (50.1232, 403.2098).
Intervalo de confianza para el cociente de varianzas. Con una confianza del 90%, el verdadero valor del cociente de varianzas estará en el intervalo (1.0744, 3.932).
Intervalo de confianza para la diferencia de medias con varianzas desconocidas e iguales. Con una confianza del 95%, el verdadero valor de la diferencia de medias estará en el intervalo (-15.428954, -1.771046).
Prueba de hipótesis de cola derecha para la media con varianza conocida. Con una confianza del 95%, no rechazamos \(H_0: \text{(} Z_0 \text{ (0.476) < } Z_{0.05} \text{ (1.645))}\)
Prueba de hipótesis de cola izquierda para la diferencia de medias con varianzas desconocidas e iguales. Con una confianza del 95%, rechazamos \(H_0: t_0 \text{ (-3.820009) < } t_{0.05, 26} \text{ (-1.7056)}\)
Prueba de hipótesis de cola izquierda para la diferencia de medias con varianzas desconocidas e iguales. Con una confianza del 95%, rechazamos \(H_0: t_0 \text{ (-4.0458) } < t_{0.05,12} \text{ (-1.782)}\)
Prueba de hipótesis de dos colas para el cociente de varianzas. Con una confianza del 95%, no rechazamos \(Ho (Fo (1.067983) ∈ (0.2041091, 4.528562)\)