Estoy tratando de calcular esta distribución posterior:
El problema es que el numerador, que es el producto de un montón de probabilidades es demasiado pequeño. (Mi es grande, alrededor de 1500).
Por lo tanto, los valores posteriores para all se calculan como 0 (estoy haciendo cálculos en R).
Para aclarar, cada tiene su propia , juntas estas forman un vector de elementos para 's. Cada tiene su propio vector elemento de .
EDITAR: Agregar un ejemplo de reproducción (para el numerador)
p <- sample(seq(0,1,by=0.01), 1500, replace=T)
y <- sample(c(0,1), 1500, replace=T)
dbern(y, p) # 1500-element vector, each element is < 1
prod(dbern(y, p)) # produce 0
exp(sum(log(dbern(y, p)))) # produce 0 since the sum is very negative
r
likelihood
posterior
Heisenberg
fuente
fuente
Respuestas:
Este es un problema común con el cálculo de probabilidades para todo tipo de modelos; Los tipos de cosas que se hacen comúnmente son trabajar en registros y usar un factor de escala común que lleve los valores a un rango más razonable.
En este caso, sugeriría:
Paso 1: Elija un , bastante "típico" . Divida la fórmula para el numerador y el denominador del término general por el numerador para , para obtener algo que sea mucho menos probable que se desborde.θ θ0 θ=θ0
Paso 2: trabajar en la escala de registro, esto significa que el numerador es una exp de sumas de diferencias de registros, y el denominador es una suma de exp de sumas de diferencias de registros.
NB: Si alguno de sus p es 0 o 1, retírelos por separado y no tome registros de esos términos; ¡son fáciles de evaluar tal como están!
[En términos más generales, se puede ver que esta escala y trabajar en la escala de registro toma un conjunto de probabilidades de registro, y hace esto: . Una opción obvia para es hacer que el término más grande sea 0, lo que nos deja con: . Tenga en cuenta que cuando tiene un numerador y un denominador, puede usar la misma para ambos, que luego se cancelará. En lo anterior, eso corresponde a tomar con la mayor probabilidad de registro.]li log(∑ieli)=c+log(∑ieli−c) c log(∑ieli)=maxi(li)+log(∑ieli−maxi(li)) c θ0
Los términos habituales en el numerador tenderán a ser de tamaño más moderado, por lo que en muchas situaciones el numerador y el denominador son relativamente razonables.
Si hay un rango de tamaños en el denominador, sume los más pequeños antes de agregar los más grandes.
Si solo unos pocos términos dominan en gran medida, debe centrar su atención en hacer el cálculo para aquellos relativamente precisos.
fuente
Intente capitalizar las propiedades de usar los logaritmos y la suma en lugar de tomar el producto de números decimales. Después de la suma simplemente use el anti-log para volver a ponerlo en su forma más natural. Creo que algo como esto debería hacer el truco
fuente