5 votos

¿Cómo es la distribución de Poisson una distribución? Parece más bien una fórmula

Acabo de ver este vídeo: https://www.youtube.com/watch?v=Fk02TW6reiA

Muestra una fórmula para calcular la respuesta del siguiente problema:

  • Se esperan 2 clientes cada 3 minutos en una tienda
  • Por lo tanto, se esperan 6 clientes cada 9 minutos
  • ¿Cuál es la probabilidad de que haya 4 o menos en la tienda en 9 minutos?
  • La respuesta es: P(0;6)+...+P(4;6) que es aproximadamente 0,28

Esto tiene sentido y está bien descrito. Sin embargo, numpy trata la distribución poisson básicamente como un generador de números aleatorios: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.poisson.html

Podemos especificar lambda como, por ejemplo, 5 y cuántos números se desean (el segundo argumento) y obtener una gran lista de enteros:

>>> import numpy as np
>>> s = np.random.poisson(5, 10000)
>>> s
array([2, 4, 4, ..., 3, 4, 3])
>>> len(s)
10000

Parecen dos cosas totalmente diferentes. ¿Cómo se pasa de utilizar la fórmula de Poisson para calcular la posibilidad de que se produzca un determinado número de eventos en un marco temporal, a una lista de números enteros aparentemente aleatorios?

9voto

Steve Puntos 477

La fórmula $f$ es el función de masa de probabilidad para la distribución de Poisson. Esa fórmula, como se explica en el vídeo, puede utilizarse para calcular la probabilidad de un valor determinado bajo la distribución asumida. La fórmula función de distribución acumulativa $F$ se puede utilizar para generar números aleatorios siguiendo la distribución:

  1. Utilizar la FCD para dividir el intervalo $(0,1)$ en subintervalos: $(0, F(x_1))$ , $(F(x_1), F(x_2))$ , $etc...$
  2. Generar números aleatorios en el intervalo $(0,1)$ y ver en qué cubo caen.

Más en este tutorial que recorre un ejemplo de Poisson utilizando R. La PMF y la CDF de Poisson están disponibles en scipy .

3voto

gojomo Puntos 171

Generalmente uso R, así que mi respuesta aquí se basa en una rápida búsqueda en la web. Parece que numpy soporta la generación de muestras aleatorias a partir de una distribución de Poisson y no tiene funciones para calcular la función de masa de probabilidad (PMF) descrita por la fórmula de Poisson a la que te refieres. Generar muestras aleatorias a partir de una distribución puede ser muy útil pero, como señalas, no es lo mismo que calcular la PMF, que es lo que tendrías que hacer para resolver el problema del "cliente".

Parece que deberías estar mirando scipy que parece soportar la generación de PMF's para una gran variedad de distribuciones incluyendo Poisson.

0voto

AdamSane Puntos 1825

La función a la que enlaza es un generador de números aleatorios. No devuelve la distribución de Poisson, sino que devuelve números aleatorios de una distribución de Poisson.

Es decir, hace exactamente lo que su nombre indica: te da las variantes aleatorias de Poisson, no la distribución.

La función de probabilidad de Poisson es de la forma $P(X=x) = \frac{e^{-\lambda} \lambda^x}{x!}\,,\quad 0,1,2,\ldots$ ,
mientras que la función de distribución es $P(X\leq x) =\sum_{i=0}^x \frac{e^{-\lambda} \lambda^i}{i!}\,,\quad 0,1,2,\ldots$ .

enter image description here

Hay una variedad de métodos para generar números aleatorios a partir de esta distribución, que (casi siempre) comenzará con una fuente de números aleatorios distribuidos uniformemente en $[0,1)$ (teóricamente continuo, pero en la práctica limitado, en el mejor de los casos, a la precisión con la que los números son representados por la implementación particular en los ordenadores).

La función scipy utilizará uno de esos métodos; cuál será discernible examinando el código (que tú estarías mejor ubicado que yo). Sin embargo, si estoy mirando el código C subyacente correcto que usa numpy ( fuente aquí ), entonces utiliza dos algoritmos diferentes, en función del parámetro de Poisson:

long rk_poisson(rk_state *state, double lam)
{
    if (lam >= 10)
    {
        return rk_poisson_ptrs(state, lam);
    }
    else if (lam == 0)
    {
        return 0;
    }
    else
    {
        return rk_poisson_mult(state, lam);
    }
}

El código de estas dos funciones ( rk_poisson_ptrs y rk_poisson_mult ) está en el mismo archivo, inmediatamente por encima del código citado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X