Mostrando entradas con la etiqueta Ítem. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ítem. Mostrar todas las entradas

jueves, 11 de diciembre de 2025

Datos. Estadística.

Estadística del ítem

Índice de Dificultad del ítem (II)



Ya sabemos en qué consiste el IDi y cómo se calcula. Sobre este índice y sus características puedes leer algo en [esta entrada], pero lo que trataré en la actual son algunos datos que podemos obtener a partir del IDi.


Una buena información sobre los resultados de una prueba consiste, básicamente, en conocer los resultados de cada sujeto y el IDi de cada elemento o ítem de la prueba. Algo así como esto:
Por sencilla que parezca (y que es), esta tabla nos informa de los resultados de cada sujeto, dato a partir del cual podemos realizar cálculo descriptivos sobre la distribución (estadística descriptiva), y también de los IDi de cada uno de los ítem, lo que nos permite calificar cada uno de ellos según criterios de nivel de dificultad. Además, si la muestra de sujetos fuera más amplia y tuviéramos interés, podríamos establecer relaciones entre ambas puntuaciones.

Lo malo es que, con frecuencia es posible disponer de un tipo de puntuación, pero no del otro. Por ejemplo, en PLON-R. Fonología, contamos con datos del IDi de cada elemento de la prueba en función de la edad-base, lo cual no es lo ideal, pero puede ser suficiente para determinados análisis. 

A partir de estos datos tan limitados nos resulta difícil comprender el funcionamiento del test, pero podemos obtener alguna información relevante realizando inferencias a partir de los datos que sí poseemos.

Sabemos que el cálculo del IDi requiere saber el número de sujetos de la muestra (N) y el sumatorio de puntuaciones del ítem (una vez reducido a valores dicotómicos 0 - 1), de modo que IDi = Si/N. En consecuencia, sabido el IDi y N, el cálculo del número de aciertos en el ítem se reduce a aplicar Si = IDi * N

Conocido el valor Si de cada ítem, aplicando la fórmula anterior y realizando la suma de los resultados podemos obtener el total de aciertos y calcular su promedio. Siguiendo el ejemplo anterior...


... obtenemos 3 como promedio de aciertos por sujeto, el mismo que obtendríamos aplicando la fórmula  PROMEDIO() a lo datos Total de la primera tabla (PROMEDIO(H4:H13))

No podemos calcular la Dt, dato que sería de mucho interés para estudiar la distribución de los datos, pero ya tenemos un estadístico que nos puede ser de ayuda para el análisis de los resultados grupales e individuales. En [esta entrada] veremos un ejemplo de ese análisis.

martes, 18 de noviembre de 2025

Datos. Estadística.

Estadística del ítem

Índice de dificultad del ítem



Empezamos esta subsección analizando el que posiblemente sea el índice relacionado con el análisis del ítem más conocido y de más uso... pero también, como anécdota, el de nombre más impreciso.


Es ciertamente anecdótico y no genera mayor dificultad por lo conocido que resulta, pero el propio nombre de índice de dificultad (ID) se opone radicalmente a su naturaleza, ya que refleja de todo lo contrario: el acierto, que no el fallo. Es por eso que también se puede denominar (ahora sí, con toda la razón) índice de facilidad (IF).

Esto es así porque lo que se calcula es el nivel de acierto de un grupo de sujetos respecto a un ítem en concreto.

Así, si 20 alumnos responde a un ítem de una prueba y 15 de ellos lo hacen correctamente (1 * 15 = 15), el IF del ítem es 0,75, o también del 75%, que de las formas se puede expresar. Curiosamente el ID no es 1-IF = 0,25, como correspondería, sino que se asimilan IF = ID y también se usa ID = 15/20.

Los valores del ID van de 0 a 1, existiendo categorizaciones del nivel de dificultad, como es el caso de [la siguiente], adaptada a partir de Cortada (1999):


Clasificación del ítemÍndice de dificultad del ítem
Muy fácilDe 0,81 a 1,00
Relativamente fácilDe 0,66 a 0,80
Dificultad adecuadaDe 0,51 a 0,65
Relativamente difícilDe 0,31 a 0,50
DifícilDe 0,11 a 0,30
Muy difícilDe 0,00 a 0,10

Los ID son sensibles a las personas que responder al ítem, y a su número. Cuanto mayor sea la muestra de participantes en la baremación, más fiables son los resultados de los ID, mientras que muestras pequeñas pueden incidir en resultados de escasa fiabilidad.

Cierta es también la relación entre el nivel de dificultad de los ítem y resultados que puede obtener una muestra de sujetos: a mayores índices de dificultad, resultados más modestos, mientras que si los ítem presentan ID bajos o muy bajos, los resultados serán extraordinariamente altos. Es por ellos que los ID de los ítem deben corresponderse con el tipo de prueba que se quiere crear. Por ejemplo, para un prueba de screening es de esperar que los ítems tengan altos ID y resulten, en su conjunto, relativamente fáciles. En pruebas de selección, lo esperable es lo contrario: la mayoría de los ítem deben ser difíciles a muy difíciles. 

Pero también los sujetos empleados en la baremación de la prueba influyen en los ID de los ítem que la forman. Los sujetos competentes aciertan los ítem de alto nivel de dificultad, mientras que los de bajo nivel son acertados por todos o la mayoría de los sujetos. De ahí que sea necesario controlar también el nivel de conocimiento, aptitud o competencia de los sujetos que participan en la baremación de la prueba para evitar la sobreabundancia de altos o bajos niveles competenciales que puedan afectar a los ID de los ítem realmente observados, distorsionando el resultado del uso de la prueba con sus potenciales usuarios.

Conocer los ID de los ítem, además de permitir mejorar la calidad de las pruebas, también nos permite realizar análisis más ricos de los resultados obtenidos por un sujeto o por un grupo, siempre en función del tipo de prueba empleada y de cómo esté conformada en términos de ID de sus ítem. No es lo mismo que el niño falle (o acierte) los ítem fáciles que los difíciles. El significado de esos errores (o aciertos) puede ser interpretado de forma diferente que si desconocemos su ID.

Otro uso posible de los ID, en este caso los empíricos derivados de la aplicación de la prueba a un grupo, es su referencia respecto a un criterio establecido a priori dentro de un planteamiento de evaluación criterial. Si establecemos como nivel de logro (grupal) un determinado porcentaje y el ID de un subconjunto de ítem cumple/incumple las expectativas, esto nos está informando de lo cerca/lejos que está el grupo de alcanzar la meta de aprendizaje. De aquí podemos, además, derivar análisis en términos de los resultados individuales de determinados sujetos.

En resumen, el análisis del ID/IF del ítem, a pesar de su sencillez, puede ser más complejo de lo que aparenta; pero también servir para más objetivos de los que pudiéramos pensar desde una perspectiva psicométrica estricta.

Como vimos, su cálculo es extremadamente sencillo, por lo que no existen funciones built-in en los servicios de cálculo (Excel o Calc). Para su cálculo es necesario realizar la suma de las puntuaciones del grupo en el ítem y dividir después entre el N del grupo. En consecuencia, siendo B3:B22 la lista de puntuaciones del ítem y A3:A22 el listado de alumnos de un grupo...
  • E3 =SUMA(B3:B22)
  • E4 =CONTARA(A3:A22)
  • E5 =E3/E4
... podría ser el procedimiento se cálculo del ID en Calc.


Datos. Estadística.


Estadística del ítem



El análisis estadístico del ítem hace referencia al análisis de las preguntas de una prueba mediante procedimientos estadísticos para evaluar su calidad, dificultad, poder de discriminación y validez. 

Se basa en el análisis cuantitativo de las respuestas que dan los sujetos a los ítem de una prueba para, a partir de ellas, determinar si un ítem funciona correctamente y si está midiendo lo que se pretende.

El análisis de ítem permite, pues, mejorar la calidad de una prueba y ayuda a resolver los problemas que pueden presentar los propios ítem.

Algunos de los procedimientos empleados  para ello son los siguientes:

En esta subsección de Datos estudiaremos estos procedimientos manteniendo el mismo enfoque práctico empleado en el resto de las entradas de la sección, con aplicaciones en la práctica profesional. Procuraremos también ilustrar el uso de recursos informáticos, desde las utilidades de las hojas de cálculo y sus funciones hasta el desarrollo de script o el uso de bibliotecas especializadas.

Sirva esta sencilla entrada como presentación.

domingo, 27 de abril de 2025

Evaluación. Ítem.

Ítem gráfico (3). Panel de imágenes.


Similar al mapa, en este caso nos encontramos con una actividad de aprendizaje o un conjunto de ítem de evaluación en el que las mismas imágenes sirven como respuesta a diferentes (aunque similares) preguntas.


Se trata de una tareas especial en la que el input puede ser visual, aunque normalmente es verbal, pero el output se basa necesariamente en la elección de una entre varias imágenes, con la peculiaridad que las mismas imágenes sirven para responder diferentes (incluso un número elevado) de ítem.

En este caso, la solución más simple consiste en repetir la lámina de respuesta tantas veces como preguntas se formulen. De este modo el problema se reduce a un ítem de opción basada en imagen, como los que [ya vimos en esta entrada]; pero cuantos más ítem compartan el soporte de respuesta, menos funcional se vuelve esa solución, que no lo es en ningún caso, ya que sobrecargamos innecesariamente nuestro docap con imágenes repetidas y, en su caso, también con código redundante.

Disponemos de un procedimiento que elimina la necesidad de repetir las láminas de respuesta y que permite simplificar el código de forma significativa. Veamos en qué consiste; pero antes nos vamos a poner en situación para facilitar la comprensión del procedimiento.

El docap de un test como el Peabody (por poner un ejemplo) se resuelve mediante el procedimiento propuesta en la entrada dedicada al [ítem gráfico de elección de imagen], ya que en cada ítem cambia el conjunto de imágenes entre las que se encuentra la respuesta correcta; pero un test como ITPA-CA (Comprensión Auditiva) presenta el mismo conjunto de seis imágenes para un grupo numeroso de ítem. Esto permite que podamos usar el mismo mapa o conjunto de (aquí) seis imágenes, siempre que independicemos el uso de la imagen del ítem. Me explico:

  • Cada ítem tiene seis (o las que sean) opciones de respuesta.
  • Para un conjunto de ítem esas seis opciones son las mismas, aunque para cada ítem sólo una de ellas es la correcta
  • Las imágenes configuran lo que llamo un panel de imágenes, el cual se puede construir como sumatorio de imágenes independientes o como imagen única sobreponiendo una forma transparente (o semitransparente) sobre cada una de las escenas en que se divide dicha imagen única.
  • Dada imagen independiente, o cada forma superpuesta se asocia a un script que emite como resultado de la pulsación un valor (código numérico o letra) que se recoge como respuesta a cada uno de los ítem: una respuesta por ítem.
  • Posteriormente, mediante funciones LO-Calc o mediante código, se valora si la respuesta dada a cada uno de los ítem se ajusta a lo esperado (es correcta) o no (es incorrecta) y, en función de ese juicio, se puntúa según el procedimiento establecido (ITPA-CA -> 0 vs. 1)
El problema que queda por resolver aquí es cómo hacer que los ítem avancen, mientras que las opciones de respuesta permanecen. La solución pasa por ir construyendo paulatinamente un listado con las respuestas, el cual, por ejemplo, ubicamos en una columna de celdas (en LO-Calc). Un procedimiento se encarga de descartar si una posición (celda) ya está ocupada, luego ese ítem ya está cumplimentado, siendo necesario, entonces, desplazarse a la siguiente, que es la que corresponde necesariamente con la posición que ocupa en esa lista el ítem que en ese momento se está resolviendo.  

Como sucede en otras ocasiones en las que se describen procedimientos, su explicación puede resultar más compleja de lo que supone su ejecución. Me temo que este es uno de esos casos; y espero que la presentación del soporte y de su código, lo cual muestro a continuación, sirvan para aclarar las dudas que pudieran quedar.


Muestro primero el panel de seis imágenes en el que se puede comprobar la superposición de semi-transparencias que son las que quedan asociadas a sendos script. Por ejemplo, la primera a este script:

Sub img1

Dim Lamina As string

Dim img As integer, nit As Integer

Lamina = "Lamina1"

img = 1

nit = 16

puntuar(Lamina,img, nit)

End Sub

Este procedimiento se repite con cada una de las imágenes, luego hay seis script, uno por cada sección del panel (en realidad por cada figura semi-transparente superpuesta)

La función del script es asignar contenido a una serie de tres variables (Lamina, img y nit)...

  • Lamina identifica la hoja de cálculo a la que acceder (Lamina = "Lamina1")
  • img designa a la imagen (sección del panel) que se está pulsando (img = 1)
  • y nit identifica el número de ítem asociados a este panel (nit = 16)

... y con ellas definidas como parámetros, pasar esos valores a la subrutina (función, se diría en otros lenguajes) (puntuar(Lamina,img, nit)) que es la que ejecuta el procedimiento que sigue. 

Sub puntuar (Lamina as String, img As integer, nit As Integer)

Dim oHoja As Object, oCelda As Object

Dim Celda As Integer

Dim i As integer

oHoja = ThisComponent.getSheets().getByName(Lamina)

For i = 0 To nit

N = "N" & i + 4

oCelda = oHoja.getCellRangeByName(N)

Celda = oCelda.getValue()

If Celda = 0 Then

oCelda.setValue(img)

Exit For

End If

Next

End Sub

Lo interesante de este procedimiento es que una única subrutina da servicio a estos seis script y a todos los que sean necesarios. Concretamente en ITPA-CA, a un total de 18 script con los que respondemos a un total de 50 ítem. Vemos como funciona.

  • Tras acceder a la hoja sobre la que vamos a trabajar (oHoja = ThisComponent.getSheets().getByName(Lamina)) mediante el parámetro Lamina
  • desarrollamos un bucle for  que tiene como límite superior el valor del parámetro nit (For i = 0 To nit), que indica tanto el número de ciclos del bucle como el número de ítem a los que vamos a responder.
  • Nos posicionamos en la celda que nos interesa (inicialmente N4) mediante la fórmula N = "N" & i + 4 que asocia el identificador numérico de la celda con el valor del contador i 
  • Y a partir de esta posición, capturamos ese objeto celda (oCelda = oHoja.getCellRangeByName(N)) y su contenido (Celda = oCelda.getValue())...
  • ... condicionando la acción a desarrollar mediante if a que esa celda esté vacía (If Celda = 0 Then). 
  • Esa acción consiste en escribir en la celda el identificador de la imagen (img) que hemos pasado como parámetro (oCelda.setValue(img)) y salimos del bucle (Exit For)
  • En caso de no cumplirse esa condición, esto es, que la celda no esté vacía, continua desarrollándose el ciclo, esto es: no se escribe nada en la celda (evitando así sobre-escribir en una celda) y se pasa a la siguiente.
Es necesario tener en cuenta que, aquí, cada celda incluida en este proceso (desde N0+4 = N4 hasta N16+4 = N20) equivale a un ítem. La tabla en la que se encuentra nuestra columna nos permite apreciar el procedimiento de asignación y de puntuación del ítem.


La primera columna identifica los ítem de la lámina (de 1 a 17); la tercera indica la respuesta correcta para cada ítem (esto es la imagen que se debería seleccionar) y la cuarta (PD) permite puntuar cada ítem mediante una función condicional LO-Calc (=SI(N4=O4;1;0)). Esta tabla permanece oculta (Formato | Columnas | Ocultar) aunque aquí la mostremos por motivos expositivos.

Documento. Desde [este enlace] puedes descargar el documento LO-Calc que desarrolla lo expuesto en la entrada.



 

sábado, 7 de septiembre de 2024

Evaluación. Ítem.

Ítem de opción (b). Varias opciones.


Otra forma en que se puede presentar un ítem es cuando debemos elegir una entre varias opciones. En este caso no se trata de señalar si el enunciado es correcto o no, como en el caso de la [entrada anterior], sino de elegir cual de las respuestas que se presentan como posibles (normalmente cuatro o cinco) es la correcta o, en algunos casos, la mejor de las opciones. En este tipo de ítem también es adecuado usar el control Botón de opción, ya que sólo se puede optar por una de las opciones. 


Este tipo de ítem también es frecuente (incluso más que el de V/F) en las pruebas y ejercicios de comprensión lectora (1). Normalmente se plantea una pregunta a la que se dan una serie de alternativas de respuesta. Una de ellas es correcta y el resto son falsas (distractores).

Los planteamientos de trabajo suelen ser de dos tipos básicos: o bien se trata de una respuesta literal (está expresada como tal en el texto con el que se trabaja) o requiere algún tipo de inferencia, bien lingüística o bien de tipo lógico. Dentro de las inferencias se pueden diferenciar dos niveles: las inferencias que se realizan a partir de la información explicitada en el texto y las que requieren hacer uso de conocimientos previos, sin que sea suficiente el mero conocimiento del contenido textual.

A su vez los distractores también pueden ser analizados en cuanto a la información que contienen: pueden ser distractores cuyo contenido carecen de relación con la pregunta que se formula o distractores con un mayor o menor nivel de similitud con la respuesta correcta. En este segundo caso también podemos formular distractores próximos al contenido textual o al recursos a algún tipo de inferencia.

Ambas dimensiones del ítem, y el uso estratégico que se haga de ellas, hacen que una prueba basada en este tipo de ítem sea muy interesante para evaluar no sólo el nivel de comprensión lectora, sino también el tipo de estrategias que emplea el alumno en ese proceso. Y para ello puede ser el útil el análisis de los aciertos y también el de los errores.

Aunque estas cuestiones son de gran interés para la formulación de pruebas y los procesos de análisis de los resultados, en lo que a esta entrada se refiere, lo que aquí nos interesa son las implicaciones que este tipo de ítem tiene para la elección del control de formulario y el modo de análisis de los resultados que derivan de su uso.

Desde esta perspectiva cabe decir que, además de que es conveniente utilizar botones de opción como control-input, su implementación es diferente a la que se usa en ítem V/F, pero más en lo formal que en el procedimiento a seguir. Veámoslo mediante un ejemplo: 


Puedes comprobar que se trata del mismo texto que empleamos en la entrada en la que se explica el uso de ítem V/F, pero que ahora cambia el estilo y tipo de las preguntas y, lo que es aquí más definitorio, el modo en que se presentan los controles-opciones de respuesta:
  •  Las opciones se escriben "dentro" del control, mediante su funcionalidad Etiqueta (Propiedades |General | Etiqueta)
  • Cada botón tiene su propio nombre (Propiedades |General | Nombre) que componemos con un valor numérico sucesivo para facilitar su posterior manejo mediante código (btn1... btnZ)
  • Cada conjunto de botones se establece como tal en relación al ítem mediante el mismo identificador en Nombre del grupo (Propiedades |General | Nombre del grupo)
  •  Cada botón se asocia a una celda diferente pero que mantiene cierta afinidad con las del resto de los botones del grupo (Propiedades | Datos | Celda enlazada). De esta forma es posible eliminar las activaciones de los botones mediante código, una vez resuelta la actividad. 
De este proceso garantizamos el correcto funcionamiento de los botones como opción alternativa en función del ítem, así como su posterior manejo mediante código (2).

Una vez que hemos implementado los controles en el formulario, deberemos concretar la forma en que se van a analizar las respuestas, ya que en función de la opción que se elija, así se concretará el modo en que se aborde el proceso mediante código.

La primera y más simple de las opciones de análisis es limitarse a identificar al acierto vs. error en cada uno de ellos. En este caso no nos interesa que opción incorrecta haya tomado como cierta el alumno, sino únicamente el hecho de que sea o no sea la opción predefinida como correcta (3). Pero si nos interesa analizar el error, y no sólo conocer el nivel de acierto, entonces el planteamiento anterior resulta insuficiente e inadecuado. Pero vayamos por partes.

En el primer caso, cuando sólo queremos realizar un análisis a partir del número de aciertos en la prueba, es suficiente con conocer cual es la respuesta correcta en cada caso y, en función de ello, establecer la puntuación que recibirá cada uno de los ítem. Dado que ese conocimiento es previo, la solución informática puede ser muy simple, aunque el nivel de automatización del proceso sea bajo y, en consecuencia, el código poco eficiente, pero también bastante simple.

Supongamos el ítem anterior, en el que la respuesta correcta es la primera opción. Conocida ésta y centrándonos en el análisis de la puntuación, el script podría ser el siguiente:

Sub Item1

' --  VARIABLES  -------------------------------------------------------

'Variables para acceso al formulario

Dim oHojaActiva As Object
Dim oPaginaDibujo As Object
Dim oFormularios As Object
Dim oFormulario As Object

'Variables para acceso a los controles y para la puntuación del ítem

Dim Botones (3) As Object
Dim RespuestaAlumno As Integer

' ----  ACCESOS  --------------------------------------------------------

oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oPaginaDibujo = oHojaActiva.getDrawPage()
oFormularios = oPaginaDibujo.getForms()
oFormulario = oFormularios.getByName("frmItemEleccion")

'ÍTEM 1. Acceso al control (botón de opción) Correcto

Botones(0) = oFormulario.getByName("btn1")

If Botones(0).State() Then
RespuestaAlumno = 1
Else
RespuestaAlumno = 0
End If

'  --- INFORME -----------------------------------------------------------------------

MsgBox "Puntuación del alumno en el primer ítem: " & RespuestaAlumno

End Sub
 
Dado que el proceso de acceso a los objetos (hoja activa, capa de dibujo, colección de formularios, formulario activo y botones de opción) ya ha sido explicado en [esta entrada] y queda claramente representado en la parte inicial del script y que la fase informe la resumimos mediante un MsgBox, me centraré en explicar el acceso a la respuesta correcta y la puntuación del ítem. Esta parte del código se inicia con el comentario 'ÍTEM 1. Acceso al control (botón de opción) Correcto y finaliza con la instrucción previa al comentario '  --- INFORME -------------.

Haciendo uso de la matriz Botones (3) y la variable RespuestaAlumno previamente declaradas, nos basta con acceder al primero de los botones (btn1) que asignamos al primero de los componentes de la matriz destinada a ese fin (Botones(0)) mediante la instrucción ya conocida (Botones(0) = oFormulario.getByName("btn1")).

En un segundo momento, analizamos el estado (activado/no activado) de dicho botón (Botones(0).State()), condicionando la puntuación del ítem (que asignamos a la variable RespuestaAlumno) a que dicho objeto esté activado (If Botones(0).State() Then -> RespuestaAlumno = 1) o no lo esté (Else -> RespuestaAlumno = 0)

Ni que decir tiene que, conocidas las opciones correctas, lo que podemos hacer para puntuar el resto de los ítem de la prueba es generalizar el procedimiento que acabo de explicar, con lo que ya disponemos de una forma simple de trabajar con cuestionarios basados en ítem de varias opciones, aunque no estaría de más realizar algunas mejoras; las más sencillas: sustituir la variable de asignación de puntuación por una matriz para ahorrarnos la creación de varias variables y crear un procedimiento más funcional para recoger y archivar los resultados (4). Aunque caben mejoras sin salirse de la simplicidad del procedimiento, con ellas no nos alejamos mucho de la formulación más básica del procedimiento, así que no las voy a plantear aquí y las dejo a tu mano. 

Adelanto, eso sí, que existen otras formulaciones más potentes, pero también de mayor complejidad, que nos interesa conocer; pero quedarán para la siguiente entrada; así en ésta nos podemos centrar en comprender el procedimiento explicado, en mejorarlo (5) y en aplicarlo en la práctica.

Documento. En el IDE de [ItemOpcion2a.ods] puedes ver el script comentado en esta entrada. Para mayor comodidad se activa desde el botón de comando CORREGIR, pero te recomiendo que analices y trates de mejorar el código del script al que está asociado.

NOTAS

(1) Un ejemplo es la prueba Estructuras gramaticales de PROLEC, en la que se presenta una imagen y el alumno debe seleccionar una de las cuatro frases que supuestamente están representadas en ese dibujo. Curiosamente, y sin una explicación específica del motivo, en PROLEC-R fue sustituida esta presentación por su contraria: una frase (input) y cuatro dibujos, debiendo el alumno seleccionar cual de ellos representa correctamente el significado de la frase. Sería interesante estudiar las diferencias entre los resultados de ambos tipos de presentación, estudiando los propios baremos de este subtest en ambos modos de presentación del ítem. Aunque es relativamente frecuente que las opciones gráficas sustituyan a las escritas (por ejemplo, en test de comprensión oral, lectora, de conocimiento léxico o de estructuras gramaticales), en test específicos de comprensión lectora, como queda dicho, el ítem que se expone en esta entrada es de uso muy frecuente en pruebas de comprensión lectora.
(2) Ambas cuestiones son importantes para que la prueba funcione y sea analizada de forma conveniente. Por ejemplo, gracias a  la forma en que nombramos los botones podremos después trabajar adecuadamente mediante script, pero necesitamos que respondan como opción-ítem, por lo que es necesario que cada conjunto quede adscrito a un grupo. La alternativa es dar el mismo nombre a los botones-opciones del ítem, pero esto nos crea problemas para el posterior análisis de las respuestas.
(3) En cierto modo, pero no en sentido estricto, este modo simplificado de análisis acerca este tipo de ítem al de V/F, ya que las respuesta final se define únicamente en estas dos posibilidades.
(4) Cierto que nos faltaría desarrollar un procedimiento más funcional para registrar y almacenar los resultados. Un ejemplo podría ser el que empleamos en los ítem de opción V/F ([Ver en el documento adjunto a esta entrada]). En el documento que anexo a la actual puedes encontrar un desarrollo simple y acumulativo del procedimiento que explica en el texto.
(5) Ya dije que esas posibles mejoras corren de tu cuenta, aunque te recomiendo que lo hagas; así desarrollarás tu lógica de programación y aplicarás aprendizajes anteriores. Una de esas propuestas de mejora podría ser crear funciones o subrutinas que reduzcan la repetición de instrucciones en el script principal. Otra la creación de ese procedimiento de almacenamiento de los datos resultantes de la aplicación de la prueba, incluyendo el cálculo de la puntuación total.

sábado, 31 de agosto de 2024

Evaluación. Ítem

Ítem de opción (a) V/F


Aunque los ítem de opción sean considerados unos de los ítem típicos de las pruebas de evaluación, lo cierto es que estos ítem, en su formulación textual son menos frecuente en los test de lo que pudiera parecer. Sí se empelan frecuentemente en la evaluación de la comprensión lectora y en cuestionarios de valoración actitudinal, pero no es frecuente en otro tipo de pruebas (1)


Como acabo de decir en los test de evaluación de la comprensión lectora (2) es frecuente emplear ítem de opción en diferentes configuraciones: 
  • De V/F y similares.
  • De opción correcta + distractores.
  • O de varias opciones correctas + distractores

También se usan en cuestionarios de evaluación de actitudes, preferencias o grado de satisfacción, en las que la opción seleccionada no implica acierto/error, pero sí puede implicar una valoración de tipo ordinal (3). En este caso, a nivel psicométrico (y sociométrico) estamos hablando de las ya citadas escalas Likert.  

Todos estas opciones de ítem pueden ser informatizados mediante diferentes objetos-control (de formulario o de cuadro de diálogo) que permiten implementar las opciones de respuesta. 

Dado que como objeto-control ya han sido tratados en otras entradas, me limitaré ahora a ejemplificar su uso como ítem de evaluación (4), atendiendo a cómo se implementan en la prueba, cómo se recoge la respuesta y cómo se trata ésta.

Desde esta perspectiva nos centraremos en si el ítem se valora en términos V/F (con independencia de las opciones de respuesta, sólo una es V) o si caben varias respuestas V (con independencia de que todas reciban la misma puntuación o no).

Cuando sólo una respuesta es V (y el resto F), cabe emplear al menos dos controles, el Botón de opción y el Cuadro de lista,  pero la que funcionalmente resulta más apropiada es el control [botón de opción]. Por el contrario, cuando necesitamos seleccionar varias opciones (5) lo es el control [casilla de verificación] (6). 

En esta entrada me voy a limitar a explicar cómo formular el ítem V/F más sencillo, esto es: aquel en el que sólo hay dos opciones de respuesta: V vs. F (y sus diferentes formulaciones). Veremos un ejemplo en el que suponemos una prueba o un ejercicio de comprensión lectora en en que, tras la lectura del texto, se plantean al alumno un conjunto de ítem que piden elegir entre V o F en respuesta a afirmaciones basadas en el contenido textual. Normalmente estos ítem van precedidos de una explicación que concreta la instrucción.

Después de leer (el texto) di si son verdaderas o falsas las frases siguientes:

  • Juan es hermano de Rosario - (Verdadero - Falso)
  • Juan tiene 8 años -  (Verdadero - Falso)
  • ...

Para abordar la informatización de actividades de este tipo (formen parte de ejercicios de aprendizaje o de pruebas de evaluación) es especialmente apropiado el uso del control Botón de opción, del cual ya sabemos unas cuantas cosas como control de formulario o de cuadro de diálogo. Entre lo sabido está el modo de implementar estos controles en (por ejemplo) un formulario creado sobre un documento Calc, pero no estará de más refrescar nuestros conocimientos.

La implementación del objeto botón de opción, como ya sabemos, se realiza en la capa de dibujo (o capa gráfica) del documento, que es en la que se posicionan los formularios y sus controles. Este proceso, que es en realidad complejo, no es perceptible en la fase de implementación que realizamos normalmente de forma manual, ya que se ejecuta de forma automática en función de la jerarquía de clases y objetos que deriva de la lógica de la programación orientada a objetos (POO) (7) en que se basa LibreOffice, por lo que, insisto, en esta fase del proceso nos limitaremos a "dibujar" los controles que deseemos, que serán dos por ítem: uno para la opción V y otro para la opción F.

Repitiendo el procedimiento tantas veces como ítem V/F tenga la prueba, crearemos el cuestionario, finalizando con ello la primera fase del proceso (8):


Cabe decir que la configuración de los botones para que funciones A (V) como alternativa de B (F) requiere que se cumplan determinadas condiciones (nota 8): o bien se les da el mismo nombre a ambos botones sin definir grupo, o bien se les da diferente nombre y se les asigna al mismo grupo; en ambos casos, si se establece celda de destino de la respuesta, cada botón debe tener asignada una celda diferentes (9).

El proceso que sigue se basa en OOo Basic y supone desarrollar las dos fases que siguen a la primera: el acceso a las respuestas y su análisis. Aquí el análisis se limitará a puntuar los ítem, pero en un docap real habría que analizar esas puntuaciones en los términos que se ajuste a los objetivos de la intervención.

Primeramente mostraré un código no depurado por permitir una mejor compresión del procedimiento. Este código se puede descargar como archivo txt desde [este enlace] y lo iré comentando en lo que sigue de la entrada.

En un segundo momento mejoraremos el código inicial de forma que resulte más funcional y menos extenso. Pero no adelantemos acontecimientos. Ahora toca explicar la primera versión.
  
Como dije antes, la siguiente fase del proceso consiste en acceder al contenido de los controles, lo cual realizaremos mediante código OOo Basic (10). Para ello deberemos acceder sucesivamente al documento y a la hoja activa,  a la capa de dibujo, a la colección de formularios y al formulario al que pertenecen los controles; todo ello, como ya sabemos, requiere la previa declaración de variables de objeto a las que asignar los objetos indicados:

'ACCESO AL FORMULARIO

Dim oHojaActiva As Object
Dim oPaginaDibujo As Object
Dim oFormularios As Object
Dim oFormulario As Object

'Acceso a la hoja activa
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()

'Acceso a la página de dibujo en la que se encuentran los formularios
oPaginaDibujo = oHojaActiva.getDrawPage()

'Acceso a todos los formularios de la hoja de cálculo
oFormularios = oPaginaDibujo.getForms()

'Acceso al formulario por el nombre
oFormulario = oFormularios.getByName("frm2")

El segundo paso de esta fase es acceder al objeto botón (BotonesOpcion(0) =oFormulario.getByName("btn1a")) y a su contenido, lo cual se concreta como acceso a su estado (activado vs. desactivado) (BotonesOpcion(0).State()). Puedes observar que hemos asignado el objeto botón a un elemento de una matriz previamente declarada (Dim BotonesOpcion (7) As Object) (11).

Este acceso al estado del control se realiza mediante un condicional que permite asignar un valora a los elementos de la matriz en la que recogemos realmente los resultados (Dim RespuestasAlumno (3) As Integer). Los que se asignan son simplemente la traducción del boolean que resulta de la activación del control del formulario, de uno u otro elemento del par de controles, tal y como los establecimos en el formulario que se mostró en la imagen anterior. Veamos un ejemplo del análisis del funcionamiento del botón V del primer par (12):

If BotonesOpcion(0).State() Then
	RespuestasAlumno (0) = 1
End If
 
A partir de este momento iniciamos la tercera fase que afrontaremos medida un procedimiento de comparación de las respuestas contenidas en la matriz RespuestasAlumno() con las correctas, las cuales están recogidas en la matriz RespuestaCorrecta() y cuyo contenido he establecido mediante la función Array() (RespuestaCorrecta() = Array(1,0,0,1)). Esta comparación la realizamos mediante una doble estructura ciclo-condicional:

For i = 0 To UBound(RespuestasAlumno ())
If RespuestasAlumno (i) = RespuestaCorrecta (i) Then
	Puntuacion (i) = 1
Else
 	Puntuacion (i) = 0
End If

Next
  • El condicional permite comparar el contenido de las dos matrices: la que contiene las respuestas del alumno con las respuestas correctas (RespuestasAlumno (i) = RespuestaCorrecta (i)). En función de esta comparación se establece el valor de la puntuación en la matriz Puntuacion ().
  • El ciclo nos permite recorrer los cuatro elementos de las matrices antes indicadas para repetir la comparación que realizamos mediante el condicional.
Lo que resta del desarrollo de esta tercera fase (escritura de los resultados contenidos en la matriz Puntuacion () en determinas celdas, a modo de informe) carece de relevancia para lo tratado en esta entrada, y es conocido por haber sido tratado en otras entradas, por lo que ahora no me detendré en explicarlo.

explicaré, aunque brevemente, el segundo (conjunto de) script, que puedes encontrar en el IDE del documento que enlazo más abajo.

  • Se trata de un código más estructurado en el que se diferencia el script principal (ItemVF2) de los componentes secundarios, en los que se diferencian una función (Respuestas()) y dos subrutinas (PasarPtos() y BorrarRespuestas())
  • La función Respuestas() permite simplificar significativamente el código del script principal, ya que asume el desarrollo de la segunda fase de forma mucho más eficiente que mediante la repetición de las instrucciones de acceso a los controles y a su estado.
Function Respuestas (Form As String,Formulario As Object, Formularios As Object) As Object

Dim i As Integer
Dim BotonesOpcion (7) As Object
Dim Respuesta (3) As Integer

Formulario = Formularios.getByName(Form)

For i = 1 To 8
BotonesOpcion(i-1) = Formulario.getByName("btn" & i)
Next

For i = 0 To 3
If BotonesOpcion(i*2).State() Then
Respuesta (i) = 1
Else
Respuesta (i) = 0
End If
Next

Respuestas = Respuesta()

End Function
  • Las subrutinas PasarPtos() y BorrarRespuestas() asumen del desarrollo de los pasos finales de la tercera fase: la escritura del "informe" en la hoja y el borrado de los datos para eliminar la selección de los botones. 
Dado que no es esta la única forma en que se presentan los ítem de opción, en entradas sucesivas estudiaremos otras formulaciones, las cuales ya han sido enunciadas al inicio de esta entrada. La es la primera de esta serie. 

Documento. En el documento Calc [ItemEleccion.ods] puedes ver en funcionamiento el manejo de los controles botón de elección (13). 

NOTAS

(1) En realidad está más representado en ellas de lo que suponen estas afirmaciones, pero lo están en su versión gráfica, en la que el alumno debe seleccionar como respuesta una imagen entre varias. Por ello lo anterior es válido en lo que se refiere a la formulación textual. Como la formulación basada en gráficos fue tratada en [esta entrada], nos entraremos en esta entrada (y en las que la continúen) en las que llamo de formulación textual por ser el ítem expresado mediante alguan froma de expresión escrita.
(2) En [este enlace] se analiza un buen número de pruebas actuales de comprensión lectora. No todas emplean el ítem de opción múltiple, pero sí es el modelo de ítem usado en ellas con más frecuencia. Sirvan como ejemplos los siguientes test: [EDICOLE], [TECOLEIN] y [ECOMPLEC]
(3) En este caso, tanto a nivel psicométrico como sociométrico, estamos hablando de [escalas Likert].
(4) De hecho estos objetos están ampliamente representados entre las opciones disponibles en un formulario o en un cuadro de diálogo como tendremos ocasión de ver en esta entrada. También los hemos analizado de forma individualizada como elementos de las interfaces gráficas. Al respecto puedes consultar [esta página del blog].
(5) Y no sólo una entre varias, como en el caso anterior.
(6) En ambos casos estamos hablando de las opciones de control ideales, pero no las únicas. De hecho podemos articular un sistema de controles combinados que respondan a diferentes necesidades, incluyendo el uso de controles de comando (botones de comando, si se prefiere). En esta entrada abordaré primero el uso de los controles básicos (botones de opción y casilla de verificación) y después expondré algún procedimiento basado en la combinación de controles.
(7) Como ya sabes, si empleamos un Cuadro de diálogo deberemos trabajar desde el IDE del documento, cuestión esta que nos remite a entradas anteriores (ver nota 6), pero aquí me limitaré al uso de este control como parte de un formulario por ser el servicio y soporte más usado para informatizar las pruebas. Por lo que respecta a la implementación de cualquier control de formulario realizada de forma manual (que es lo más frecuente), ésta genera automáticamente acceso a la capa gráfica y crea también automáticamente un objeto formulario, por lo que ambos procesos pasan desapercibidos hasta que tenemos que acceder al control desde el código: en este momento se evidencia la jerarquía de clase y objetos que implica el trabajo con los controles de formulario.
(8) En realidad hay un par de cuestiones que conviene tratar, aunque hayan sido explicadas en entradas anteriores. Se trata del modo en que se implementa el control Botón de opción y cómo se configura. Respecto a la primera cuestión, en caso de que este control no esté visible en la barra Controles de formulario puedes implementar inicialmente un control Casilla y después cambiarlo a Botón de opción desde el menú emergente que se activa con clic derecho sobre el control, opción Reemplazar por. Respecto a la configuración del control, para un mejor tratamiento del objeto mediante código OOo Basic, te sugiero que des nombres secuenciales (btn1, btn2... btnZ), lo que te facilitará posteriormente automatizar el acceso a estos objetos, también te aconsejo que crees los grupos pertinentes (en este caso, cuatro) asociando a cada grupo el par de botones que corresponden con el ítem; de este modo se garantiza su adecuado funcionamiento opcional (si uno se activa, se desactiva su contrario). Finalmente, aunque no es necesario en sentido estricto, te aconsejo que asocies cada botón con una celda (y des al texto que resulta color blanco para que no sea visible); procediendo por parejas (V -> M1 vs F -> N1) después te será más fácil crear código para borrar el contenido de esas celdas y los botones sin seleccionar. Sobre estas cuestiones volveré en el texto de la entrada.
(9) No es necesario asignar el resultado a una celda, pero ayuda a gestionar el borrado o desactivación del botón (ver final de la nota 8).
(10) Podríamos desarrollar los procesos que siguen sin trabajar con OOo Basic, pero el uso de código mejora significativamente el rendimiento del docap, además de ser el objetivo de esta entrada.
(11) Además de esta matriz declaramos otras tres para el posterior manejo de los datos, como podremos ver en el texto de la entrada (Dim RespuestasAlumno (3) As Integer, RespuestaCorrecta (3) As Integer, Puntuacion (3) As Integer)
(12) En esta versión del script se repite el proceso descrito tantas veces como botones de opción hemos implementado en el formulario de la prueba; de ahí la extensión que ocupa este segmento del código.
(13) Al igual que en la primera versión del código, tampoco ahora nos interesa detenernos en  la explicación de estas subrutinas, por resulta ya conocidas al lector. En todo caso, en el IDE del documento puedes acceder a ese código para analizarlo en detalle.