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
# <<< 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á.#: fuera de un chunk, eso crea un título. Dentro de un
chunk, el # es un comentario y no afecta el código..Rmd y el documento generado.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):
Revisen cómo quedó la base:
## [1] 480 11
## [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"
## '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 ...
## 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
## 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
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.
## 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 | / |
Elijan un objetivo de su proyecto para esta práctica y complétenlo.
Este paso corresponde si las dos variables (independiente y dependiente) son categóricas. Si su objetivo requiere una prueba t, pasen al Paso 5.
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
# 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
##
## 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
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
## [1] TRUE
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 2.3395, df = 3, p-value = 0.505
## [1] 7.814728
##
## 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.
barplot(prop.table(tabla, 1), beside = TRUE, legend.text = rownames(tabla),
ylab = "Proporción dentro de cada fila",
main = "Proporciones observadas")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?):
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)
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
# 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.
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
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
## [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)
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í)
¿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.