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')
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