Skip to content

Commit

Permalink
Agregar más de chequeos a priori
Browse files Browse the repository at this point in the history
  • Loading branch information
felipegonzalez committed Jan 17, 2024
1 parent 79134ca commit 70d32a7
Showing 1 changed file with 139 additions and 3 deletions.
142 changes: 139 additions & 3 deletions notas/02-flujo-basico.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ independientes):

$$\theta(1-\theta)(1-\theta)\theta(1-\theta) = \theta^2(1-\theta)^3$$
Para algunos valores de $\theta$ (posibles conjeturas acerca del valor de $\theta$) podemos
escribir una tabla como sigue (Nota: discretizamos por el momento a un número finito de valores de $p$
escribir una tabla como sigue (Nota: discretizamos por el momento a un número finito de valores de $\theta$
para hacer el argumento más simple):


Expand Down Expand Up @@ -234,8 +234,8 @@ Por el momento, podríamos poner $p(\theta)$ constante,
de manera que es parte de la constante de normalización, y sólo tendríamos que normalizar como sigue:

```{r}
p <- seq(0, 1, length.out = 11)
prob_post <- tibble(conjetura = p, probablidad = p^2 * (1 - p)^3) |>
theta <- seq(0, 1, length.out = 11)
prob_post <- tibble(conjetura = theta, probablidad = theta^2 * (1 - theta)^3) |>
mutate(prob_posterior = probablidad / sum(probablidad))
prob_post |>
kable(col.names = c("Conjetura θ", "p(D|θ)","p(θ|D)")) |>
Expand Down Expand Up @@ -349,6 +349,70 @@ calcular_posterior(rep(1, 50)) |> round(3)
calcular_posterior(c(rep(0, 100), rep(1, 100))) |> round(3)
```

### Más verificaciones a priori {-}

Otra verificación útil que podemos hacer es, una vez que hemos definido
nuestro modelo generativo y un modelos estadístico asociado, generar
bajo simulación datos que podríamos observar. Esto tiene como fin verificar
que nuestro modelo generativo y nuestro modelo estadístico producen
datos que están de acuerdo con el conocimiento experto (teoría científica o
conocimiento de negocio).

Así que simulamos datos del modelo:

```{r}
set.seed(231)
simulacion_datos_tbl <- map_df(1:500,
function(rep){
# simular valor inicial
theta_sim <- sample(seq(0, 1, length.out = 11),
prob = prob_priori$prob_priori, size = 1)
datos_sim <- sim_pos_neg(theta = theta_sim, N = 30)
tibble(rep = rep, theta_sim = theta_sim, datos_sim)
})
```

Podemos ver por ejemplo dónde esperamos ver el número de positivos
a lo largo de distintas muestras, cuando $N=30$:

```{r}
simulacion_datos_tbl |>
group_by(rep, theta_sim) |>
summarise(Npos = sum(Pos)) |>
ggplot(aes(x = Npos)) +
geom_bar() +
labs(x = "Número de positivos", y = "Frecuencia (muestras)")
```

Observamos que con nuestros supuestos, hay una probabilidad alta de
observar 0 positivos (alrededor de 0.30). Esto se debe en parte a la
discretización que hicimos, y que nuestra apriori pone peso considerable
en prevalencia igual a cero, lo que quizá no es muy realista, y probablemente
deberíamos escoger al menos una discretización más fina.

También, si consideramos los supuestos como correctos, esto puede indicar
el riesgo de usar una muestra chica para estimar prevalencia si esta es
muy baja: es probable que obtengamos 0 observaciones positivas.


::: callout-note
# Verificación predictiva a priori

Con este tipo de verificaciones podemos detectar las consecuencias de
nuestros supuestos (incluyendo la elección de distribuciones a prior), así
como otras decisiones de modelado (como la discretización).

Conflictos con el conocimiento del área deben ser explorados para entenderlos
y si es necesario corregir nuestros supuestos.

:::

Este tipo de verificaciones es muy flexible, y debe adaptarse a los aspectos
del conocimiento del área que son importantes para los expertos. Podemos usar
todos nuestros recursos analíticos (tablas, resúmenes, gráficas) para producir
estos chequeos.


## Paso 4: Probar el proceso de estimación

Antes de utilizar datos, verificamos cómo se comporta nuestro proceso de estimación
Expand Down Expand Up @@ -714,6 +778,74 @@ ya implementadas) esos resúmenes de interés
que podamos llevar muy lejos.


### Más de verificaciones apriori {-}

Antes de continuar, sin embargo, veremos cómo se veo el chequeo predictivo
a priori que consideramos en la sección de arriba.

```{r}
set.seed(231)
simulacion_datos_tbl <- map_df(1:500,
function(rep){
# apriori seleccionada
theta_sim <- rbeta(1, 1, 3)
datos_sim <- sim_pos_neg(theta = theta_sim, N = 30)
tibble(rep = rep, theta_sim = theta_sim, datos_sim)
})
```

Podemos ver por ejemplo dónde esperamos ver el número de positivos
a lo largo de distintas muestras, cuando $N=30$:

```{r}
simulacion_datos_tbl |>
group_by(rep, theta_sim) |>
summarise(Npos = sum(Pos)) |>
ggplot(aes(x = Npos)) +
geom_bar() +
labs(x = "Número de positivos", y = "Frecuencia (muestras)")
```

Este resultado es consecuencia de nuestros supuestos, antes de ver los datos,
y resume que esperamos con mayor probabilidad un número bajo de positivos
(en una muestra de N=30),
y que es muy poco probable que observemos prevalencias muy altas. Dependiendo
de la situación, este puede ser un resultado aceptable.

Un resultado no aceptable para una enfermedad que sabemos que es relativamente
rara (aunque tenemos incertidumbre), por ejemplo, podría ser el siguiente:

```{r}
set.seed(231)
simulacion_datos_tbl <- map_df(1:500,
function(rep){
# apriori seleccionada
theta_sim <- rbeta(1, 30, 3)
datos_sim <- sim_pos_neg(theta = theta_sim, N = 30)
tibble(rep = rep, theta_sim = theta_sim, datos_sim)
})
simulacion_datos_tbl |>
group_by(rep, theta_sim) |>
summarise(Npos = sum(Pos)) |>
ggplot(aes(x = Npos)) +
geom_bar() +
labs(x = "Número de positivos", y = "Frecuencia (muestras)")
```

Este resultado no es aceptable cuando sabemos que es prácticamente imposible
que la mayoría de la población está infectada. Debemos entonces
regresar y ajustar nuestros supuestos: el problema en este caso es la elección
de la distribución a priori para $\theta$.

**Observación**: la crítica es sobre el conjunto completo de supuestos
iniciales que hacemos acerca del problema. Cuando los diagnósticos no son
aceptables desde el punto de vista teórico es necesario investigar dónde
está el problema. Las distribuciones apriori que usamos, igual que cualquier
supuesto, **están sujetas a esta crítica**. Nótese que esta crítica la estamos
haciendo sin ver los datos que esperamos observar: es una crítica de supuestos.




### Métodos Monte Carlo

Expand Down Expand Up @@ -857,4 +989,8 @@ la inferencia (verificación apriori) es correcta bajo nuestros supuestos.
arriba están resueltos, para tener confianza en nuestras conclusiones.


## Ventajas y desventajas de métodos bayesianos




0 comments on commit 70d32a7

Please sign in to comment.