Estoy trabajando en el cálculo de intervalos de confianza bootstrap para el Fst de Weir y Cokerham. Quiero usar el método del percentil-t como se describe en este documento .
Estoy calculando el $F_{st}$ entre dos subpoblaciones en el caso de alelo único, loci múltiple como: $$ \hat \theta_W = \frac {\sum \limits_l a_l}{\sum \limits_l (a_l + b_l + c_l)} $$
como se describe en El documento de Weir y Cockerham de 1984 .
Mi plan actual es estimar la varianza de $\hat \theta$ al pasar por encima de los loci: $$ var(\hat \theta) \mathrel{\hat{=}} \frac {m - 1} {m} \sum \limits_{L = 1}^{m} (\hat \theta_{(L)} - \frac {1} {m} \sum \limits_{L = 1}^{m} \hat \theta_{(L)})^2 $$
donde $\hat \theta_{(L)}$ es la estimación de $\hat \theta$ obtenido al omitir el locus $L$ y $m$ es el número de loci.
Para obtener los intervalos de confianza, mis pasos son
-
Realizar unas 1.000 réplicas bootstrap (no he calculado cuántas serán las apropiadas, iba a probar esto como base, y luego ir subiendo).
-
En cada ronda, recogería una muestra aleatoria simple con reemplazo de los loci y calcularía el $F_{st}$ valor ( $\hat \theta^*$ ).
-
Entonces usaría jackknifing para estimar la varianza de $\hat \theta^*$ . (Yo utilizaría el mismo método que el anterior)
-
Entonces calcularía el estadístico t: $t^* = \frac {\hat \theta^* - \hat \theta} {\hat se_{\hat \theta^*}}$
-
Una vez hecho el bucle for. Obtendría el intervalo de confianza con: $$ (\hat \theta - t^*_{(1 - \alpha / 2)} \hat se_{\hat \theta}; \hat \theta - t^*_{(\alpha / 2)} \hat se_{\hat \theta}) $$
(El intervalo de confianza procede de la entrada de Wikipedia sobre bootstrapping)
Mis principales preguntas son:
-
¿Es ésta la forma correcta de calcular los intervalos de confianza del bootstrap estudiado?
-
Weir y Cockerham sugieren que también se podría hacer bootstrap sobre muestras en lugar de sobre loci, el primer artículo que cité y Weir & Cockerham hacen bootstrap sobre loci, ¿es este el mejor enfoque para comparar dos poblaciones? Iba con porque mi entendimiento era que podemos asumir independencia entre locus (asumiendo poca dependencia por ligamiento) y podría no ser capaz entre muestras en una subpoblación ya que podrían estar relacionadas.
Avísame si hay algún error o si se necesita más información.
Gracias.
Editar: Aquí hay algo de código R que he escrito para hacer esto. Primero encuentro las matrices a, b y c y calculo $\hat \theta$ entonces hago esto para encontrar su varianza:
findVar <- function(a, b, c) {
theta.L <- c(rep(0, 10))
for (i in 1:ncol(data)) {
# remove locus i
theta.L[i] <- sum(a[-i]) / sum(a[-i] + b[-i] + c[-i])
}
m <- ncol(data)
mean.theta <- sum(theta.L) / m
var.theta <- ((m - 1) / m) * sum((theta.L - mean.theta)^2)
return (var.theta)
}
var.theta <- findVar(a, b, c)
Luego hice esto para encontrar los intervalos de confianza bootstrap:
t.i <- c(rep(0, 10))
m <- ncol(data)
aTemp <- c(rep(0, 10))
bTemp <- c(rep(0, 10))
cTemp <- c(rep(0, 10))
for (i in 1:1000) {
list <- sample(1:m, m, replace = TRUE)
for (j in 1:m) {
aTemp[j] <- a[list[j]]
bTemp[j] <- b[list[j]]
cTemp[j] <- c[list[j]]
}
theta.i <- sum(aTemp) / sum(aTemp + bTemp + cTemp)
# find the variance
var.theta.i <- findVar(aTemp, bTemp, cTemp)
t.i[i] <- (theta.i - theta) / var.theta.i
}
alpha <- 0.05
t.i <- sort(t.i)
firstT <- t.i[ceiling(length(t.i) * (1 - alpha / 2))]
secondT <- t.i[ceiling(length(t.i) * (alpha/2))]
lower <- theta - (firstT * var.theta)
upper <- theta - (secondT * var.theta)
Este es un ejemplo de resultado:
Theta: -0.1748
Confidence Interval: ( -0.2244 , 0.6153 )
Nota: No tenía un conjunto de datos muy grande, sólo quería ver si funcionaba, tal vez.
Editado de nuevo, para corregir un error con la obtención del $\alpha / 2$ y $1 - \alpha / 2$ percentiles, y cambió los resultados del ejemplo
0 votos
Mi compañero de trabajo lo revisó por mí y cree que esto debería funcionar. Sólo en caso de que alguien más encuentre esto. Voy a tratar de publicar los resultados utilizando la función boot.ci de R y algunos resultados que obtuve con datos reales.