Ich bin kürzlich in eine Situation geraten, in der ich einige Wahrscheinlichkeitspunkte im Ende einer Verteilung kenne und eine Verteilung "anpassen" möchte, die diese Punkte im Ende durchläuft. Mir ist klar, dass dies chaotisch und nicht allzu genau ist und mit konzeptionellen Problemen behaftet ist. Vertrauen Sie mir jedoch, dass ich das wirklich tun möchte.
So effektiv kenne ich einige Punkte im Ende der CDF xals Werte und yals Wahrscheinlichkeit für diesen Wert oder kleiner. Hier ist R-Code zur Veranschaulichung meiner Daten:
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)
Dann erstelle ich eine Funktion, um Fehler zwischen meinen Daten und einer Beta-Distributions-CDF mit zu minimieren pbeta. Ich benutze SSE als Fit-Metrik und minimiere das dann mit -sum. Ich werfe in einer anfänglichen Vermutung als erster Param optimvon (9, .8)obwohl ich dies mit verschiedenen Vermutungen versucht habe und ich immer das gleiche Ergebnis. Der Ausgangspunkt, den ich verwende, ist das manuelle Garen von Parametern von Hand, die nahe beieinander liegen.
# 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
Unten zeichne ich die 'optimierte' Beta-Verteilung in Rot, meine tatsächlichen Daten in Blau und eine von Hand optimierte Startschätzung der Beta-Parameter in Schwarz.
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')
Ich kann nicht verstehen, was los ist optim, um eine Lösung zu finden, die schlimmer ist als meine anfängliche Vermutung. Ich habe die SSE für meine Startschätzung gegen die optimLösung berechnet und es sieht so aus, als hätte meine Schätzung eine viel größere -SSE:
# 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
Wenn ich die Vergangenheit als meinen Bayes'schen Prior verwende, vermute ich, dass ich optimfalsche Eingaben missverstehe oder füttere. Ich kann jedoch nicht wissen, was los ist. Alle Tipps wäre sehr dankbar.
Ich habe versucht, die CGOptimierungsmethode zu verwenden, aber die Ergebnisse unterscheiden sich nicht wesentlich und scheinen immer noch nicht so gut zu sein wie meine anfängliche Vermutung.
out <- optim(c(9,.8), beta_func, method="CG", x=x)
out <- out$par
print(out)
#> [1] 2.287611 11.124736
optimmein Gebot abzugeben.

