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 x
als Werte und y
als 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 optim
von (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 optim
Lö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 optim
falsche Eingaben missverstehe oder füttere. Ich kann jedoch nicht wissen, was los ist. Alle Tipps wäre sehr dankbar.
Ich habe versucht, die CG
Optimierungsmethode 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
quelle
optim
mein Gebot abzugeben.Antworten:
Ich denke, Sie versuchen versehentlich, die quadratischen Fehler zu maximieren. Die Standardeinstellung für optim () ist die Minimierung der Funktion, sodass das negative Vorzeichen in Ihrer beta_func () zur Suche nach einer max.
Wenn Sie Ihre Funktion wie folgt ändern, erhalten Sie Werte, die Ihrer Vermutung näher kommen:
Sie können die neue Funktion anhand Ihrer Beobachtungen überprüfen (wobei out, x und y wie in Ihrem Beispiel definiert sind):
quelle
optim
bestand, zu maximieren. Vielen Dank!