aproximada utilizando la simulación de Monte Carlo

35

He estado mirando la simulación de Monte Carlo recientemente, y la he estado usando para aproximar constantes como (círculo dentro de un rectángulo, área proporcional).π

Sin embargo, no puedo pensar en un método correspondiente para aproximar el valor de [número de Euler] utilizando la integración de Monte Carlo.e

¿Tiene alguna sugerencia sobre cómo se puede hacer esto?

estadística newbie12345
fuente
77
Hay muchas, muchas, muchas formas de hacer esto. Que esto sea así podría hacerse evidente al contemplar lo que hace el Rcomando 2 + mean(exp(-lgamma(ceiling(1/runif(1e5))-1))). (Si el uso de la función de registro Gamma le molesta, reemplácelo por 2 + mean(1/factorial(ceiling(1/runif(1e5))-2)), que solo usa suma, multiplicación, división y truncamiento, e ignore las advertencias de desbordamiento). Lo que podría ser de mayor interés serían las simulaciones eficientes : ¿puede minimizar el número de pasos computacionales necesarios para estimar con una precisión dada? e
whuber
44
¡Qué pregunta tan deliciosa! Espero leer las respuestas de los demás. Una forma en la que realmente podría llamar la atención sobre esta pregunta, tal vez otra media docena de respuestas, sería revisar la pregunta y pedir respuestas eficientes , como sugiere Whuber. Eso es como hierba gatera para usuarios de CV.
Sycorax dice Reinstate Monica
1
@EngrStudent No estoy seguro de que exista el análogo geométrico para . Simplemente no es una cantidad geométrica natural (juego de palabras) como . eπ
Aksakal
66
@Aksakal es una cantidad excepcionalmente geométrica. En el nivel más elemental, aparece naturalmente en expresiones para áreas relacionadas con hipérbolas. A un nivel ligeramente más avanzado, está íntimamente conectado con todas las funciones periódicas, incluidas las funciones trigonométricas, cuyo contenido geométrico es obvio. El verdadero desafío aquí es que es muy fácil simular valores relacionados con ! eee
whuber
2
@StatsStudent: por sí mismo no es interesante. Sin embargo, si esto conduce a estimadores imparciales de cantidades como esto puede resultar más útil para los algoritmos MCMC. e
exp{0xf(y)dG(y)}
Xi'an

Respuestas:

34

La forma simple y elegante de estimar por Monte Carlo se describe en este documento . El artículo trata sobre la enseñanza . Por lo tanto, el enfoque parece perfectamente adecuado para su objetivo. La idea se basa en un ejercicio de un popular libro de texto ruso sobre teoría de la probabilidad de Gnedenko. Ver ex.22 en p.183eee

Sucede de modo que , donde es una variable aleatoria que se define de la siguiente manera. Es el número mínimo de tal que y son números aleatorios de distribución uniforme en . Hermoso, ¿no?ξ n n i = 1 r i > 1 r i [ 0 , 1 ]E[ξ]=eξni=1nri>1ri[0,1]

Dado que es un ejercicio, no estoy seguro de si es bueno para mí publicar la solución (prueba) aquí :) Si desea probarlo usted mismo, aquí hay un consejo: el capítulo se llama "Momentos", que debería señalar usted en la dirección correcta

Si desea implementarlo usted mismo, ¡no siga leyendo!

Este es un algoritmo simple para la simulación de Monte Carlo. Dibuja un uniforme al azar, luego otro y así sucesivamente hasta que la suma exceda 1. El número de randoms extraídos es tu primer intento. Digamos que tienes:

 0.0180
 0.4596
 0.7920

Luego, su primera prueba se procesó. 3. Siga haciendo estas pruebas y notará que, en promedio, obtiene .e

El código MATLAB, el resultado de la simulación y el histograma siguen.

N = 10000000;
n = N;
s = 0;
i = 0;
maxl = 0;
f = 0;
while n > 0
    s = s + rand;
    i = i + 1;
    if s > 1
        if i > maxl
            f(i) = 1;
            maxl = i;
        else
            f(i) = f(i) + 1;
        end
        i = 0;
        s = 0;
        n = n - 1;
    end
end

disp ((1:maxl)*f'/sum(f))
bar(f/sum(f))
grid on

f/sum(f)

El resultado y el histograma:

2.7183


ans =

  Columns 1 through 8

         0    0.5000    0.3332    0.1250    0.0334    0.0070    0.0012    0.0002

  Columns 9 through 11

    0.0000    0.0000    0.0000

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN: Actualicé mi código para deshacerme de la matriz de resultados de prueba para que no tome RAM. También imprimí la estimación de PMF.

Actualización 2: Aquí está mi solución de Excel. Ponga un botón en Excel y vincúlelo a la siguiente macro de VBA:

Private Sub CommandButton1_Click()
n = Cells(1, 4).Value
Range("A:B").Value = ""
n = n
s = 0
i = 0
maxl = 0
Cells(1, 2).Value = "Frequency"
Cells(1, 1).Value = "n"
Cells(1, 3).Value = "# of trials"
Cells(2, 3).Value = "simulated e"
While n > 0
    s = s + Rnd()
    i = i + 1
    If s > 1 Then
        If i > maxl Then
            Cells(i, 1).Value = i
            Cells(i, 2).Value = 1
            maxl = i
        Else
            Cells(i, 1).Value = i
            Cells(i, 2).Value = Cells(i, 2).Value + 1
        End If
        i = 0
        s = 0
        n = n - 1
    End If
Wend


s = 0
For i = 2 To maxl
    s = s + Cells(i, 1) * Cells(i, 2)
Next


Cells(2, 4).Value = s / Cells(1, 4).Value

Rem bar (f / Sum(f))
Rem grid on

Rem f/sum(f)

End Sub

Ingrese el número de pruebas, como 1000, en la celda D1 y haga clic en el botón. Así es como debería verse la pantalla después de la primera ejecución:

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN 3: Silverfish me inspiró de otra manera, no tan elegante como la primera pero aún genial. Calculó los volúmenes de n-simplexes usando secuencias de Sobol .

s = 2;
for i=2:10
    p=sobolset(i);
    N = 10000;
    X=net(p,N)';
    s = s + (sum(sum(X)<1)/N);
end
disp(s)

2.712800000000001

Casualmente escribió el primer libro sobre el método de Monte Carlo que leí en la escuela secundaria. Es la mejor introducción al método en mi opinión.

ACTUALIZACIÓN 4:

Silverfish en los comentarios sugirió una implementación simple de la fórmula de Excel. Este es el tipo de resultado que obtienes con su enfoque después de aproximadamente 1 millón de números aleatorios y 185K pruebas:

ingrese la descripción de la imagen aquí

Obviamente, esto es mucho más lento que la implementación de Excel VBA. Especialmente, si modifica mi código VBA para no actualizar los valores de las celdas dentro del bucle, y solo lo hace una vez que se recopilan todas las estadísticas.

ACTUALIZACIÓN 5

De Xi'an solución # 3 está estrechamente relacionado (o incluso el mismo en cierto sentido como un comentario de por jwg en el hilo). Es difícil decir quién se le ocurrió la idea primera Forsythe o Gnedenko. Edición original de 1950 Gnedenko en ruso no tiene secciones problemas en los capítulos. Por lo tanto, no pude encontrar este problema a primera vista, donde se encuentra en ediciones posteriores. Tal vez fue agregado más tarde o enterrado en el texto.

Como comenté en la respuesta de Xi'an, el enfoque de Forsythe está vinculado a otra área interesante: la distribución de distancias entre picos (extremos) en secuencias aleatorias (IID). La distancia media es 3. La secuencia descendente en el enfoque de Forsythe termina con un fondo, por lo que si continúa muestreando obtendrá otro fondo en algún momento, luego otro, etc. Puede rastrear la distancia entre ellos y construir la distribución.

Aksakal
fuente
¡Wow eso es genial! ¿Es posible añadir uno o dos párrafos que explica por qué esto funciona?
Sycorax dice Restablecer Mónica
77
(+1) ¡Brillante! La respuesta merece la calificación más alta, ya que solo se basa en simulaciones uniformes. Y no usa ninguna aproximación sino la que se debe a Monte Carlo. Que se conecte de nuevo a Gnedenko es un beneficio adicional.
Xi'an
2
¡Guay! Aquí es Mathematica código para misma, como una sola línea:
Mean[Table[ Length[NestWhileList[(Random[]+#) &, Random[], #<1&]], {10^6}]]
Wolfies
44
@wolfies La siguiente traducción directa de la Rsolución que publiqué en la respuesta de Xi'an es veinte veces más rápida:n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]
whuber
1
He publicado el "¿por qué es la media ?" pregunta como una pregunta por derecho propio ; Sospecho que mi solución de boceto (que es lo que inmediatamente se me ocurrió como la visualización "obvia" del problema) no es necesariamente la forma en que los estudiantes rusos tenían la intención de hacerlo. Entonces, soluciones alternativas serían muy bienvenidas. e
Silverfish
19

Sugiero votar la respuesta de Aksakal. Es imparcial y se basa únicamente en un método para generar desviaciones uniformes de la unidad.

Mi respuesta puede hacerse arbitrariamente precisa, pero todavía está sesgada lejos del verdadero valor de .e

La respuesta de Xi'an es correcta, pero creo que su dependencia de la función o de una forma de generar desviaciones aleatorias de Poisson es un poco circular cuando el propósito es aproximar .eloge

La estimación de por Bootstrappinge

Por el contrario, considerar el procedimiento de bootstrapping. Uno tiene un gran número de objetos que se dibujan con el reemplazo a un tamaño de muestra de . En cada sorteo, la probabilidad de no dibujar un objeto particular es , y hay tales empates. La probabilidad de que un objeto en particular se omite de todos los sorteos esn i 1 - n - 1 n p = ( 1 - 1nni1n1np=(11n)n.

Porque supongo que sabemos que

exp(1)=limn(11n)n

entonces también podemos escribir

exp(1)p^=i=1mIiBjm

Es decir, nuestra estimación de se encuentra al estimar la probabilidad de que se omita una observación específica de bootstrap replica en muchas de tales réplicas, es decir, la fracción de ocurrencias del objeto en los bootstraps.pmBji

Hay dos fuentes de error en esta aproximación. Finito siempre significará que los resultados son aproximados, es decir, la estimación está sesgada. Además, fluctuará alrededor del valor verdadero porque es una simulación.np^

Encuentro este enfoque algo encantador porque un estudiante universitario u otra persona con poco que hacer podría aproximarse a usando una baraja de cartas, un montón de piedras pequeñas o cualquier otro elemento a la mano, en la misma línea que una persona podría estimar usando una brújula, un borde recto y algunos granos de arena. Creo que es bueno cuando las matemáticas se pueden divorciar de las comodidades modernas como las computadoras.eπ

Resultados

Realicé varias simulaciones para varias réplicas de bootstrap. Los errores estándar se estiman utilizando intervalos normales.

Tenga en cuenta que la elección de el número de objetos que se están bootstrapped conjuntos de un límite superior absoluto en la precisión de los resultados debido a que el procedimiento de Monte Carlo es la estimación de y sólo depende de . Establecer para que sea innecesariamente grande solo afectará a su computadora, ya sea porque solo necesita una aproximación "aproximada" de o porque el sesgo se verá afectado por la variación debido al Monte Carlo. Estos resultados son para y es exacto al tercer decimal.nppnnen=103p1e

Este gráfico muestra que la elección de tiene consecuencias directas y profundas para la estabilidad en . La línea discontinua azul muestra y la línea roja muestra . Como se esperaba, aumentar el tamaño de la muestra produce estimaciones cada vez más precisas . mp^pep^ingrese la descripción de la imagen aquí

Escribí un guión R vergonzosamente largo para esto. Se pueden enviar sugerencias de mejora al reverso de una factura de $ 20.

library(boot)
library(plotrix)
n <- 1e3

## if p_hat is estimated with 0 variance (in the limit of infinite bootstraps), then the best estimate we can come up with is biased by exactly this much:
approx <- 1/((1-1/n)^n)

dat <- c("A", rep("B", n-1))
indicator <- function(x, ndx)   xor("A"%in%x[ndx], TRUE) ## Because we want to count when "A" is *not* in the bootstrap sample

p_hat <- function(dat, m=1e3){
    foo <- boot(data=dat, statistic=indicator, R=m) 
    1/mean(foo$t)
} 

reps <- replicate(100, p_hat(dat))

boxplot(reps)
abline(h=exp(1),col="red")

p_mean <- NULL
p_var <- NULL
for(i in 1:10){
    reps <- replicate(2^i, p_hat(dat))
    p_mean[i] <- mean(reps)
    p_var[i] <- sd(reps)
}
plotCI(2^(1:10), p_mean, uiw=qnorm(0.975)*p_var/sqrt(2^(1:10)),xlab="m", log="x", ylab=expression(hat(p)), main=expression(paste("Monte Carlo Estimates of ", tilde(e))))
abline(h=approx, col='red')
Sycorax dice reinstalar a Mónica
fuente
44
+1 Tiene mucho sentido. ¿Hay alguna posibilidad de que pueda compartir su código si lo escribió?
Antoni Parellada
2
Aunque esto puede ser arbitrariamente exacto, en última instancia no es satisfactorio porque solo simula una aproximación a lugar de . ee
whuber
1
Seguro. Simplemente terminaría con una llamada replicada dentro de otra, que es esencialmente la misma que tenemos ahora.
Sycorax dice Reinstate Monica
1
@whuber Realmente no veo la distinción entre una aproximación arbitrariamente precisa a una aproximación arbitrariamente precisa a , y una aproximación arbitrariamente precisa a . ee
jwg
1
@jwg Además de ser conceptualmente importante, también es prácticamente importante porque implementar una aproximación a una aproximación requiere hacer un seguimiento de la precisión de cada una de las dos aproximaciones. Pero tendría que estar de acuerdo en que cuando ambas aproximaciones son aceptablemente buenas, el enfoque general está bien.
whuber
14

Solución 1:

Para una distribución de Poisson , Por lo tanto, si , que significa que puede estimar por una simulación de Poisson. Y las simulaciones de Poisson se pueden derivar de un generador de distribución exponencial (si no de la manera más eficiente).P(λ)

P(X=k)=λkk!eλ
XP(1)
P(X=0)=P(X=1)=e1
e1

Observación 1: Como se discutió en los comentarios, este es un argumento bastante complicado ya que simular a partir de una distribución de Poisson o, de manera equivalente, una distribución exponencial puede ser difícil de imaginar sin involucrar un registro o una función exp ... Pero entonces W. Huber llegó a la rescate de esta respuesta con la solución más elegante basada en uniformes ordenados. Sin embargo, es una aproximación , ya que la distribución de un espaciado uniforme es un Beta , lo que implica que que converge a comoU(i:n)U(i1:n)B(1,n)

P(n{U(i:n)U(i1:n)}1)=(11n)n
e1ncrece hasta el infinito Como otro lado que responde a los comentarios, el generador exponencial de 1951 de von Neumann solo usa generaciones uniformes.

Solución 2:

Otra forma de conseguir una representación de la constante como una integral es recordar que, cuando entonces que es también un distribución. Por lo tanto, Un segundo enfoque para aproximar por Monte Carlo es, pues, para simular pares normales y controlar la frecuencia de veces que . En cierto sentido, es lo opuesto a la aproximación de Monte Carlo relacionada con la frecuencia de veces ...e

X1,X2iidN(0,1)
(X12+X22)χ12
E(1/2)
P(X12+X222)=1{1exp(2/2)}=e1
e(X1,X2)X12+X222πX12+X22<1

Solución 3:

Mi colega de la Universidad de Warwick, M. Pollock, señaló otra aproximación de Montecarlo llamada método de Forsythe : la idea es ejecutar una secuencia de generaciones uniformes hasta . ¡La expectativa de la regla de detención correspondiente, , que es el número de veces que la secuencia uniforme bajó es entonces mientras que la probabilidad de que sea ​​impar es ! ( El método de Forsythe en realidad apunta a simular desde cualquier densidad de la forma , por lo tanto, es más general que aproximar y .)u1,u2,...un+1>unNeNe1expG(x)ee1

Esto es bastante paralelo al enfoque de Gnedenko utilizado en la respuesta de Aksakal , por lo que me pregunto si uno puede derivarse del otro. ¡Como mínimo, ambos tienen la misma distribución con probabilidad de masapor valor .1/n!n

Una implementación rápida de R del método de Forsythe es renunciar a seguir con precisión la secuencia de uniformes a favor de bloques más grandes, lo que permite el procesamiento paralelo:

use=runif(n)
band=max(diff((1:(n-1))[diff(use)>0]))+1
bends=apply(apply((apply(matrix(use[1:((n%/%band)*band)],nrow=band),
2,diff)<0),2,cumprod),2,sum)
Xi'an
fuente
12
Mientras uno sepa hacer simulación de Poisson sin saber . e
Glen_b: reinstala a Monica
55
Si llamo al generador R rpoiss (), puedo fingir que no sé . Más en serio, puede generar variantes exponenciales [usando una función lugar de ] hasta que la suma exceda y el número resultante menos uno sea un Poisson . eE(1)loge1P(1)
Xi'an
55
La computación es equivalente a la computación , ya que son inversas. Puede evitar calcular cualquier función de este tipo de varias maneras. Aquí hay una solución basada en su primera respuesta: solo usa aritmética elemental. logexpn <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)
whuber
3
Creo que el método de Forsythe es el mismo que el de Gnedenko. Elegir un uniforme tal que sea ​​menor que 1 es lo mismo que elegir menor que , y si tenemos éxito, se distribuye condicionalmente de manera uniforme entre y 0.xnnxixn1n1xi1nxi1n1xi
jwg
3
No estaba al tanto del enfoque de Forsythe. Sin embargo, está vinculado a algo más muy interesante. Si en lugar de detenerse en sigue muestreando, la expectativa de la distancia desde hasta el siguiente fondo es exactamente 3.n+1n
Aksakal
7

No es una solución ... solo un comentario rápido que es demasiado largo para el cuadro de comentarios.

Aksakal

Aksakal publicó una solución en la que calculamos el número esperado de dibujos uniformes estándar que deben tomarse, de modo que su suma exceda 1. En Mathematica , mi primera formulación fue:

mrM := NestWhileList[(Random[] + #) &, Random[], #<1 &]

Mean[Table[Length[mrM], {10^6}]] 

EDITAR: Acabo de jugar rápidamente con esto, y el siguiente código (el mismo método, también en Mma, solo un código diferente) es aproximadamente 10 veces más rápido:

Mean[Table[Module[{u=Random[], t=1},  While[u<1, u=Random[]+u; t++]; t] , {10^6}]]

Xian / Whuber

Whuber ha sugerido un código rápido y rápido para simular la solución 1 de Xian:

Versión R: n <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)

Versión de MMA: n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]

que él nota es 20 veces más rápido que el primer código (o aproximadamente el doble de rápido que el nuevo código anterior).

Solo por diversión, pensé que sería interesante ver si ambos enfoques son tan eficientes (en un sentido estadístico). Para hacerlo, generé 2000 estimaciones de e usando:

  • Método de Aksakal: dataA
  • Método 1 de Xian usando el código whuber: dataB

... ambos en Mathematica . El siguiente diagrama contrasta una estimación de densidad de kernel no paramétrica de los conjuntos de datos dataA y dataB resultantes.

ingrese la descripción de la imagen aquí

Entonces, mientras que el código de Whuber (curva roja) es aproximadamente el doble de rápido, el método no parece ser tan 'confiable'.

wolfies
fuente
Una línea vertical en la ubicación del valor real mejoraría enormemente esta imagen.
Sycorax dice Reinstate Monica
1
Es una observación muy interesante, gracias. Dado que el ancho medio se escalará cuadráticamente con el tamaño de la simulación y el ancho medio del método de Xi'an es aproximadamente el doble que el de Aksakal, ejecutar cuatro veces más iteraciones los hará igualmente precisos. La cuestión de cuánto esfuerzo se necesita en cada iteración permanece: si una iteración del método de Xi'an toma menos de una cuarta parte del esfuerzo, entonces ese método aún sería más eficiente.
whuber
1
Creo que la situación se vuelve clara cuando se compara el número de realizaciones de variables aleatorias requeridas en ambos métodos en lugar del valor nominal de . n
whuber
1
@whuber escribió: running four times as many iterations will make them equally accurate///// ..... Acabo de jugar rápido con esto: aumentando el número de puntos de muestra utilizados en el Método 1 de Xian de a 6 x (es decir, 6 veces el número de puntos puntos) produce una curva similar a Aksaksal. 106106
Wolfies
1
Bien hecho con el código, será difícil mejorar mucho en eso.
whuber
2

Método que requiere una cantidad impía de muestras

Primero debe poder tomar muestras de una distribución normal. Suponiendo que va a excluir el uso de la función , o buscar tablas derivadas de esa función, puede producir muestras aproximadas de la distribución normal a través del CLT. Por ejemplo, si puede tomar muestras de una distribución uniforme (0,1), entonces . Como señaló Whuber, para tener el enfoque de estimación final medida que el tamaño de la muestra se aproxima a , se requeriría que el número de muestras uniformes utilizadas se acerque a medida que el tamaño de la muestra se aproxima al infinito.f(x)=exx¯12n˙N(0,1)e

Ahora, si puede tomar muestras de una distribución normal, con muestras suficientemente grandes, puede obtener estimaciones consistentes de la densidad de . Esto se puede hacer con histogramas o suavizadores de kernel (¡pero tenga cuidado de no usar un kernel gaussiano para seguir su regla no !). Para que sus estimaciones de densidad sean consistentes, deberá dejar que su df (número de bins en el histograma, inverso de la ventana para suavizar) se acerque al infinito, pero más lento que el tamaño de la muestra.N(0,1)ex

Entonces, ahora, con mucha potencia computacional, puede aproximar la densidad de un , es decir, . Como , su estimación para .N(0,1)ϕ^(x)ϕ((2))=(2π)1/2e1e=ϕ^(2)2π

Si quiere volverse completamente loco, incluso puede estimar y usando los métodos que discutió anteriormente.22π

Método que requiere muy pocas muestras, pero que causa una cantidad impía de error numérico

Una respuesta completamente tonta, pero muy eficiente, basada en un comentario que hice:

Deje . Definir. Defina .Xuniform(1,1)Yn=|(x¯)n|e^=(1Yn)1/Yn

Esto convergerá muy rápido, pero también se encontrará con un error numérico extremo.

Whuber señaló que esto utiliza la función de potencia, que normalmente llama a la función exp. Esto podría discretizando , de modo que sea ​​un número entero y la potencia se pueda reemplazar con la multiplicación repetida. Sería necesario que como , la discretización de hiciera cada vez más fina, y la discretización tendría que excluir . Con esto, el estimador teóricamente (es decir, el mundo en el que no existe un error numérico) convergería en , ¡y bastante rápido!Yn1/YnnYnYn=0e

Acantilado
fuente
2
El enfoque CLT es menos que satisfactorio porque, en última instancia, sabe que estos valores no se distribuyen normalmente. Pero hay muchas maneras de generar variaciones normales sin necesidad de o logaritmos: el método Box-Muller es uno. Sin embargo, ese requiere funciones trigonométricas y (en un nivel fundamental) son las mismas que las exponenciales. e
whuber
1
@whuber: No utilicé el Box-Muller debido a la transformación de registro requerida demasiado directamente a exponencial en mi libro. Me gustaría haber permitido por reflejo cos y sen, pero eso fue sólo porque me había olvidado de análisis complejo por un momento, por lo buen punto.
Cliff AB
1
Sin embargo, tomaría un argumento con la idea de que la aproximación normal generada es el punto débil de esta idea; ¡la estimación de densidad es aún más débil! Puede pensar en esta idea de tener dos parámetros: , el número de uniformes utilizados en su "normal aproximado" y el número de normales aproximados utilizados estiman la densidad en . A medida que y aproximan , el estimador se acercará a . De hecho, estoy muy seguro de que la tasa de convergencia estaría mucho más limitada por que ; ¡la densidad no paramétrica tiene una tasa de convergencia lenta! n1n2ϕ(2)n1n2en2n1
Cliff AB
2

Aquí hay otra forma de hacerlo, aunque es bastante lento. No pretendo ser eficiente, pero ofrezco esta alternativa en un espíritu de integridad.

Contra la respuesta de Xi'an a los fines de esta pregunta que usted puede generar y usar una secuencia de variables pseudoaleatorias uniformes y luego necesita estimar por algún método usando operaciones aritméticas básicas (es decir, no puede usar funciones logarítmicas o exponenciales ni ninguna distribución que use estas funciones). El presente método está motivado por un resultado simple que involucra variables aleatorias uniformes:nU1,,UnIID U(0,1)e

E(I(Ui1/e)Ui)=1/e1duu=1.

Estimación de usando este resultado:e Primero ordenamos los valores de la muestra en orden descendente para obtener las estadísticas de orden y luego definimos las sumas parciales:u(1)u(n)

Sn(k)1ni=1k1u(i)for all k=1,..,n.

Ahora, dejemos que y luego estimar por interpolación de las variables uniformes ordenadas. Esto proporciona un estimador para dado por:mmin{k|S(k)1}1/ee

e^2u(m)+u(m+1).

Este método tiene un ligero sesgo (debido a la interpolación lineal del punto de corte para ) pero es un estimador consistente para . El método puede implementarse con bastante facilidad, pero requiere la clasificación de valores, que es más computacionalmente intensivo que el cálculo determinista de . Este método es lento, ya que implica la clasificación de valores.1/eee

Implementación en R: El método se puede implementar al Rusar runifpara generar valores uniformes. El código es el siguiente:

EST_EULER <- function(n) { U <- sort(runif(n), decreasing = TRUE);
                           S <- cumsum(1/U)/n;
                           m <- min(which(S >= 1));
                           2/(U[m-1]+U[m]); }

La implementación de este código da convergencia al verdadero valor de , pero es muy lento en comparación con los métodos deterministas.e

set.seed(1234);

EST_EULER(10^3);
[1] 2.715426

EST_EULER(10^4);
[1] 2.678373

EST_EULER(10^5);
[1] 2.722868

EST_EULER(10^6); 
[1] 2.722207

EST_EULER(10^7);
[1] 2.718775

EST_EULER(10^8);
[1] 2.718434

> exp(1)
[1] 2.718282

Creo que queremos evitar cualquier método que haga uso de cualquier transformación que implique un exponencial o un logaritmo. Si podemos usar densidades que usan exponenciales en su definición, entonces es posible derivar de ellas algebraicamente usando una llamada de densidad.e

Reinstalar a Mónica
fuente