Nombre: Sergio Ruben Lara Lozano

Compañero/a de trabajo: Carlos Mario Bernal Castillo

Proyecto: Los límites de la inferencia pragmática en los LLM: una exploración sobre la comprensión artificial

Fecha: 31/10/2026

1 Cómo trabajar con este archivo

  • Este archivo es suyo: escriban directamente en él. Donde dice (escriba aquí…) reemplacen el texto por su respuesta. Los chunks de código se ejecutan con el botón ▶ o con Ctrl+Shift+Enter, de arriba hacia abajo y en orden.
  • Las líneas con # <<< son las que ustedes deben cambiar: nombres de su archivo y de sus variables. El resto del código se deja igual. Reemplacen solo el nombre (por ejemplo, COLUMNA_VI por el nombre real de su columna) y dejen el comentario # <<< donde está.
  • Sus respuestas van como texto normal, en el lugar de cada (escriba aquí…). No empiecen una línea de texto con #: fuera de un chunk, eso crea un título. Dentro de un chunk, el # es un comentario y no afecta el código.
  • Los nombres de las columnas deben escribirse exactamente como aparecen en su base (R distingue mayúsculas de minúsculas). Cópienlos del resultado del Paso 1.
  • Esta base es ficticia. Sirve para practicar el procedimiento, no para sacar conclusiones sobre ningún modelo o comunidad real.
  • Al terminar, usen Knit (HTML o Word) y envíen a la profesora el archivo .Rmd y el documento generado.
  • Si necesitan recordar qué hace una línea de código, consulten el Anexo de la guía y los pasos de las Partes 1 y 2 del taller.

2 Paso 1. Abrir mis datos

Guarden su archivo .csv en la misma carpeta que este archivo .Rmd. Después escriban su nombre exacto entre comillas.

archivo <- "Proyecto_LLM_pragmatica_2.csv"                 # <<< el nombre de su archivo
datos   <- read.csv(archivo, encoding = "UTF-8")

Si R no encuentra el archivo, pueden elegirlo con el explorador de archivos (sustituyan la línea del chunk anterior por esta):

datos <- read.csv(file.choose(), encoding = "UTF-8")

Revisen cómo quedó la base:

dim(datos)                  # cuántas filas y cuántas columnas
## [1] 480  11
names(datos)                # los nombres de sus variables: cópienlos de aquí
##  [1] "id_item_base"           "id_version_item"        "LLM"                   
##  [4] "fenomeno_objetivo"      "subtipo_explicatura"    "componente_implicatura"
##  [7] "condicion_contextual"   "opcion_seleccionada"    "exactitud_explicatura" 
## [10] "adecuacion_implicatura" "longitud_justificacion"
str(datos)                  # el tipo de dato que R reconoce en cada columna
## 'data.frame':    480 obs. of  11 variables:
##  $ id_item_base          : chr  "EXPL_01" "EXPL_01" "EXPL_01" "EXPL_01" ...
##  $ id_version_item       : chr  "EXPL_01_V1" "EXPL_01_V1" "EXPL_01_V1" "EXPL_01_V1" ...
##  $ LLM                   : chr  "GPT" "Gemini" "Claude" "DeepSeek" ...
##  $ fenomeno_objetivo     : chr  "Explicatura" "Explicatura" "Explicatura" "Explicatura" ...
##  $ subtipo_explicatura   : chr  "Proposicional" "Proposicional" "Proposicional" "Proposicional" ...
##  $ componente_implicatura: chr  "No aplica" "No aplica" "No aplica" "No aplica" ...
##  $ condicion_contextual  : chr  "Favorable" "Favorable" "Favorable" "Favorable" ...
##  $ opcion_seleccionada   : chr  "B" "B" "B" "B" ...
##  $ exactitud_explicatura : int  1 1 1 1 1 1 1 0 1 1 ...
##  $ adecuacion_implicatura: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ longitud_justificacion: int  32 42 21 54 46 37 37 38 37 38 ...
head(datos)                 # las primeras filas
##   id_item_base id_version_item      LLM fenomeno_objetivo subtipo_explicatura
## 1      EXPL_01      EXPL_01_V1      GPT       Explicatura       Proposicional
## 2      EXPL_01      EXPL_01_V1   Gemini       Explicatura       Proposicional
## 3      EXPL_01      EXPL_01_V1   Claude       Explicatura       Proposicional
## 4      EXPL_01      EXPL_01_V1 DeepSeek       Explicatura       Proposicional
## 5      EXPL_01      EXPL_01_V2      GPT       Explicatura       Proposicional
## 6      EXPL_01      EXPL_01_V2   Gemini       Explicatura       Proposicional
##   componente_implicatura condicion_contextual opcion_seleccionada
## 1              No aplica            Favorable                   B
## 2              No aplica            Favorable                   B
## 3              No aplica            Favorable                   B
## 4              No aplica            Favorable                   B
## 5              No aplica               Neutra                   B
## 6              No aplica               Neutra                   B
##   exactitud_explicatura adecuacion_implicatura longitud_justificacion
## 1                     1                     NA                     32
## 2                     1                     NA                     42
## 3                     1                     NA                     21
## 4                     1                     NA                     54
## 5                     1                     NA                     46
## 6                     1                     NA                     37
colSums(is.na(datos))       # cuántos valores faltantes (NA) tiene cada columna
##           id_item_base        id_version_item                    LLM 
##                      0                      0                      0 
##      fenomeno_objetivo    subtipo_explicatura componente_implicatura 
##                      0                      0                      0 
##   condicion_contextual    opcion_seleccionada  exactitud_explicatura 
##                      0                      0                    240 
## adecuacion_implicatura longitud_justificacion 
##                    240                      0

Pregunta: ¿cuántas filas y columnas tiene su base? ¿Hay columnas con valores faltantes? ¿Por qué creen que están vacías?

La base de datos tiene un total de 11 columnas y 480 filas. Los datos faltantes se encuentran en las columnas:” exactitud_explicatura” y “decuacion_implicatura” 240 N/A cada uno. No son datos faltantes per se, simplemente son datos que no aplican ya que la mitad de resultados son de explicatura y la otra mitad de implicatura. En realidad deberían haber más N/A que no se muestran por como está estructurada la base de datos

3 Paso 2. Clasificar mis variables

Antes de ejecutar cualquier prueba, clasifiquen cada variable de su base. El chunk siguiente muestra cuántos valores distintos tiene cada columna, que les puede ayudar a decidir.

sapply(datos, function(x) length(unique(x)))
##           id_item_base        id_version_item                    LLM 
##                     40                    120                      4 
##      fenomeno_objetivo    subtipo_explicatura componente_implicatura 
##                      2                      3                      3 
##   condicion_contextual    opcion_seleccionada  exactitud_explicatura 
##                      3                      4                      3 
## adecuacion_implicatura longitud_justificacion 
##                      5                     59

Completen la tabla (agreguen las filas que necesiten). Recuerden la regla de Levon (2025: pp. 199-200): el tipo de la variable dependiente y de la independiente decide qué prueba corresponde.

Variable Tipo (nominal, ordinal, continua o identificador) ¿Independiente o dependiente en mi objetivo? Observaciones
id_item_base identificador independiente variable de control
id_version_item nominal independiente Variantes de la tarea
LLM nominal independiente para comparar los resultados segun LLM
fenomeno_objetivo nominal independiente /
subtipo_explicatura nominal independiente /
componente_implicatura nominal independiente /
condicion_contextual nominal independiente /
opción_seleccioanda nominal dependiente es la respuesta que el modelo elige
exactitud_explicatura nominal dependiente bianaria
adecuacion_implicatura ordinal dependiente /
longitud_justificacin continua dependiente /

4 Paso 3. Mi objetivo y mi hipótesis

Elijan un objetivo de su proyecto para esta práctica y complétenlo.

  • Objetivo elegido: Comparar el desempeño de los LLM seleccionados en la reconstrucción de explicaturas e implicaturas, en su sensibilidad a las modificaciones contextuales y en la adecuación de sus justificaciones, con el fin de identificar perfiles diferenciales de desempeño y error
  • Variable independiente: LLM
  • Variable dependiente: exactitud_ecplicatura
  • H₁ (hipótesis experimental): Existe relación estadísticamente significativa entre el tipo de LLM y la exactitud explicatura resultado de las tareas
  • H₀ (hipótesis nula): No existe relación estadísticamente significativa entre el tipo de LLM y la exactitud explicatura resultado de las tareas
  • Prueba que corresponde (chi-cuadrado o prueba t) y por qué: La prueba seleccionada es chi-cuadrado. Esta prueba permite analizar la relación entre dos variables categoricas al contar y comparar frecuencias

5 Paso 4. Chi-cuadrado con mis datos

Este paso corresponde si las dos variables (independiente y dependiente) son categóricas. Si su objetivo requiere una prueba t, pasen al Paso 5.

5.1 4.1 Elegir las filas que entran al análisis

Si su base mezcla distintos tipos de casos, pueden necesitar usar solo una parte. Por ejemplo, para quedarse con las filas donde una columna tiene cierto valor:

# Si usarán toda la base, dejen esta línea tal cual:
datos_chi <- datos

# Si necesitan solo una parte, quiten el # de la línea de abajo y cambien los nombres:
datos_chi <- subset(datos, fenomeno_objetivo == "Explicatura")     # <<< su columna y su valor

dim(datos_chi)              # ¿cuántas filas quedaron?
## [1] 240  11

Pregunta: ¿qué filas dejaron entrar al análisis y por qué?

Quedaron solo las filas que hacian referencia al fenomeno objetivo en este caso. Es decir 240 filas con los resultados relacionados a las explicaturas. Aquí es necesario realizar una aclaración. El objetivo seleccionado para el ejercicio en realidad requiere una prueba multivariada. Sin embargo, el objetivo se puede responder parcialmente al relacionar dos de las variables en una prueba de chi-cuadrado

5.2 4.2 Armar la tabla de observados

# Escriban los nombres de sus dos columnas, sin comillas, después de datos_chi$
tabla <- table(datos_chi$LLM, datos_chi$exactitud_explicatura)    # <<< sus dos variables
addmargins(tabla)           # la tabla con totales de fila y de columna
##           
##              0   1 Sum
##   Claude    13  47  60
##   DeepSeek  18  42  60
##   Gemini    20  40  60
##   GPT       19  41  60
##   Sum       70 170 240
round(prop.table(tabla, 1), 3)    # proporciones dentro de cada fila
##           
##                0     1
##   Claude   0.217 0.783
##   DeepSeek 0.300 0.700
##   Gemini   0.333 0.667
##   GPT      0.317 0.683

Pregunta: ¿qué patrón ven en la tabla? ¿Se parecen mucho las proporciones entre las filas?

Las proporciones entre filas son relativamente similares. A excepción de Claude, los resultados no varian demasiado

5.3 4.3 Revisar los supuestos y correr la prueba

res_chi <- chisq.test(tabla, correct = FALSE)   # correct = FALSE reproduce la fórmula de Levon
round(res_chi$expected, 1)                       # valores esperados
##           
##               0    1
##   Claude   17.5 42.5
##   DeepSeek 17.5 42.5
##   Gemini   17.5 42.5
##   GPT      17.5 42.5
all(res_chi$expected >= 5)                       # ¿ninguna celda esperada menor que 5?
## [1] TRUE
res_chi                                          # el resultado de la prueba
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 2.3395, df = 3, p-value = 0.505
qchisq(0.95, df = res_chi$parameter)             # valor crítico para p = 0.05 con sus df
## [1] 7.814728
round(res_chi$residuals, 2)                      # ¿en qué celdas está la diferencia?
##           
##                0     1
##   Claude   -1.08  0.69
##   DeepSeek  0.12 -0.08
##   Gemini    0.60 -0.38
##   GPT       0.36 -0.23

Si alguna celda esperada es menor que 5, reconsideren la tabla. Pueden agrupar categorías si hay una razón que lo justifique, o usar otra prueba (fisher.test; Gries, 2013: 327). Expliquen qué decidieron.

Como ninguna celda es menor que 5 y los demás criterios se cumplen, es posible llevar a cabo la prueba de chi-cuadrado.

Revisen también la independencia: el chi-cuadrado supone que cada fila de su base es una observación independiente de las demás (Gries, 2013: 325). ¿Se cumple en su base? ¿Qué podrían hacer o decir al respecto?

No entiendo esta pregunta. A mi parecer cada fila es independiente ya que corresponde a los datos de un modelo en especifico en relación a la variable dependiente.

5.4 4.4 Gráfico

barplot(prop.table(tabla, 1), beside = TRUE, legend.text = rownames(tabla),
        ylab = "Proporción dentro de cada fila",
        main = "Proporciones observadas")

5.5 4.5 Resultado e interpretación

cat(sprintf("χ²(%d) = %.2f, p %s\n",
            res_chi$parameter, res_chi$statistic,
            ifelse(res_chi$p.value < 0.001, "< 0.001",
                   paste("=", round(res_chi$p.value, 3)))))
## χ²(3) = 2.34, p = 0.505

Resultado en una frase de informe: χ²(3) = 2.34, p = 0.505

Interpretación en lenguaje llano (¿se rechaza H₀? ¿qué significa para su pregunta de investigación? ¿qué NO se puede concluir?):

  • Dado que p = 0.505 > 𝞪 = 0.05, no se rechaza la hipótesis nula. En consecuencia, los datos no muestran una relación de dependencia estadísticamente significativa entre el tipo de LLM y la exactitud de la explicatura.

6 Paso 5. Prueba t con mis datos

Este paso corresponde si su variable independiente es categórica con dos grupos y su variable dependiente es continua. Si su base no tiene ninguna variable continua, expliquen aquí por qué y qué medida numérica podrían construir a partir de sus datos, y pasen al Paso 6.

(escriba aquí si su base no permite una prueba t)

6.1 5.1 Elegir las filas y los dos grupos

Elijan un objetivo de su proyecto para esta práctica y complétenlo [Aquí repito los mismos pasos con otro objetivo].

  • Objetivo elegido: Caracterizar los patrones presentes en las justificaciones generadas por los LLM y examinar su relación con el grado de adecuación de las interpretaciones, el uso de la información contextual y los tipos de error identificados.

  • Variable independiente: exactitud_ecplicatura

  • Variable dependiente: longitud de la justificación

  • H₁ (hipótesis experimental): Sí existe relación estadísticamente significativa entre ela exactitud de la explicatura en la respuesta del modelo y la longitud de su justificación

  • H₀ (hipótesis nula): No existe relación estadísticamente significativa entre ela exactitud de la explicatura en la respuesta del modelo y la longitud de su justificación

  • Prueba que corresponde (chi-cuadrado o prueba t) y por qué:

    La pruba t es más idonea. Se jsutifica al tratarse de dos variables: una categoríca y otra continua y al contar con 2 grupos en la varaible independiente.

La prueba t compara exactamente dos grupos. Si su variable independiente tiene más categorías, escojan dos con subset.

# Si usarán toda la base y su variable independiente tiene solo dos grupos:
datos_t <- datos

# Si necesitan quedarse con ciertas filas, quiten el # y cambien los nombres:
datos_t <- subset(datos, exactitud_explicatura %in% c("1", "0"))     # <<< sus nombres

table(datos_t$exactitud_explicatura)         # <<< cuántos casos hay en cada grupo
## 
##   0   1 
##  70 170

6.2 5.2 Describir cada grupo

# Reemplacen COLUMNA_VD y COLUMNA_VI por sus nombres (sin comillas)
tapply(datos_t$longitud_justificacion, datos_t$exactitud_explicatura, mean, na.rm = TRUE)   # <<< media de cada grupo
##        0        1 
## 37.07143 40.15294
tapply(datos_t$longitud_justificacion, datos_t$exactitud_explicatura, sd,   na.rm = TRUE)   # <<< desviación estándar
##         0         1 
##  9.614785 11.029284
boxplot(longitud_justificacion ~ exactitud_explicatura, data = datos_t,                  # <<< sus nombres
        ylab = "Longitud de la jsutificación",
        main = "Distribución por grupo")

Pregunta: ¿cuánto se solapan los grupos? ¿Qué dice eso, más allá de la diferencia entre las medias?

La distribución de la longitud de la justificación muestra un comportamiento similar entre ambos grupos. Para el grupo 0 (respuestas inexactas), la mediana se ubica en torno a las 38 palabras, con un rango intercuartílico (IQR) que se extiende aproximadamente entre 28 y 44 palabras. Por su parte, el grupo 1 (respuestas exactas) presenta una mediana ligeramente superior, cercana a las 40 palabras, y un IQR entre 33 y 48 palabras. Aunque el grupo 1 muestra una distribución central ligeramente desplazada hacia valores más altos, ambas cajas presentan un solapamiento considerable. Cabe destacar que el grupo 1 registra dos valores atípicos , uno inferior (cercano a 5 palabras) y otro superior (por encima de 70 palabras), mientras que el grupo 0 no presenta observaciones atípicas.

6.3 5.3 Revisar los supuestos

La prueba t de Student supone que los datos de cada grupo se parecen a una distribución normal y que los dos grupos tienen varianzas parecidas. Como en la Parte 2 del taller, se revisan con shapiro.test y var.test.

# p > 0.05 en shapiro.test: no se aparta de lo normal (un valor por grupo)
tapply(datos_t$longitud_justificacion, datos_t$exactitud_explicatura, function(x) shapiro.test(x)$p.value)   # <<< sus nombres
##         0         1 
## 0.9489674 0.8874078
# p > 0.05 en var.test: las varianzas no difieren significativamente
var.test(longitud_justificacion ~ exactitud_explicatura, data = datos_t)                                     # <<< sus nombres
## 
##  F test to compare two variances
## 
## data:  longitud_justificacion by exactitud_explicatura
## F = 0.75995, num df = 69, denom df = 169, p-value = 0.1936
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.5187986 1.1513795
## sample estimates:
## ratio of variances 
##          0.7599492

Pregunta: ¿se cumplen los supuestos? Si no, ¿qué implica eso para confiar en el resultado de la prueba?

La prueba F confirma el supuesto de homocedasticidad,es decir que no existe una diferencia significativa entre las varianzas de ambos grupos (F(69, 169) = 0.76, p = .194, IC 95%) en relación a la longitud de justificación. Este resultado implica que los resultados de la prueba T serán más confiables y precisos

Revisen también la independencia: la prueba t supone que cada fila es una observación independiente, es decir, que ningún participante, palabra o señante aparece en más de un grupo ni más de una vez (Gries, 2013: 325). ¿Se cumple en su base? Si no, díganlo como una limitación.

A mi parecer los resultados son indepedientes, ya que cada uno corresponde a una tarea en especifico

6.4 5.4 La prueba

res_t <- t.test(longitud_justificacion ~ exactitud_explicatura, data = datos_t, var.equal = TRUE)   # <<< sus nombres
res_t
## 
##  Two Sample t-test
## 
## data:  longitud_justificacion by exactitud_explicatura
## t = -2.0396, df = 238, p-value = 0.04249
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
##  -6.0578197 -0.1052055
## sample estimates:
## mean in group 0 mean in group 1 
##        37.07143        40.15294
qt(0.975, df = res_t$parameter)      # valor crítico para p = 0.05 (dos colas)
## [1] 1.969982

R resta la media del primer grupo en orden alfabético menos la del segundo. Por eso el valor de t puede salir negativo aunque la diferencia sea la esperada: fíjense en las medias que imprime la prueba (sample estimates) para ver cuál grupo es mayor.

cat(sprintf("t(%.0f) = %.2f, p %s\n",
            res_t$parameter, res_t$statistic,
            ifelse(res_t$p.value < 0.001, "< 0.001",
                   paste("=", round(res_t$p.value, 3)))))
## t(238) = -2.04, p = 0.042

Resultado en una frase de informe: t(238) = -2.04, p = 0.042

Existe una diferencia estadísticamente significativa en la longitud de las respuestas según su exactitud: las respuestas exactas (Grupo 1) tienden a ser ligeramente más largas que las respuestas inexactas (Grupo 0). Sin embargo, el tamaño de esta diferencia es modesto (se trata de una variación de apenas unas pocas palabras entre ambos grupos). Además, cabe destacar que el valor \(p = 0.042\) se encuentra muy cercano al umbral de significancia (\(\alpha = 0.05\)). Esto indica que, aunque la diferencia alcanza a ser estadísticamente significativa, se trata de un efecto marginal , por lo que la exactitud del modelo no genera una variación drástica en la cantidad de palabras que utiliza para justificar su respuesta.

Si su variable dependiente es una escala ordinal codificada con números (por ejemplo, 0 a 3), expliquen aquí qué implica tratarla como numérica:

(escriba aquí su respuesta)

7 Paso 6. Otro objetivo (opcional)

Si les queda tiempo, repitan el análisis con otro objetivo. Copien los chunks del Paso 4 o del Paso 5, cambien los nombres de las variables, y escriban abajo qué cambió en el resultado.

(escriba aquí)

8 Paso 7. Conclusión y límites

  • ¿Qué aprendieron sobre su pregunta de investigación con estos datos simulados?

    El ejercicio me permitió reconocer que mi pregunta de investigación involucra un sistema complejo de múltiples variables. Si bien es posible realizar aproximaciones iniciales mediante modelos bivariados simples, la naturaleza del problema sugiere la conveniencia de adoptar un enfoque multivariado. Asimismo, el análisis de datos evidenció la importancia crítica de la fase previa de medición: gran parte del esfuerzo metodológico debe enfocarse en diseñar un instrumento sólido y preciso. Con datos de alta calidad y bien recolectados, la ejecución e interpretación de los modelos estadísticos se vuelve un proceso mucho más directo y confiable.

    2. ¿Qué limitaciones tiene lo que hicieron? (Independencia de observaciones, definición de variables y datos ficticios)

    La principal limitación radica en el alcance bivariado de las pruebas aplicadas, las cuales analizan únicamente la relación entre dos variables a la vez. Aunque pruebas como la Chi-cuadrado permiten identificar si existe dependencia, no cuantifican la fuerza de la asociación ni indican la dirección de la relación, lo que restringe el alcance de las conclusiones. Por otro lado, la simulación de datos asume el cumplimiento estricto del supuesto de independencia entre observaciones y simplifica la operacionalización de las variables. Esto pasa por alto la variabilidad y el ruido en escenarios reales, así como categorías no consideradas en el diseño inicial.

    3. ¿Qué análisis necesitarían para estudiar varias variables a la vez?

    Se requeriría aplicar técnicas de estadística multivariada. No obstante, es fundamental evaluar estadísticamente qué variables deben integrarse simultáneamente en un mismo modelo. Puede que no sea necesario incluir todas las variables del estudio en una sola ecuación; también existe la posibilidad de resolver algunas breguntas con modelso bivariados.