7 votos

El ajuste de una distribución para que coincida con los puntos conocidos en el CDF

He ejecutado recientemente en una situación en la que conozco a un par de probabilidad puntos en la cola de una distribución y quiero a "encajar" una distribución que va a través de estos puntos en la cola. Me doy cuenta de que esto es complicado y no demasiado precisa, y plagado de problemas conceptuales. Sin embargo, confía en mí que yo realmente quiero hacer esto.

Así que efectivamente sé que algunos puntos en la cola de la CDF con x , siendo los valores y y , siendo la probabilidad de que el valor o menor. Aquí el código R para ilustrar mis datos:

x <- c(0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85)
y <- c(0.0666666666666667, 0.0625, 0.0659340659340659, 0.0563106796116505, 
       0.0305676855895196, 0.0436953807740325, 0.0267459138187221)

Entonces puedo crear una función para minimizar el error entre mis datos y una distribución beta CDF usando pbeta. Yo uso la ESS como un ajuste métrico, a continuación, a minimizar el con -sum. Me tiro en una estimación inicial como el primer parámetro a optim de (9, .8) a pesar de que he intentado esto con diferentes conjeturas y siempre obtengo el mismo resultado. El punto de partida supongo que utilizamos es de manual de cocina parámetros de mano que parece estar cerca.

# function to optomize with optim
beta_func <- function(par, x) -sum( (pbeta( x, par[1], par[2]) - y)**2 ) 
out <- optim(c(9,.8), beta_func, lower=c(1,.5), upper=c(200,200), method="L-BFGS-B", x=x)

out <- out$par
print(out)
#> [1]  0.90000 23.40294

A continuación el gráfico de la 'optimizado' distribución beta en rojo, mis datos reales en azul, y una mano ajustado suposición de arranque de la beta de parámetros en negro.

plot(function(x) pbeta(x, shape1=out[1], shape2=out[2] ), 0, 1.5, col='red')
plot(function(x) pbeta(x, 9,.8), 0, 1.5, col='black', add=TRUE)
lines(x,y, col='blue')

enter image description here

Yo no puedo asimilar lo que está pasando con optim para dar una solución peor que mi suposición de arranque. He calculado el SSE para mi suposición de arranque vs el optim solución y parece que mi supongo que tiene un mucho mayor -ESS:

# my guess
-sum( (pbeta( x, 9, .8) - y)**2)
#> [1] -0.03493344

# optim's output
-sum( (pbeta( x, .9, 23) - y)**2)
#> [1] -6.314587

El uso de la historia pasada como mi Bayesiano antes, mi conjetura es que yo estoy entendiendo optim o la alimentación inadecuada entradas. Sin embargo, yo no puedo asimilar lo que está pasando. Cualquier consejo sería muy apreciada.

He intentado usar el CG método de optimización, pero los resultados no son significativamente diferentes y todavía no parecen cerca tan bueno como mi suposición de arranque.

out <- optim(c(9,.8), beta_func, method="CG", x=x)
out <- out$par
print(out)
#> [1]  2.287611 11.124736

5voto

rbellamy Puntos 887

Yo creo que son accidentalmente tratando de maximizar los cuadrados de los errores. El valor predeterminado para optim() es minimizar la función, por lo que el signo negativo en su beta_func() los resultados de la búsqueda para máx.

Si usted modifica su función como usted obtener valores cercanos a su conjetura:

beta_func2 <- function(par, x) sum( (pbeta( x, par[1], par[2]) - y)**2 ) 
out2 <- optim(c(9,.8), beta_func2, lower=c(1,.5), upper=c(200,200), method="L-BFGS-B", x=x)
out2 <- out2$par
print(out2)
[1] 11.04296  0.50000

Usted puede comprobar la nueva función en contra de sus observaciones (donde, x e y se definen como en el ejemplo):

plot(x,(pbeta(x,out[1],out[2])), ylim=c(-.1,1), col="red", type="l")
points(x, (pbeta(x,9,0.8)), col="black", type="l")
points(x,(pbeta(x,out2[1],out2[2])), col="orange", type="l")
lines(x,y, col='blue')
title(main="Blue observed CDF, black guesstimate, gold optimized")

enter image description here

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