Don't talk, if you can read; don't read if you can write; don't write if you can think. HANNA ARENDT, Diario filosófico

domingo, 15 de abril de 2012

Implementación del condicional en el calificador de Moodle

No parece éste el sitio más indicado para publicar esto, pero ahí va: 

1. ¿Cómo surgió el problema?

A principios del curso 2011/12, los profesores de Bachillerato, en la modalidad semipresencial, de mi centro llegamos a un acuerdo sobre el sistema de calificación, que consistía en que la nota de cada trimestre se obtendría haciendo una media ponderada de la nota de examen (60%), las de las tareas (30%) y la de tutorización (10%), siempre que en la nota de examen el alumno tuviese al menos un 3,5. En caso contrario, la nota del trimestre sería simplemente la nota de examen.

Y dado que en nuestra labor docente utilizamos Moodle, surgió entonces la pregunta de si se podría conseguir que el calificador de Moodle hiciera estos cálculos.

La forma natural de hacerlo sería que el calificador dispusiera de un condicional para incorporarlo en las fórmulas de cálculo. Pero esto no es así.
Una solución sencilla es exportar las calificaciones a una hoja Excel o Calc, que sí disponen del condicional.
No obstante, si no tenemos otra cosa mejor que hacer, podemos plantearnos si se puede simular el condicional empleando alguna de las funciones que incorpora el calificador.
En esta imagen se ven las funciones disponibles:


 
2. La solución

En términos matemáticos, la nota de trimestre, N, de un alumno viene dada por la siguiente función:


donde E es la nota de examen, y P es la nota media ponderada, calculada así: 
 (TA es la nota de las tareas, TU es la nota de tutorización.)

Vayámonos a un contexto más general: supongamos que deseamos implementar en Moodle la siguiente función:

 (a y b no son necesariamente constantes, pero elijo esta notación por su sencillez.) 

Podemos expresar esta función así:

donde
 
Para implementar g podemos emplear la fórmula:  
=min(round([[x]]/(2*k);0);1) .
Y si k es mayor que 10/3, basta la fórmula más sencilla: =round([[x]]/2*k;0).

Por lo tanto, la fórmula buscada para implementar la función  f, para cualquier valor posible de k, es:

=[[a]]*(1-min(round([[x]]/(2*k);0);1)) + [[b]]* min(round([[x]]/(2*k);0);1)

En nuestro caso particular, teniendo en cuenta que 3,5 > 10/3, tenemos:

=[[E]]*(1-round([[E]]/7;0)) + [[P]]* round([[E]]/7;0)


3. Otra vuelta de tuerca

Pero en el momento de poner las notas del primer trimestre surgió de nuevo el debate entre nosotros acerca del sistema de calificación. Veamos un par de ejemplos que nos llevaron a repensar la cuestión:

Supongamos que un alumno tiene las siguientes notas: un 2 en el examen, un 1 en las tareas, y un 0 en tutorización. Y otro alumno tiene, respectivamente, 2, 6, y 6.
Del acuerdo inicial, se desprende que a ambos teníamos que calificarlos con un 2 (la nota se redondea al entero más próximo), pero parecía más justo ponerle un 3 al segundo, con objeto de valorar su esfuerzo.

Por otro lado, si un alumno tenía un 5 en el examen y 0 en tareas y tutorización, su nota final sería un 3, suspenso, y creíamos que debería aprobársele. Pensemos, por ejemplo, que por sus obligaciones laborales o familiares no puede acudir a clase ni hacer las tareas (no olvidemos que se trata de una enseñanza semipresencial).

Mi propuesta para, manteniendo la idea de acuerdo inicial, dar solución a estos casos, fue la siguiente:

-Si un alumno obtiene menos de un 3,5 en el examen, su nota del trimestre será su media ponderada siempre que ésta no supere el 4. En tal caso, la nota de trimestre sería un 4.
- Si un alumno obtiene en el examen una nota superior o igual a 3,5 y menor que 5, su nota de trimestre será su media ponderada.
-Si un alumno obtiene un 5 o más en el examen, su nota de trimestre será su media ponderada siempre que ésta no sea inferior a 5. En tal caso, su nota será 5.

Así, la nota de trimestre, N, de un alumno vendrá dada por la siguiente función:
donde E es la nota de examen y P es la nota media ponderada.

Igual que hemos hecho antes, vamos a generalizar el problema considerando la función:   
Llamemos:
 

con  k < t.

Entonces podemos expresar  f  así:

Teniendo en cuenta que  g1  y  g2 son implementadas, respectivamente, por:

=min(round([[x]]/(2*k);0);1)    y    =min(round([[x]]/(2*t);0);1),

la fórmula que implementa  f  es:

= min(round([[x]]/(2*t);0);1)* [[c]] + (1-min(round([[x]]/(2*t);0);1))*
*( min(round([[x]]/(2*k);0);1)*[[b]] + (1-min(round([[x]]/(2*k);0);1))*[[a]])


En nuestro caso particular, y teniendo en cuenta que 3,5 y 5 son mayores 10/3, la fórmula queda algo más sencilla (o menos complicada):

= round([[E]]/10;0)* max([[P]];5)+(1-round([[E]]/10;0))*
(round([[E]]/7;0)*[[P]]+(1-round([[E]]/7;0))* min([[P]];4))


sábado, 14 de abril de 2012

Divestadística

Hoy quiero recomendar a los que seguís este blog, el portal de divulgación estadística

En él podéis encontrar, entre otras cosas, artículos, vídeos y experimentos muy interesantes sobre la Estadística.
¡Echadle un vistazo!