Muestrear es el proceso de colectar datos para obtener una perspectiva sobre la población. Es importante que un muestreo sea representativo de la población, para así evitar sesgos en estimados. Existen algunos términos importantes que se deben definir:
Cada individuo en la población tiene la misma probabilidad de ser muestreado. La selección de un individuo no afecta la selección de otros, por lo tanto cada uno es independiente. No require un conocimiento previo de la población y normalmente representa correctamente a la población. Sin embargo, cuando una población tiene un grado de estratificación, este método no puede ser el más adecuado.
Se trata de muestrear una población con un patrón establecido. Normalmente es utilizado cuando existe algún gradiente en alguna variable ambiental (e.g. profundidad, temperatura, etc). Este tipo de diseño asegura un muestreo aleatorio de la población, sin embargo, algunos tiempos o lugares pueden nunca ser muestreados.
La población es dividida en estratos, y luego se toma muestras aleatorias de cada estrato. Es bastante utilizado cuando se busca una buena representación de cada estrato. Suele ser representativo de la población, principalmente porque todos los estratos son bien representados. Sin embargo, requiere tener un conocimiento previo de la población, por lo que solo puede ser aplicable para poblaciones con estudios previos.
Además de estos tres diseños, existen otros utilizados en ecología: híbrido, cluster, por conveniencia, etc. En general, elegir el diseño de muestreo va a depender de la pregunta de investigación y del esfuerzo de muestreo que se pueda tener.
Haremos un ejercicio en R al respecto. Vamos a simular las longitudes por edad (edad 4, 5, 6) de una población de peces (1900 individuos). Luego, vamos a muestrear esta población mediante un diseño aleatorio, sistemático y estratificado. Finalmente, vamos a comparar la longitud media a partir de cada muestreo y compararlas con el valor real en la población. De esta forma podemos saber que diseño de muestreo arroja un valor más cercano a la realidad.
# Antes de todo, activamos dos librerias que necesitamos:
require(dplyr)
require(splitstackshape)
# Comienza la simulacion:
group1 = expand.grid(longitud = rnorm(n = 1000, mean = 30, sd = 4),
edad = 4) # 1000 ind de edad 4
group2 = expand.grid(longitud = rnorm(n = 600, mean = 40, sd = 5),
edad = 5) # 600 ind de edad 5
group3 = expand.grid(longitud = rnorm(n = 300, mean = 55, sd = 6),
edad = 6) # 300 ind de edad 6
popdata = rbind(group1, group2, group3)
popdata = popdata[sample(x = 1:1900, size = 1900, replace = F), ]
row.names(popdata) = 1:1900
# `popdata` representa las longitudes por edad en la poblacion
# Las graficamos:
hist(x = popdata$longitud, xlab = 'Altura (cm)', main = 'Poblacion',
col = 'gray60')
# Ahora simulamos los muestreos (solo 180 individuos muestreados):
# 1) Diseno Aleatorio:
n_samp = 180 # numero de ind muestreados
random_samp = sample_n(tbl = popdata, size = n_samp) # contiene el muestreo aleatorio
# 2) Diseno Sistematico:
start_num = sample(x = 1:10, size = 1) # estimar el numero inicial
ind_sampled = seq(from = start_num, to = nrow(popdata), length.out = n_samp) # elegir
#los individuos sistematicamente (con un patron)
ind_sampled = round(ind_sampled)
system_samp = popdata[ind_sampled, ] # contiene el muestreo sistematico
# 3) Diseno Estratificado:
# Aqui muestreamos 60 individuos por edad (180 en total)
strat_samp = stratified(indt = popdata, group = 'edad', size = 60) # contiene el muestreo
#estratificado
# Ahora comparamos la longitud media de cada diseno con la media de la poblacion
# El valor más cercano a cero significa un mejor desempeno:
abs(mean(random_samp$longitud) - mean(popdata$longitud)) # aleatorio
## [1] 0.9306504
abs(mean(system_samp$longitud) - mean(popdata$longitud)) # sistematico
## [1] 0.8786329
abs(mean(strat_samp$longitud) - mean(popdata$longitud)) # estratificado
## [1] 4.843307
# Se puede graficar rapidamente:
# La linea roja representa la longitud media en la poblacion
# Y el histograma la distribucion de longitudes para cada diseno
par(mfrow = c(1,3))
hist(random_samp$longitud, xlab = 'Altura (cm)', main = 'Diseno aleatorio',
col = 'gray60')
abline(v = mean(popdata$longitud), col = 'red', lty = 2, lwd = 2)
hist(system_samp$longitud, xlab = 'Altura (cm)', main = 'Diseno sistematico',
col = 'gray60')
abline(v = mean(popdata$longitud), col = 'red', lty = 2, lwd = 2)
hist(strat_samp$longitud, xlab = 'Altura (cm)', main = 'Diseno estratificado',
col = 'gray60')
abline(v = mean(popdata$longitud), col = 'red', lty = 2, lwd = 2)
Este es un ejercicio simple, pero el mismo procedimiento se usa para diversos estudios en ecología que quieren evaluar el desempeño de diferentes diseños de muestreo.
Revisamos los conceptos básicos de estadística empleados en este curso.
Una variable es un atributo que describe un individuo, lugar o cosa. Este atributo claramente puede variar entre individuos. Por nombrar algunos ejemplos: altura total, longitud, temperatura, edad, sexo, etc. Las variables pueden ser clasificadas como sigue:
Refleja algún tipo de magnitud, representa una medida y es numérica. Esta puede ser divida en:
No son numéricas, los valores que toman son categorías.
Una variable se puede transformar, lo cual normalmente se hace para adaptarla a ciertos análisis estadísticos. Por ejemplo, es normal transformar una variable continua a discreta para ciertos propósitos (e.g. longitud continua a longitud en intervalos definidos). También de cuantitativa a cualitativa (e.g. transformar datos de abundancia a presencia/ausencia).
Ofrecen una idea del centro de los datos.
\(\bar{x} = \frac{1}{n}\sum_i x_i\)
Donde \(n\) es el número de individuos muestreados y \(x_i\) es el valor de la variable para el individuos \(i\).
Mediana: Observación que divide a la muestra en dos partes iguales.
Primer cuartil: Observación que divide a la muestra en dos partes: 25% inferior y 75% superior.
Tercer cuartil: Observación que divide a la muestra en dos partes: 75% inferior y 25% superior.
Moda: Valor que aparece con mayor frecuencia en las observaciones. Puede haber más de una moda (multimodal).
Rango: Diferencia entre el valor máximo y mínimo en las observaciones.
Desviación estándar: Desviación de los datos con respecto a la media. Se estima:
\(s=\sqrt{\frac{1}{n}\sum_i (x_i-\bar{x})^2}\)
Varianza: Es \(s\) elevado al cuadrado.
Rango intercuartil: Diferencia entre el tercer y primer cuartil.
Coeficiente de variación: División entre \(s\) y \(\bar{x}\). Se emplea cuando se quiere comparar la dispersión entre dos variables con diferentes unidades.
Vamos a explorar estos conceptos usando una base de datos real con R.
# Leer los datos:
ebsdata = read.csv('data/ebs2016_2018.csv')
# Seleccionamos una sola especie: bacalao del Pacifico
ebsdata = ebsdata[ebsdata$COMMON == 'Pacific cod', ]
# Seleccionemos solo un año
ebsdata = ebsdata[ebsdata$YEAR == 2017, ]
# Calculemos la media de NUMCPUE, un proxy de abundancia
mean(ebsdata$NUMCPUE)
## [1] 7.739575
# Mediana:
median(ebsdata$NUMCPUE)
## [1] 4.0151
# Minimo - Maximo:
min(ebsdata$NUMCPUE)
## [1] 0.1985
max(ebsdata$NUMCPUE)
## [1] 205.71
range(ebsdata$NUMCPUE)
## [1] 0.1985 205.7100
# Desviación estándar:
sd(ebsdata$NUMCPUE)
## [1] 15.18841
# Varianza
var(ebsdata$NUMCPUE)
## [1] 230.6879
# Primer y tercer cuartil:
quantile(x = ebsdata$NUMCPUE, probs = 0.25)
## 25%
## 2.07895
quantile(x = ebsdata$NUMCPUE, probs = 0.75)
## 75%
## 8.1536
# Exploremos con un boxplot:
boxplot(ebsdata$NUMCPUE)
# Coeficiente de variacion
sd(ebsdata$NUMCPUE)/mean(ebsdata$NUMCPUE)
## [1] 1.962435
Definimos algunos conceptos importantes:
Espacio muestral: conjunto de todos los posibles resultados de un experimento.
Evento: conjunto de resultados que son de interés para un estudio.
Probabilidad de un evento: frecuencia relativa del conjunto de resultados de interés.
Variable aleatoria: función que asigna valores numéricos a diferentes eventos en un espacio muestral.
Distribución de probabilidad: asigna cierta probabilidad a un evento determinado \(Pr(X=r)\), donde \(X\) representa a una variable aleatoria.
Existen una serie de distribuciones de probabilidad. Vamos a detallar tres: normal, binomial, y Poisson.
Función de probabilidad es:
\(f(x)=\frac{1}{\sqrt{2\pi\sigma}}\exp[-\frac{1}{2\sigma^2}(x-\mu)^2]\)
donde \(-\infty <x<\infty\), y \(\sigma\) y \(\mu\) representan la desviación estándar y la media de la población. Esta distribución es normalmente referida como \(N(\mu, \sigma^2)\). Utilizada para datos continuos.
Ejemplo: Asumamos que la altura de una especie sigue una distribucion normal. Observamos en una muestra que la media es 72 mm y la desviacion estandar es 15.2 mm. Cual es el porcentaje de individuos que tiene mas de 84 mm.
# Simulemos datos con distribucion normal
sampled_data = rnorm(n = 1000, mean = 72, sd = 15.2)
hist(sampled_data)
# Graficar en forma de densidad:
dens = density(sampled_data)
plot(dens, main="Densidad")
polygon(dens, col="gray80")
# Calculemos la proporcion (probabilidad)
1 - pnorm(q = 84, mean = 72, sd = 15.2)
## [1] 0.2149176
pnorm(q = 84, mean=72, sd=15.2, lower.tail = FALSE)
## [1] 0.2149176
# Podemos tambien encontrar la probabilidad exacta para
# un valor de altura dado:
dnorm(x = 84, mean = 72, sd = 15.2)
## [1] 0.01921876
Función de probabilidad es:
\(Pr(X=k)= {n \choose k}p^k(1-p)^{n-k}\)
donde \(k=0,1,2,...,n\). Aquí, \(n\) representa el número de intentos independientes de algún evento, y \(p\) es la probabilidad de éxito.
Ejemplo: Asumamos que muestreamos sistematicamente un campo (area) para observar la presencia/ausencia de una especie. Asumimos que esta especie esta distribuida uniformemente (\(p=0.5\)). Hacemos 50 estaciones. Cual es la probabilidad de encontrar esa especie en menos de 20 estaciones?
# Simulamos los datos:
n_sim = 50
sim_data = rbinom(n = 1, size = n_sim, prob = 0.5)
sim_data # obs probabilidad
## [1] 30
# Calculemos la probabilidad (asumimos p = 0.5):
pbinom(q = 20, size = n_sim, prob = 0.5)
## [1] 0.1013194
# Podemos tambien encontrar la probabilidad exacta:
dbinom(x = 20, size = n_sim, prob = 0.5)
## [1] 0.04185915
# Grafiquemos todas las opciones:
positive = 0:50
plot(positive, dbinom(x = positive, size = n_sim, prob = 0.5), type = 'h')
Para estudiar la probabilidad de \(k\) eventos que ocurren en un periodo de tiempo \(t\) (representado por \(\lambda\)). También puede asumirse por unidad de espacio (e.g. estación de muestreo). La función de probabilidad es:
\(Pr(X=k)=e^{-\mu}\frac{\mu^k}{k!}\)
Donde \(k=0,1,2,...\). \(\mu=\lambda t\).
Ejemplo: Tenemos un muestreo aleatorio (estaciones) y observamos el numero de individuos por estacion de una especie dada. La distribucion es tipo Poisson con \(\lambda=15\) (ind/estacion). Calcular la probabilidad de encontrar mas de 20 individuos en una estacion de muestreo.
# Simulamos nuestros datos:
n_sim = 50
sim_data = rpois(n = n_sim, lambda = 15)
length(which(sim_data>20))/n_sim # obs probabilidad
## [1] 0.06
# Calculemos la probabilidad:
1 - ppois(q = 20, lambda = 15)
## [1] 0.08297091
ppois(q = 20, lambda = 15, lower.tail = FALSE)
## [1] 0.08297091
# Podemos tambien encontrar la probabilidad exacta (de encontrar 20 ind en una estacion):
dpois(x = 20, lambda = 15)
## [1] 0.04181031