Transformada Inversa

El método de transformada inversa es una técnica utilizada en simulación para generar números aleatorios que siguen una distribución de probabilidad específica a partir de una distribución uniforme. Se basa en la idea de que cualquier variable aleatoria continua 𝑋X con función de distribución acumulada (FDA) 𝐹(𝑥)F(x) se puede generar a partir de una variable aleatoria uniforme 𝑈∼𝑈(0,1)U∼U(0,1) mediante la función inversa de la FDA.

a <- 400 
c <- 40  
m <- 572
X_n <- 53 # 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.13286713 0.21678322 0.78321678 0.35664336 0.72727273 0.97902098
##   [7] 0.67832168 0.39860140 0.51048951 0.26573427 0.36363636 0.52447552
##  [13] 0.86013986 0.12587413 0.41958042 0.90209790 0.90909091 0.70629371
##  [19] 0.58741259 0.03496503 0.05594406 0.44755245 0.09090909 0.43356643
##  [25] 0.49650350 0.67132867 0.60139860 0.62937063 0.81818182 0.34265734
##  [31] 0.13286713 0.21678322 0.78321678 0.35664336 0.72727273 0.97902098
##  [37] 0.67832168 0.39860140 0.51048951 0.26573427 0.36363636 0.52447552
##  [43] 0.86013986 0.12587413 0.41958042 0.90209790 0.90909091 0.70629371
##  [49] 0.58741259 0.03496503 0.05594406 0.44755245 0.09090909 0.43356643
##  [55] 0.49650350 0.67132867 0.60139860 0.62937063 0.81818182 0.34265734
##  [61] 0.13286713 0.21678322 0.78321678 0.35664336 0.72727273 0.97902098
##  [67] 0.67832168 0.39860140 0.51048951 0.26573427 0.36363636 0.52447552
##  [73] 0.86013986 0.12587413 0.41958042 0.90209790 0.90909091 0.70629371
##  [79] 0.58741259 0.03496503 0.05594406 0.44755245 0.09090909 0.43356643
##  [85] 0.49650350 0.67132867 0.60139860 0.62937063 0.81818182 0.34265734
##  [91] 0.13286713 0.21678322 0.78321678 0.35664336 0.72727273 0.97902098
##  [97] 0.67832168 0.39860140 0.51048951 0.26573427
# generando una variable exponencial con beta = 5
x <- -5*log(1-random.number)
round(x,1) # redondeando a una cifra decimal
##   [1]  0.7  1.2  7.6  2.2  6.5 19.3  5.7  2.5  3.6  1.5  2.3  3.7  9.8  0.7  2.7
##  [16] 11.6 12.0  6.1  4.4  0.2  0.3  3.0  0.5  2.8  3.4  5.6  4.6  5.0  8.5  2.1
##  [31]  0.7  1.2  7.6  2.2  6.5 19.3  5.7  2.5  3.6  1.5  2.3  3.7  9.8  0.7  2.7
##  [46] 11.6 12.0  6.1  4.4  0.2  0.3  3.0  0.5  2.8  3.4  5.6  4.6  5.0  8.5  2.1
##  [61]  0.7  1.2  7.6  2.2  6.5 19.3  5.7  2.5  3.6  1.5  2.3  3.7  9.8  0.7  2.7
##  [76] 11.6 12.0  6.1  4.4  0.2  0.3  3.0  0.5  2.8  3.4  5.6  4.6  5.0  8.5  2.1
##  [91]  0.7  1.2  7.6  2.2  6.5 19.3  5.7  2.5  3.6  1.5
data.frame(1:length(random.number),random.number,round(x,1))
##     X1.length.random.number. random.number round.x..1.
## 1                          1    0.13286713         0.7
## 2                          2    0.21678322         1.2
## 3                          3    0.78321678         7.6
## 4                          4    0.35664336         2.2
## 5                          5    0.72727273         6.5
## 6                          6    0.97902098        19.3
## 7                          7    0.67832168         5.7
## 8                          8    0.39860140         2.5
## 9                          9    0.51048951         3.6
## 10                        10    0.26573427         1.5
## 11                        11    0.36363636         2.3
## 12                        12    0.52447552         3.7
## 13                        13    0.86013986         9.8
## 14                        14    0.12587413         0.7
## 15                        15    0.41958042         2.7
## 16                        16    0.90209790        11.6
## 17                        17    0.90909091        12.0
## 18                        18    0.70629371         6.1
## 19                        19    0.58741259         4.4
## 20                        20    0.03496503         0.2
## 21                        21    0.05594406         0.3
## 22                        22    0.44755245         3.0
## 23                        23    0.09090909         0.5
## 24                        24    0.43356643         2.8
## 25                        25    0.49650350         3.4
## 26                        26    0.67132867         5.6
## 27                        27    0.60139860         4.6
## 28                        28    0.62937063         5.0
## 29                        29    0.81818182         8.5
## 30                        30    0.34265734         2.1
## 31                        31    0.13286713         0.7
## 32                        32    0.21678322         1.2
## 33                        33    0.78321678         7.6
## 34                        34    0.35664336         2.2
## 35                        35    0.72727273         6.5
## 36                        36    0.97902098        19.3
## 37                        37    0.67832168         5.7
## 38                        38    0.39860140         2.5
## 39                        39    0.51048951         3.6
## 40                        40    0.26573427         1.5
## 41                        41    0.36363636         2.3
## 42                        42    0.52447552         3.7
## 43                        43    0.86013986         9.8
## 44                        44    0.12587413         0.7
## 45                        45    0.41958042         2.7
## 46                        46    0.90209790        11.6
## 47                        47    0.90909091        12.0
## 48                        48    0.70629371         6.1
## 49                        49    0.58741259         4.4
## 50                        50    0.03496503         0.2
## 51                        51    0.05594406         0.3
## 52                        52    0.44755245         3.0
## 53                        53    0.09090909         0.5
## 54                        54    0.43356643         2.8
## 55                        55    0.49650350         3.4
## 56                        56    0.67132867         5.6
## 57                        57    0.60139860         4.6
## 58                        58    0.62937063         5.0
## 59                        59    0.81818182         8.5
## 60                        60    0.34265734         2.1
## 61                        61    0.13286713         0.7
## 62                        62    0.21678322         1.2
## 63                        63    0.78321678         7.6
## 64                        64    0.35664336         2.2
## 65                        65    0.72727273         6.5
## 66                        66    0.97902098        19.3
## 67                        67    0.67832168         5.7
## 68                        68    0.39860140         2.5
## 69                        69    0.51048951         3.6
## 70                        70    0.26573427         1.5
## 71                        71    0.36363636         2.3
## 72                        72    0.52447552         3.7
## 73                        73    0.86013986         9.8
## 74                        74    0.12587413         0.7
## 75                        75    0.41958042         2.7
## 76                        76    0.90209790        11.6
## 77                        77    0.90909091        12.0
## 78                        78    0.70629371         6.1
## 79                        79    0.58741259         4.4
## 80                        80    0.03496503         0.2
## 81                        81    0.05594406         0.3
## 82                        82    0.44755245         3.0
## 83                        83    0.09090909         0.5
## 84                        84    0.43356643         2.8
## 85                        85    0.49650350         3.4
## 86                        86    0.67132867         5.6
## 87                        87    0.60139860         4.6
## 88                        88    0.62937063         5.0
## 89                        89    0.81818182         8.5
## 90                        90    0.34265734         2.1
## 91                        91    0.13286713         0.7
## 92                        92    0.21678322         1.2
## 93                        93    0.78321678         7.6
## 94                        94    0.35664336         2.2
## 95                        95    0.72727273         6.5
## 96                        96    0.97902098        19.3
## 97                        97    0.67832168         5.7
## 98                        98    0.39860140         2.5
## 99                        99    0.51048951         3.6
## 100                      100    0.26573427         1.5
hist(x, breaks = 20, probability = TRUE, col = "lightblue", ylim=c(0,0.35),  main = "Distribución Exponencial (beta = 5)",     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 = "red", lwd = 2, add = TRUE)

Simulación de variables aleatorias con funciones propias de R.

  1. Generando variable aleatoria uniforme.
# Generar 100 variables aleatorias uniformes entre 0 y 1
uniform_random_01 <- runif(100, min = 0, max = 1)
uniform_random_01
##   [1] 0.775732052 0.953596221 0.770602399 0.361598782 0.547808843 0.587905449
##   [7] 0.463559054 0.665612894 0.612253314 0.952522370 0.624999512 0.223263057
##  [13] 0.622310761 0.530254298 0.975544059 0.110002012 0.949846318 0.328737850
##  [19] 0.949716617 0.749141675 0.012231499 0.320039323 0.426898164 0.707101039
##  [25] 0.717830429 0.689627153 0.702174074 0.735388919 0.889857165 0.568920015
##  [31] 0.229568837 0.840731152 0.895131380 0.880009626 0.238548690 0.769475901
##  [37] 0.857383963 0.066411895 0.919279094 0.201088367 0.690217368 0.449144850
##  [43] 0.689728111 0.703839213 0.003743352 0.157359057 0.942174749 0.629059736
##  [49] 0.178325662 0.608503406 0.299381818 0.578781615 0.821088671 0.990515862
##  [55] 0.351109973 0.256474286 0.934896151 0.802885302 0.638434874 0.786442292
##  [61] 0.772133926 0.594752161 0.628975577 0.107508126 0.011737092 0.290909611
##  [67] 0.571965055 0.880317120 0.783490381 0.586540544 0.139572131 0.001643561
##  [73] 0.819370931 0.828488141 0.488980773 0.643883086 0.729978328 0.230726792
##  [79] 0.865768594 0.381524578 0.285512241 0.806212856 0.759122164 0.838064353
##  [85] 0.264023076 0.735322230 0.080301328 0.205576507 0.232425986 0.563214405
##  [91] 0.744973881 0.177138196 0.622291094 0.020742303 0.016497928 0.732977171
##  [97] 0.565558389 0.647240853 0.179171461 0.010142046
  1. Genrando una vriable aleatoria de una distribucion normal.
# Generar 100 variables normales con media 30 y desviación estándar 3.5
set.seed(123)
normal_random <- rnorm(100, mean = 30, sd = 3.5)
normal_random
##   [1] 28.03834 29.19438 35.45548 30.24678 30.45251 36.00273 31.61321 25.57229
##   [9] 27.59602 28.44018 34.28429 31.25935 31.40270 30.38739 28.05456 36.25420
##  [17] 31.74248 23.11684 32.45475 28.34523 26.26262 29.23709 26.40898 27.44888
##  [25] 27.81236 24.09657 32.93225 30.53681 26.01652 34.38835 31.49262 28.96725
##  [33] 33.13294 33.07347 32.87553 32.41024 31.93871 29.78331 28.92913 28.66835
##  [41] 27.56853 29.27229 25.57111 37.59135 34.22787 26.06912 28.58990 28.36671
##  [49] 32.72988 29.70821 30.88661 29.90009 29.84995 34.79011 29.20980 35.30765
##  [57] 24.57937 32.04615 30.43349 30.75580 31.32874 28.24187 28.83377 26.43499
##  [65] 26.24873 31.06235 31.56873 30.18551 33.22794 37.17530 28.28139 21.91791
##  [73] 33.52008 27.51780 27.59197 33.58950 29.00329 25.72749 30.63456 29.51388
##  [81] 30.02017 31.34848 28.70269 32.25532 29.22830 31.16124 33.83894 31.52314
##  [89] 28.85924 34.02083 33.47726 31.91939 30.83556 27.80233 34.76228 27.89909
##  [97] 37.65567 35.36414 29.17505 26.40753
hist(normal_random,col=18,main="Grafico de la normal",xlim=c(20,40))

  1. Generando variable aleatoria de una exponencial. Ejemplo:

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]  5.4  0.1  3.9  0.6  5.3  5.3  2.5  1.0  9.9  1.2  3.3  4.0  1.9  0.6  1.4
##  [16]  1.1 10.4  3.8  3.2  0.9  0.3  8.9  5.9  2.0  4.8  1.8  0.3  1.0  5.3  0.8
##  [31]  2.8  1.3  3.9  0.5  4.7  0.2  1.7  5.2  3.9  3.9  1.4  0.1  0.5  3.1  3.2
##  [46] 11.2  0.0  0.0  5.1  1.6  1.4  0.2  1.6  4.4  3.8  4.3  6.4  4.3  2.7  8.1
##  [61]  6.7  1.6  0.2  1.7 13.1  1.7  1.4  0.8  2.1  2.9  2.2  3.3  1.8  2.0  4.9
##  [76]  0.3  1.2  8.2  8.6  0.1  1.4  2.0  2.9  3.4  0.2  4.9  0.5  4.4  0.3  0.7
##  [91]  2.0  4.6  5.8  0.6  1.7  5.8 10.8  4.0  2.8  0.9
  1. Generando variable aleatoria de una Binomial.
binom_random <- rbinom(100,12,0.25)
binom_random
##   [1] 6 4 2 2 6 3 4 2 4 3 5 2 2 1 2 6 2 4 4 1 2 2 1 1 7 7 1 5 3 3 3 4 1 2 4 2 4
##  [38] 2 3 2 2 6 2 3 0 3 3 3 2 5 3 2 2 2 5 6 3 2 7 2 3 1 3 1 2 2 3 4 2 5 4 4 1 2
##  [75] 4 3 2 2 1 2 5 4 4 1 1 6 3 3 2 3 2 2 4 2 4 1 4 3 4 4
  1. Generando variable aleatoria de una poisson.
evento_pois <- rpois(100,5)

tablapois <- table(evento_pois)
tablapois
## evento_pois
##  0  1  2  3  4  5  6  7  8  9 10 11 
##  1  4 10  8 19 17 14 14  5  5  1  2
evento_pois
##   [1]  5  6  0  3  6  3  7  4  6  9  2  3  6  4  7 10  2  5  6  2 11  3  2  6  7
##  [26]  4  4  4  2  4  3  5  5  9  4  5  2  7  4  6  3  5  7  2  7  4  4  4  1  5
##  [51]  6  8  1 11  4  9  6  5  7  1  6  4  7  5  4  7  2  7  4  6  9  2  7  7  4
##  [76]  4  3  5  8  5  5  6  5  5  1  2  8  7  3  6  6  4  7  5  8  5  8  5  4  9