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)
# 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
# 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))
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
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
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