--- title: "Tarea 8: Codificación y confiabilidad con LLMs" subtitle: "IA para Científicos Sociales - UCU" author: "Danilo Freire" date: "2026-04-15" format: html: toc: true toc-depth: 2 number-sections: true code-fold: false lang: es engine: knitr --- ## Instrucciones Esta tarea aplica los conceptos del Laboratorio 8 a una construcción [nueva]{.alert}: la retórica populista. En la clase medimos retórica liberal-iliberal con un codebook que ya venía dado; acá van a [diseñar el suyo desde cero]{.alert}, codificar a mano su propio gold standard, validar, medir confiabilidad y auditar un sesgo. Responder cada pregunta escribiendo código R en los bloques indicados. **Para trabajar en esta tarea:** 1. Descarguen este archivo `.qmd` y `discursos_ideologia.csv` (en `clases/dia-04/datos/`) de la [página del curso](https://danilofreire.github.io/introduccion-ia-ucu/laboratorios.html), o clonen el repositorio con `git clone https://github.com/danilofreire/introduccion-ia-ucu.git`. Mantengan el CSV en una subcarpeta `datos/` junto al `.qmd` 2. Necesitan Quarto y RStudio (>= 2022.07) 3. Necesitan la API key de OpenRouter configurada en `.Renviron` como `OPENROUTER_API_KEY` (alternativa: Ollama local) 4. Instalar `quallmer` desde GitHub: `install.packages("pak"); pak::pak("quallmer/quallmer")` 5. Abrir este archivo en RStudio y ejecutar los bloques con Ctrl+Enter ### Configuración ```{r setup, message=FALSE, warning=FALSE} library(ellmer) library(quallmer) library(tidyverse) library(tidytext) set.seed(2026) stopifnot(Sys.getenv("OPENROUTER_API_KEY") != "") # 15 fragmentos de discurso político discursos <- read_csv("datos/discursos_ideologia.csv", show_col_types = FALSE) MODELO <- "openrouter/nvidia/nemotron-3-super-120b-a12b:free" ``` ## Codificación y validación ### Pregunta 1: Diseñar un codebook para populismo Diseñen desde cero un codebook para medir [retórica populista]{.alert}: el grado en que un discurso apela al "pueblo" o "la gente común" en contra de una "élite", "casta" o "los de arriba". Usen una escala de 0 (nada populista) a 10 (muy populista). Escriban instrucciones claras de qué cuenta como populismo. *Pista:* miren el codebook de la clase como molde, pero las `instructions` y la escala son suyas. Un `type_integer` con `levels = list(... = "interval")`. ```{r p1} # Escriban su código aquí ``` **Respuesta:** ### Pregunta 2: Codificar a mano su propio gold Antes de confiar en el LLM, codifiquen ustedes. Elijan seis discursos del corpus y asígnenles a mano un puntaje de populismo (0 a 10) según su propio juicio y su codebook. Construyan el gold standard con `qlm_humancoded()`. *Pista:* el gold necesita una columna `.id` y su columna de puntaje. Es la misma estructura que usaron para las etiquetas humanas en la clase. ```{r p2} # Escriban su código aquí ``` **Respuesta:** ### Pregunta 3: Codificar con el LLM y validar Codifiquen los mismos seis discursos con `qlm_code()` y validen contra su gold con `qlm_validate()` a nivel de intervalo. Reporten la correlación de Pearson y el ICC. ¿El LLM coincide con su juicio? *Pista:* `qlm_validate(coded, gold = gold, by = "populismo", level = "interval")`. Muéstrenlo como tabla con `as_tibble(...) |> select(measure, value)`. ```{r p3} # Escriban su código aquí ``` **Respuesta:** ## Confiabilidad y métodos clásicos ### Pregunta 4: Confiabilidad de dos formulaciones La confiabilidad no es solo entre corridas: también importa si el resultado cambia al reformular el codebook. Escriban una segunda versión de su codebook con instrucciones más breves (`codebook_breve`), codifiquen los mismos textos y comparen las dos codificaciones con `qlm_compare()`. ¿Son estables? *Pista:* `qlm_compare(coded1, coded2, by = "populismo", level = "interval", tolerance = 1)` da el alpha de Krippendorff. ```{r p4} # Escriban su código aquí ``` **Respuesta:** ### Pregunta 5: LLM vs diccionario Comparen el LLM con un método clásico. Armen un diccionario de palabras populistas (pueblo, gente, élite, casta, corruptos, privilegiados...) y cuenten cuántas aparecen en cada discurso. Correlacionen ese conteo con el puntaje del LLM. ¿Cuánto se parecen? *Pista:* tokenicen con `tidytext::unnest_tokens()`, cuenten las coincidencias por discurso y usen `cor()`. ```{r p5} # Escriban su código aquí ``` **Respuesta:** ## Auditoría y datos sintéticos ### Pregunta 6: Sesgo por etiqueta ideológica Auditen un sesgo distinto al del género. Pídanle al modelo que describa las propuestas económicas de un político, variando solo una etiqueta: "un político de izquierda" vs "un político de derecha". Codifiquen las dos descripciones con un codebook de tono (-5 a +5) y comparen. ¿El modelo trata distinto a una etiqueta que a la otra? *Pista:* mismo texto, solo cambia la etiqueta. Es el patrón de la slide "Medir el sesgo", con etiquetas ideológicas en vez de nombres. ```{r p6} # Escriban su código aquí ``` **Respuesta:** ### Pregunta 7: Viñetas sintéticas para un experimento Los LLMs sirven para generar estímulos de experimentos. Usen `chat_structured()` para generar cuatro viñetas cortas que describan a un candidato, variando una sola dimensión: su postura migratoria (restrictiva / abierta). Cada viñeta debe ser plausible y comparable. Muéstrenlas. *Pista:* definan un `type_array` de `type_object` con un campo `postura` y un campo `texto`. Pídanle viñetas equilibradas que solo difieran en esa dimensión. ```{r p7} # Escriban su código aquí ``` **Respuesta:** ## Reflexión ### Pregunta 8: Reporte para un paper Imaginen que en su próximo paper van a usar un LLM con `quallmer` para medir el populismo de tres mil discursos. Escribir el párrafo de "Métodos" que describiría el uso del LLM, en estilo académico (máximo doscientas palabras). Incluir: el codebook y la escala, la validación contra una submuestra codificada a mano, la confiabilidad, el modelo y su versión, y la auditoría de sesgos. **Respuesta:** ### Pregunta 9: Diseño de un mini-experimento Diseñar (no implementar) un mini-experimento para responder: "¿El LLM describe a los políticos de izquierda con un tono sistemáticamente distinto al de los de derecha?". Especificar: hipótesis nula, variable independiente, variable dependiente, tamaño de muestra, métrica de comparación y al menos una amenaza de validez. Máximo doscientas palabras. **Respuesta:**