miércoles, 28 de octubre de 2015

Desarrollo del Proyecto - Describiendo los datos obtenidos

Retomando los post anteriores, para determinar la calidad de los generadores de números aleatorios que nosotras elegimos (devC++, R, Geogebra y la calculadora) debemos comparar con la Distribución Uniforme (0,1) y analizar si cada conjunto de datos generados se aproxima a esta distribución y definir, si es posible a partir de la información que tenemos, cuál es el más aproximado.

Recordemos las características de la Distribución Uniforme Continua en el intervalo (a,b), a < b:
  • Función de densidad de probabilidad
  f(x)=\left\{\begin{matrix}
  \frac{1}{b - a} & \ \ \ \mathrm{para}\ a \le x \le b, \\  \\
  0 & \mathrm{para}\ x<a\ \mathrm{o}\ x>b, \end{matrix}\right.


  • Función de distribución
  F(x)=\left\{\begin{matrix}
  0 & \mbox{para }x < a \\  \\
  \frac{x-a}{b-a} & \ \ \ \mbox{para }a \le x < b \\  \\
  1 & \mbox{para }x \ge b
  \end{matrix}\right.
 \,\!

  • Dominioa \le x \le b \,\!


  • Esperanza o media: E(X) = \frac{a+b}{2} \,\!


  • Varianza: V(X) = \frac{(b-a)^2}{12} \,\!


  • Coeficiente de simetría: 0


  • Coeficiente de curtosis:  9/5
                                                 ó -6/5 (si al coeficiente de curtosis le restamos 3 para compararlo con la campana de Gauss.  9/5 - 3 = -1.2)


Para este caso el intervalo queda definido por a=0 y b=1.
Entonces resulta:
  • f(x)=1 para 0\leq x\leq 1
  • F(x)=x para 0\leq x\leq 1
  • \operatorname{E}(X) = 0,5
  • \operatorname{Var}(X) = 1/12
  • \sigma_x = \sqrt{\operatorname{Var}(X)} = \sqrt{1/12} \approx 0.29





A continuación presentamos las medidas de tendencia central y dispersión perteneciente a cada uno de los conjuntos de datos obtenidos, para compararlas con los valores teóricos. Pero, que estas medidas coincidan con los valores teóricos de la Distribución Uniforme (0,1) no nos asegura que las variables de los números generados tengan distribución similar a la Uniforme, para ello también necesitamos tener en cuenta los parámetros de forma (curtosis y asimetría). 

Uniforme (0,1)
Datos de R
Datos C++
Datos Calculadora
Datos Geogebra
Media
0.5
0.4730771
0.496885
0.47808
0.5008008
Desvío
0.2886751346
0.2981059
0.2854508
0.2864337
0.267806
Curtosis
-1.2
-1.284478
-1.13726
-1.179772
-0.8863847
Asimetria
0
0.09920876
-0.07215526
-0.0108821
-0.01843991
cuartil 0%
0
0.01394744
0.01919614
0
0.01008641
cuartil 25%
0.25
0.1840255
0.2600558
0.25475
0.3026029
cuartil 50%
0.5
0.4559388
0.5030366
0.463
0.520049
cuartil 75%
0.75
0.727682
0.7099445
0.73
0.7066047
cuartil 100%
1.00
0.9966363
0.9814447
0.986
0.9814372
N
100
100
100
100




Figura 2: Medidas de tendencia central y dispersión, parámetros forma de cada una de las variables comparadas con los valores teóricos de la distribución Uniforme Continua (0,1).

Observando la Figura 2,vemos que los números arrojados se encuentran entre 0 y 0.9966363 como es de esperarse, además cada variable tiene su media y su desvío aproximado al del modelo uniforme. En este sentido podemos decir que la variable de los números generados con GeoGebra tiene la media más aproximada a 0.5 y el desvío de los números generados con la calculadora es el más aproximado a 0.28867. Para analizar con más detalle estas medidas, y poder tener una comparación visual, a continuación se presentarán los boxplot de cada una de las variables y de la uniforme (0,1).
También notamos que los parámetros de forma nos dan información bastante parecida a la deseada. Si la distribución es simétrica el coeficiente de asimetría debe ser cero, y en los casos de nuestras variables este coeficiente es aproximadamente cero. El coeficiente de curtosis debe ser -1.2, para nuestros casos es bastante próximo a -1.2, por lo tanto las variables tenidas en cuenta cuentan con una distribución platicúrtica (acumulan más valores en las colas, que la considerada estándar). Comparando los valores, la variable que tiene el coeficiente de curtosis más próximo a -1.2 es la de los números generados con la calculadora, la cual también tiene el coeficiente de asimetría más cercano a cero. Analizaremos con más detenimiento la forma de las distribuciones, en los gráficos de densidad que presentaremos más adelante.

La siguiente figura contiene los primeros cuatro BoxPlox correspondientes a las variables de números generados por la calculadora, DevC++, GeoGebra y R respectivamente y el último pertenece a una variable con distribución uniforme (0,1), para poder realizar la comparación deseada.

En cada Boxplot podemos observar el máximo, el mínimo y los cuartiles (0.25, 0.5 y 0.75). Los máximos y mínimos de cada Boxplot son muy próximos a 0 y 1, como también lo detallaba la Figura 2. Analizando los cuartiles, tanto desde el punto de vista numérico en la Figura 2, como los Boxplot de cada una de las variables, distinguimos que todas tienden a ser simétricas, acumulando aproximadamente el 25% hasta el primer cuartil, el 50% hasta el segundo y el 75% hasta el tercero, a excepción de la variable de números generados con R que el primer cuartil esta por debajo de 0.25 y los generados por GeoGebra que están por encima de 0.25. También podemos observar que la caja más parecida a la uniforme es la de la calculadora, pero ésta no cumple estrictamente con la simetría. La que es más simétrica es la caja de R, pero tiene un brazo más pequeño, lo cual nos habla de la poca dispersión de los datos entre el mínimo y el primer cuartil, y mayor dispersión entre el tercer cuartil y el máximo.

A continuación, mostraremos los histogramas de densidades para observar la forma que siguen cada una de las variables. De color negro marcamos la función de densidad de una distribución uniforme (0,1), esto nos ayudará a ver hasta dónde deberían ir las barras (correspondientes a los intervalos determinados por Sturges) de densidad de cada uno de los histogramas. En un primer momento, pensamos que los histogramas de GeoGebra y R tenían sus barras más próximas a la gráfica de la función de densidad, pero observando mas detenidamente, nos dimos cuenta que al tener valores muy extremos, los datos están muy dispersos en  comparación al histograma de la calculadora, por ejemplo, que aunque no tengan la misma proporción, todos son cercanos a 1.


Todavía no podemos concluir cuál es el mejor generador, porque algunos se destacan por tener determinados valores más próximos a los del modelo uniforme, pero a su vez tienen otros que se alejan bastante. Lo que si debemos resaltar que, a diferencia de lo que habíamos supuesto, el generador de R no es, en primera instancia, el que se destaca del resto (no es el más parecido al modelo uniforme).

lunes, 19 de octubre de 2015

Desarrollo del Proyecto - OBJETIVOS E HIPÓTESIS



Como planteamos antes, los generadores de "números aleatorios", están basados en algoritmos determinísticos, por lo tanto los valores que generan no son números precisamente aleatorios sino pseudoaleatorios. 
Imagen 1: Generadores de números pseudoaleatorios
imagen extraida de http://goo.gl/tdttzZ

Para determinar la calidad de algunos generadores de números paseudoaleatorios, realizaremos una investigación la cual fundamentaremos estadísticamente. Donde el objetivo de esta investigación, es justamente determinar cuál de los siguientes generadores arrojan números "más aleatorios", o en términos estadísticos cuál de ellos se ajusta a la Distribución Uniforme (0,1). Elegimos los software R, GeoGebra, DevC++, porque son programas con los que trabajamos en distintas materias del Profesorado en Matemática, al igual que la calculadora CASIO fx-570ES PLUS.

Para ello recolectamos 100 datos con cada uno de los software y la misma cantidad de números con la calculadora, de la siguiente manera:

  • Descargamos el software R versión 3.2.1 desde https://www.r-project.org/ e instalamos el paquete Rcmdr. Para generar los 100 números pseudoaleatorios en R Commander version 2.2-0, seguimos la siguiente secuencia Distribuciones → Distribuciones Continuas → Distribución Uniforme → Muestra de una distribución uniforme... y luego completamos los campos con 0 el mínimo, 1 el máximo, número de filas 100 y número de columnas 1, damos aceptar y conseguimos el conjunto de datos que queríamos.

  • Para generar los números pseudoaleadorios con GeoGebra, primero obtuvimos la versión 5.0.155.0-3D, desde http://www.geogebra.org/, luego ingresamos el comando UniformeAleatorio[ <Mínimo>, <Máximo>, <Número de muestras> ] en el cuadro de entrada, consiguiendo así la lista de números pseudoaleatorios.

#include <stdlib.h>
#include <stdio.h>
#include <time.h> int main() { int i; time_t tiempo = time(0); struct tm *tlocal = localtime(&tiempo); srand(tlocal->tm_sec+tlocal->tm_min+tlocal->tm_hour+tlocal->tm_year+tlocal->tm_mon+tlocal->tm_mday); for(i=0; i<100; i++) { printf("%d\t", rand()); } system("PAUSE"); return 0; }

Compilamos y ejecutamos para obtener los 100 números pseudoaleatorios. Pero el software nos devuelve números entre el 0 y 32767, entonces primero dividimos esos resultados por 100000 para que nos queden valores entre 0 y 1, y luego le aplicamos una transformación lineal que se corresponda el 0 con el 0 y el 0.32767 con el 1, obteniendo finalmente los datos que buscabamos.



  • En la calculadora CASIO fx-570ES PLUS generamos uno a uno los 100 números con las teclas shift → · (Ran#) 

Cabe destacar que los software fueron ejecutados en una notebook Lenovo modelo B590 con procesador Intel Pentium CPU 2020M, 2.40GHz, disco rígido de 500Gb, memoria Ram de 2Gb y sistema operativo Windows 7 Ultimate de 32 bits.

Los datos obtenidos serán analizados, comparándolos con la distribución Uniforme (0,1) a partir de los gráficos, como histogramas y boxplot, y medidas de tendencia central y dispersión: la media y el desvío, y parámetros de forma: coeficiente de asimetría y de curtosis. Creemos que como R es más específico en el ámbito estadístico,  nos arrojará números que se ajustan más a una distribución uniforme, es decir “más aleatorios” que con el resto de los generadores.

sábado, 10 de octubre de 2015

GENERADOR DE NÚMEROS ALEATORIOS Y PSEUDOALEATORIOS


Imagen 1: Generador de números pseudoaleatorios

Un generador de números aleatorios, es un dispositivo informático o físico diseñados para producir secuencias de números sin un orden aparente.

Hay diferentes métodos para generar números  aleatorios:
  • Métodos manuales, como por ejemplo lanzar un dado
  • Métodos de Computación analógicas, dependen de procesos físicos – aleatorios
  • Métodos de Computación Digital, como por ejemplo R
  • Tablas de bibliotecas, números generados por métodos de computación analógica que se han publicado en libros o tablas matemáticas
Un generador de números pseudoaleatorio,  es un algoritmo que produce una sucesión de números que es una muy buena aproximación a un conjunto de números aleatorios. La sucesión no es exactamente aleatoria ya que queda completamente determinada por un conjunto relativamente pequeño.

La mayoría de los algoritmos de generadores de números pseudoaleatorios producen sucesiones que poseen distribución uniforme.

Los números pseudoaleatorios se generan mediante Algoritmos Determinísticos, divididos en congruenciales y no congruenciales (los cuales a se vez se dividen en lineales y no lineales), que requieren parámetros de arranque como una Semilla (un valor inicial que se toma como punto de partida para realizar el cálculo del número aleatorio).

Los algoritmos para la generación de valores uniformemente distribuidos están presentes en todas las calculadoras y lenguajes de programación, y suelen estar basados en congruencias numéricas del tipo:



El éxito de este tipo de generadores de valores de una variable aleatoria depende de la elección de los cuatro parámetros que intervienen inicialmente en la expresión anterior:
  • El valor inicial o semilla: 
  • La constante multiplicativa: 
  • La constante aditiva: 
  • El número  respecto al cual se calculan los restos
Estos cuatro valores deben ser números enteros no negativos y que cumplan la siguiente condición: .