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"Tarea 8: Codificación y confiabilidad con LLMs
IA para Científicos Sociales - UCU
1 Instrucciones
Esta tarea aplica los conceptos del Laboratorio 8 a una construcción nueva: 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, 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:
- Descarguen este archivo
.qmdydiscursos_ideologia.csv(enclases/dia-04/datos/) de la página del curso, o clonen el repositorio congit clone https://github.com/danilofreire/introduccion-ia-ucu.git. Mantengan el CSV en una subcarpetadatos/junto al.qmd - Necesitan Quarto y RStudio (>= 2022.07)
- Necesitan la API key de OpenRouter configurada en
.RenvironcomoOPENROUTER_API_KEY(alternativa: Ollama local) - Instalar
quallmerdesde GitHub:install.packages("pak"); pak::pak("quallmer/quallmer") - Abrir este archivo en RStudio y ejecutar los bloques con Ctrl+Enter
1.1 Configuración
2 Codificación y validación
2.1 Pregunta 1: Diseñar un codebook para populismo
Diseñen desde cero un codebook para medir retórica populista: 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").
# Escriban su código aquíRespuesta:
2.2 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.
# Escriban su código aquíRespuesta:
2.3 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).
# Escriban su código aquíRespuesta:
3 Confiabilidad y métodos clásicos
3.1 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.
# Escriban su código aquíRespuesta:
3.2 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().
# Escriban su código aquíRespuesta:
4 Auditoría y datos sintéticos
4.1 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.
# Escriban su código aquíRespuesta:
4.2 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.
# Escriban su código aquíRespuesta:
5 Reflexión
5.1 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:
5.2 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: