0% encontró este documento útil (0 votos)
60 vistas

Lec 10 Comp

Este documento describe métodos para generar variables aleatorias con distribuciones no uniformes. Explica la diferencia entre variables aleatorias discretas y continuas, y da ejemplos de distribuciones comunes como la binomial, Poisson, exponencial y normal. Luego, detalla dos métodos para generar variables aleatorias continuas: el método de transformación inversa y el método de aceptación y rechazo. Finalmente, aplica estos métodos para generar variables aleatorias exponenciales y normales de manera específica.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
60 vistas

Lec 10 Comp

Este documento describe métodos para generar variables aleatorias con distribuciones no uniformes. Explica la diferencia entre variables aleatorias discretas y continuas, y da ejemplos de distribuciones comunes como la binomial, Poisson, exponencial y normal. Luego, detalla dos métodos para generar variables aleatorias continuas: el método de transformación inversa y el método de aceptación y rechazo. Finalmente, aplica estos métodos para generar variables aleatorias exponenciales y normales de manera específica.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

97

2.5 Generacin de variables aleatorias no-uniformes


Una variable aleatoria es una funcin que asume sus valores de acuerdo a los resultados de un experimento aleatorio. Es decir, un experimento donde existe incertidumbre acerca del resultado que va a ocurrir. Una variable aleatoria es discreta si su rango de valores es un conjunto finito o infinito enumerable. Existen una infinidad de variables aleatorias discretas, entre las mas conocidas estn: la Binomial, la geomtrica, la hipergeomtrica, la Poisson y la Binomial Negativa. Si la variable aleatoria discreta X tiene rango de valores RX entonces la funcin p(k)=Prob[X=k] donde xRX es llamada la funcin de probabilidad de X. Asimismo, la funcin F(t)=P[Xt]= P[ X = k ] es llamada la funcin de distribucin acumulativa de
k t

X Una variable aleatoria continua es aquella cuyo rango de valores es cualquier intervalo de la recta real, entre las ms conocidas estn: la uniforme, la exponencial, la gamma, la JiCuadrado, la Beta, la Normal, la t de Student, la Cauchy, la Weibull,etc. Si la variable aleatoria continua X tiene rango de valores RX entonces existe una funcin no-negativa
t

f(x)

tal

que

P(a<X<b)= f ( x)dx .
a

Asimismo.

la

funcin

F(t)=P[Xt]=

f ( x)dx

es llamada la funcin de distribucin acumulativa de X.

2.5.1 Generacin de variables aleatorias continuas.

Existen varios mtodos generales y varios mtodos particulares para generar valores de una variable aleatoria con una distribucin dada. Muchos de ellos basados en relaciones que existen entre diversas variables aleatorias. Solo veremos el mtodo de la transformacin inversa y el mtodo de aceptacin y rechazo. Por otro lado, solo discutiremos la generacin de la distribucin exponencial y normal.
2.5.1.1 Mtodo de la Transformacion Inversa

Si X es una funcin de densidad continua con funcin de distribucin acumulativa F(x) entonces Y=F(X) se distribuye uniformemente en el intervalo (0,1) En efecto, la distribucin acumulativa de Y est dado por G(y)=P[Yy]=P[F(X)y]=P[XF-(y)]=F(F-(y))=y para 0y1, la cual corresponde a una acumulativa de una U(0,1). En consecuencia para generar un valor de la variable aleatoria X con acumulada F(X) se sigue los siguientes pasos: 1. Generar U= U(0,1) usando la funcin runif en R o rand en Matlab. 2. Tomar x=F-1(U)

98
Ejemplo (Generacin de una variable aleatoria Exponencial) Sea X una variable aleatoria exponencial con parmetro >0, entonces su funcin de densidad es f(x)=e-x para x>0 y su funcin de distribucin acumulativa es F(x)=1- e-x para x>0. Luego, U=1- e-x

En consecuencia, Log(U-1)= -x X=

log(U 1)

. Una manera de acortar lo clculos es usar el hecho que U-1 tambin se

distribuye uniformemente en (0,1). As, x=-log(U)/ sera la exponencial generada. La siguiente funcin exporand en R genera m valores exponenciales con exporand=function(lambda,n) {if (lambda<=0){ stop(lambda debe ser positivo)} else {x=-log(runif(n))/lambda} x} > #generando 10 valores exponenciales com lambda=3.5 >exporand(3.5,10) [1] 0.2748450 0.3956703 0.6047322 0.4420424 0.3177109 0.1501418 0.7154897 [8] 0.1226956 0.3752534 0.2857398 > #haciendo um histograma de 1000 exponenciales com lambda=.5 >hist(exporand(0.5,1000),col=3) > La funcin rexp de R genera valores de una variable aleatoria exponencial.

99

Histogram of exporand(0.5, 1000)


400 Frequency 0 0 100 200 300

10 exporand(0.5, 1000)

15

En Matlab. function e = exporand(lambda,m,n); % % % % % E=EXPORAND(U,m,n) genera una matriz m por n con valores de una distribucion exponencial E = EXOPRAND(lambda) genera un solo valor, un vector o una matriz de valores exponenciales dependiendo de las dimensiones del parametro lambda

%Cotejando que la funcion tenga los argumentos correctos if nargin < 1, error('Se requiere al menos un argumento de entrada.'); end if nargin == 1 [errorcode rows columns] = rndcheck(1,1,lambda);

100
end if nargin == 2 [errorcode rows columns] = rndcheck(2,1,lambda,m); end if nargin == 3 [errorcode rows columns] = rndcheck(3,1,lambda,m,n); end if errorcode > 0 error('El tamao de la informacion es inconsistente.'); end %Initializar la matriz e como cero. e = zeros(rows, columns); % Generando los valores usando la transformacion inversa u = rand(rows,columns); e = - log(u)./lambda; % Retornando NaN si el lambda no es positivo. if any(any(lambda <= 0)); tmp = NaN; if prod(size(lambda) == 1) r = tmp(ones(rows,columns)); else k = find(lambda <= 0); r(k) = tmp(ones(size(k))); end end

A continuacin se presentan algunos ejemplos del uso de la funcin. exporand(2) ans = 0.2828

exporand(2.5,4,5) ans = 0.1996 0.3181 1.7414 1.3371 1.6453 0.1849 1.2504 0.3829 0.1962 0.6641

101 0.3972 1.4420 0.1524 0.1987 0.2131 0.2213 0.4650 0.9507 1.6601 1.1418 X=[4 6 2.5 8 9 1.5]' X= 4.0000 6.0000 2.5000 8.0000 9.0000 1.5000

y=exporand(X) y= 0.2502 0.0766 0.1327 0.0459 0.2751 0.5259


2.5.1.2 Mtodo de Aceptacin y Rechazo (Von Neuman, 1951)

La idea aqu es que se tiene una variable aleatoria Y con funcin de densidad g(y), la cual puede ser generada fcilmente. Se desea generar otra variable X con funcin de densidad f(x), para ello se genera un valor de Y con densidad g(y) y se toma x=Y con probabilidad proporcional a f(y)/g(y). Esto es, P[X=y]=k f(y)/g(y), donde k es la constante de proporcionalidad. Si c es una constante tal que f(y)/g(y)c para todo y, entonces el siguiente seria el algoritmo de aceptacin y rechazo para generar una variable aleatoria X con funcin de densidad f(x). Paso 1: Generar Y con densidad g Paso 2: Generar una variable aleatoria uniforme U(0,1) Paso 3: Si Uf(Y)/cg(Y) entonces X=Y de lo contrario volver al paso 1. Mientras ms cerca se encuentre f de g ms rpidamente se obtendr la cantidad deseada de valores aleatorios de X. Usualmente se toma la densidad uniforme como la densidad g(y) y en ese caso el mtodo de aceptacin y rechazo es llamado hit and miss.

102
Ejemplo. Usar el mtodo de aceptacin y rechazo para generar valores de una variable aleatoria con funcin de densidad

f(x)=20x(1-x)3 ,

0<x<1

Solucin: Tomaremos como g a la densidad uniforme, esto es g(y)=1, 0<y<1. As que lo hay que determinar es la constante c tal que f(y)c para todo 0<y<1. Derivando f(x) se obtiene: f(x)=20(1-x)3-60x(1-x)2=20(1-x)2[1-x-3x]= 20(1-x)2[1-4x] f(x)=0 implica x=1 o x=1/4. Claramente, f(1/4)=5(3/4)3=135/64 es el mximo de f en (0,1). En consecuencia, f(x)135/64 para todo 0 x 1 .Luego, para generar valores de la variable con densidad anterior se siguen los siguientes pasos: 1. Generar valores de una variable aleatoria U1. 2. Generar valores de una variable aleatoria U2. 3. Si U220U1(1-U1)3/(135/64)=(256/27) U1(1-U1)3 entonces X=U1, de lo contrario volver al paso 1.

La siguiente funcion en R, genera valores aleatorios de la densidad del ejemplo anterior Beta24=function(n) { X=NULL count=1 while(count<=n) {U1=runif(1) U2=runif(1) if(U2<=(256/27)*U1*(1-U1)^3) {X=c(X,U1) count=count+1} } X } El siguiente script en MATLAB genera valores aleatorios de la densidad del ejemplo % Generando un vector de valores para el ejemplo 1 usando % el metodo de aceptacion y rechazo rand1 = rand(10,1) rand2 = rand(10,1) k=find(rand2<=(256/27)*rand1.*(1-rand1).^3) b24=rand1(k)
2.5.1.3 Generacin de valores de una distribucin normal La distribucin Normal o Gaussiana es la ms conocida de las distribuciones y la ms aplicada en estadstica. Tiene dos parmetros y y su funcin de densidad est dada por

103
( x ) 2 2 2

f ( x) =

e 2

donde - < x < , - < < y >0. Cuando =0 y =1 se obtiene la distribucin normal estndar. Existen varios mtodos de generar valores de una distribucin normal: a) Aplicando el Teorema del Limite central a una suma de uniformes.

U i N (0,1 / 12)
i =1

b) El Mtodo Polar (o Transformacin de Box-Miller , 1958) c) El Mtodo Polar de Marsaglia (1962) d) El Mtodo de Mezclas (kinderman y Ramage, 1976) e) El Mtodo de Rechazo de Forsythe (1972) A continuacin se aplicar el mtodo de aceptacin y rechazo para generar una normal. Antes que nada hay que notar que si Z es N(0,1), entonces X=| Z | tiene funcin de densidad

2 x2 f ( x) = e 2

donde x>0.. Podemos considerar la funcin de densidad de una exponencial con =1, esto es g(x)=e-x para x>0. Luego,

f ( x) = 2 / e x x / 2 g ( x)
2

cuyo mximo ocurrir cuando x-x2/2 sea mximo y eso ocurre cuando x=1. En consecuencia c=max(f(x)/g(x))=

2e / .
2

Haciendo las sustituciones adecuadas se sigue que,


( x 1) f ( x) 1 / 2+ x x / 2 =e =e 2 cg ( x)
2

El procedimiento anterior generar X=|Z|. Para llegar a Z simplemente se le asigna signo positivo o negativo a X dependiendo de si una variable aleatoria uniforme U2 es o no mayor que .

104

El siguiente sera pues el algoritmo para generar una normal Paso 1. Generar Y una exponencial con parmetro 1. Paso 2. Generar dos variables aleatorias uniformes U1 y U2. Paso 3 Si U1 exp(-(Y-1)2/2) y U2>1/2 hacer Z=Y. Si U1 exp(-(Y-1)2/2) y U21/2 hacer Z=-Y. Hacer Z=-Y . En otro caso volver al paso 1. La siguiente funcin en R genera valores de una distribucin normal y hace su histograma rnormar=function(n) {norm1=NULL count=1 while(count<=n) {y=rexp(1) U1=runif(1) U2=runif(1) if(U1<=exp(-.5*(y-1)^2) && U2<=.5) { norm1=c(norm1,-y) count=count+1 } if(U1<=exp(-.5*(y-1)^2) && U2>.5) { norm1=c(norm1,y) count=count+1} } norm1 } > rnormar(10) [1] 0.44065050 -2.64843957 -1.92816070 0.26199993 -0.94323696 -0.90815978 [7] -0.52152141 -0.46480357 0.02584946 -0.28069635 > hist(rnormar(1000)) > hist(rnormar(1000),col=4) >

105

Histogram of rnormar(1000)

Frequency

50

100

150

-3

-2

-1

0 rnormar(1000)

En R, hay la funcin rnorm , que genera valores de una normal con una media y una desviacin estndar dadas.
En Matlab % Generando un vector de valores de una normal usando % el mtodo de aceptacion y rechazo y=exporand(1,10000,1); rand1 = rand(10000,1); rand2 = rand(10000,1); k1=find(rand1<=exp(-.5.*(y-1).^2)& rand2<=.5); k2=find(rand1<=exp(-.5.*(y-1).^2)& rand2>.5); nor1=-y(k1); nor2=y(k2); nor=[nor1' nor2']' hist(nor)

106 MATLAB tiene una funcin RANDN que genera valores de una normal estndar
2.5.2 Generacin de variables aleatorias discretas. Nuevamente aqui veremos solamente el mtodo de la transformacin inversa y el mtodo de aceptacin y rechazo. 2.5.2.1 Mtodo de la transformacin Inversa Hay que recordar que si X es una variable aleatoria discreta con valores x1, x2, Entonces su funcin de probabilidad P(x=xj)=pj para j=1,2,., satisface

pj=F(xj)-F(xj-1) donde F representa la acumulada de X. Como la acumulada se puede considerar como una variable aleatoria U uniforme en (0,1) se tendra que X=xj si F(xj-1) U <F(xj) En consecuencia el algoritmo quedara como sigue: Paso 1. Generar una uniforme U Paso 2. Hacer Si U<p1 hacer X=x1 y parar. Paso 3. Si U<p1+p2 hacer X=x2 y parar. Paso 4. Si U <p1+p2+p3 hacer X=x3 y parar y as sucesivamente.
2.5.2.2 Generacin de variables aleatorias binomiales Recordar que una variable aleatoria binomial con parmetros n y p tiene funcin de probabilidad

n P ( X = k ) = p k (1 p ) nk k
para k=0,1,2, .n Desarrollando la combinacin y trabajando algebraicamente la razn P(X=k+1)/P(X=k), se puede establecer que

P ( X = k + 1) =

nk p P( X = k ) k +11 p

Aplicando el mtodo de la transformacin Inversa y la identidad anterior se obtiene el siguiente procedimiento para generar una Binomial, B(n,p) Paso1: Generar un nmero aleatorio U Paso 2 Hacer c=p/(1-p) , k=0, prob=(1-p)n y F=prob Paso 3. Si U<F, hacer X=k y parar Paso 4. Hacer Prob=[c(n-k)/(k+1)]Prob, F=F+prob, k=k+1 Paso 5. Ir al paso 3.

107

A siguiente funcin escrita en R genera valores de una binomial > ranbin function(N,p,n) { X=rep(0,N) for(count in 1:N) X[count]=ranbin1(p,n) X } > ranbin1 function(p,n) { c1=p/(1-p) k=0 prob=(1-p)^n F=prob U=runif(1) while(U>=F) {prob=(c1*(n-k)/(k+1))*prob F=F+prob #print(F) k=k+1 } X=k X } > a=rbinom(10,6,.2) >a [1] 1 1 1 1 0 3 2 2 1 1 > hist(rbinom(10000,6,.2),col=3) >

108

Histogram of rbinom(10000, 6, 0.2)


4000 Frequency 0 0 1000 2000 3000

rbinom(10000, 6, 0.2)

En R, hay la funcin rbinom que genera valores de una variable aleatoria binomial.
2.5.2.3. Mtodo de Aceptacin y Rechazo

Supongamos que tenemos una variable discreta Y fcil de generar y que tiene una funcin de probabilidad qj=P[Y=yj] . Consideremos otra variable aleatoria X con funcin de probabilidad pj=P]X=j] la cual deseamos generar. La idea aqui es usar Y para generar X, parar ello hay que encontrar una constante c tal que pj/qjc para todo j y luego aplicar el siguiente procedimiento: Paso 1. Generar la variable aleatoria Y Paso 2. Generar una variable aleatoria Uniforme U Paso 3. Si U<pj/cqj hacer X=Y y parar. De lo contrario ir al paso 1.

También podría gustarte