Problema locomotor con empresas de varios tamaños


9

Estoy trabajando a través de Think Bayes (gratis aquí: http://www.greenteapress.com/thinkbayes/ ) y estoy en el ejercicio 3.1. Aquí hay un resumen del problema:

"Un ferrocarril numera sus locomotoras en el orden 1..N. Un día ves una locomotora con el número 60. Estima cuántas locomotoras tiene el ferrocarril".

Esta solución se encuentra con la función de verosimilitud y la exponencial anterior de la siguiente manera:

class Train(Suite):
  def __init__(self, hypos, alpha=1.0):
    # Create an exponential prior
    Pmf.__init__(self)
    for hypo in hypos:
      self.Set(hypo, hypo**(-alpha))
    self.Normalize()
  def Likelihood(self, data, hypo):
    if hypo < data:
      return 0
    else:
      return (1.0/hypo)

Conceptualmente esto es decir, si vemos un número de tren mayor que una de nuestras hipótesis (1 ... 1000), entonces cada hipótesis más pequeña tiene cero posibilidades de ser correcta. El resto de las hipótesis tienen una probabilidad de 1 / number_of_trains de mostrarnos un tren con este número.

En el ejercicio en el que estoy trabajando, el autor agrega un poco más. Esto supone que solo hay una compañía. Sin embargo, en la vida real tendrías una mezcla de compañías grandes y pequeñas y compañías más grandes (ambas igualmente probables). Sin embargo, esto significaría que es más probable que vea un tren de una compañía más grande ya que tendrían más trenes.

Ahora la pregunta es ¿cómo reflejar esto en la función de probabilidad?

Esto no es Stack Overflow, así que realmente no estoy pidiendo ayuda para la codificación, sino que tal vez solo ayude sobre cómo podría pensar sobre este problema en términos de una función de probabilidad.


El mismo problema está en 50 Problemas desafiantes en la probabilidad de Mosteller. El libro está ampliamente disponible. No creo que Bayes pronto sea correcto.

Compré el libro @Hogan, pero no incluye la parte sobre otras compañías que se mezclan.
Justin Bozonier el

Respuestas:


8

Primero esbozo un enfoque para dos compañías en detalle, la extensión a incluso más compañías debería ser intuitiva (al menos para la probabilidad, lo anterior podría ser más complicado).

Imagine que hay dos compañías A y B , donde A tiene locomotoras y B tiene locomotoras . Asumimos (siempre puede cambiar A y B para hacer que esto se mantenga). El número total para esa hipótesis de locomotoras es .NANBNANBNtot=NA+NB

Imagina que ves una locomotora con el número . Hay tres casos para la probabilidad:n

  1. NA<n : Esto no puede suceder, por lo que la probabilidad es cero.
  2. NB<nNA : esta locomotora debe provenir de la compañía A , por lo que solo hay una locomotora con este número. Por lo tanto, la probabilidad es1/Ntot
  3. nortenortesi : esta locomotora puede ser de A o de B , por lo que hay dos locomotoras con este número. La probabilidad de ver uno de ellos es .2/ /nortetot

Como una verificación rápida de la cordura: La probabilidad de ver cualquier número es .

yo=1L(yo)=yo=1nortesi2nortetot+yo=nortesi+1norteUNA1nortetot=2nortesinortetot+norteUNA-nortesinortetot=norteUNA+nortesinortetot=1

En general, habrá (número de empresas + 1) casos, uno para cada intervalo . Afortunadamente, podemos ver el problema desde un ángulo diferente y ver que lo que necesitamos para la probabilidad son en realidad solo dos números: , el número total de locomotoras; y , el número de locomotoras que tienen el número . ¿Qué tan probable es que veamos una de las locomotoras , fuera de las locomotoras ? Esto sucederá en de todos los casos, por lo que esta fracción es la probabilidad. En Python, puede calcular esto con dos generadores de suma (y ni siquiera tiene que ordenar las empresas por tamaño). Sinorteyo<nortenorteyo+1nortetotnortenortenortenortenortenortetotnortenortenortetotNscontiene una lista (o tupla) de tamaños de compañía de acuerdo con su hipótesis, entonces esto le dará la posibilidad de ver una locomotora con número n:

total_number_of_locomotives = sum(N for N in Ns)
number_of_locomotives_with_that_number = sum(1 for N in Ns if n<=N)
likelihood = (number_of_locomotives_with_that_number / total_number_of_locomotives)

Tenga en cuenta que el caso trivial con una compañía también se maneja con este código (la primera suma será , la segunda suma será 0 o 1, dependiendo de si ).nortenortenorte


Para los anteriores, la ley de Zipf podría ser un buen punto de partida para una distribución realista de los tamaños de las empresas.


Esta es una gran respuesta y tienes razón en que definitivamente puedo ver cómo se generaliza. Gracias por tomarse el tiempo.
Justin Bozonier

No vale nada que la función de probabilidad resultante tenga el mismo valor independientemente de la hipótesis. Es decir, Likelihood(data=60, hypo=60)y Likelihood(data=60, hypo=1000)evaluar al mismo valor. Entonces, si la distribución anterior fue uniforme, la posterior también será uniforme (menos los valores para lo que la probabilidad era 0)
RubenLaguna

0

No voy a analizar el código, pero a continuación está la solución.

Dejar

  • P (loc60) sea la probabilidad de que una locomotora aleatoria tenga el número 60
  • P (N) sea la probabilidad previa de que existan exactamente N locomotoras
  • P (loc60 | N) sea la probabilidad de que una locomotora aleatoria tenga el número 60, si el número total de locomotoras es N,
  • P (N | loc60) sea la probabilidad de que existan exactamente N locomotoras, si una locomotora aleatoria tiene el número 60

Entonces

PAGS(norteEl |loc60)=PAGS(loc60El |norte)PAGS(norte)PAGS(loc60)=PAGS(loc60El |norte)PAGS(norte)METROPAGS(loc60El |METRO)

Pero

PAGS(loc60El |norte)={1/ /norte Si norte60 60 0 0 de otra manera 

De ahora en adelante, asumimos que .norte60 60

PAGS(norteEl |loc60)=PAGS(norte)/ /norteMETRO=60 60PAGS(METRO)/ /METRO

Ahora debemos seleccionar P (N), de lo contrario estamos atascados. Como no conocemos ni siquiera el orden de magnitud de P (N), es razonable suponer que está distribuido uniformemente entre 0 y algunos (es decir, la probabilidad de que es lo mismo que la probabilidad de que ). Guestimating es una tarea difícil, pero por mi conocimiento previo sobre ferrocarriles y locomotoras, puedo suponer que .Iniciar sesiónnorteIniciar sesiónnortemax102norte<103103norte<104 4nortemaxnortemax60 60

La distribución uniforme de significa que , donde c es una constante independiente de N.Iniciar sesiónnorte

PAGS(norte)=C(Iniciar sesión(norte+1)-Iniciar sesiónnorte)C/ /norte

Sustituyendo esto por la fórmula anterior, tenemos:

PAGS(norteEl |loc60)C/ /norte2METRO=60 60nortemaxC/ /METRO2

Pero

METRO=60 60nortemaxC/ /METRO260 60nortemaxCMETRO2reMETRO=C60 60-CnortemaxC60 60

Ahora tenemos

PAGS(norteEl |loc60)60 60/ /norte2

¿Cuál es el valor medio de N? Deja que sea , luegonortemedicina

60 60nortemedicina60 60norte2renorte=1/ /2

60 60/ /norte-60 60nortemedicina=1/ /2

nortemedicina=120

Si lo que necesitamos es expectativa matemática en lugar de mediana, entonces

mi(norte)=60 60nortemax60 60norte2norterenorte=60 60Iniciar sesiónnortemax60 60

Por lo que sé sobre los ferrocarriles, debería estar entre y , por lo que E (N) está en algún lugar entre 170 y 600.nortemax103106 6


1
Esto parece abordar el simple problema. Pero, ¿qué sucede cuando puede tener diferentes compañías de ferrocarril de diferentes tamaños?
Justin Bozonier el

Esto aborda exactamente el caso cuando hay diferentes compañías ferroviarias de diferentes tamaños. " se distribuye uniformemente entre 0 y algunos " es la distribución de tamaños. Iniciar sesiónnorteIniciar sesiónnortemax
user31264

44
Si tú lo dices. Es extraño que la palabra "compañía" no aparezca una vez en su respuesta. Lo siento, no veo la conexión.
Justin Bozonier el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.