Skip to content

Notas y contenido del curso en Modelación Bayesiana para la MCD @ ITAM

License

Notifications You must be signed in to change notification settings

agarbuno/modelacion-bayesiana

Repository files navigation

EST-46115: Modelación Bayesiana

https://github.com/agarbuno/modelacion-bayesiana/actions/workflows/docker.yml/badge.svg https://img.shields.io/docker/pulls/agarbuno/bayesiana.svg?logo=docker https://img.shields.io/docker/image-size/agarbuno/bayesiana/notas.svg?logo=docker https://img.shields.io/github/languages/top/agarbuno/modelacion-bayesiana.svg?logo=r https://img.shields.io/github/languages/code-size/agarbuno/modelacion-bayesiana.svg?logo=r https://zenodo.org/badge/297467418.svg

Contenido

Introducción

Este es el repositorio con el contenido del curso en Modelación Bayesiana de la maestría en ciencia de datos. También puede ser ofrecida de manera simultánea para alumnos avanzados en las licenciaturas de matemáticas aplicadas, ciencia de datos y actuaría.

Our goal is not to eliminate uncertainty, but to understand and quantify the uncertainty in order to make sound decisions. —Netflix Tech Blog

images/20220123-012255_screenshot.png

A previous acquaintance with probability and statistics is not necessary; indeed, a certain amount of innocence in this area may be desirable, because there will be less to unlearn. —Jaynes, 2003.

Probability theory is nothing but common sense reduced to calculation. —Laplace, 1819.

Contexto

Este es el curso EST-46115: Temas Selectos de Estadística. Lo conoceremos como Modelación Bayesiana y corresponde al segundo semestre de la Maestría en Ciencia de Datos.

Objetivo

En este curso se verán temas avanzados en la visualización, simulación y diagnóstico de modelos bayesianos para: inferencia, análisis de potencia y calibración de procedimientos estadísticos. Se estudiará un flujo de trabajo bayesiano que permite validar y evaluar hipótesis. Se introducirán algunos modelos modernos utilizados en distintas áreas como: modelos predictivos, selección de variables y sistemas de recomendación. El material se complementará con algunos podcasts y lecturas de artículos de divulgación e investigación a lo largo del curso.

Temario

El temario para el semestre de primavera 2022 se puede encontrar aqui. Este es un plan preliminar que está sujeto al avance del curso a lo largo del semestre.

¿De qué trata el curso?

En esta iteración del curso se estudiarán las bases algorítmicas de la inferencia bayesiana (métodos de simulación por cadenas de Markov) así como los diagnósticos pertinentes. De igual manera estudiaremos un flujo de trabajo basado en calibración y simulación para poder identificar rutas potenciales de mejora en nuestros modelos y revisaremos principios basados en el método científico. El curso continuará con métodos de inferencia aproximada que han dado lugar a aplicaciones del estado de arte como sistemas de recomendación o análisis de texto.

Estructura del curso

El curso está planeado alrededor de tres temas centrales:

  1. Cómputo probabilístico.
  2. Flujo de trabajo Bayesiano.
  3. Modelación predictiva probabilística.

images/20230108-173942_screenshot.png

¿Existe un libro de texto?

images/20220123-011136_screenshot.png

Recursos

El contenido actual del curso se encuentra en la rama: spring-2023. La estructura del repositorio se muestra a continuación donde a grandes razgos tenemos:

.
├── docs       # Handouts con las notas de clase (pdf).
├── images     # Material visual de apoyo (png).
├── modelos    # Directorio con los modelos que usaremos en el curso (stan).
├── notas      # Material fuente de las notas (emacs).
├── renv       # Archivos de estructura de ambiente (R).
└── rscripts   # Codigo de R para interactuar con Stan (R).

6 directories

Ambiente de trabajo

El curso puede ser seguido en Python, Julia, etc (básicamente cualquier lenguaje de scripteo con interface a Stan). El curso utilizará Stan como lenguaje para definir y ajustar modelos bayesianos (tanto asintóticamente correctos, como aproximados). En particular utilizaré la interfase de R por medio de cmdstanr pero de igual manera son bienvenidos en utilizar la interfase de python o la que les acomode$^†$.

images/20230108-173842_screenshot.png

Como herramienta de trabajo se sugiere utilizar Rstudio Visual Studio Code para poder trabajar en sus proyectos y sus tareas. En particular, el material de clase es editado en GNU Emacs a través de orgfiles (archivos de texto plano con sufijo .org) pero pueden ser visualizados en Github.

Nota: Si van a utilizar R se recomienda tener instalada la versión 4.2.1 para tener la mejor compatibilidad con el código del curso.

Configuración R

Utilizaremos renv para mantener actualizada las herramientas de R junto con el contenido del curso. En la carpeta principal se encuentran los archivos de requerimientos (renv.lock) con el que podrán usar los archivos que se vayan decantando en la carpeta rscripts. Aún asi, la configuración se irá refinando en los ejercicios de tarea que vayamos utilizando en el curso.

Configuración renv

Si utilizas MacOS o alguna distribución Linux se recomienda escribir en el archivo ~/.Renviron la siguiente línea lo cual mantendrá el cache de renv en un lugar centralizado y de fácil acceso:

RENV_PATHS_ROOT=~/.renv

Trabajando con ambiente Dockerizado

Las imágenes de agarbuno/bayesiana (puedes ver imágenes en mi hub de Docker aqui, y/o los Dockerfiles aqui) permiten tener un ambiente para trabajar con Docker en nuestro curso.

Mi idea de ambiente computacional es el que se puede reproducir en cualquier sistema operativo. Para esto Docker es la herramienta ideal y el uso de los Codespaces de GitHub ha resultado increíble para una solución dentro de un ámbito educativo.

Para la imagen agarbuno/bayesiana consideren que:

  1. El tag notas basado en una distribución linux en una emulación con un procesador Intel, tiene la configuración mínima necesaria para poder reproducir el ambiente de cómputo para poder ejecutar el material del curso.

La idea es que si usamos el combo Docker + Visual Code Studio, entonces ¡tod@s tenemos la misma computadora para trabajar! 🥲. Y si lo quieren correr en la nube entonces: Docker + Visual Code Studio + Github Codespaces 🥲 $× 1078$.

Importante: Si espero que sepan reproducir ustedes la configuración del ambiente de trabajo. Parte del curso contemplará organizar una sesión para discutir esto a profundidad. De momento, lo importante es que lo sepan utilizar en su computadora o en un explorador de internet. Esto es, que pueden utilizarlo para las prácticas del curso.

Esta imagen provee de un ambiente donde se podrán instalar las paqueterías que utilizaremos sin ningún problema$^†$. La idea, adicional, es que utilicemos volumes para poder tener permanencia en nuestro trabajo.

El contenedor se podrá levantar sin ningún problema por medio de la siguiente serie de instrucciones en terminal (también se puede establecer un script de shell).

# Ruta del cache de renv en el contenedor
RENV_PATHS_CACHE_CONTAINER=/home/rstudio/.renv
# Ruta del cache de renv en tu maquina
RENV_PATHS_CACHE_HOST=~/.renv/cache
# Ruta donde guardes los clones de las tareas
PATH_TRABAJO_HOST=<ruta hacia las carpetas de los repos de tareas>

docker run -p 8787:8787 \
    -e PASSWORD=<contraseña de tu preferencia> \
    -e "RENV_PATHS_CACHE=${RENV_PATHS_CACHE_CONTAINER}" \
    -e "RENV_PATHS_ROOT=${RENV_PATHS_CACHE_CONTAINER}" \
    -v "${RENV_PATHS_CACHE_HOST}:${RENV_PATHS_CACHE_CONTAINER}" \
    -m 6g \ 
    -v "${PATH_TRABAJO_HOST}:/home/rstudio/documentos" \
    agarbuno/bayesiana:<tag>

Configuración de Docker

La imágen de Docker para el ambiente de RStudio está basada en la imagen de rocker/verse de los desarrolladores en el Proyecto de Rocker con las siguientes herramientas agregadas para la materia de modelación bayesiana:

Para instrucciones de uso, se sugiere seguir la Documentación de Rocker

Un ejemplo de como construir y correr este contenedor sería lo siguiente. En un terminal, dentro del folder del repo, correr la siguiente línea

docker build --tag bayesiana:notas .

El contenedor lo podemos despertar con

docker run -e PASSWORD=qwerty -p 8787:8787 --rm bayesiana:notas

Para vistarlo basta con utilizar la ruta localhost:8787 en cualquier browser de internet y utilizar la contraseña especificada. Se puede agregar la bandera de -v si se quiere acceder a un folder local. Mas información de volúmenes se pueden encontrar en la documentación.

Contribuidores

AdrianTJ (ambiente en Docker).