IFehler in Optim(): für eine univariate Funktion für die globale Mindest Suche
Die Funktion ist die Likelihood-Funktion von negativen binominal eine Funktion in R optimieren können, wenn ich versuche, nur mu
Parameter zu schätzen. Dies sollte kein Problem sein, da die Funktion eindeutig nur einen Punkt hat. Aber ich kann das wünschenswerte Ergebnis nicht erreichen.
Die Funktion wird optmized ist:
EMV <- function(data, par) {
Mi <- par
Phi <- 2
N <- NROW(data)
Resultado <- log(Mi/(Mi + Phi))*sum(data) + N*Phi*log(Phi/(Mi + Phi))
return(Resultado)
}
Daten ein Vektor von negativen binomialen Variablen mit Parametern 2 und 2
data <- rnegbin(10000, mu = 2, theta = 2)
Wenn ich die Funktion mu
als Variable mit folgenden Eigenschaften Parzelle ist Code:
x <- seq(0.1, 100, 0.02)
z <- EMV(data,0.1)
for (aux in x) {z <- rbind(z, EMV(data,aux))}
z <- z[2:NROW(z)]
plot(x,z)
Ich bekomme die folgende Kurve:
und der maximale Wert von z zu Parameterwert schließen -> 2
x[which.max(z)]
Aber die Optimierung funktioniert nicht mit BFGS
Error in optim(par = theta, fn = EMV, data = data, method = "BFGS") :
non-finite finite-difference value [1]
Und geht nicht zum richtigen Wert mit SANN, zum Beispiel:
$par
[1] 5.19767e-05
$value
[1] -211981.8
$counts
function gradient
10000 NA
$convergence
[1] 0
$message
NULL
Die Fragen sind:
- Was mache ich falsch?
- Gibt es eine Möglichkeit zu sagen
optim
, dass der Parameter größer als 0 sein sollte? - Gibt es eine Möglichkeit zu sagen
optim
, dass ich die Funktion maximieren möchte? (Ich fürchte, dieoptim
versucht, auf einen sehr kleinen Wert zu minimieren und wird, wo Funktion kleinste Werte zurückgibt)
Danke. Ich habe 'optim (par = Theta, fn = EMV, Daten = Daten, Methode = "Brent", low = 0, upper = 1E5) 'und ich bekomme 1E5 als Ergebnis. Es scheint, das Optimum minimiert die Funktion im Intervall. – Nizam
Bitte formulieren Sie Ihren Kommentar als Antwort, die ich gerne annehmen würde. Danke vielmals. – Nizam
Sicher ... Nimm dir Zeit. Mein Problem wurde bereits gelöst. – Nizam