sábado, 6 de febrero de 2016

Una aplicación de Montecarlo en Stata

Una aplicación de Montecarlo
El problema: Supongamos que somos alumnos y un dia de clase el profesor nos sorprende con un examen de selección multiple que no penaliza por respuesta incorrecta (5 opciones). Si no hemos estudiado absolutamente nada ¿qué estrategia deberíamos seguir para maximar las respuestas correctas?
Las opciones son:
  • En cada pregunta elegir una respuesta al azar (la llamaré estrategia aleatoria)
  • En la primera pregunta elegir al azar una respuesta y luego seleccionar la misma opción en todas las demás preguntas (la llamaré estrategia fija).
La intuición destrás de la estrategia fija se entiende mejor con una analogía: tenemos a un niño que tiene los ojos vendados y se está moviendo de un lado para el otro para que no le mojemos con una pistola de agua. La estrategía fija aquí es apuntar a un punto determinado y seguir tirando agua en esa dirección con la esperanza de que en algún momento le acertemos.
La idea es hacer un experimento para verificar que esta estrategia es mejor y para eso usaremos el método de montecarlo. Este método consiste en definir unas condiciones probabilisticas y repetir un experimento muchas veces hasta que podamos verificar el comportamiento del estadístico que estamos analizando (por ejemplo, podemos probar como se comporta una regresión cuando no se cumple algunos de los supuestos o cuando la muestra es muy pequeña)
El programa en el cual lo he implementado es Stata y aquí está el código.
El resultado muestra que (asumiendo que no me he equivocado en el código), a pesar de lo que dice la intuición, ambas estrategias son igualmente buenas. En ambos casos tendrías de media un resultado de 20% sobre 100%, con mucha suerte 37% y en el peor de los casos un 6%. Así que la próxima vez que tengas este tipo de exámenes si no quieres ir cambiando la respuesta cada tanto, coloca todas la misma letra :).
summarize

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       fixed |     10000     .199851    .0400523        .08        .37
      random |     10000     .200168    .0400925        .06        .35

ttest fixed==random

Paired t test
------------------------------------------------------------------------------
Variable |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
---------+--------------------------------------------------------------------
   fixed |   10000     .199851    .0004005    .0400523    .1990659    .2006361
  random |   10000     .200168    .0004009    .0400925    .1993821    .2009539
---------+--------------------------------------------------------------------
    diff |   10000    -.000317     .000568    .0567989   -.0014304    .0007964
------------------------------------------------------------------------------
     mean(diff) = mean(fixed - random)                            t =  -0.5581
 Ho: mean(diff) = 0                              degrees of freedom =     9999

 Ha: mean(diff) < 0           Ha: mean(diff) != 0           Ha: mean(diff) > 0
 Pr(T < t) = 0.2884         Pr(|T| > |t|) = 0.5768          Pr(T > t) = 0.7116
**************************************************************************
*
* Autor: Diego José Torres Torres
* Purpose: Apply Montecarlo modelling to check what strategy is pareto superior in * a multiple choice exam when you haven't studied
* Strategy A: Choice randomly every possible answer
* Strategy B: Only choose randomly the first question, the remaining questions you * stick to whatever you have chosen in the first question
* 
**************************************************************************

drop _all
set more off
global nobs = 100 // 100 questions
global nmc = 10000 // number of montecarlo trials
set obs $nobs
gen true_answer = 0
gen strategy_random = 0
gen strategy_fixed = 0
gen score_random_strategy = 0
gen score_fixed_strategy=0

//////////////////////////////////
capture program drop multiplechoice // para borrar un programa definido
program multiplechoice, rclass
tempname sim
postfile `sim' fixed random using results, replace
quietly {
forvalues i = 1/$nmc {
noisily dis "Iteración: " `i'

replace true_answer = 1 + floor(5 * uniform()) // The correct answers

replace strategy_random = 1 + floor(5 * uniform()) // Random strategy
replace strategy_fixed = 1 + floor(5 * uniform()) if _n==1 // only the first question is random
  replace strategy_fixed =  strategy_fixed[1] if _n>1 // 

replace score_random_strategy = true_answer==strategy_random // 1 if you selected the right answer
replace score_fixed_strategy = true_answer==strategy_fixed // 1 if you selected the right answer

su score_random_strategy
scalar random = r(mean)

su score_fixed_strategy
scalar fixed = r(mean)

post `sim' (fixed) (random)

//drop true_answer strategy_random strategy_fixed score_random_strategy score_fixed_strategy // drop generated variables to the next loop
}
}
postclose `sim'
end

multiplechoice
use results, clear
 summarize

 ttest fixed==random
 
// No difference between strategies... :( 

No hay comentarios:

Publicar un comentario