Una curva de densidad normal (o de Gauss) describe la densidad de probabilidades en la distribución de valores de observaciones (muestra) de una variable aleatoria, cuando el número de observaciones es bastante grande. Se aplica a muchas de las variables usualmente medidas en biología, aunque hay otras curvas de distribución de densidad, con formas parecidas a la normal (tipo campana), por ejemplo la t de Student.
Su forma general para una población, con la fórmula correspondiente, es la siguiente:
***
La densidad de probabilidad para un valor \(x\), en una población inmensamente grande (\(X\)), es 0, pues la probabilidad de un valor único, entre un número infinito de valores posibles de la variable, tiende a 0.
Debemos pensar en la densidad de probabilidad como la frecuencia de ocurrencia de un valor en un intervalo de valores de la variable continua \(X\), [\(x\) y \(x+dx\)]. Si el valor de \(dx\) es infinitamente pequeño, entonces la función \(f_X(x)\) es la probabilidad de \(X\) en ese intervalo.
La curva de distribución de valores con \(\mu = 0\) y \(\sigma = 1\) se conoce como la curva normal estandarizada, y su función de densidad de probabilidades es:
\[Y_i = \frac{1}{\sqrt{2\pi}}.e^\frac{-X_i{^2}}{2}\qquad(1) \]
La curva normal estandarizada describe exactamente la densidad de probabilidades para un infinito número de valores de la variable; sin embargo usualmente nuestra muestra (o la población completa) contiene un número finito de valores, y esto produce desviaciones de los valores esperados según la curva normal estandarizada.
Vamos a visualizar cómo compara la curva normal, con histogramas de la frecuencia de valores de una variable aleatoria, con 30, 300, 3000, 30000, y 300000 valores.
#valores al azar de la distribución normal
randNorm <- rnorm(300000)
#calculo de su densidad
randDensity <- dnorm(randNorm)
#gráfica
library(ggplot2)
ggplot(data.frame(x = randNorm, y = randDensity)) +
aes(x = x, y = y) +
geom_point() +
labs(x = "Random Normal Variable", y = "Densidad")
ggplot(data.frame(x = randNorm), aes(x = x)) +
geom_histogram(binwidth = 0.1) +
labs(x = "Random Normal Variable", y = "Frecuencia")
Utilizando los valores acumulados de la curva normal (integral) podemos calcular la proporción (o probabilidad) de observaciones que se encuentran antes o después de la medida de una observación.
Pero antes debemos estandarizar la escala de las mediciones a la curva normal estándar (\(\mu = 0\) y \(\sigma = 1\)); para esto usamos el valor \(Z\):
\[Z = \frac{X_i - \mu}{\sigma}\qquad(2)\]
Tabla de probabilidades valores Z, distribución normal
La función pnorm nos permite calcular la proporción (probabilidad) de valores de una muestra que se encuentran antes o después de un valor \(X_i\), siempre que conozcamos la media y desviación estándar de la muestra (¡asumiendo que los valores se distribuyen normalmente!). La función tiene la siguiente sintáxis:
pnorm(xi, mean = Xbarra, sd = s, lower.tail = TRUE o FALSE)
xi: valor (cuantil) que divide los datos
Xbarra: media de la muestra
s: desviación estándar de la muestra lower.tail TRUE o FALSE: si queremos proporción antes o después del valor xi
#Calcular la proporción (o probabilidad) de valores menores de 6.6 mm en una distribución normal de tamaños de semillas, con media = 6.0 mm y desviación estándar = 1.1 mm:
pnorm(6.6, mean = 6.0, sd = 1.1, lower.tail = TRUE)
## [1] 0.7072795
#y la proporción de valores mayores de 5.4 mm:
pnorm(5.4, mean = 6.0, sd = 1.1, lower.tail = FALSE)
## [1] 0.7072795
#también podemos calcular la proporción de valores entre dos valores (o fuera de esos dos valores)
props <- pnorm(c(5.4,6.6), mean = 6.0, sd = 1.1, lower.tail = TRUE)
props
## [1] 0.2927205 0.7072795
#proporción de valores entre 5.4 mm y 6.6 mm
props[2] - props[1]
## [1] 0.4145591
La función qnorm en R, realiza el proceso contrario a pnorm, esto es: calcula los valores de \(X_i\) que delimitan una proporción en la curva de densidad normal.
#Valor de Xi antes del cual se encuentra el 95 % de los valores en la curva de densidad normal con media = 0 y desviación estándar de 1:
qnorm(0.95)
## [1] 1.644854
#Con media 6.0 y desviación estándar de 1.1:
qnorm(0.95, mean = 6.0, sd = 1.1)
## [1] 7.809339
#Valor de Xi sobre el cual se encuentra el 5 % de los valores:
qnorm(0.05, mean = 6.0, sd = 1.1, lower.tail = FALSE)
## [1] 7.809339
Alternativa para cálculos relacionados a la distribución normal:
Calculadora Distribución Normal
Una aplicación práctica (asumiendo que tenemos una muestra de una población con valores distribuidos normalmente) es calcular la proporción de nuestros valores dentro de los límites de la desviación estándar (o un múltiplo de ella).
Primero vamos a usar valores generados usando la función rnorm de R, que produce n valores aleatorios de una distribución con media y desviación estándar dada. Usaremos n = 10000 y media = 0, y desviación estándar = 1.
#valores generados
propg <- rnorm(10000)
#estadísticos
n = length(propg)
mean = mean(propg)
sd = sd(propg)
#función para calcular proporción
proporcion <- function(nSD){
lo = mean - nSD*sd
hi = mean + nSD*sd
percent = sum(propg>=lo
& propg<=hi)/n *100
}
#cálculo de la proporción (en %) para 1 y 2 desviaciones estándares:
print(paste("Porcentaje de datos entre 1 SD es ",proporcion(1),"%", sep=""))
## [1] "Porcentaje de datos entre 1 SD es 68.52%"
print(paste("Porcentaje de datos entre 2 SD es ",proporcion(2),"%", sep=""))
## [1] "Porcentaje de datos entre 2 SD es 95.63%"
Ahora usaremos una muestra más pequeña: los datos de altura total de individuos Melocactus intortus.
#lectura de los datos
library(readr)
melocactus <- read_csv("melocactus.csv")
#estadísticos
n = length(melocactus$alturatotal)
mean = mean(melocactus$alturatotal)
sd = sd(melocactus$alturatotal)
#función para calcular proporción
proporcion <- function(nSD){
lo = mean - nSD*sd
hi = mean + nSD*sd
percent = sum(melocactus$alturatotal>=lo
& melocactus$alturatotal<=hi)/n *100
}
#cálculo de la proporción (en %) para 1 y 2 desviaciones estándares:
print(paste("Porcentaje de datos entre 1 SD es ",proporcion(1),"%", sep=""))
## [1] "Porcentaje de datos entre 1 SD es 71.0344827586207%"
print(paste("Porcentaje de datos entre 2 SD es ",proporcion(2),"%", sep=""))
## [1] "Porcentaje de datos entre 2 SD es 96.551724137931%"
¿Cuántos cactus se encuentran alrededor de la media de la altura total, hasta más y menos una desviación estándar? ¿Será una cantidad exacta?
En estadística, se llama intervalo de confianza a un par o varios pares de números entre los cuales se estima que estará cierto valor desconocido con una determinada probabilidad de acierto. Podemos estimarlos utilizando las herramientas de cálculo de las probabilidades o proporciones que hemos utilizado, siempre asumiendo que nuestra muestra proviene de una población con distribución normal, y que la muestra es suficientemente grande.
#estadísticos
media <- mean(melocactus$alturatotal)
ds <- sd(melocactus$alturatotal)
n <- length(melocactus$alturatotal)
#cálculo de los límites del intervalo para 95 % de los valores:
error <- qnorm(0.975)*ds/sqrt(n)
izq <- media-error
der <- media+error
print(paste("Límite inferior del intervalo de confianza 95 %: ",izq, sep=""))
## [1] "Límite inferior del intervalo de confianza 95 %: 19.6228158026175"
print(paste("Límite superior del intervalo de confianza 95 %: ",der, sep=""))
## [1] "Límite superior del intervalo de confianza 95 %: 24.2392531628997"
En el cálculo del intervalo de confianza (llamado también límites de error) multiplicamos el valor de desviación estándar para una probabilidad de una distribución normal, por la desviación estándar de la muestra dividida por la raíz cuadrada del tamaño de la muestra. A este valor lo llamaremos error estándar de la media, y es un estimador de la desviación estándar de la distribución de las medias de tamaño n, tomadas de una población.
Para una población:
\[\sigma_m = \frac{\sigma}{\sqrt{N}}\]
Para una muestra:
\[s_m = \frac{s}{\sqrt{n}}\]
Sesgo y Curtosis
Con los datos de M. intortus:
mystats <- function(x){
m <- mean(x)
md <- median(x)
n <- length(x)
s <- sd(x)
skew <- sum((x-m)^3/n/s^3)
kurt <- sum((x-m)^4/n/s^4) - 3
return(c(n=n, mean=m, median=md, stdev=s, skew=skew, kurtosis=kurt))
}
sapply(melocactus[,"alturatotal"], mystats)
## alturatotal
## n 145.00000000
## mean 21.93103448
## median 18.00000000
## stdev 14.18119607
## skew 0.93762972
## kurtosis 0.09989033
La prueba de hipótesis es un procedimiento estadístico para probar si el azar es una explicación aceptable de un resultado experimental u observacional.
El procedimiento incluye el cálculo de una probabilidad de ocurrencia al azar de un evento, en una situación dada (llamada a veces un ‘estado del mundo’). No se debe confundir con la probabilidad general de ocurrencia del evento.
Se denomina hipótesis nula (\(H_0\)) a la que representa la condición resultante cuando el aparente efecto es debido al azar. Algunos ejemplos: No hay diferencias entre las medias de dos poblaciones: \[H_0: \mu_1 = \mu_2\]
No existe correlación entre dos variables: \[H_0 : \rho = 0\]
Las varianzas de dos poblaciones son iguales: \[H_0 : \sigma_1^{2} = \sigma_2^{2}\]
\[H_a : \sigma_1^{2} > \sigma_2^{2}\]
La hipótesis nula es usualmente lo opuesto a la hipótesis del investigador/a, la cual se denomina hipótesis alterna (\(H_a\)). Una hipótesis nula rechazada puede dejar abierta la posibilidad de hipótesis alternas en una o dos direcciones con respecto al valor de la hipótesis nula. Esto debe considerarse antes de proceder con las pruebas de hipótesis, ya que determina los límites en los valores para una misma probabilidad de error.
Una baja probabilidad de que el efecto o resultado sea al azar, pone en duda la hipótesis nula. Pero ¿qué tan bajo debe ser el nivel de la probabilidad para concluir que podemos rechazar con seguridad a la hipótesis nula? En gran parte de los trabajos de investigación se utiliza un nivel de probabilidad (\(\alpha\)) de 0.05 (5 %) o menor para rechazar que la hipótesis nula es válida; lo cual puede verse tambien como que de 100 repeticiones del experimento u observación en 5 de ellos (o menos) la hipótesis nula puede sostenerse, y nos equivocaríamos al rechazarla.
Ahora bien, rechazar la hipótesis nula no es garantía de que el efecto sea importante en el sistema que se estudia, solamente podemos decir que es significativo en comparación con la hipótesis nula, o es mejor decir que tiene poca probabilidad de que haya ocurrido por mero azar.
Dos maneras de evaluar la significancia:
Al rechazar la hipótesis nula lo hacemos con una probabilidad de equivocarnos (menor de \(\alpha\) o con el valor \(p\)) que no elimina la posibilidad de equivocarnos; cuando se rechaza la \(H_0\), pero esta es correcta, entonces cometemos un error Tipo I. Este tipo de error es menor cuando el valor (\(\alpha\)) es menor.
¿Por qué no llevar el valor de \(\alpha\) a un mínimo cercano a 0? Al disminuir la probabilidad de equivocarnos al rechazar \(H_0\) estamos, por otro lado, aumentando la probabilidad de aceptar esta hipótesis, siendo realmente incorrecta; a este error se le llama error Tipo II (\(\beta\)).
Tabla errores Tipo I y Tipo II
Gráfica de las áreas de errores Tipo I y Tipo II
Más claramente lo podemos ver en la siguiente imagen:
Errores Tipo I y Tipo II
Una hipótesis nula rechazada puede dejar abierta la posibilidad de hipótesis alternas en una o dos direcciones con respecto al valor de la hipótesis nula. Esto debe considerarse antes de proceder con las pruebas de hipótesis, ya que determina los límites en los valores para una misma probabilidad de error. Para un mismo valor de \(\alpha\), los valores críticos en la distribución de probabilidades serán diferentes, dependiendo de si se trata de una cola (una dirección de la \(H_a\)) o dos colas (dos direcciones de la \(H_a\)) \[H_0:\mu=0 \quad H_a:\mu \neq 0\]
Valores críticos para \(\alpha\) = 0.05, dos colas
\[H_0:\mu \leq0 \quad H_a:\mu>0\]
Valor crítico para \(\alpha\) = 0.05, una cola