You are on page 1of 11

Métodos de generación de números aleatorios

Método de la transformada inversa

1) Marco Teórico

El método de transformada inversa, es el método más utilizado en la obtención de variables


aleatorias para experimentos de simulación.

Este método se utiliza cuando se desea simular variables de tipo continuo. El método utiliza la
distribución acumulada F(x) de la distribución de probabilidad que se va a simular mediante
integración. Ya que el rango de F(x) se encuentra en el intervalo 0 a 1, puede generarse un número
aleatorio ri para determinar el valor de la variable aleatoria cuya distribución acumulada es igual,
precisamente, a ri. La dificultad de este método radica en que algunas veces es complicado
encontrar la transformada inversa.

METODOLOGÍA

 Conocer la distribución de probabilidad f(x) de la variable aleatoria (x)


 Integrar f(x)
 Evaluar la constante de integración
 Igualar f(x) a ri

Siendo ri= valor pseudoaleatorio entre 0 y 1

 Despejar xi

Ejemplo 1.-
3
0≤𝑥≤1
4
15 9 5
𝑓(𝑥) = − 𝑥 1≤ 𝑥≤
8 8 3
0 𝑒. 𝑜. 𝑐
{

Nota: Si 𝐹(𝑥) es función de probabilidad entonces debe cumplir con:

i) 𝐹(𝑥) ≥ 0
𝑥

∫ 𝐹(𝑥) 𝑑𝑥 = 0
−∞

ii) ∫ 𝐹(𝑥) 𝑑𝑥 = 1
𝑥 𝑥
3
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ 𝑑𝑥 = 0
4
−∞ 0

3 3
𝑥| = 𝑥
4 4

𝑏
iii) P(a≤ x≤ b) = ∫𝑎 𝐹(𝑥) 𝑑𝑥
0 1 𝑥
3 15 9 9 2 15 9
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ 𝑑𝑥 + ∫ − 𝑥 𝑑𝑥 = 𝑥 − 𝑥−
4 8 8 16 8 16
−∞ 0 1

iv)
5
0 1 3
3 15 9 3 1
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ 𝑑𝑥 + ∫ − 𝑥 𝑑𝑥 = 0 + + = 1
4 8 8 4 4
−∞ 0 1

3
𝑥 0≤𝑥≤1
4

9 2 15 9 5
− 𝑥 + 𝑥− 1≤ 𝑥≤
𝑓(𝑥) = 16 8 16 3

0 𝑥≤0
5
1 𝑥≥
{ 3

3 4
𝑥 = 𝑅1 → 𝑥 = 𝑅1
4 3
Prueba del ejemplo 1 en R
> n=100
> lambda=2
> x<- c()
> Fx<- c()
> for(j in 1:n){
+ R=runif(1,min=0,max=1)
+ if(R>=0 && R<0.75){
+ Y=4/3*R
+ }else{
+ if(R>=0.75 && R<=1){
+ Y=1/3*(5-(4*sqrt(1-R)))
+}
+}
+ Fx[j]<-R
+ x[j]<-Y
+}
> Fx
[1] 0.22399285 0.73420437 0.38396422 0.92306162 0.40631944 0.83731030
[7] 0.52202451 0.66566900 0.61932323 0.08380087 0.10909339 0.31258911
[13] 0.82275058 0.49931171 0.87188749 0.29008473 0.90023499 0.70150524
[19] 0.17244812 0.43510347 0.76271403 0.99056672 0.72850155 0.01730019
[25] 0.34156322 0.44071113 0.36013448 0.66208248 0.31698007 0.72990547
[31] 0.23471697 0.97613250 0.15417552 0.74945352 0.65149924 0.40555711
[37] 0.39654699 0.01945761 0.33185208 0.23147731 0.32969170 0.20133965
[43] 0.78421044 0.33688616 0.25497972 0.35620550 0.53407447 0.50542758
[49] 0.52392089 0.87484516 0.15642962 0.44550169 0.04444295 0.94034841
[55] 0.40223619 0.31870851 0.48941626 0.07782948 0.14968662 0.38361559
[61] 0.38041538 0.17259200 0.10091600 0.17902898 0.44686691 0.70512808
[67] 0.67823583 0.71398215 0.67860089 0.63658434 0.72385283 0.98699714
[73] 0.70321369 0.34452486 0.28521542 0.54247612 0.59727122 0.31587597
[79] 0.47352825 0.01211604 0.41145221 0.93402361 0.01563249 0.22558491
[85] 0.66573900 0.31459694 0.35426412 0.06301552 0.66751991 0.59856188
[91] 0.92523439 0.47786926 0.35850852 0.62820398 0.08203566 0.96577753
[97] 0.21840150 0.77581238 0.69000047 0.61903870
>x
[1] 0.29865713 0.97893916 0.51195230 1.29682976 0.54175926 1.12886918
[7] 0.69603268 0.88755867 0.82576431 0.11173450 0.14545786 0.41678548
[13] 1.10532000 0.66574894 1.18942922 0.38677965 1.24552533 0.93534032
[19] 0.22993082 0.58013796 1.01717324 1.53716655 0.97133541 0.02306692
[25] 0.45541763 0.58761483 0.48017931 0.88277664 0.42264010 0.97320729
[31] 0.31295596 1.46067853 0.20556735 0.99927136 0.86866566 0.54074281
[37] 0.52872932 0.02594347 0.44246944 0.30863641 0.43958893 0.26845287
[43] 1.04729126 0.44918155 0.33997296 0.47494066 0.71209929 0.67390343
[49] 0.69856119 1.19497026 0.20857282 0.59400226 0.05925726 1.34101766
[55] 0.53631492 0.42494468 0.65255502 0.10377264 0.19958216 0.51148745
[61] 0.50722051 0.23012266 0.13455466 0.23870531 0.59582254 0.94017077
[67] 0.90431444 0.95197619 0.90480118 0.84877912 0.96513710 1.51462657
[73] 0.93761825 0.45936648 0.38028723 0.72330149 0.79636163 0.42116796
[79] 0.63137100 0.01615473 0.54860294 1.32418841 0.02084332 0.30077987
[85] 0.88765200 0.41946258 0.47235216 0.08402069 0.89002655 0.79808251
[91] 1.30208932 0.63715902 0.47801135 0.83760530 0.10938088 1.42000911
[97] 0.29120200 1.03535394 0.92000062 0.82538494
> plot(x,Fx,cex=1,type="p",pch=1,xlab="x",ylab="Fx",col="black",axes=FALSE)
> plot(x,Fx,cex=1,type="h",pch=1,xlab="x",ylab="Fx",col="black")
> par(new=TRUE)
> plot(x,Fx,cex=1,type="p",pch=1,xlab="x",ylab="Fx",col="black",axes=FALSE)
>
Ejemplo 2.-
1
4
1≤𝑥≤2
5
𝑓(𝑥) = −𝑥 + 4 0≤ 𝑥≤1
0 𝑒. 𝑜. 𝑐
{

Nota: Si 𝐹(𝑥) es función de probabilidad entonces debe cumplir con:

i) 𝐹(𝑥) ≥ 0
𝑥

∫ 𝐹(𝑥) 𝑑𝑥 = 0
−∞

ii) ∫ 𝐹(𝑥) 𝑑𝑥 = 1
𝑥 𝑥
5
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ − 𝑥 𝑑𝑥 = 0
4
−∞ 1

5 𝑥2
𝑥- 0≤ 𝑥≤1
4 4

𝑏
iii) P(a≤ x≤ b) = ∫𝑎 𝐹(𝑥) 𝑑𝑥

0 𝑥 1
1 5 1 5
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ 𝑑𝑥 + ∫ − 𝑥 𝑑𝑥 = − 𝑥 2 − 𝑥 0 ≤ 𝑥 ≤ 1
4 4 2 4
−∞ 1 0

iv)
0 2 1
1 5 1 3
∫ 𝐹(𝑥) 𝑑𝑥 + ∫ 𝑑𝑥 + ∫ −𝑥 + 𝑑𝑥 = 0 + + = 1
4 4 4 4
−∞ 1 0
5 𝑥2
𝑅1 = 𝑥−
4 2
5−√25−32𝑅1 3
𝑥= 0<R1<4
4

1 1
𝑅2 = − 𝑥
2 4
3
x=4𝑅2 – 2 4<R2<1

Prueba del ejemplo 2 en R


> #Ejemplo 2

> n=100

> lambda=2

> x<- c()

> Fx<- c()

> for(j in 1:n){

+ R=runif(1,min=0,max=1)

+ if(R>=0.75 && R<=1){


+ Y=4*R -2

+ }else{

+ if(R>=0 && R<0.75){

+ Y=1/4*(5-(sqrt(25-32*R)))

+}

+}

+ Fx[j]<-R

+ x[j]<-Y

+}

> Fx

[1] 0.17297256 0.47338760 0.55372738 0.83487123 0.09562603 0.42262853

[7] 0.83056203 0.76449197 0.61387344 0.16167224 0.39770237 0.66330302

[13] 0.10251942 0.39670085 0.85075922 0.04098867 0.41749322 0.15727800

[19] 0.96581793 0.68211799 0.76086050 0.69917564 0.83588256 0.05259179

[25] 0.12126105 0.09861790 0.17531985 0.31622201 0.05641082 0.60020092

[31] 0.96146059 0.73241019 0.21426345 0.96624987 0.57340631 0.64621516

[37] 0.68762581 0.11382013 0.88355052 0.21750272 0.74445883 0.43553459

[43] 0.59257359 0.55792673 0.44967489 0.85023831 0.91036622 0.38252285

[49] 0.65712974 0.36862924 0.81904357 0.99031223 0.34939407 0.78846092

[55] 0.44906452 0.99516029 0.13941297 0.64309493 0.84770702 0.34635486

[61] 0.16527116 0.12984949 0.10100083 0.89897989 0.99129388 0.55815931

[67] 0.27430234 0.46535463 0.51244199 0.82868672 0.09669340 0.43109113

[73] 0.26715292 0.14914821 0.25711016 0.17008709 0.25963645 0.53046032

[79] 0.50740666 0.87749247 0.78642007 0.23224448 0.86701226 0.71803801

[85] 0.02251862 0.20818835 0.97355620 0.50554374 0.37781645 0.72099303

[91] 0.55083936 0.38981045 0.43725757 0.68609435 0.43597509 0.17982420


[97] 0.86293487 0.11196761 0.04676917 0.40028384

>x

[1] 0.14702453 0.46531867 0.57542958 1.33948493 0.07899704 0.40309804

[7] 1.32224813 1.05796790 0.67142147 0.13682638 0.37416026 0.76431084

[13] 0.08489865 0.37301751 1.40303688 0.03323270 0.39705595 0.13288586

[19] 1.86327171 0.80473152 1.04344199 0.84484729 1.34353024 0.04280639

[25] 0.10109709 0.08155480 0.14915474 0.28560590 0.04597410 0.64825408

[31] 1.84584237 0.93746260 0.18511827 1.86499946 0.60526178 0.73031771

[37] 0.81727793 0.09463869 1.53420209 0.18816453 0.97873935 0.41847681

[43] 0.63570950 0.58168380 0.43565964 1.40095323 1.64146488 0.35699703

[49] 0.75176259 0.34157195 1.27617430 1.96124891 0.32063900 1.15384366

[55] 0.43491046 1.98064116 0.11700659 0.72434789 1.39082806 0.31737453

[61] 0.14006411 0.10859691 0.08359598 1.59591958 1.96517552 0.58203190

[67] 0.24307631 0.45514735 0.51677696 1.31474688 0.07990889 0.41315011

[73] 0.23600091 0.12563192 0.22614470 0.14441155 0.22861511 0.54177733

[79] 0.50994144 1.50996987 1.14568027 0.20213978 1.46804903 0.89443849

[85] 0.01814662 0.17942851 1.89422481 0.50742845 0.35174218 0.90284883

[91] 0.57116181 0.36519545 0.42055148 0.81375317 0.41900673 0.15325409

[97] 1.45173947 0.09303640 0.03799272 0.37711265

> plot(x,Fx,cex=1,type="p",pch=1,xlab="x",ylab="Fx",col="black")

> plot(x,Fx,cex=1,type="h",pch=1,xlab="x",ylab="Fx",col="black")

> par(new=TRUE)

> plot(x,Fx,cex=1,type="p",pch=1,xlab="x",ylab="Fx",col="black",axes=FALSE)

>

You might also like