Vous êtes sur la page 1sur 32

Introducción

La simulación es, por una parte, una manera económica y útil de experimentación.
En muchas ocasiones, el científico o el técnico se encuentran con sistema reales cuyo
funcionamiento desea controlar o mejorar. Un método habitual para alcanzar esos
objetivos consiste en experimentar con el sistema real, si ello es posible, e intentar utilizar
los resultados de la experimentación para conocer y mejorar el funcionamiento del
sistema. En muchas ocasiones, sin embargo, tal experimentación es imposible o, aun
siendo posible, éticamente delicada, o muy costosa, siendo conveniente disponer de algún
método alternativo para ampliar el conocimiento del sistema real.

La Figura 1, muestra de forma esquemática el funcionamiento de un modelo de


un determinado sistema real. Existen unas entradas, tanto estocásticas como
deterministas, y unas salidas. El proceso de conversión de las entradas en salidas no es
una caja negra ‘‘black box’’ como sería si en ese mismo tipo de figura se describiese el
sistema real o incluso un prototipo del mismo. Por definición, las ecuaciones constitutivas
del modelo; es decir, su especificación son conocidas, de modo que el proceso interno de
transformación de las variables de entrada en variables de salida es conocido y fijo una
vez construido el modelo, y generalmente establecido en forma de algoritmo.

Figura 1: Representación esquemática de las ecuaciones lógico-matemáticas.

En ese sentido, los métodos de Montecarlo son métodos de simulación que usan números
(pseudo) aleatorios para investigar el comportamiento de sistemas físicos y matemáticos
y para otros tipos de cálculo.

Debido a que los algoritmos de este tipo deben repetir los cálculos un gran número de
veces, estos métodos requieren el uso de computadores y de diversas técnicas de
simulación.

Un algoritmo Montecarlo es un método numérico que se usa con frecuencia para atacar
problemas matemáticos que no pueden ser resueltos de forma sencilla, por ejemplo a
través del cálculo o por otros métodos numéricos. En muchos casos, su eficiencia respecto
a otras técnicas numéricas aumenta con la dimensión del problema.
Estos métodos tienen una larga historia pero su uso se popularizó después de la Segunda
Guerra Mundial, con el advenimiento de la computadora. El nombre, popularizado por
algunos de los pioneros en el área como S. Ulam, E. Fermi, J. von Neumann y N.
Metropolis, es una referencia al famoso casino en Mónaco. Ulam escribe en su
autobiografía que el método recibió este nombre a sugerencia de Metropolis en honor a
su tío, que era un jugador.

Una de las primeras aplicaciones exitosas del método Montecarlo en Física fue el estudio
de las propiedades del neutrón por Enrico Fermi en 1930 El uso de métodos Monte Carlo
requiere de grandes cantidades de números aleatorios.

Palabras clave: Montecarlo, simulación, integración numérica, estimación estadística,


pseudoaleatorio, aleatorio.

Objetivos
 Conocer y entender la técnica cuantitativa y estadística del método de
Montecarlo mediante la simulación de modelos matemáticos, para el análisis del
comportamiento de un sistema basado en componentes aleatorios.

 Ilustrar el uso de la simulación de Montecarlo para modelar comportamientos de


aproximaciones, hallando el área bajo la curva (integración numérica).

 Implementar Scrips y hacer uso de la función montecarlo() en R para el análisis


de problemas de simulación.
Capítulo 1

Simulación de Montecarlo

1.1. Antecedentes históricos

El método fue llamado así por el principado de Mónaco por ser “la capital del
juego de azar”, al tomar una ruleta como un generador simple de números
aleatorios. El nombre y el desarrollo sistemático de los métodos de Montecarlo
data aproximadamente de 1944 con el desarrollo de la computadora electrónica.
Sin embargo hay varias instancias (aisladas y no desarrolladas) en muchas
ocasiones anteriores a 1944.

En el año 1949, en el Laboratorio de los Alamos se planteó un problema de difícil


solución. Se trataba de determinar el recorrido de los neutrones en los diferentes
medios. Una solución que recurriese a los procedimientos clásicos resultaría
laboriosa y complicada. Los técnicos conocían los datos fundamentales que se
necesitaban para resolver el problema; sin embargo, la dificultad surgía al tratar
de relacionar los datos en una sola fórmula. Ulam y Neumann idearon una
solución que esencialmente consistía en que una ruleta resolviera el problema
propuesto. Se fueron agrupando las probabilidades de los distintos sucesos,
obteniéndose una solución que quedaba dentro de la aproximación exigida por los
técnicos.

Cuando al método empleado fue necesario darle un nombre se le denominó como


“Montecarlo”. Sin embargo, la técnica matemática empleada era ya conocida con
anterioridad.

En efecto, el descubrimiento de la técnica, de Montecarlo podemos hacerla


retroceder a una época remota en que un matemático legendario observase por
primera vez el camino seguido por un borracho. Supongamos que la probabilidad
de dar pasos en cualquier dirección fuese la misma. El borracho puede dar los
pasos en cualquier dirección de una manera, no previsible aunque casual. Se trata
de determinar a qué distancia se encontrará del punto de partida después de haber
dado n pasos, o también cuál será la distancia más probable al cabo de los n pasos.
Se le denominó el problema del paseo aleatorio (caminatas al azar). Mediante una
aplicación del muestreo aleatorio se resolvió este problema, pero pronto se
encontró que el método podía extenderse a otro tipo de cuestiones y ofrecía
grandes aplicaciones en la práctica.

Estimar tal distancia probable exigiría observar un gran número de borrachos en


condiciones análogas, lo que resultaría difícil o poco práctico. Sin embargo,
puesto que los pasos se dan al azar, podemos simular modelos de sus pasos
mediante una tabla de números aleatorios y aproximarnos a la efectiva situación
real. Con un gran número de pruebas simuladas podemos estimar la distancia
probable después de n pasos.

1.2. ¿Qué es la Simulación de Montecarlo?

El término Montecarlo se aplica a un conjunto de métodos matemáticos que se


empezaron a usar en los 1940s para el desarrollo de armas nucleares, favorecidos
por la aparición de los ordenadores digitales modernos. Consisten en resolver un
problema mediante la invención de juegos de azar cuyo comportamiento simula
algún fenómeno real gobernado por una distribución de probabilidad (ejm. un
proceso físico) o sirve para realizar un cálculo (ejm. evaluar una integral).

Más técnicamente, un Montecarlo es un proceso estocástico numérico, es decir,


una secuencia de estados cuya evolución viene determinada por sucesos
aleatorios. Recordemos que un suceso aleatorio es un conjunto de resultados que
se producen con cierta probabilidad.

1.3. Fundamentos de la simulación de Montecarlo

Un método de Montecarlo es una técnica que implica el uso de números al azar y


probabilidad para resolver problemas. La simulación por ordenador tiene que ver
con el uso de modelos de computadora para imitar la vida real o hacer
predicciones. Cuando se crea un modelo, tiene un cierto número de parámetros de
entrada y unas cuantas ecuaciones que utilizan esos insumos para darle un
conjunto de salidas (o de respuesta a las variables). Este tipo de modelo suele ser
determinista, lo que significa que usted está obteniendo los mismos resultados sin
importar cuántas veces se vuelve a calcular.
Simulación de Montecarlo es un método iterativo de la evaluación de un modelo
determinista utilizando conjuntos de números aleatorios como entradas. Este
método se utiliza a menudo cuando el modelo es complejo, no lineal, o implica
algo más que un par de parámetros inciertos. Una simulación por lo general puede
implicar a más de 10,000 evaluaciones de la modelo, una tarea que en el pasado
sólo era práctica utilizando superordenadores.

El método de Montecarlo es uno de los muchos métodos para el análisis de


propagación de la incertidumbre, donde el objetivo es determinar cómo la
variación al azar, la falta de conocimiento, o el error afecta a la sensibilidad, el
rendimiento o la fiabilidad del sistema que se está modelando.

La simulación de Montecarlo está clasificado como un método de muestreo


debido a que las entradas son generadas aleatoriamente por las distribuciones de
probabilidad para simular el proceso de toma de muestras de una verdadera
población. Por lo tanto, tratamos de escoger una distribución de las entradas que
más se coincide con los datos que ya tenemos, o mejor representa nuestro estado
actual del conocimiento. Los datos generados a partir de la simulación se pueden
representar como distribuciones de probabilidad (o histogramas) o se convierten
en barras de error, las predicciones de fiabilidad, las zonas de tolerancia, y los
intervalos de confianza. (Ver Figura 2).

Figura 2: Esquema que muestra el principio de la propagación de la incertidumbre


estocástica. (El principio básico detrás de la simulación de Monte Carlo.)

1.4. El método
La novedad que el método ofrece reside principalmente en su punto de vista. Con
pocas excepciones la mayoría de los autores parten de un problema probabilístico
hasta llegar a un problema con ecuaciones funcionales, cuya solución se obtiene
con los métodos clásicos, o al menos se demuestra que existe y que proporciona
la respuesta al problema probabilístico. En el método de Montecarlo la situación
se invierte. El problema probabilístico (del que puede siempre obtenerse una
solución aproximada mediante pruebas repetidas), se considera como el
instrumento para encontrar la solución numérica de una ecuación funcional. O en
alternativa, un problema físico que exige un modelo analítico, el problema
probabilístico equivalente es considerado corno un modelo suficiente y la
deducción de una solución analítica se considera superflua.

Es interesante observar que el método de Montecarlo no es del todo nuevo a los


estadísticos, pues éstos vienen utilizándolo desde hace más de cincuenta años.

En Estadística se presenta el problema de hallar la distribución de un estimador o


estadístico en el muestreo.

Si de una población cuya función de densidad es f  x  se obtiene una muestra


aleatoria simple,
x1 , x2 , x3 , , xn

la función de densidad conjunta de la muestra es

f  x1  , f  x2  , f  x3  , , f  xn 

Si por h  x1 , x2 , x3 , , xn  designamos un estadístico, la función de distribución


del estadístico exige el cálculo de una integral múltiple.

F  x   prob  h  x1 , x2 , x3 , , xn   x  

   f  x , f  x , f  x ,
R
1 2 3 , f  xn  dx1dx2 dx3 dxn

donde el dominio de integración viene definido por la relación

h  x1 , x2 , x3 , , xn   x

Puesto que el cálculo de la integral múltiple es complicado, los estadísticos han


recurrido con frecuencia a realizar un muestreo artificial en la población dada,
mediante una tabla de números aleatorios u otro procedimiento de azar, con lo que
el valor del estadístico se observa repetidamente y su distribución puede
establecerse empíricamente de forma aproximada.

Mediante este procedimiento, la distribución experimental del estadístico no es


otra cosa que un método de Montecarlo de integración numérica. Así fue
establecida en 1908 la distribución del estadístico t de Student, aunque
posteriormente se estableció su distribución matemáticamente.

Para crear un modelo exitoso mediante el método de Montecarlo debemos seguir


la siguiente cadena:

• Crear el modelo
Identificación • Realizar una simulación
Iteración
matemático del sistema del modelo, generando
• Identificar las variables números aleatorios para • Repetir n veces la
aleatorias que influyen las variables identificadas simulación, para poder
dentro del así contar con un mayor
comportamiento general muestreo que nos facilite
del sistema determinar su
comportamiento
Estructura Simulación

Figura 3: Procedimiento de la simulación de Montecarlo.


Capítulo 2

Implementación del Método

2.1. Pasos para realizar el método

Para el caso de una sola variable los pasos son los siguientes:

Paso 1: Crear un modelo paramétrico, y  f  x1 , x2 , x3 , , xn  .

Paso 2: Generar una secuencia de datos aleatorios, r1 , r2 , r3 , , rn , uniformemente


distribuidos en [0, 1].

Paso 3: Usar esta secuencia para producir otra secuencia, x1 , x2 , x3 , , xn ,


distribuida de acuerdo a la función de probabilidad (pdf) de la variable
aleatoria en la que estamos interesados.

Usar la secuencia de valores x para estimar alguna propiedad de f  x  .


Los valores de x pueden tratarse como medidas simuladas y a partir de
ellos puede estimarse la probabilidad de que los x tomen valores en una
cierta región.

Paso 4: Evaluar el modelo y almacenar los resultados como y.

Paso 5: Repita los pasos 2 y 3 para i = 1 hasta n .

Paso 6: Analizar los resultados con histogramas, estadísticas de resumen, los


intervalos de confianza, etc.
2.2. Generación de números y variables aleatorias

Debido a que el método de Montecarlo es un procedimiento general para


seleccionar muestras aleatorias de una población utilizando números aleatorios,
describiremos algoritmos de generación de números (pseudo) aleatorios, entre los
principales tenemos:

 Generadores no congruenciales.- El método consiste en partir de una


semilla y elevarla al cuadrado, el siguiente número de la serie se obtendría
como resultado de extraer las D-dígitos centrales del cuadrado obtenido y así
sucesivamente. El problema que presenta este método es que los ciclos se
producen rápidamente.
 Algoritmo de cuadrados medios
 Algoritmo de productos medios
 Algoritmo de multiplicador constante

 Generadores congruenciales.- Hacia 1949, Lehmer introduce un método


de generación de números aleatorios mediante el cual un término de la
serie se obtiene como función del término inmediatamente anterior (
xn  f  xn1  ).

La función aplicada es la siguiente:

xn1   axn  c  mod m , siendo 0  xn < m n

En el generador distinguimos cuatro elementos:

- x0, es el valor inicial o semilla.


- a, multiplicador, siendo 0  a < m.
- c, incremento, siendo 0  c < m.
- m, módulo.

 Generadores de distribuciones de probabilidad.- Al considerar los


valores de una variable aleatoria es posible desarrollar una función
matemática que asigne una probabilidad a cada realización x de la variable
aleatoria X. Esta función recibe el nombre de función de distribución
(densidad) de probabilidad de la variable aleatoria X. Entre los métodos
más importantes tenemos:

o Transformada inversa
o Rechazo
o Composición
o Convolución
A continuación se muestra como ejemplo algunas distribuciones de
probabilidad discretas y continuas generadas a partir de uno de los
métodos mencionados:

 Distribución uniforme general.- Obtenida a partir de la transformada


inversa.
Ui  a  (b  a) Ri
Donde:
a : límite inferior de la distribución uniforme.
b : límite superior de la distribución uniforme.
Ui : número aleatorio con distribución uniforme.
Ri : número aleatorio con distribución uniforme entre 0 y 1.

 Distribución normal.- Obtenida a partir del método de convolución.

 12 
Ni    Ri  6    
 i 1 

O bien mediante el método directo:

Ni  
  
2 ln 1  Ri  cos  2Ri 1     

N i  
  
2 ln 1  Ri  sen  2Ri 1     

Donde:
 : media de la distribución normal.
 : desviación estándar de la distribución normal.
Ni : número aleatorio con distribución normal.

 Distribución Bernoulli.- Obtenida a partir del método de transformada


inversa.
Si: 0  Ri < 1 – p BEi = 0
Si: 1 – p  Ri < 1 BEi = 1
Donde:
p : probabilidad de ocurrencia del evento X = 1.
1-p : probabilidad de ocurrencia del evento X = 0.
BEi : número aleatorio con distribución de Beronulli.

2.3. Integración de Montecarlo

Un uso común del método de Montecarlo es llevar a cabo la integración numérica


en una función que puede ser difícil de integrar analíticamente. Esto puede parecer
sorprendente al principio, pero la intuición es más directa. La clave es pensar en
el problema geométricamente y conectar esta con probabilidad.
Si x es una variable aleatoria con densidad f y g : → es una función, entonces
el valor esperado de la v. a. g(x) es


E  g  x     g  x  f  x  dx


La Ley Fuerte de los Grandes Números nos dice: Si x1 , x2 , x3 , , xn es una


sucesión de v. a. idéntica e independientemente distribuidas (i. i. d.), todas con
media µ, entonces

x1  x2  x3   xn
lim 
n  n

Aproximación a partir del valor esperado.

b
i) Queremos calcular:    f  x  dx
a

ii) Tomamos n muestras xi, con distribución uniforme, en el intervalo [a, b].
iii) Estimador de Montecarlo:   E  f  x   , entonces:

ba n
  f  xi 
n i 1

Aproximación a partir de la probabilidad p̂ .

A continuación aplicaremos el método de Montecarlo al cálculo de una integral


definida.

Así, por ejemplo, si se quiere calcular

 f  x  dx
a

se establecerá un modelo estocástico de forma que la probabilidad de que un punto


tomado al azar en el rectángulo R, quede dentro del área encerrada por la curva,
será:

Area bajo la curva A


p 
Area del rectángulo R
Luego,
A  R. p
Donde, R  M  b  a 

Figura 4: Representación del área bajo la curva de f(x).

El problema queda reducido a estimar dicha probabilidad mediante un muestreo


utilizando la generación de números aleatorios. Eligiendo un punto al azar con
abscisa comprendida entre a y b, si la ordenada del mismo fuese inferior a la de
la curva, constituirá un éxito E, y si fuese superior, un fracaso F. Realizado un
número suficiente de experiencias, la frecuencia NE/N, con N = NE + NF será el
estimador de la probabilidad p y el área será aproximadamente:

NE N
A  R.  M .b  a  E
N N

Precisión en el cálculo

El procedimiento de Montecarlo tiene N puntos aleatorios de los que NE resultan


corresponder al área que deseamos calcular.

NE
A  R.
N

Luego A es proporcional a la probabilidad de que un punto aleatorio caiga en la


superficie. Estimaremos esa probabilidad como:

NE
pˆ 
N

Que será la probabilidad de NE éxitos en N intentos y que viene dada por la


distribución binomial:
 N  NE N  NE
P  N E aciertos en N    p q
 NE 

La distribución binomial se puede aproximar mediante una normal cuando: N.p >
5 y N.q >5.

La distribución normal por la que aproximamos tendrá media  = N.p y varianza


2=N.p.q

Además para una distribución normal N(µ, σ) sabemos que el 95% de las
observaciones se encuentran en el intervalo:

(µ - 2σ, µ + 2σ)

Con lo que suponiendo N.p > 5 y N.q >5 tendremos que el intervalo de confianza
al 95% del número de aciertos NE en A estará en:

 N. p  2 N . p.q , N . p  2 N . p.q 
2.4. Ventajas del método de Montecarlo

• Resultados probabilísticos. Los resultados muestran no sólo lo que puede


suceder, sino lo probable que es un resultado.

• Resultados gráficos. Gracias a los datos que genera una simulación


Montecarlo, es fácil crear gráficos de diferentes resultados y las posibilidades
de que sucedan. Esto es importante para comunicar los resultados a otras
personas interesadas.

• Análisis de sensibilidad. Con sólo unos pocos resultados, en los análisis


deterministas es más difícil ver las variables que más afectan el resultado. En
la simulación Monte Carlo, resulta más fácil ver qué variables introducidas
tienen mayor influencia sobre los resultados finales.

• Análisis de escenario. En los modelos deterministas resulta muy difícil


modelar diferentes combinaciones de valores de diferentes valores de entrada,
con el fin de ver los efectos de situaciones verdaderamente diferentes.
Usando la simulación Montecarlo, los analistas pueden ver exactamente los
valores que tienen cada variable cuando se producen ciertos resultados. Esto
resulta muy valioso para profundizar en los análisis.
• Correlación de variables de entrada. En la simulación Monte Carlo es
posible modelar relaciones interdependientes entre diferentes variables de
entrada. Esto es importante para averiguar con precisión la razón real por la
que, cuando algunos factores suben, otros suben o bajan paralelamente.
Capítulo 3

Simulación de Montecarlo en R

3.1. Ejemplo aplicativo: Integración


1

 x dx
2
Consideremos un caso más sencillo:
0

Figura 5: Gráfica de la función f(x).

Siempre podremos considerar que el área se encuentra inscrita en un cuadrado de


área 1.

Podremos considerar en el cuadrado de área 1 un número N de puntos aleatorios


(x, y), y un número NE que aparecen dentro de la superficie a determinar.
Figura 6: Representación de puntos (x, y).

Si generamos 10 números aleatorios para x e y, se tiene la siguiente tabla:

Tabla N° 1: Simulaciones
i x y f(x) y  f(x)
1 0.883 0.682 0.7793 E
2 0.331 0.903 0.1099 F
3 0.354 0.957 0.1253 F
4 0.426 0.022 0.1811 E
5 0.756 0.978 0.5715 F
6 0.258 0.279 0.0664 F
7 0.909 0.124 0.8261 E
8 0.747 0.950 0.5573 F
9 0.889 0.518 0.7906 E
10 0.027 0.442 0.0007 F

con M igual al máximo f(x) generado, entonces M = 0.8261

Por tanto el área estimada sería:

NE 4
A  M .b  a   0.82611  0   0.33044
N 10

 x dx  0.33333 , entonces el error de aproximación de


2
Si el valor verdadero de
0

0.87%.
3.2. Scrip en R de la Integración de Montecarlo.

a) Método: Aproximación a partir de la probabilidad p̂ .


1

 x dx
2
Implementaremos el ejemplo aplicativo desarrollado anteriormente:
0

Integra_montecarlo1.R
# Implementación de la INTEGRACIÓN DE MONTECARLO
# Calculo de la integral de f(x) en [a,b]
n=100 # Tamaño de muestra
ale1<-runif(n,0,1)
ale2<-runif(n,0,1)
X<-numeric(n); Y<-numeric(n) # Inicializa Eje x e y
f<-numeric(n) # Inicializa valores de la f(x)
NE<-0
a<-0; b<-1; M<-1 # límite superior de eje x e y
for(i in 1:n){
X[i]<-a+(b-a)*ale1[i]
Y[i]<-ale2[i]*M
f[i]<-X[i]^2
if(Y[i]<=f[i]){
NE<-NE+1
}
}
p<-NE/n
M<-max(f)
A<-M*(b-a)*p; A

#Grafica de puntos y f(x)


plot(ale1,ale2,main="Gráfica de (Xi,Yi) y
f(x)",xlab="X",ylab="Y")
x<-c(1:100); curve(x^2,0,1,add=T,col="red")

Resultados de la aproximación de acuerdo al tamaño de la muestra:

Tamaño de muestra Aproximación: A


10 0.6701233
50 0.2050577
100 0.3681199
500 0.3501882
1000 0.3318903

Gráficos:
n = 10 n = 50

n = 100 n = 500

n = 1000

Figura 7: Representación de puntos (x, y) y f(x) para diferentes tamaños de


muestra.

Como se puede observar, a medida que se incrementa el tamaño de muestra de la


simulación se aproxima más al valor verdadero, esta es una de las grandes ventajas
que nos da la simulación.
A continuación modificaremos el scrip, para utilizar los generadores de números
aleatorios implementadas con las funciones de R, para el caso utilizaremos runif()
y hacer que realice un determinado número de simulaciones para ver como es el
proceso de convergencia de la aproximación.

Integ_montecarlo2.R
# Implementación de la SIMULACIÓN DE MONTECARLO 2
# Calculo de la integral de f(x) en [a,b] Utilizando: runif(x,a,b)
# Ingrese el numero de simulaciones (N) con muestra n=100
N<-100
n<-100
# Integración de Montecarlo: I=f(x) en el intervalo [0,1]
a<-0; b<-pi/2 # limites eje x
M<-1 # limite superior de eje y
A<-numeric(N) # Inicializa las aproximaciones
for(j in 1:N){
ale1<-runif(n,0,1)
ale2<-runif(n,0,1)
X<-numeric(n); Y<-numeric(n) # Inicializa Eje X e Y
f<-numeric(n) # Inicializa valores de la f(x)
NE<-0
for(i in 1:n){
X[i]<-a+(b-a)*ale1[i]
Y[i]<-ale2[i]*M
f[i]<-X[i]^2
if(Y[i]<=f[i]){
NE<-NE+1
}
}
p<-NE/n; M<-max(f)
A[j]<-M*(b-a)*p
}
A #Aproximaciones de N simulaciones
summary(A) # Estadisticas descriptivas
ks.test(A,"pnorm",mean=mean(A),sd=sd(A)) # Prueba de normalidad

par(mfrow=c(1,3))
qqnorm(A); qqline(A,lty=2) # Grafico de normalidad
# Histograma de las aproximaciones del área bajo la curva
hist(A,freq=F,breaks=12,border="blue",main="Aproximación de área
f(x)=x^2",xlab="Aproximación",ylab="Casos")
boxplot(A,main="Aproximación de Área")

En este caso mostraremos los resultados de aproximación, la prueba de


normalidad y los gráficos respectivos para el caso de N = 10 simulaciones:

> A
[1] 0.3069706 0.2895117 0.3387596 0.2972500 0.3835348 0.2935657 0.2837584
0.2968663 0.3598796
[10] 0.3052450
> summary(A) # Estadísticas descriptivas
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.2838 0.2944 0.3012 0.3155 0.3308 0.3835

> ks.test(A,"pnorm",mean=mean(A),sd=sd(A)) # Prueba de normalidad

One-sample Kolmogorov-Smirnov test

data: A
D = 0.30058, p-value = 0.2685
alternative hypothesis: two-sided

A continuación resumiremos en una tabla para distintos tamaños de simulación


con sus respectivos gráficos para poder analizar la convergencia de la
aproximación hacia el valor verdadero.

Tabla N°2: Resumen de resultados


Estadísticas de resumen Prueba normalidad KS
N
Min Mediana Media Máx D p-value Decisión
10 0.2838 0.3012 0.3155 0.3835 0.30058 0.2685 n.s.
50 0.2643 0.3382 0.3404 0.4525 0.11702 0.4653 n.s.
100 0.2560 0.3421 0.3382 0.4095 0.066809 0.7635 n.s.
500 0.2159 0.3352 0.3348 0.5304 0.040163 0.3954 n.s.
1000 0.1845 0.3333 0.3364 0.5064 0.045849 0.02986 *

Gráficos:

N=10

N=50
N=100

N=500

N=1000
Figura 8: Análisis grafico de los resultados para diferente número de
simulaciones.

b) Método: Aproximación a partir del valor esperado E  f  x   .

Integ_mc.R
# Implementación de la INTEGRACIÓN DE MONTECARLO
# Calculo de la integral de f(x) en [a,b] a partir de E[f(x)]
N<-100 # Número de simulaciones
n<-1000 # Tamaño de muestra
a<-0; b<-1 # Intervalo [a,b] de f(x)
VE<-numeric(N)
for(i in 1:N){
X<-runif(n,0,1)
f<-X^2 # Evaluación de la función f(x)
VE[i]<-(b-a)*mean(f)
}
VE
summary(VE) # Estadisticas descriptivas
# Histograma de las aproximaciones del área bajo la curva
hist(VE,freq=F,breaks=12,border="blue",main="Aproximación de
área f(x)=x^2",xlab="Aproximación",ylab="Casos")

Nos muestra los siguientes resultados:

> VE
[1] 0.3203896 0.3533141 0.3248397 0.3424682 0.3307663 0.3265752 0.3394397 0.3451242 0.3295113
[10] 0.3351824 0.3461745 0.3267319 0.3191494 0.3272869 0.3250745 0.3250282 0.3294878 0.3384200
[19] 0.3343114 0.3392624 0.3307482 0.3462076 0.3355858 0.3445354 0.3440985 0.3383918 0.3292284
[28] 0.3183935 0.3445569 0.3222936 0.3408717 0.3252232 0.3309071 0.3325074 0.3375263 0.3173681
[37] 0.3394264 0.3221398 0.3371886 0.3381269 0.3469979 0.3129660 0.3251183 0.3354699 0.3380065
[46] 0.3395206 0.3143291 0.3225172 0.3274109 0.3335922 0.3284824 0.3206352 0.3269811 0.3466037
[55] 0.3299163 0.3160367 0.3383403 0.3315029 0.3340625 0.3287183 0.3254946 0.3507176 0.3257238
[64] 0.3239582 0.3450534 0.3193494 0.3267240 0.3334620 0.3242506 0.3471939 0.3462986 0.3413239
[73] 0.3457088 0.3337415 0.3366540 0.3510426 0.3603581 0.3182624 0.3388698 0.3251513 0.3383262
[82] 0.3334701 0.3337680 0.3218603 0.3276790 0.3378639 0.3142044 0.3530233 0.3273847 0.3398311
[91] 0.3257180 0.3337078 0.3528527 0.3365291 0.3240713 0.3299805 0.3351605 0.3319708 0.3463832
[100] 0.3325417

> summary(VE) # Estadisticas descriptivas


Min. 1st Qu. Median Mean 3rd Qu. Max.
0.3130 0.3257 0.3335 0.3333 0.3394 0.3604

El histograma de 100 simulaciones se muestra en el siguiente gráfico:

Figura 9: Histograma de N=100.

A comparación del método anterior el rango de la aproximación es pequeño.

3.3. Función MONTECARLO( ) en R

Es un método para generar números aleatorios de una distribución desconocida;


utiliza un conjunto de datos y mediante su comportamiento acumulativo de su
frecuencia relativa genera los posibles valores aleatorios que siguen la
distribución de los datos. Estos nuevos números son utilizados por algún proceso
de simulación.

Librería: {Agricolae}

Descripción: La generación aleatoria de datos, usa función de densidad y


parámetros.

Sintaxis:
montecarlo(data, k, ...)

Argumentos:

data: Vector de datos u objeto (hist, graph.freq, …)


k: número de simulaciones
… Otros parámetros de la función de densidad, solamente si la data es un
vector.

Ejemplo Aplicativo:

Data: soil {agricolae}: Corresponde a los datos de análisis de suelo para 13


localidades.

Se analizaron las propiedades físicas y químicas de los diferentes suelos, lo más


completa caracterización de suelos y análisis especial de micro-elementos. Estos
análisis se realizaron en el laboratorio de análisis de suelos, plantas, agua y
fertilizantes en la Universidad Nacional Agraria La Molina (UNALM).

ejm_montecarlo.R
# Ejemplo de simulación de Montecarlo
# Utilizando librería AGRICOLAE y data SOIL
library(agricolae)
data(soil)
simulado<-montecarlo(soil$pH,1000)
h<-graph.freq(simulado,nclass=77,plot=F)
par(mar=c(2,0,2,1))
plot(density(soil$pH),axes=F,main="pH densidad del
suelo",xlab="",lwd=2)
lines(density(simulado),col="blue",lty=4,lwd=2)
axis(1,0:12)
legend("topright",c("Original","Simulado"),lty=c(1,4),col=c("bla
ck","blue"),lwd=4)
round(table.freq(h),2)
# Estadisiticas descriptivas
summary(soil$pH) # Estadísticas datos originales
summary(simulado) # Estadísticas datos simulados

Con 1000 datos simulados se tiene los siguientes resultados:


Lower Upper Main freq relative CF RCF
[1,] 1.60 1.72 1.66 2 0.00 2 0.00
[2,] 1.72 1.84 1.78 0 0.00 2 0.00
[3,] 1.84 1.96 1.90 1 0.00 3 0.00
[4,] 1.96 2.08 2.02 0 0.00 3 0.00
[5,] 2.08 2.20 2.14 0 0.00 3 0.00
[6,] 2.20 2.32 2.26 1 0.00 4 0.00
[7,] 2.32 2.44 2.38 3 0.00 7 0.01
[8,] 2.44 2.56 2.50 2 0.00 9 0.01
[9,] 2.56 2.68 2.62 8 0.01 17 0.02
[10,] 2.68 2.80 2.74 0 0.00 17 0.02
... ... ... ... ...
[70,] 9.88 10.00 9.94 4 0.00 993 0.99
[71,] 10.00 10.12 10.06 2 0.00 995 1.00
[72,] 10.12 10.24 10.18 2 0.00 997 1.00
[73,] 10.24 10.36 10.30 0 0.00 997 1.00
[74,] 10.36 10.48 10.42 1 0.00 998 1.00
[75,] 10.48 10.60 10.54 1 0.00 999 1.00
[76,] 10.60 10.72 10.66 1 0.00 1000 1.00
En el siguiente gráfico se muestra los datos originales y los simulados, en donde
podemos observar la similitud de ambas densidades y las estadísticas descriptivas

> # Estadisiticas descriptivas


> summary(soil$pH) # Estadísticas datos originales
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.800 4.700 6.100 6.154 7.600 8.400

> summary(simulado) # Estadísticas datos simulados


Min. 1st Qu. Median Mean 3rd Qu. Max.
1.658 4.634 5.992 6.168 7.757 10.720

La densidad de probabilidad de los datos originales y simulados puede ser


comparados, como se muestra en la Figura 10.

Figura 10: Distribución de los datos simulados y el original.


Conclusiones

Podemos decir que el método Montecarlo es aplicable en todos aquellos sistemas que
cuenten con un factor de aleatoriedad. Con lo cual podemos concluir que se puede aplicar
a sistemas complejos, de los cuales podemos destacar áreas como informática, financiera,
industrial, entre otras.

Montecarlo es un método directo y flexible; que permiten obtener aproximaciones cuando


el modelo matemático es demasiado complicado.

Permite estudiar la interacción entre las diferentes variables.

Se encuentra el método, como una alternativa de aproximación efectiva.

La calidad de la aproximación tanto para el cálculo del área como del volumen depende
de la cantidad de puntos aleatorios generados como de las simulaciones realizadas, al
aumentar estas dos variables los resultados generados tendrán una mejor aproximación.
Bibliografía
P. Robert, C. y Casella, G. (2010). Introducing Monte carlo Methods with R. Springer.
USA – New York.

Illana, J. I. (2013). Métodos Monte Carlo. Departamento de Física Teórica y del Cosmos.
Universidad de Granada.

De Mendiburu, F. (2015). Tutorial de Agricola V1.2-2. Universidad Nacional Agraria La


Molina – Perú.

Azarang, M. y Garcia, E. (1998). Simulación y Análisis de Modelos Estocásticos.


México.

Rios, D. (2009). Simulación, Métodos y Aplicaciones. España, Ed. RA-MA, 2ª. Edición.
México.

Wainer, G. (2003). Métodos de modelización y simulación de eventos discretos. Editorial


Nueva Librería. Buenos Aires-Argentina.
Anexos
Scrip N° 1: INTEGRACIÓN DE MONTECARLO PARA f  x   x2 .

Implementado con:

 Generador de números psudoaleatorios: método congruencial Multiplicativo


 Función generadora de Variables Aleatorias Uniformes y Muestreador.

Integ_montecarlo.R
# Implementación de la SIMULACIÓN DE MONTECARLO
# Calculo de la integral de f(x) en [a,b]

# Generador congruencial multiplicativo: Xn+1 = 171Xn mod 30269 y Xo = 27218


pseudoa<-numeric(1000) # Inicializa el vector
sem<-27218
for (j in 1:1000){
sem<-(171*sem)%%30269
pseudoa[j]<-sem/30269
}

# Ingrese muestra < a 1000


n<-100

# Función generador de variable aleatoria - Distribución Uniforme


# Método Transformada inversa: Ei = a+(b-a)Ri
aleatorio<-function(n){
# Muestrea el tamaño de pseudo[]
#####################################################################
m.ale<-matrix(0,n,n)
for (j in 1:n){
a<-sample(1:1000,n) #Genera n numeros aleatorios entre 1 y 1000
for (i in 1:n){
k<-a[i]
m.ale[i,j]<-pseudoa[k]
}
}
####################################################################

U<-numeric(n)
li<-0 # límite inferior
ls<-1 # límite superior
for(i in 1:n){
U[i]<-li+(ls-li)*m.ale[i]
}
return(U)
}

# Integración de Montecarlo
# I=f(x) en [0,1]
# Intervalo [a=0,b=1]
a<-0; b<-1 #limites eje x
M<-1 #limite superior de eje y
ale1<-aleatorio(n)
ale2<-aleatorio(n)
X<-numeric(n) # Inicializa Eje X
Y<-numeric(n) # Inicializa Eje y
f<-numeric(n) # Inicializa valores de la f(x)
NE<-0
for(i in 1:n){
X[i]<-a+(b-a)*ale1[i]
Y[i]<-ale2[i]*M
f[i]<-X[i]^2
if(Y[i]<=f[i]){
NE<-NE+1
}
}
p<-NE/n
M<-max(f)
A<-M*(b-a)*p; A

#Grafica de puntos y f(x)


plot(ale1,ale2,main="Gráfica de (Xi,Yi) y f(x)",xlab="X",ylab="Y")
x<-c(1:100); curve(x^2,0,1,add=T,col="red")

Scrip N° 2: OPTIMIZACIÓN DEL BENEFICIO.


Una cadena de distribución de material informático ha de decidir cuantas licencias de un
nuevo sistema operativo ha de comprar para maximizar su beneficio. Dispone de
información histórica que le informa sobre la probabilidad de vender cierto número de
copias. El coste de adquisición de cada licencia es de 75 €, el precio de venta de 100 €.
Cuando salga a la venta el nuevo S.O. el almacén podrá devolver al fabricante las copias
no vendidas obteniendo un ingreso de 25 € por cada licencia devuelta.

nºLic.Vendidas Prob. Prob. Acum. Ext.Inf.Interv. Ext.Sup.Interv. nºLic.Vendidas


100 0.30 0.30 0.00 0.30 100
150 0.20 0.50 0.30 0.50 150
200 0.30 0.80 0.50 0.80 200
250 0.15 0.95 0.80 0.95 250
300 0.05 1.00 0.95 1.00 300

Coste de cada licencia 75.00 €


Precio de venta unitario 100.00 €
Ingresos por devolución 25.00 €
Cantidad Lic. a comprar 200

# OPTIMIZACIÓN DE BENEFICIO
aleatorio<-function(x){
a<-13
b<-65
m<-3456
y<-56
datos<-1
for(i in 1:x){
y<-(((y*a)+b)%%m)
datos[i]<-c(y/m)
}
return(datos)
}
dat<-aleatorio(1000)
plot(dat)

##datos<-c(10,20,10,50,60,80,85,99,35,55)
##recodificacion de varaibles
nuv<-recode(dat,
"0:.30=100;.30:.50=150;.50:.80=200;.80:.95=250;.95:1=300")
hist(nuv)
cant_lic<-200 ## cantidad de liciencias vendidas
dev<-1
for(i in 1:1000){
if(nuv[i]>cant_lic){
nuv[i]<-200
}
}
for(i in 1:1000){
dev[i]<-cant_lic-nuv[i]
}
##dev
## Calculo de ingreso de ventas
ing_ventas<-1
costo_lic<-75
costo<-costo_lic*cant_lic
precio_ven<-100
for(i in 1:1000){
ing_ventas[i]<-precio_ven*nuv[i]
}
##Ingreso por liciencias devueltas
ing_dev<-1
ing_devolucion<-25
for(i in 1:1000){
ing_dev[i]<-ing_devolucion*dev[i]
}
## Calculo beneficio
beneficio<-1
for(i in 1:1000){
beneficio[i]<-ing_dev[i]+ing_ventas[i]-costo
}
##calculo de Promedio del veneficio
suma<-0
for(i in 1:1000){
suma<-suma+beneficio[i]
}
media<-suma/1000; media
sd(beneficio)

Resultados:

> media
[1] 1812.5
> sd(beneficio)
[1] 3243.8

Vous aimerez peut-être aussi