Taller2 lab stats_matlab

6
Laboratorio 2 Probabilidad y Estadística con MATLAB GENERACIÓN DE VARIABLES ALEATORIAS Y SIMULACIÓN Introducción Muchos de los métodos de estadística computacional requieren la capacidad de generar variables aleatorias de distribuciones de probabilidad conocidas. Esto es el núcleo para poder realizar simulación estadística. El objetivo de este taller es proveer las herramientas necesarias para generar los tipos de variables aleatorias que a menudo surgen en la práctica y para ello se darán algunos ejemplos que ilustran los métodos. La primera parte se tratará las técnicas generales para la generación de variables aleatorias, como la transformación inversa. Luego, se proporcionarán algoritmos y el código de MATLAB para la generación de variables aleatorias para algunas distribuciones útiles. Por último se propondrá como ejercicio de simulación de un servidor ftp. Técnicas generales para la generación de variables aleatorias. 1. Los números aleatorios uniformes La mayoría de los métodos para la generación de variables aleatorias inician con números aleatorios que están distribuidos uniformemente en un intervalo (0,1). En este taller, vamos a denotar dichas variables aleatorias por la letra U. Tengamos en cuenta que actualmente con el avance de los computadores, ahora tenemos la capacidad de generar variables aleatorias uniformes con mucha facilidad. Sin embargo, hay que advertir que los números generados por los computadores son realmente pseudo-aleatorios, pues se generan mediante un algoritmo determinista. Las técnicas utilizadas para generar variables aleatorias uniformes han sido ampliamente estudiadas, y se ha demostrado que algunos generadores tienen defectos graves [Gentle, 1998]. Como vimos en el laboratorio anterior, el programa de MATLAB básico tiene una función rand para la generación de variables aleatorias uniformes. Hay varios argumentos opcionales, trabajaremos un poco en ellos porque pueden ser útiles en la simulación. La función rand sin argumentos devuelve una única instancia de la variable aleatoria U. Para obtener un arreglo de variables aleatorias uniforme m × n, puede usar la sintaxis rand (m, n). Recuerde que si utiliza rand (n), entonces se obtiene una matriz n × n. La secuencia de números aleatorios que se genera en MATLAB depende de la semilla o el estado del generador. El estado se restablece al valor predeterminado cuando se inicia, por lo que las mismas secuencias de variables aleatorias se generan cada vez que se inicia MATLAB. Esto a veces puede ser una ventaja en situaciones donde nos gustaría obtener una muestra aleatoria específica, como se muestra en el siguiente ejemplo. Si usted llama a la función utilizando rand (‘state’, 0), entonces MATLAB restablece el generador a su estado inicial. Si desea especificar otro estado, entonces utilice la sintaxis de rand ('state', j) para establecer el generador en el j-estado. Usted puede obtener el estado actual utilizando la sentencia S = rand ('state'), donde S es un vector de 35 elementos. Para restablecer el estado a éste, utilice rand('state', S).

Transcript of Taller2 lab stats_matlab

Page 1: Taller2 lab stats_matlab

Laboratorio 2 Probabilidad y Estadística con MATLAB GENERACIÓN DE VARIABLES ALEATORIAS Y SIMULACIÓN Introducción Muchos de los métodos de estadística computacional requieren la capacidad de generar variables aleatorias de distribuciones de probabilidad conocidas. Esto es el núcleo para poder realizar simulación estadística. El objetivo de este taller es proveer las herramientas necesarias para generar los tipos de variables aleatorias que a menudo surgen en la práctica y para ello se darán algunos ejemplos que ilustran los métodos. La primera parte se tratará las técnicas generales para la generación de variables aleatorias, como la transformación inversa. Luego, se proporcionarán algoritmos y el código de MATLAB para la generación de variables aleatorias para algunas distribuciones útiles. Por último se propondrá como ejercicio de simulación de un servidor ftp.

Técnicas generales para la generación de variables aleatorias.

1. Los números aleatorios uniformes La mayoría de los métodos para la generación de variables aleatorias inician con números aleatorios que están distribuidos uniformemente en un intervalo (0,1). En este taller, vamos a denotar dichas variables aleatorias por la letra U. Tengamos en cuenta que actualmente con el avance de los computadores, ahora tenemos la capacidad de generar variables aleatorias uniformes con mucha facilidad. Sin embargo, hay que advertir que los números generados por los computadores son realmente pseudo-aleatorios, pues se generan mediante un algoritmo determinista. Las técnicas utilizadas para generar variables aleatorias uniformes han sido ampliamente estudiadas, y se ha demostrado que algunos generadores tienen defectos graves [Gentle, 1998]. Como vimos en el laboratorio anterior, el programa de MATLAB básico tiene una función rand para la generación de variables aleatorias uniformes. Hay varios argumentos opcionales, trabajaremos un poco en ellos porque pueden ser útiles en la simulación. La función rand sin argumentos devuelve una única instancia de la variable aleatoria U. Para obtener un arreglo de variables aleatorias uniforme m × n, puede usar la sintaxis rand (m, n). Recuerde que si utiliza rand (n), entonces se obtiene una matriz n × n. La secuencia de números aleatorios que se genera en MATLAB depende de la semilla o el estado del generador. El estado se restablece al valor predeterminado cuando se inicia, por lo que las mismas secuencias de variables aleatorias se generan cada vez que se inicia MATLAB. Esto a veces puede ser una ventaja en situaciones donde nos gustaría obtener una muestra aleatoria específica, como se muestra en el siguiente ejemplo. Si usted llama a la función utilizando rand (‘state’, 0), entonces MATLAB restablece el generador a su estado inicial. Si desea especificar otro estado, entonces utilice la sintaxis de rand ('state', j) para establecer el generador en el j-estado. Usted puede obtener el estado actual utilizando la sentencia S = rand ('state'), donde S es un vector de 35 elementos. Para restablecer el estado a éste, utilice rand('state', S).

Page 2: Taller2 lab stats_matlab

Cabe señalar que los números aleatorios que se distribuyen uniformemente en un intervalo de A a B pueden ser generados por una simple transformación, como la siguiente: X=(b-a).U+a Ejemplo 2.1

2. Método de la transformada inversa El método de la transformada inversa puede ser usado para generar variables aleatorias de una distribución continua. Se utiliza el hecho de que la funcion acumulada distribución F es uniforme entre (0,1).

).(XFU =

Si U es una variable aleatoria uniforme (0,1), entonces se puede obtener la variable aleatoria deseada X de la siguiente relación:

).(1 UFX−=

Veamos primero un ejemplo de cómo utilizar el método de la transformada inversa cuando hablamos de la generación de variables aleatorias de la distribución exponencial El procedimiento general para el método de transformación inversa es el siguiente: PROCEDIMIENTO – Método de la transformada inversa (continua)

1. Deducir la expresión de la función de distribución inversa )(1 UFX−= .

2. Generar un número aleatorio uniforme U.

3. Obtener la X deseada de )(1 UFX−=

% Obtiene un vector de variables aleatorias uniformes en

(0,1). x = rand(1,1000); % Hacer un histograma. % Primero obtenemos el alto de las barras. [N,X]=hist(x,15); %Se usa la función bar para dibujar. bar(X,N,1,'w') title('HISTOGRAMA DE VARIABLES ALEATORIAS UNIFORMES') xlabel('X') ylabel('FRECUENCIA') % Genera 3 muestras aleatorias de tamaño 5. x=zeros(3,5); % almacenar for i=1:3 rand('state',i) % cambia el estado x(i,:)=rand(1,5); end

%Establecer un estado anterior. rand('state',2) xt = rand(1,5); %Compare x con xt

Page 3: Taller2 lab stats_matlab

Ejemplos: Generación de Variables aleatorias continúas Ejemplo 2.2 -Distribución exponencial El método de al transformada inversa puede ser usado para generar variables aleatorias de una distribución exponencial y sirve como un ejemplo de este procedimiento.

La función de distribución para una variable aleatoria exponencial con el parámetro λ esta dada por

Dejando:

Resolviendo x: (resuelva para x) ¿????

El siguiente código de MATLAB genera variables aleatorias exponenciales para un λ dado.

% Example 2.2

% Establecer los parámetros. lam = 2; n = 1000; % Genera las variables aleatorias. uni = rand(1,n); X = -log(uni)/lam;% . x=0:.1:5; % Esta es una función del Statistics Toolbox. y=exppdf(x,1/2); % Obtenemos la información del histograma. [N,h]=hist(X,10); % Cambiar el ancho de la barras para hacer que corresponda con la densidad %de probabilidad teórica -ver taller anterior, ecuación 1. N=N/(h(2)-h(1))/n; % Graficamos. bar(h,N,1,'w') hold on plot(x,y) hold off xlabel('X') ylabel('f(x) - Exponencial')

Page 4: Taller2 lab stats_matlab

Ejemplo 2.3 DISTRIBUCIÓN BETA La distribución beta es útil en simulaciones, ya que abarca un amplio rango de formas de

distribución, dependiendo de los valores de los parámetros α y β

Estas formas incluyen distribuciones sesgadas, uniformes y aproximadamente normales. En primer lugar, se describirá un método sencillo para la generación de variables aleatorias

beta con parámetros α y β , cuando ambos son números enteros [Rubinstein, 1981; Gentle,

1998]. Se sabe [David, 1981] que la estadística de orden K o de uniforme N (0,1) variables se

distribuye de acuerdo a una distribución beta con K parámetros y 1+−kn .Esto significa

que podemos generar variables aleatorias de distribución beta mediante el procedimiento siguiente. PROCEDIMIENTO - BETA variables aleatorias (INTEGER PARÁMETROS)

1. Generar 1++βα números aleatorios uniformes:

2. Deliver, que es el estadístico º orden El resultado se muestra en el gráfico izquierdo de la figura 4.6. Tenga en cuenta que esta densidad se ve aproximadamente en forma de campana. La densidad de beta de la derecha tiene los parámetros de Y vemos que esta curva tiene un baño en el centro con los modos en cada extremo. Se pide al lector para la construcción de esta parcela en los ejercicios. Para el siguiente laboratorio veremos un método para la generación de Variables aleatorias discretas.

close all % Hacer a = 3, b = 3 n=500; a=3; b=3; rvs = betarnd(a,b,1,n); % Ahora el histograma. [N,h]=hist(rvs,10); % Cambiar el ancho de las barras. N=N/(h(2)-h(1))/n; % Ahora obtenemos la densidad de probabilidad teórica. x = 0:.05:1; y = betapdf(x,a,b); plot(x,y) axis equal bar(h,N,1,'w') hold on plot(x,y,'k') hold off

Page 5: Taller2 lab stats_matlab

SIMULACIÓN

Suponga que el canal de comunicación tiene una capacidad fija de R bps y que soporta solamente una conexión abierta al tiempo. Se ha desarrollado un registro de los accesos de los usuarios al servidor por medio de un archivo de registro ubicado en la siguiente dirección: ftp://integratic.net/Lab_Stat_Matlab/log_ftp.xls Cada usuario que se conectó, solicitó un número de archivos que está dado por una distribución Poisson con lambda=2.5 archivos/sesión, y cada archivo es de un tamaño que puede ser estimado por medio de una distribución pseudo uniforme por tramos de las siguientes características: El archivo puede tener un tamaño inferior a 500 bytes o superior a 500 bytes con la misma probabilidad de 0.48 cada grupo. Los archivos mas pequeños tienen distribución uniforme entre 1 y 500 bytes y los mas grandes tienen distribución uniforme entre 500 y 100.000 bytes. Existe un último grupo de archivos, de tamaño mayores a 100.000 bytes, que ocurren con una probabilidad de 0.04 y que tienen una distribución uniforme entre 100.000 y 1.000.000 bytes. Cada uno de estos archivos son enviados a través del enlace y su tiempo de transmisión es igual a la longitud del archivo, dividida por la velocidad del enlace en bits/seg. Se debe realizar lo siguiente:

1. El ajuste de una curva de probabilidad a los tiempos entre conexiones de los usuarios al servidor de FTP, para ello utilice la herramienta fittool de Matlab. Cuidado, lo mas seguro es que no pueda ajustar una curva a todo el archivo, pues no son constantes los parámetros durante todo el día, es decir, no es lo mismo hacer el análisis a las 3 de la mañana que a las 3 de la tarde.

2. Realizar los generadores aleatorios para cada uno de los casos anteriores, tanto para el tiempo en el cual los usuarios se conectan al sistema (que se obtiene a partir del log de ftp), como para el número de archivos pedidos al servidor y el tamaño de cada archivo solicitado. En general, el tamaño de archivos solicitados será igual a la suma del número de archivos solicitados multiplicado por su tamaño.

3. Se debe realizar la codificación de la simulación en Matlab o cualquier otro programa

que desee, en la cual se modele el sistema como una cola de un servidor, con llegadas de usuarios con distribución genérica (no necesariamente exponencial, depende de lo

Page 6: Taller2 lab stats_matlab

obtenido en el tiempo 1) y tiempo de atención definitivamente no exponencial, pues depende del tamaño de los archivos solicitados por el usuario y de la velocidad del canal de comunicación.

4. Se debe analizar las siguientes variables aleatorias, el tamaño promedio de la cola, el

retardo promedio de los archivos solicitados en conjunto (es decir, desde que el usuario solicita todo el conjunto de archivos hasta que los recibe completamente) y la utilización promedio del canal. Para cada uno de ellos, se debe entregar claramente la definición de los estadísticos utilizados y el intervalo de confianza de los resultados con un nivel de significación del 5%. (esto último si en clase se ha visto el tema)

[Gentle, 1998]: Gentle, James E. 1998. Random Number Generation and Monte Carlo Methods, New York: Springer-Verlag.