library(ggplot2)
library(patchwork)
<- c("#f08533", "#3b78b0", "#d1352c") colores
01 - Liberen al Tucán Sam
En este recurso se muestra como usar R para resolver el ejercicio de los Froot Loops hecho durante la primera clase.
En base al prior elicitado grupalmente en clase:
# Determinar grilla de puntos
<- seq(0, 1, length.out = 11)
pi_grid print(pi_grid)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
# Especificar prior
# Tenemos $1000 y los dividimos en los diferentes valores de "pi"
<- c(0, 50, 150, 600, 150, 50, 0, 0, 0, 0, 0)
prior_ <- prior_ / sum(prior_)
prior
# Recolectar datos
<- 29 # n
cantidad_de_cereales <- 7 # y
cantidad_de_cereales_amarillos
# Calcular verosimilitud para cada valor de "pi" en la grilla
<- dbinom(
likelihood
cantidad_de_cereales_amarillos,
cantidad_de_cereales,
pi_grid
)
# Obtener posterior
<- prior * likelihood
posterior_ <- posterior_ / sum(posterior_) # normalización
posterior
# Graficar prior
<- data.frame(x = pi_grid, y = prior) |>
plt_prior ggplot() +
geom_segment(aes(x = x, xend = x, y = 0, yend = y), color = colores[1], linewidth = 0.8) +
geom_point(aes(x = x, y = y), , color = colores[1], size = 2.4) +
scale_x_continuous(breaks = pi_grid) +
labs(
x = expression(pi),
y = expression(p ~ "(" ~ pi ~ ")"),
title = "Distribución a priori"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Graficar verosimilitud
<- data.frame(x = pi_grid, y = likelihood) |>
plt_likelihood ggplot() +
geom_segment(aes(x = x, xend = x, y = 0, yend = y), color = colores[2], linewidth = 0.8) +
geom_point(aes(x = x, y = y), , color = colores[2], size = 2.4) +
scale_x_continuous(breaks = pi_grid) +
labs(
x = expression(pi),
y = expression(p ~ "(y | " ~ pi ~ ")"),
title = "Función de verosimilitud"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Graficar posterior
<- data.frame(x = pi_grid, y = posterior) |>
plt_posterior ggplot() +
geom_segment(aes(x = x, xend = x, y = 0, yend = y), color = colores[3], linewidth = 0.8) +
geom_point(aes(x = x, y = y), , color = colores[3], size = 2.4) +
scale_x_continuous(breaks = pi_grid) +
labs(
x = expression(pi),
y = expression(p ~ "(" ~ pi ~ " | y)"),
title = "Distribución a posteriori"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Concatenar graficos
| plt_likelihood | plt_posterior plt_prior
En base a un prior beta:
# Determinar grilla de puntos
<- seq(0, 1, length.out = 200)
pi_grid
# Obtener prior
<- dbeta(pi_grid, 3, 7)
prior_ <- prior_ / sum(prior_)
prior
# Calcular verosimilitud para cada valor de "pi"
<- dbinom(
likelihood
cantidad_de_cereales_amarillos,
cantidad_de_cereales,
pi_grid
)
# Obtener posterior
<- prior * likelihood
posterior_ <- posterior_ / sum(posterior_)
posterior
# Graficar prior
<- data.frame(x = pi_grid, y = prior) |>
plt_prior ggplot() +
geom_line(aes(x = x, y = y), color = colores[1], linewidth = 1) +
labs(
x = expression(pi),
y = expression(p ~ "(" ~ pi ~ ")"),
title = "Distribución a priori"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Graficar verosimilitud
<- data.frame(x = pi_grid, y = likelihood) |>
plt_likelihood ggplot() +
geom_line(aes(x = x, y = y), color = colores[2], linewidth = 1) +
labs(
x = expression(pi),
y = expression(p ~ "(y | " ~ pi ~ ")"),
title = "Función de verosimilitud"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Graficar posterior
<- data.frame(x = pi_grid, y = posterior) |>
plt_posterior ggplot() +
geom_line(aes(x = x, y = y), color = colores[3], linewidth = 1) +
labs(
x = expression(pi),
y = expression(p ~ "(" ~ pi ~ " | y)"),
title = "Distribución a posteriori"
+
) theme_bw() +
theme(panel.grid.minor = element_blank())
# Concatenar graficos
| plt_likelihood | plt_posterior plt_prior
Preguntas
- ¿Qué pasa con el prior si incrementamos el \(n\)?
- ¿Qué pasa con el posterior si incrementamos el \(n\)?