Método de la Transformada Inversa

El método de la transformada inversa es una técnica utilizada en simulación para generar números aleatorios con una distribución específica. Se basa en la propiedad de que si una variable aleatoria \(X\) tiene una función de distribución acumulativa \(F(x)\), entonces su inversa \(F^{-1}(u)\), aplicada a un número aleatorio \(u\) uniforme en \([0,1]\), genera valores de \(X\) con la distribución deseada.

El proceso consiste en generar un número aleatorio \(u\) en \([0,1]\), calcular \(x = F^{-1}(u)\) y usar ese valor como una muestra de la distribución objetivo. Es un método eficiente cuando la función inversa es fácil de calcular, como en las distribuciones exponencial y geométrica.

*Ejemplo de generar variables aleatorias de una exponencial con parametro \(\beta = 3\)

a <- 79 
c <- 124 
m <- 2513
X_n <- 41 # semilla
random.number<-numeric(100) # vector numérico de longitud 50
 for (i in 1:100)
   {X_n<-(a*X_n+c)%%m
   random.number[i]<-X_n/m # números en el intervalo [0,1]
   }
 random.number
##   [1] 0.338241146 0.770393951 0.910465579 0.976124154 0.163151612 0.938320732
##   [7] 0.176681257 0.007162754 0.615200955 0.650218862 0.416633506 0.963390370
##  [13] 0.157182650 0.466772782 0.924393156 0.076402706 0.085157183 0.776760844
##  [19] 0.413450060 0.711898130 0.289295663 0.903700756 0.441703144 0.943891763
##  [25] 0.616792678 0.775964982 0.350577000 0.744926383 0.898527656 0.033028253
##  [31] 0.658575408 0.076800637 0.116593713 0.260246717 0.608834063 0.147234381
##  [37] 0.680859530 0.837246319 0.191802626 0.201750895 0.987664146 0.074810983
##  [43] 0.959411062 0.842817350 0.631914047 0.970553124 0.723040191 0.169518504
##  [49] 0.441305213 0.912455233 0.133306805 0.580580979 0.915240748 0.353362515
##  [55] 0.964982093 0.282928770 0.400716275 0.705929168 0.817747712 0.651412654
##  [61] 0.510943096 0.413847990 0.743334660 0.772781536 0.099084759 0.877039395
##  [67] 0.335455631 0.550338241 0.526064465 0.608436132 0.115797851 0.197373657
##  [73] 0.641862316 0.756466375 0.810187027 0.054118583 0.324711500 0.701551930
##  [79] 0.471945881 0.333068046 0.361719061 0.625149224 0.436132113 0.503780342
##  [85] 0.847990450 0.040588938 0.255869479 0.263032232 0.828889773 0.531635495
##  [91] 0.048547553 0.884600080 0.932749702 0.736569837 0.238360525 0.879824910
##  [97] 0.555511341 0.934739355 0.893752487 0.655789893
# generando una variable exponencial con beta = 3
x <- -3*log(1-random.number)
round(x,1) # redondeando a una cifra decimal
##   [1]  1.2  4.4  7.2 11.2  0.5  8.4  0.6  0.0  2.9  3.2  1.6  9.9  0.5  1.9  7.7
##  [16]  0.2  0.3  4.5  1.6  3.7  1.0  7.0  1.7  8.6  2.9  4.5  1.3  4.1  6.9  0.1
##  [31]  3.2  0.2  0.4  0.9  2.8  0.5  3.4  5.4  0.6  0.7 13.2  0.2  9.6  5.6  3.0
##  [46] 10.6  3.9  0.6  1.7  7.3  0.4  2.6  7.4  1.3 10.1  1.0  1.5  3.7  5.1  3.2
##  [61]  2.1  1.6  4.1  4.4  0.3  6.3  1.2  2.4  2.2  2.8  0.4  0.7  3.1  4.2  5.0
##  [76]  0.2  1.2  3.6  1.9  1.2  1.3  2.9  1.7  2.1  5.7  0.1  0.9  0.9  5.3  2.3
##  [91]  0.1  6.5  8.1  4.0  0.8  6.4  2.4  8.2  6.7  3.2
data.frame(1:length(random.number),random.number,round(x,1))
##     X1.length.random.number. random.number round.x..1.
## 1                          1   0.338241146         1.2
## 2                          2   0.770393951         4.4
## 3                          3   0.910465579         7.2
## 4                          4   0.976124154        11.2
## 5                          5   0.163151612         0.5
## 6                          6   0.938320732         8.4
## 7                          7   0.176681257         0.6
## 8                          8   0.007162754         0.0
## 9                          9   0.615200955         2.9
## 10                        10   0.650218862         3.2
## 11                        11   0.416633506         1.6
## 12                        12   0.963390370         9.9
## 13                        13   0.157182650         0.5
## 14                        14   0.466772782         1.9
## 15                        15   0.924393156         7.7
## 16                        16   0.076402706         0.2
## 17                        17   0.085157183         0.3
## 18                        18   0.776760844         4.5
## 19                        19   0.413450060         1.6
## 20                        20   0.711898130         3.7
## 21                        21   0.289295663         1.0
## 22                        22   0.903700756         7.0
## 23                        23   0.441703144         1.7
## 24                        24   0.943891763         8.6
## 25                        25   0.616792678         2.9
## 26                        26   0.775964982         4.5
## 27                        27   0.350577000         1.3
## 28                        28   0.744926383         4.1
## 29                        29   0.898527656         6.9
## 30                        30   0.033028253         0.1
## 31                        31   0.658575408         3.2
## 32                        32   0.076800637         0.2
## 33                        33   0.116593713         0.4
## 34                        34   0.260246717         0.9
## 35                        35   0.608834063         2.8
## 36                        36   0.147234381         0.5
## 37                        37   0.680859530         3.4
## 38                        38   0.837246319         5.4
## 39                        39   0.191802626         0.6
## 40                        40   0.201750895         0.7
## 41                        41   0.987664146        13.2
## 42                        42   0.074810983         0.2
## 43                        43   0.959411062         9.6
## 44                        44   0.842817350         5.6
## 45                        45   0.631914047         3.0
## 46                        46   0.970553124        10.6
## 47                        47   0.723040191         3.9
## 48                        48   0.169518504         0.6
## 49                        49   0.441305213         1.7
## 50                        50   0.912455233         7.3
## 51                        51   0.133306805         0.4
## 52                        52   0.580580979         2.6
## 53                        53   0.915240748         7.4
## 54                        54   0.353362515         1.3
## 55                        55   0.964982093        10.1
## 56                        56   0.282928770         1.0
## 57                        57   0.400716275         1.5
## 58                        58   0.705929168         3.7
## 59                        59   0.817747712         5.1
## 60                        60   0.651412654         3.2
## 61                        61   0.510943096         2.1
## 62                        62   0.413847990         1.6
## 63                        63   0.743334660         4.1
## 64                        64   0.772781536         4.4
## 65                        65   0.099084759         0.3
## 66                        66   0.877039395         6.3
## 67                        67   0.335455631         1.2
## 68                        68   0.550338241         2.4
## 69                        69   0.526064465         2.2
## 70                        70   0.608436132         2.8
## 71                        71   0.115797851         0.4
## 72                        72   0.197373657         0.7
## 73                        73   0.641862316         3.1
## 74                        74   0.756466375         4.2
## 75                        75   0.810187027         5.0
## 76                        76   0.054118583         0.2
## 77                        77   0.324711500         1.2
## 78                        78   0.701551930         3.6
## 79                        79   0.471945881         1.9
## 80                        80   0.333068046         1.2
## 81                        81   0.361719061         1.3
## 82                        82   0.625149224         2.9
## 83                        83   0.436132113         1.7
## 84                        84   0.503780342         2.1
## 85                        85   0.847990450         5.7
## 86                        86   0.040588938         0.1
## 87                        87   0.255869479         0.9
## 88                        88   0.263032232         0.9
## 89                        89   0.828889773         5.3
## 90                        90   0.531635495         2.3
## 91                        91   0.048547553         0.1
## 92                        92   0.884600080         6.5
## 93                        93   0.932749702         8.1
## 94                        94   0.736569837         4.0
## 95                        95   0.238360525         0.8
## 96                        96   0.879824910         6.4
## 97                        97   0.555511341         2.4
## 98                        98   0.934739355         8.2
## 99                        99   0.893752487         6.7
## 100                      100   0.655789893         3.2
hist(x, breaks = 20, probability = TRUE, col = "lightpink", ylim=c(0,0.35),  main = "Distribución Exponencial (beta = 3)",     xlab = "Valor de X")

# Añadimos la función de densidad teórica de la distribución exponencial
curve(dexp(x,rate=1/3), col = "yellow", lwd = 2, add = TRUE)

Simulación de variables aleatorias Uniformes en R.

1.Generando variable aleatoria informe

# Generar 100 variables aleatorias uniformes entre 0 y 1
uniform_random_01 <- runif(100, min = 0, max = 1)
uniform_random_01
##   [1] 0.411090524 0.716858567 0.673793200 0.790032782 0.774037173 0.967887084
##   [7] 0.416735018 0.030490708 0.746795812 0.919901791 0.418744624 0.323689869
##  [13] 0.813898906 0.329681759 0.957547695 0.673844186 0.786295831 0.207836656
##  [19] 0.292012901 0.435310067 0.660408417 0.566926724 0.541090739 0.284093526
##  [25] 0.462281196 0.375075506 0.189348218 0.161747172 0.526822596 0.002431092
##  [31] 0.497781775 0.141934952 0.049002393 0.358870486 0.994573358 0.320841585
##  [37] 0.881738868 0.865116175 0.300969329 0.728825764 0.349247354 0.405259716
##  [43] 0.229188720 0.885090446 0.338339652 0.543984680 0.921016167 0.413329919
##  [49] 0.240863228 0.606932976 0.795068395 0.651498745 0.154650101 0.247860978
##  [55] 0.667008843 0.528206338 0.398118621 0.804533333 0.277803413 0.996459530
##  [61] 0.688382267 0.869250552 0.393014275 0.027998671 0.291557823 0.707158310
##  [67] 0.113440041 0.019775778 0.494806127 0.472366604 0.870384662 0.401120205
##  [73] 0.591699687 0.612346425 0.235914873 0.160180548 0.351955396 0.735969625
##  [79] 0.981163172 0.085214733 0.853935956 0.010280478 0.787784400 0.385497905
##  [85] 0.457541786 0.747541424 0.459070887 0.988977553 0.076227236 0.140164085
##  [91] 0.523484419 0.696526261 0.128698530 0.115511683 0.853585778 0.312240235
##  [97] 0.491621293 0.566554398 0.794931323 0.382497992

2.Generando una variable aleatoria de una distribución normal

# Generar 100 variables normales con media 30 y desviación estándar 3.5
set.seed(222)
normal_random <- rnorm(100, mean = 30, sd = 3.5)
normal_random
##   [1] 35.20715 29.99338 34.83357 28.66925 30.64448 29.13586 25.74554 35.46492
##   [9] 31.49559 25.79642 33.68360 25.43228 27.57587 32.10927 29.30786 25.84944
##  [17] 22.98070 30.02628 31.81822 27.38797 32.54259 32.49780 27.72478 35.24544
##  [25] 24.97460 22.43539 31.38327 28.61808 28.91585 34.65789 27.13900 32.36563
##  [33] 29.24582 29.59873 29.29207 31.42272 32.29870 30.37167 29.35461 33.31112
##  [41] 30.70835 31.73285 28.00726 33.91753 37.73177 31.11014 26.72646 32.84782
##  [49] 28.68622 31.16585 32.08045 31.82304 26.66785 25.70310 29.29158 33.70692
##  [57] 31.33623 34.33893 31.10872 26.34818 25.98117 34.30901 32.76225 32.62096
##  [65] 30.20117 32.95033 30.69951 35.07910 28.38944 20.28937 30.19771 29.78520
##  [73] 25.86311 21.14792 32.84752 30.91836 29.78123 32.35107 30.09512 31.87461
##  [81] 32.41342 25.80305 25.66296 30.74615 24.89997 29.55984 31.90473 32.52291
##  [89] 24.50084 33.84045 28.83638 32.15738 31.78080 35.90294 31.32841 30.82415
##  [97] 31.48746 25.85272 27.74736 30.18415
hist(normal_random,col="pink", main="Grafico de la normal",xlim=c(0,50))

Generando variable aleatoria de una exponencial

3.Exponencial Simular El tiempo de servicio en una caja de un banco cuyo comportamiento sigue una forma exponencial con media de 3 minutos/cliente

numexp <- rexp(100,1/3)
round(numexp,1)
##   [1]  4.0  2.0  0.8  3.9  1.3  4.7  0.6  2.2  1.7  0.5  3.4  6.6  0.7  2.2  4.5
##  [16]  5.0  3.2  3.8  6.8  1.0  1.4  4.4  1.5  2.3  0.5  2.9  6.7  0.3  1.2  2.6
##  [31]  0.5  3.4  0.1  1.4  3.4  3.3  5.9  3.3  1.9 13.9  4.1  3.3  4.5  0.2  5.3
##  [46]  3.5  5.2  0.2 10.5  1.0  1.3  3.7  0.1  7.6  1.9  9.7  0.6  3.8  1.7  0.1
##  [61]  1.5  1.6  5.9  0.6  2.8  2.1  1.4  2.9  3.6  0.2 13.0  0.4  0.7  5.4  1.9
##  [76]  1.7  3.3  1.3  1.2  0.6  2.4  4.4  0.0  4.6  0.0  1.9  2.3  7.6  6.0  0.6
##  [91]  1.0  5.9  1.3  4.0  4.7  2.8  5.5  3.0  0.1  5.6

Generando una variable aleatoria de una Binomial

4.Binomial

Binom_random <-rbinom(100,12,0.25)
Binom_random
##   [1] 2 4 3 5 4 5 1 1 5 5 5 4 3 4 3 3 3 4 3 1 1 1 2 3 3 5 2 4 3 5 1 3 3 3 0 1 3
##  [38] 2 2 1 2 3 2 8 3 2 3 3 4 5 1 5 5 2 5 4 4 4 5 4 4 2 3 2 4 5 2 0 2 5 2 1 3 2
##  [75] 5 4 5 3 3 2 3 4 3 3 7 2 3 3 2 4 2 1 2 1 3 4 1 2 3 2

Generando variable aleatoria de una poisson

5.Poisson Supongamos que queremos simular un proceso donde los eventos ocurren con una tasa de λ=5 eventos por minuto .

evento_pois <- rpois(100,5)

tablapois <- table(evento_pois)
tablapois
## evento_pois
##  1  2  3  4  5  6  7  8  9 10 
##  2 14 13 22 21 10  5  7  5  1
evento_pois
##   [1]  4  2  9  4  8  4  6  2  5  2  7  6  4  9  3  5  5  2  5  9  5  5  3  5  3
##  [26]  2  7  8  4  2  3  4  4  6  2  1  5  6  8  5  5  4  2  8  5  4  8  4  2  1
##  [51]  4  6  2 10  6  3  4  4  4  4  9  5  4  3  2  4  4  8  7  5  8  2  6  6  7
##  [76]  5  3  5  3  5  9  3  5  2  3  6  5  5  6  4  3  7  5  3  4  4  3  4  5  2