7 votos

Las probabilidades de dibujo al menos k idénticos valores entre m después de n sorteos?

Dibujamos $n$ valores, cada uno de equiprobably entre $m$ valores distintos. ¿Cuáles son las probabilidades de $p(n,m,k)$ de que al menos uno de los valores que se dibuja al menos $k$ veces? por ejemplo, para $n=3000$, $m=300$, $k=20$.

Nota: no he pasado una variante de este por un amigo pidiendo "un paquete estadístico útil para problemas similares".

Mi intento: El número de veces que un determinado valor se alcanza sigue una binomial de la ley de con $n$ eventos, probabilidad de $1/m$. Esto es suficiente para tener probabilidades de $q$ que un particular se alcanza el valor de, al menos, $k$ veces [Excel ofrece a $q\approx 0.00340$ =1-BINOMDIST(20-1,3000,1/300,TRUE)]. Dado que el $n\gg k$, podemos ignorar el hecho de que las probabilidades de un valor que se alcanza depende de los resultados de otros valores, y obtener una aproximación de $p$ $1-(1-q)^m$ [Excel ofrece a $p\approx 0.640$ =1-BINOMDIST(20-1,3000,1/300,TRUE)^300].

actualización: el exponente fue mal en el anterior, que ahora fija

Es esto correcto? (resuelto ahora, sí, pero la aproximación hecho conduce a un error en el orden de 1% con el ejemplo de parámetros)

¿Qué métodos pueden funcionar para arbitrario de parámetros $(n,m,k)$? Es que esta función esté disponible en R o de otro paquete, o ¿cómo podemos construir? (resuelto ahora, ambos exactamente para moderar los parámetros, y, en teoría, por la enorme parámetros)

Yo a ver cómo hacer una simulación en la C, ¿cuál sería un ejemplo de una similar de la simulación en R? (ahora resuelto, de una corrección de la simulación en R y otro en Python da $p\approx 0.647$)

8voto

pix0r Puntos 17854

Hay casi ciertamente más fácil maneras, pero una manera de calcular el valor es, precisamente, calcular el número de maneras de colocar a $n$ etiquetado bolas en $m$ contenedores etiquetados de tal manera que ningún bin contiene $k$ o más bolas. Podemos calcular esta el uso de una simple repetición. Deje $W(n,j,m',k)$ el número de maneras de colocar exactamente $j$ de la $n$ etiquetado bolas en $m'$ de la $m$ contenedores etiquetados. A continuación, el el número que buscamos es $W(n,n,m,k)$. Tenemos la siguiente recurrencia: $$W(n,j,m',k)=\sum_{i=0}^{k-1}\binom{n-j+i}{i}W(n,j-i,m'-1,k)$$ where $W(n,j,m',k)=0$ when $j<0$ and $W(n,0,0,k)=1$ as there is one way to pace no balls in no bins. This follows from the fact that there are $\binom{n-j+i}{i}$ ways to choose $i$ out of $n-j+i$ balls to put in the $m'$th bin, and there are $W(n,j-i,m'-1,k)$ ways to put $j-i$ balls in $m'-1$ bins.

The essence of this recurrence if that we can compute the number of ways of placing $j$ out of $n$ balls in $m'$ bins by looking at the number of balls placed in the $m'$th bin. If we placed $i$ balls in the $m'$th bin, then there were $j-i$ balls in the previous $m'-1$ bins, and we have already calculated the number of ways of doing that as $W(n,j-i,m'-1,k)$, and we have $\binom{n-j+i}{i}$ ways of choosing the $i$ balls to put in the $m'$th bin (there were $n-j+i$ balls left after we put $j-i$ balls in the first $m'-1$ bins, and we choose $i$ of them.) So $W(n,j,m',k)$ is just the sum over $i$ from $0$ to $k-1$ of $\binom{n-j+i}{i}W(n,j-i,m'-1,k)$.

Once we have computed $W(n,n,m,k)$ the probability that at least one bin has at least $k$ balls is $1-\frac{W(n,n,m,k)}{m^n}$.

Coding in Python because it has multiple precision arithmetic we have

import sympy
# to get the decimal approximation

#compute the binomial coefficient
def binomial(n, k):
    if k > n or k < 0:
        return 0
    if k > n / 2:
        k = n - k
    if k == 0:
        return 1
    bin = n - (k - 1)
    for i in range(k - 2, -1, -1):
        bin = bin * (n - i) / (k - i)
    return bin

#compute the number of ways that balls can be put in cells such that no
# cell contains fullbin (or more) balls.
def numways(cells, balls, fullbin):
    x = [1 if i==0 else 0 for i in range(balls + 1)]
    for j in range(cells):
        x = [sum(binomial(balls - (i - k), k) * x[i - k] if i - k >= 0 else 0
                 for k in range(fullbin))
             for i in range(balls + 1)]
    return x[balls]

x = sympy.Integer(numways(300, 3000, 20))/sympy.Integer(300**3000)
print sympy.N(1 - x, 50)

(sympy is just used to get the decimal approximation).

I get the following answer to 50 decimal places

0.64731643604975767318804860342485318214921593659347

This method would not be feasible for much larger values of $m$ and $n$.

ADDED

As there appears to be some skepticism as to the accuracy of this answer, I ran my own Monte-Carlo approximation (in C using the GSL, I used something other than R to avoid any problems that R may have provided, and avoided python because the heat death of the universe is happening any time now). In $10^7$ ejecuta tengo 6471264 hits. Esto parece estar de acuerdo con mi cuenta, y es considerablemente en desacuerdo con whubers. El código para el Monte-carlo se adjunta.

He terminado una carrera de 10^8 ensayos y han conseguido 64733136 éxitos para una probabilidad de 0.64733136. Estoy bastante seguro de que las cosas están funcionando correctamente.

#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_rng.h>

const gsl_rng_type * T;
gsl_rng * r;

int
testrand(int cells, int balls, int limit, int runs) {
  int run;
  int count = 0;
  int *array = malloc(cells * sizeof(int));
  for (run =0; run < runs; run++) {
    int i;
    int hit = 0;
    for (i = 0; i < cells; i++) array[i] = 0;
    for (i = 0; i < balls; i++) {
      array[gsl_rng_uniform_int(r, cells)]++;
    }
    for (i = 0; i < cells; i++) {
      if (array[i] >= limit) {
    hit = 1;
    break;
      }
    }
    count += hit;
  }
  free(array);
  return count;
}

int
main (void)
{
  int i, n = 10;

  gsl_rng_env_setup();

  T = gsl_rng_default;
  r = gsl_rng_alloc (T);

  for (i = 0; i < n; i++) 
    {
      printf("%d\n", testrand(300, 3000, 20, 10000000));
    }

  gsl_rng_free (r);

  return 0;
}

AÚN MÁS

Nota: esto debe ser un comentario a probabilityislogic la respuesta, pero no caben.

Cosificación probabilityislogic la respuesta (principalmente por curiosidad), esta vez en R porque un tonto inconsistencia es el hobgoblin de grandes mentes, o algo así. Esta es la aproximación normal de la Levin papel (el Edgeworth de expansión debe ser sencillo, pero es más escribiendo que estoy dispuesto a gastar)

# an implementation of the Bruce Levin article here limit is the upper limit on 
#   bin size that does not count
approxNorm <- function(balls, cells, limit) {
  # using N=s
  sp <- balls / cells
  mu <- sp * (1 - dpois(limit, sp) / ppois(limit, sp))
  sig2 <- mu - (limit - mu) * (sp - mu)
  x <- (balls - cells * mu) / sqrt(cells * sig2)
  p2 <- exp(-x^2 / 2)/sqrt(2 * pi * cells * sig2)
  p1 <- exp(ppois(limit, sp, log.p=TRUE) * cells)
  sqrt(2 * pi * balls) * p1 * p2
}

y 1 - approxNorm(3000, 300, 19) nos da $p(3000, 300, 20) \approx 0.6468276$ lo que no es malo en absoluto.

5voto

jldugger Puntos 7490

(Responder a la simulación de la pregunta)

En R:

n <- 3000; m <- 300; k <- 20 # Problem parameters
nIterations <- 10000         # Number of iterations in the simulation
set.seed(17)                 # Make the output reproducible
#
# All the work is done in the following line.
#
t <- table(replicate(nIterations, any(tabulate(floor(runif(n, min=1, max=m+1))) >= k)))
t[["TRUE"]]/nIterations      # Convert the count to a proportion

Resultado esperado:

[1] 0.6453

Para ver más profundamente en lo que está pasando, mira los detalles de la distribución en varios experimentos mediante la ejecución de este comando varias veces:

table(tabulate(floor(runif(n, min=1, max=m+1))))

La salida típica es

 2  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 21 
 2  5 11 23 23 32 48 37 33 21 19 21  9  6  5  1  2  1 

En este experimento, los dos valores en el rango 0..299 se observaron 19 veces (entre 3000 independiente empates) y un valor se observó 21 veces. Usted encontrará que la mayoría de las veces, al menos uno de los valores se produce 20 veces o más. Debido a $1/m$ es pequeña y $n$ es grande, usted debe ver una distribución de Poisson aquí. De hecho,

1 - ppois(k-1, n/m)^m

devuelve

[1] 0.6458719

3voto

Jin Kim Puntos 258

Esta es una pregunta más difícil si usted no tiene el$n\gg k$, y suponiendo que esto los hace 'lo suficientemente cerca' a independiente para no afectar la respuesta no-trivial. Permite proceder con estos supuestos. Vamos $X_j \sim Binomial(n,\frac{1}{m})$ $\forall j = 1,..,m$.

$$P(\max_j X_j \geq k) = 1 - P(\max_j X_j < k)$$ $$ = 1 - P(X_1 < k,...,X_m < k)$$ y, en el supuesto de la independencia de la $m$ variables aleatorias, $$ = 1 - \prod^m_{j=1}P(X_j < k)$$ $$ = 1 - [P(X_1 < k)]^m$$ $$ = 1 - [\sum^{k-1}_{i=0} {n \choose i}(\frac{1}{m})^i(1-\frac{1}{m})^{n-i}]^m$$

o, si usted tiene el binomio cdf función en el idioma que está utilizando:

$$ = 1 - [Binomial\_cdf(k-1;n,\frac{1}{m})]^m$$

1voto

patfla Puntos 1

La colección de números tiene una distribución multinomial con $m$ categorías y $n$ tamaño de la muestra. Dejando $N_i$ ser el número de veces que el $i$th categoría es elegido/repetido, tenemos $$(N_1,\dots,N_m)\sim multinomial\left(n;\frac{1}{m},\frac{1}{m},\dots,\frac{1}{m}\right)$$ Ahora aprovechar de @danieljohnson la respuesta de la probabilidad que buscamos es

$$p(n,m,k)=1-Pr(N_1<k,\dots,N_m<k)$$

es decir, si todos los números se repiten menos de $k$ veces, entonces ninguno se repite, al menos, $k$ veces. Y "no se nada" es lo mismo que "al menos uno", de manera que podamos tomar la probabilidad de uno. Esta puede ser calculada a través de una "fuerza bruta", enfoque, como el pmf tenemos es particularmente simple:

$$p(n,m,k)=1-m^{-n}\sum_{N_1<k,\dots,N_m<k|N_1+\dots+N_m=n}{n\choose N_1\dots N_m}$$ $$=1-\frac{n!}{m^{n}}\sum_{N_1=0}^{k-1}\sum_{N_2=0}^{k-1}\dots\sum_{N_{m-1}=0}^{k-1}\frac{1}{N_1!N_2!\dots N_{m-1}!(n-N_1-N_2-\dots-N_{m-1})!}$$

La última fórmula es correcta siempre que interpretar un negativo factorial como $\pm\infty$ (en consonancia con la función gamma), que elimina estos a partir de la suma.

Haciendo una rápida búsqueda en google se acercó con Bruce Levin del artículo. Esto le da una representación de la distribución multinomial como una colección de variables aleatorias de poisson, con su de suma fija. (nota: esto podría explicar por qué @whuber ha encontrado que la aproximación de poisson funciona mejor que binomial). Ahora, con la representación dada en el teorema 1 de la de papel, tenemos:

$$p(n,m,k)=1-\frac{n!}{s^n\exp(-s)}\left[\prod_{j=1}^{m}Pr(X_j\leq k-1)\right]Pr(W=n)$$

Donde $X_j\sim Poisson\left(\frac{s}{m}\right)$ y son independientes, y $W=\sum_{j=1}^{m}Y_j$ es una suma de independiente trunca distribuciones de poisson - básicamente $Y_j$ $X_j$ acondicionado ser menor o igual a $k-1$. Tenga en cuenta que podemos simplificar la fórmula general al señalar que los términos en que el producto no dependen del índice de $j$, y así es un solo de poisson cdf elevado a la potencia de $m$. Así tenemos:

$$p(n,m,k)=1-\frac{n!}{s^n}\left[e_{k-1}\left(\frac{s}{m}\right)\right]^mPr(W=n)$$

Donde $e_k(x)=\sum_{j=0}^{k}\frac{x^j}{j!}$ denota la exponencial de la función suma. tenga en cuenta que debido a que hemos factorial de un atribuciones de potencialmente grandes números, numéricamente probablemente será mejor trabajar en términos del logaritmo del segundo término y, a continuación, exponentiate de nuevo al final del cálculo. Alternativamente, se puede elegir el recomendado $s=N$ como nuestro algoritmo de parámetro y, a continuación, hacer uso de la aproximación de stirling a $n!$ - se recomienda en el papel y corresponde a "significa" coincidencia de cada una distribución de poisson con la multinomial de la célula (es decir,$E(X_i)=E(N_i)$). A continuación, llegamos $\frac{n!}{n^n}\approx\sqrt{2\pi n}$.

El documento proporciona dos aproximaciones para $Pr(W=n)$ on basada en la aproximación normal, y otro basado en edgeworth de expansión. los detalles están en el papel (ver ecuación 4). Nota a pesar de que su método permite probabilidad diferentes parámetros, por lo que términos como " $\frac{1}{t}\sum_{1}^t\sigma_l^2$ puede ser reemplazado con $\sigma_1^2$ y así sucesivamente, de manera de evitar una innecesaria la computación. Tenga en cuenta que también tenemos la mallows límites se proporciona en el documento - que puede ser utilizado para verificar la precisión de las aproximaciones.

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