Introducción

En el proceso de realizar una simulación de eventos necesitaremos conocer la distribución de probabilidad que modela dicho evento , por ejemplo si nuestro propósito al analizar un muestreo de calidad consiste en modelar \(X\) número de artículos defectuosos en una muestra de \(n\) artículos, entonces \(X\sim Binomial(n,p)\) , donde \(p\) es la probabilidad de que el artículo este defectuoso.

En cambio si , estamos analizando \(Y:\) número de usuarios que llamarÔn a un teléfono de atención a clientes en un determinado tiempo,entonces \(X\sim Poisson(\lambda)\), y si estamos interasados analizar la variables \(T:\) _Tiempo entre llegada de clientes__, entonces la variable \(T\sim exp(\beta)\),

a estas distribución de variables aleatorias se asocia una función \(F\) llamada función de distribución acumulada \[F(x)=P(X\leq x)\] Para simular variables aleatorias \(X\) de una determinada distribución \(f(x)\) , primero necesitamos un generador de números pseudoaleatorios que produzca valores uniformemente distribuidos. Luego, mediante un método específico, transformamos esos números uniformes en valores que sigan la distribución deseada.

  1. MƩtodo de la Tranformada Inversa

Es una técnica para generar variables aleatorias de cualquier distribución de probabilidad a partir de números aleatorios uniformemente distribuidos. Es especialmente útil cuando la función de distribución acumulada \(F\) de la variable deseada es invertible, es decir existe \(F^{-1}\)

Pasos:

  1. Se genera un número aleatorio \(U\) a partir de una distribución uniforme en el intervalo [0,1].

  2. Se utiliza la función de distribución acumulada \(š¹(š‘„)\) de la variable aleatoria deseada.

  3. Se obtiene \(F^{-1}(u)\) que permite transformar un número uniforme \(U\) en un valor que sigue la distribución deseada.

  4. El número uniforme \(U\) se transforma en una variable aleatoria \(X\) utilizando la inversa \(F^{-1}\), es decir: \[X=F^{-1}(U)\] Este \(X\) sigue la distribución de probabilidad deseada.

Ejemplo.

Para una variablea aleatoria \(X\sim exp(\beta)\) su función de distribución acumulada \(F\) es :

\[F(x)= 1-exp(-\frac{1}{\beta}x)\]

Para aplicar el mƩtodo de la transformada inversa:

Los datos históricos del tiempo de servicio en la caja de un banco se com portan de forma exponencial con media de 3 minutos/cliente. con los números aleatorios generados por el método Congriuencial mixto.

a <- 317 
c <- 15  
m <- 571
X_n <- 41 # semilla
random.number<-numeric(50) # vector numƩrico de longitud 50
 for (i in 1:50)
   {X_n<-(a*X_n+c)%%m
   random.number[i]<-X_n/m # nĆŗmeros en el intervalo [0,1]
   }
 random.number
##  [1] 0.78809107 0.85113835 0.83712785 0.39579685 0.49387040 0.58318739
##  [7] 0.89667250 0.27145359 0.07705779 0.45359019 0.81436077 0.17863398
## [13] 0.65323993 0.10332750 0.78108581 0.63047285 0.88616462 0.94045534
## [19] 0.15061296 0.77057793 0.29947461 0.95971979 0.25744308 0.63572680
## [25] 0.55166375 0.90367776 0.49211909 0.02802102 0.90893170 0.15761821
## [31] 0.99124343 0.25043783 0.41506130 0.60070053 0.44833625 0.14886165
## [37] 0.21541156 0.31173380 0.84588441 0.17162872 0.43257443 0.15236427
## [43] 0.32574431 0.28721541 0.07355517 0.34325744 0.83887916 0.95096322
## [49] 0.48161121 0.69702277

Entonces

# generando una variable exponencial con beta = 3
x <- -3*log(1-random.number)
round(x,1) # redondeando a una cifra decimal
##  [1]  4.7  5.7  5.4  1.5  2.0  2.6  6.8  1.0  0.2  1.8  5.1  0.6  3.2  0.3  4.6
## [16]  3.0  6.5  8.5  0.5  4.4  1.1  9.6  0.9  3.0  2.4  7.0  2.0  0.1  7.2  0.5
## [31] 14.2  0.9  1.6  2.8  1.8  0.5  0.7  1.1  5.6  0.6  1.7  0.5  1.2  1.0  0.2
## [46]  1.3  5.5  9.0  2.0  3.6
data.frame(1:length(random.number),random.number,round(x,1))
##    X1.length.random.number. random.number round.x..1.
## 1                         1    0.78809107         4.7
## 2                         2    0.85113835         5.7
## 3                         3    0.83712785         5.4
## 4                         4    0.39579685         1.5
## 5                         5    0.49387040         2.0
## 6                         6    0.58318739         2.6
## 7                         7    0.89667250         6.8
## 8                         8    0.27145359         1.0
## 9                         9    0.07705779         0.2
## 10                       10    0.45359019         1.8
## 11                       11    0.81436077         5.1
## 12                       12    0.17863398         0.6
## 13                       13    0.65323993         3.2
## 14                       14    0.10332750         0.3
## 15                       15    0.78108581         4.6
## 16                       16    0.63047285         3.0
## 17                       17    0.88616462         6.5
## 18                       18    0.94045534         8.5
## 19                       19    0.15061296         0.5
## 20                       20    0.77057793         4.4
## 21                       21    0.29947461         1.1
## 22                       22    0.95971979         9.6
## 23                       23    0.25744308         0.9
## 24                       24    0.63572680         3.0
## 25                       25    0.55166375         2.4
## 26                       26    0.90367776         7.0
## 27                       27    0.49211909         2.0
## 28                       28    0.02802102         0.1
## 29                       29    0.90893170         7.2
## 30                       30    0.15761821         0.5
## 31                       31    0.99124343        14.2
## 32                       32    0.25043783         0.9
## 33                       33    0.41506130         1.6
## 34                       34    0.60070053         2.8
## 35                       35    0.44833625         1.8
## 36                       36    0.14886165         0.5
## 37                       37    0.21541156         0.7
## 38                       38    0.31173380         1.1
## 39                       39    0.84588441         5.6
## 40                       40    0.17162872         0.6
## 41                       41    0.43257443         1.7
## 42                       42    0.15236427         0.5
## 43                       43    0.32574431         1.2
## 44                       44    0.28721541         1.0
## 45                       45    0.07355517         0.2
## 46                       46    0.34325744         1.3
## 47                       47    0.83887916         5.5
## 48                       48    0.95096322         9.0
## 49                       49    0.48161121         2.0
## 50                       50    0.69702277         3.6
hist(x, breaks = 20, probability = TRUE, col = "lightblue", 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 = "red", lwd = 2, add = TRUE)

Ejemplo: Distribución Poisson.

El número de veces que se cae la wifi de la universidad sigue una distribución Poisson con una media de 4 veces por horas. Simule el comportamiento de la caida de la red de la universidad.

\[ P(X=x)=\frac{e^{-4}4^x}{x!}\quad \text{para}\quad x=0,1,2,3,\dots \]

# Definir los parƔmetros
lambda <- 2  # Media de la distribución de Poisson
valores <- 0:7  # Valores de x de 0 a 10

# Inicializar vectores vacĆ­os para almacenar las probabilidades y las acumuladas
probabilidades <- numeric(length(valores))
acumuladas <- numeric(length(valores))

# Ciclo for para calcular la probabilidad de cada valor de x
for (x in valores) {
  probabilidades[x + 1] <- dpois(x, lambda = lambda)  # Probabilidad puntual
  acumuladas[x + 1] <- ppois(x, lambda = lambda)      # Probabilidad acumulada
}

# Mostrar los resultados
for (x in valores) {
  cat("P(X =", x, ") =", probabilidades[x + 1], "\t Acumulada P(X <=", x, ") =", acumuladas[x + 1], "\n")
}
## P(X = 0 ) = 0.1353353     Acumulada P(X <= 0 ) = 0.1353353 
## P(X = 1 ) = 0.2706706     Acumulada P(X <= 1 ) = 0.4060058 
## P(X = 2 ) = 0.2706706     Acumulada P(X <= 2 ) = 0.6766764 
## P(X = 3 ) = 0.180447      Acumulada P(X <= 3 ) = 0.8571235 
## P(X = 4 ) = 0.09022352    Acumulada P(X <= 4 ) = 0.947347 
## P(X = 5 ) = 0.03608941    Acumulada P(X <= 5 ) = 0.9834364 
## P(X = 6 ) = 0.0120298     Acumulada P(X <= 6 ) = 0.9954662 
## P(X = 7 ) = 0.003437087   Acumulada P(X <= 7 ) = 0.9989033

La regla para generar esta variable aleatoria estarĆ­a definida por:

[ { \[\begin{aligned} 0 & \quad \text{si}\, u_i \leq 0.1353\\ 1 & \quad \text{si}\, u_i \in (0.1353 , 0.4060] \\ 2 & \quad \text{si}\, u_i \in (0.4060 , 67667]\\ 3 & \quad \text{si}\, u_i \in (0.6767 , 0.8571] \\ 4 & \quad \text{si}\, u_i \in (0.8571, 0.9473]\\ 5 & \quad \text{si}\, u_i \in (0.9473 , 0.9834] \\ 6 & \quad \text{si}\, u_i \in (0.9834,0.9954]\\ 7 & \quad \text{si}\, u_i \in (0.9954 , 0.9999] \end{aligned}\]

. ]

Algoritmos predefinidos.

Muchas librerías de software estadístico y de programación como NumPy en Python, R, MATLAB, y otros tienen funciones predefinidas para generar variables aleatorias de diversas distribuciones (normal, uniforme, exponencial, binomial, etc.), facilitando el proceso. Algunas de estas funciones utilizan métodos como el de la transforma inversa , convolución , composición , etc, .

Simulación de variables aleatorias Uniformes en R.

# Generar 100 variables aleatorias uniformes entre 0 y 1
uniform_random_01 <- runif(100, min = 0, max = 1)
uniform_random_01
##   [1] 0.4642812093 0.0472968640 0.4924413876 0.9845189112 0.2339436009
##   [6] 0.6548774925 0.4724445250 0.8829573253 0.2922004333 0.6409208407
##  [11] 0.3485153099 0.3120751686 0.2439736470 0.0001186794 0.6008252508
##  [16] 0.8876450148 0.0191672409 0.8639476420 0.3889065925 0.9627142120
##  [21] 0.4211694405 0.4152164590 0.9821176734 0.6708385306 0.1770130780
##  [26] 0.1537170457 0.5387231887 0.1963973432 0.1832738505 0.8292213134
##  [31] 0.6980703275 0.1290739689 0.8512812431 0.0164890783 0.6717730574
##  [36] 0.3370865860 0.0310140641 0.2760329708 0.2162050249 0.0866783008
##  [41] 0.6889543547 0.0289700108 0.0828108916 0.3146365935 0.1148433078
##  [46] 0.4648038545 0.5544977824 0.1040754043 0.7515659479 0.2789934461
##  [51] 0.8730775453 0.6871296221 0.9666396170 0.6632698372 0.3073290368
##  [56] 0.3058602589 0.3791437685 0.8355505567 0.1519900281 0.3576006338
##  [61] 0.8303941041 0.4876441127 0.8778959725 0.5569040247 0.0164652874
##  [66] 0.5803387451 0.0395192457 0.2822865248 0.3296307956 0.1969050195
##  [71] 0.5637719324 0.6260585375 0.5293665186 0.4855503265 0.1271492215
##  [76] 0.5066240276 0.1703138223 0.9846078434 0.6361430045 0.3926924886
##  [81] 0.0281733798 0.4750734994 0.4469799360 0.1050471738 0.0976128387
##  [86] 0.7698865694 0.2296060033 0.8550958196 0.2901761879 0.8677754127
##  [91] 0.2400990506 0.0416217335 0.4696948908 0.6046261955 0.9707362670
##  [96] 0.2742241605 0.4766447518 0.9329083147 0.3595241059 0.1422693408
# Generar 100 variables uniformes [ a, b]
uniform_random_ab <- runif(1000, min = 10, max = 20)

Generando valores de una variable aleatoria normal con media \(\mu\) y varianza \(\sigma^2\) .

El método de la transformada inversa no es adecuado para la generación de variables aleatorias con distribución normal debido a la complejidad de la función de distribución acumulada (FDA) de la normal, cuya inversa no tiene una forma analítica simple. Esto hace que la aplicación directa de este método resulte impracticable en el caso de la distribución normal. Sin embargo, una alternativa eficaz es el uso del Teorema del Límite Central (TLC), el cual establece que la suma de un número suficientemente grande de variables aleatorias independientes e idénticamente distribuidas (i.i.d.) tiende a seguir una distribución normal, independientemente de la distribución original de estas variables, siempre que cumplan ciertas condiciones. Este enfoque permite aproximar la distribución normal mediante la suma de muchas variables mÔs simples, lo cual es una técnica común en simulaciones y métodos numéricos.

Teorema Central del LĆ­mite

Sea \(X_1, X_2, \dots, X_n\) una sucesión de variables aleatorias independientes e idénticamente distribuidas (i.i.d.) con media \(\mu\) y varianza finita \(\sigma^2\). Entonces, la suma \(Y=\sum_{i=1}^{n} X_i\) tiende a seguir una distribución normal conforme \(n\) tiende a infinito. Es decir,

\[ Z_n = \frac{Y - n\mu}{\sigma \sqrt{n}} \sim N(0,1) \quad \text{cuando} \quad n \to \infty, \]

donde \(N(0,1)\) denota una distribución normal estÔndar con media 0 y varianza 1.

En el caso de variables aleatorias uniforme \(R_i \sim iid U(0,1)\), entonces.

\[\begin{equation} Z = \frac{\sum_{i=1}^{n} R_i - \frac{n}{2}}{ \sqrt{\frac{n}{12}}} \sim N(0,1) \quad \text{cuando} \quad n \to \infty \label{\#eq:binom} \end{equation}\]

Puesto que la distribución normal estÔndar de una variable aleatoria Y que se distribuye normal es \[Z=\frac{Y-\mu}{\sigma}\]

Por lo tanto la simulación de variables aleatorias \(Y\) se haría de acuerdo a la siguiente expresión.

\[ Y=\mu +\sigma\times Z \]

con \(Z = \frac{\sum_{i=1}^{n} R_i - \frac{n}{2}}{ \sqrt{\frac{n}{12}}}\) Se ha comprobado que con \(n=12\) , la confiabilidad de los valores simulado es bastante aceptable, por lo que finalmente la expresión nos queda.

\[ Y=\mu +\sigma\times \Big(\sum_{i=1}^{n} R_i -6\Big) \] Ejemplo:

# Número de variables uniformes (cuanto mÔs grande n, mejor la aproximación)
n <- 12 

# Generar 1000 variables aleatorias normales a través de la convolución de uniformes
uniform_sums <- rowSums(matrix(runif(100 * n, min = 0, max = 1), nrow = 100, ncol = n))
uniform_sums
##   [1] 6.913273 4.091749 6.564155 7.652205 7.861741 6.841243 5.738543 5.287450
##   [9] 7.739724 7.993367 6.648913 4.606619 7.880648 4.999721 6.533702 5.929031
##  [17] 4.522285 5.882288 5.907364 7.354440 7.470344 5.302163 5.069417 8.084287
##  [25] 6.906998 7.397485 6.829242 3.712715 7.000655 5.458774 5.970144 5.465639
##  [33] 5.180264 4.971549 4.390170 6.049689 6.656151 5.221446 6.204418 5.374643
##  [41] 4.891508 6.620499 6.315845 6.722656 7.603559 6.849221 6.962748 5.400733
##  [49] 5.703208 6.215080 6.881678 4.549412 4.008492 5.278005 4.501137 6.598123
##  [57] 5.120814 4.060961 6.658052 5.445219 5.512440 5.883089 6.334766 7.380367
##  [65] 6.166718 7.433626 6.912407 5.107523 6.066910 4.873801 5.084337 7.090846
##  [73] 6.297493 7.490770 4.508976 7.357550 5.240373 5.791605 5.400084 6.573421
##  [81] 4.677110 5.129990 5.017883 5.954246 5.528616 6.742700 6.654290 7.630049
##  [89] 5.097980 3.990192 6.360197 5.732873 6.941665 7.026370 4.576328 4.250700
##  [97] 5.902974 5.514491 3.532195 3.892253
# Normalización para obtener una distribución aproximadamente N(0, 1)
Z <- (uniform_sums - 6) 

# Mostrar los resultados
hist(Z, main = "Aproximación de distribución normal usando convolución",
     xlab = "Valores", col = "lightblue", probability = TRUE)
lines(density(Z), col = 2, lwd = 2)

# Simulando el tiempo de vida de 100 baterias de una lapto cuyo promedio de vida es de 30 meses y desviación típica $\sigma=3.5$ meses, suponiendo que sigue una distribución normal
mu <- 30
sigma <-  3.5
Y= mu +3.5*Z
round(Y,1) # redondeando a una cifra decimal
##   [1] 33.2 23.3 32.0 35.8 36.5 32.9 29.1 27.5 36.1 37.0 32.3 25.1 36.6 26.5 31.9
##  [16] 29.8 24.8 29.6 29.7 34.7 35.1 27.6 26.7 37.3 33.2 34.9 32.9 22.0 33.5 28.1
##  [31] 29.9 28.1 27.1 26.4 24.4 30.2 32.3 27.3 30.7 27.8 26.1 32.2 31.1 32.5 35.6
##  [46] 33.0 33.4 27.9 29.0 30.8 33.1 24.9 23.0 27.5 24.8 32.1 26.9 23.2 32.3 28.1
##  [61] 28.3 29.6 31.2 34.8 30.6 35.0 33.2 26.9 30.2 26.1 26.8 33.8 31.0 35.2 24.8
##  [76] 34.8 27.3 29.3 27.9 32.0 25.4 27.0 26.6 29.8 28.4 32.6 32.3 35.7 26.8 23.0
##  [91] 31.3 29.1 33.3 33.6 25.0 23.9 29.7 28.3 21.4 22.6
hist(Y, main = "Vida media de 100 baterias de laptos",   xlab = "Valores", col = "lightblue", probability = TRUE)

#yi <- which(Y<24)
#yi
yi <- ifelse(Y<24,1,0)
prob <- sum(yi)/length(Y) # calculando la probabilidad impirica de que la vida media de una lapto sea inferior a 2 aƱos
prob
## [1] 0.08

Con el programa R función rnorm()

# Generar 100 variables normales con media 30 y desviación estÔndar 3.5
normal_random <- rnorm(100, mean = 30, sd = 3.5)
normal_random
##   [1] 31.74991 26.03443 32.20652 27.83095 33.45688 33.15582 31.90606 32.09085
##   [9] 32.81554 31.17961 24.48350 32.62965 27.35459 28.38254 29.16989 26.79850
##  [17] 32.55509 36.78731 35.86258 31.55637 28.61217 29.79844 27.00242 27.87620
##  [25] 31.03213 35.26591 30.37368 28.14310 27.31493 30.27267 24.59014 26.44837
##  [33] 30.03863 28.23269 30.55801 31.06121 25.54045 19.97464 29.68502 32.69777
##  [41] 24.87553 30.23975 32.42830 27.64673 32.35313 32.51736 33.82468 26.76639
##  [49] 29.13182 27.48387 30.19282 28.57452 36.09113 28.28638 29.37664 27.40552
##  [57] 29.66222 33.33518 30.68307 30.65393 31.10008 30.87994 34.68114 30.76478
##  [65] 30.06513 35.77008 33.51283 24.32172 27.03253 22.82419 35.02900 35.13150
##  [73] 29.19236 28.22154 29.61559 32.65524 35.46680 26.23591 31.50208 29.28553
##  [81] 24.70775 26.79476 32.83444 30.93522 28.11897 27.80038 33.21022 26.90146
##  [89] 30.99628 30.43192 30.18413 30.41068 30.70655 35.69003 27.29126 32.68519
##  [97] 26.02514 26.42199 33.40020 25.85354
media <- mean(Y)
v <- length(Y)-1
t <- qt(0.025,v,lower.tail=FALSE)
s <- sd(Y)
ee <- t*s/sqrt(length(Y))
lim_inf <- media-ee
lim_sup <- media + ee
cbind(lim_inf,lim_sup)
##       lim_inf lim_sup
## [1,] 29.03923 30.5906
## [1] 0.02

Distribución Exponencial

Para generar variables aleatorias con distribución exponencial con parÔmetro \(\beta\).
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]  0.4  2.2  1.6  0.9  0.6  9.0  1.1  0.7  5.9  0.8  1.1  0.2  0.1  2.6  1.6
##  [16]  0.4  5.6  0.0  0.1  5.7  0.3  3.1  0.2  0.4  0.0  2.0  0.4 11.4  7.9  1.2
##  [31]  5.2  0.8  3.2  2.9  3.8  0.2  9.3  0.8  0.5  1.1  5.7  2.2  1.3  4.3  1.3
##  [46]  0.9  0.9  0.3  8.3  1.8  1.0  0.3  1.7  1.6  2.8  0.5  0.5  0.4  5.7  2.9
##  [61]  0.5  6.9  6.0  0.7  4.3  6.8  0.4  1.3  2.3  0.2  4.9  2.3  8.9  0.2  0.3
##  [76]  7.2  5.5  2.3  1.4  1.9  3.5  0.4  0.1  1.2  2.5  3.5  3.5  1.2  1.1  6.9
##  [91]  1.0  8.7  2.4  0.6  0.5  3.6  2.8  2.0  2.2  0.9
hist(numexp, breaks = 10, probability = TRUE, col = "lightblue", ylim=c(0,0.35),  main = "Distribución Exponencial (beta = 3)",     xlab = "Valor de X")

curve(dexp(x,rate=1/3), col = "red", lwd =2,add = TRUE)

Distribución Binomial

Simulando una prueba donde se realiza 12 preguntas con 4 opciones y una Ćŗnica respuesta, los estudiante responden de forma aleatoria.

prueba <- rbinom(1000000,12,0.25)
tabla_frec <- table(prueba)/length(prueba)
tabla_frec
## prueba
##        0        1        2        3        4        5        6        7 
## 0.031051 0.127398 0.232061 0.257740 0.194333 0.102958 0.040212 0.011464 
##        8        9       10       11 
## 0.002365 0.000378 0.000039 0.000001
ganan <- ifelse(prueba>6,1,0)
sum(ganan)/length(prueba)
## [1] 0.014247
barplot(tabla_frec,col=3)

sum(tabla_frec)
## [1] 1
opciones <- c("A","B","C","D")
preguntas <- 1:12
respuestas <- sample(opciones,12,replace=TRUE)
cbind(preguntas,respuestas)
##       preguntas respuestas
##  [1,] "1"       "C"       
##  [2,] "2"       "D"       
##  [3,] "3"       "B"       
##  [4,] "4"       "D"       
##  [5,] "5"       "D"       
##  [6,] "6"       "B"       
##  [7,] "7"       "D"       
##  [8,] "8"       "C"       
##  [9,] "9"       "B"       
## [10,] "10"      "B"       
## [11,] "11"      "B"       
## [12,] "12"      "B"

Distribución Poisson

Supongamos que queremos simular un proceso donde los eventos ocurren con una tasa de \(\lambda=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  7 16 21 19 17  6  5  4  3
# GrƔfico de los eventos
barplot(tablapois,col = "blue")

Distribución Erlang

La distribución Erlang es un modelo ampliamente utilizado en sistemas que involucran tiempos de espera y procesos en fases, como en la teoría de colas, redes de telecomunicaciones y anÔlisis de supervivencia. La distribución Erlang es útil para modelar el tiempo hasta que ocurren k eventos en un proceso de Poisson, donde cada evento tiene un tiempo de espera exponencial independiente con el mismo parÔmetro de tasa \(\lambda\), es un caso especial de la distribución Gamma cuando el parÔmetro de forma \(k\) es entero

\[f(x; k, \lambda) = \frac{\lambda^k x^{k-1} e^{-\lambda x}}{(k-1)!}, \quad x \geq 0\]

# simulando variables aleatoria Erlang : "Tres llamadas a un tasa de dos minutos"
k=3
lambda=1
Erl<-rgamma(100,shape=k,rate=lambda)
hist(Erl,col=6,probability=TRUE)
lines(density(Erl),col="blue",lty=1)

Erl
##   [1] 0.4666872 1.3733782 3.8021897 2.8666580 2.2115104 4.9890526 1.9321328
##   [8] 1.9662018 2.3376292 0.6879687 2.0533757 3.2187923 2.1752124 4.2833493
##  [15] 1.3910484 2.2737018 0.6623244 2.4790170 2.8267075 1.3620061 5.0202938
##  [22] 0.4508373 0.9797896 3.8664258 2.0084628 2.3169570 1.8520915 3.6466546
##  [29] 1.7049884 1.1205509 5.0806210 4.7918321 4.3466045 2.9264931 2.9299101
##  [36] 0.8996342 5.7169492 2.1636658 4.4391427 2.4914176 1.1754977 1.4381781
##  [43] 2.6586577 1.5231518 2.0248956 3.1276793 1.9169547 1.5631375 3.3078683
##  [50] 3.6465393 0.9607019 6.4805216 1.7844781 4.6231707 5.9391728 3.0228432
##  [57] 2.8657089 1.4464842 1.0244442 4.6562605 3.5224538 4.4789741 3.6363859
##  [64] 5.5446336 2.4155124 2.5182384 0.7540953 1.9542661 3.2785437 3.9121243
##  [71] 1.8472351 5.2004369 0.7391280 3.4935333 3.5174236 4.9642440 2.5347602
##  [78] 6.5399099 2.2901547 5.1292132 2.9082922 1.8525222 2.0609848 2.8783444
##  [85] 6.1331680 0.8302160 3.7694358 2.6691781 1.1092151 4.1867868 3.9118532
##  [92] 3.5417205 0.7616364 3.5107945 0.7415535 2.9239951 2.9747245 2.2314757
##  [99] 3.3774329 3.6697998

Ejemplo de Aplicaciones de Simulación.

Modelos Terminales

Los modelos terminales de simulación se caracterizan por un evento que pone fin a la simulación. Un ejemplo sería medir el tiempo necesario para procesar 10 piezas, vender 10000 pc o atender clientes en una cafetería en un período determinado. El anÔlisis estadístico recomendado incluye el uso de intervalos de confianza y la identificación de la distribución de probabilidad de la variable de salida.

Modelos no terminales Las simulaciones no terminales o de estado estable no tienen un punto de finalización definido en el tiempo. Por ejemplo, al modelar la cantidad de mÔquinas necesarias en un sistema de producción que opera continuamente, la simulación continúa hasta que la variable de interés alcance un estado estable. Es importante determinar la longitud de la corrida para garantizar que los resultados del modelo se estabilicen adecuadamente.

Modelo de una lĆ­nea de espera con un servidor

El tiempo que transcurre entre la llegada de ciertas piezas a una estación de inspección sigue una distribución exponencial con media de 5 minutos/pieza. El proceso estÔ a cargo de un operario, y la duración de la inspección sigue una distribución normal con media de 6.0 y desviación estÔndar de 1.0 minutos/pieza. Calcule el tiempo promedio de permanencia de las piezas en el proceso de inspección.

piezas <- 1:1000 # NĆŗmero de piezas simuladas
media_llegadas <- 5  # parƔmetro de la exponencial (para el tiempo entre llegadas)

media_inspeccion <- 6  # Media para el tiempo de inspección (distribución normal)
sd_inspeccion <- 1  # Desviación estÔndar

# Generar tiempos entre llegadas (distribución exponencial)
tiempos_llegadas<-rexp(n,rate=1/media_llegadas)

# Generar tiempos de inspección (distribución normal)
tiempos_inspeccion <- rnorm(n, mean = media_inspeccion, sd = sd_inspeccion)

# Inicializar el tiempo de llegada y salida de cada pieza
tiempo_actual <- 0
tiempos_perm <- numeric(n)  # Para almacenar los tiempos de permanencia

for (i in 1:n) {
  tiempo_llegada <- tiempo_actual + tiempos_llegadas[i]
  tiempo_salida <- tiempo_llegada + tiempos_inspeccion[i]
  
  # Calcular el tiempo de permanencia en el sistema
  tiempos_perm[i] <- tiempo_salida - tiempo_actual
  
  # Actualizar el tiempo actual al tiempo de salida
  tiempo_actual <- tiempo_salida
}

# Calcular el tiempo promedio de permanencia
tiempo_promedio_perm <- mean(tiempos_perm)

# Mostrar resultado
cat("El tiempo promedio de permanencia en el proceso de inspección es:", tiempo_promedio_perm, "minutos.\n")
## El tiempo promedio de permanencia en el proceso de inspección es: 10.81556 minutos.