2017-01-09 1 views
0

Ich habe Probleme mit optim() in R, um nach einer Wahrscheinlichkeit mit einem Integral zu suchen. Ich bekomme einen Fehler, der sagt "Fehler in optim (par = c (0,1, 0,1), LLL, Methode =" L-BFGS-B ", niedriger = c (0,: L-BFGS-B benötigt endliche Werte von 'fn . ‚“ Unten ist mein Code:.Optimierung von optim() in R (L-BFGS-B benötigt endliche Werte von 'fn')

s1=c(1384,1,1219,1597,2106,145,87,1535,290,1752,265,588,1188,160,745,237,479,39,99,56,1503,158,916,651,1064,166,635,19,553,51,79,155,85,1196,142,108,325 
    ,135,28,422,1032,1018,128,787,1704,307,854,6,896,902) 


LLL=function (par) { 

    integrand1 <- function(x){ (x-s1[i]+1)*dgamma(x, shape=par[1], rate=par[2]) } 
    integrand2 <- function(x){ (-x+s1[i]+1)*dgamma(x, shape=par[1],rate=par[2]) } 



    likelihood = vector() 

    for(i in 1:length(s1)) {likelihood[i] = 
    log(integrate(integrand1,lower=s1[i]-1,upper=s1[i])$value+ integrate(integrand2,lower=s1[i],upper=s1[i]+1)$value) 
    } 

    like= -sum(likelihood) 
    return(like) 

} 




optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0,0)) 

Danke für Ihre Hilfe

Best,

YM

+0

Ihre Frage nicht lesbar ist. Bitte verwenden Sie die korrekte Methode zum Anzeigen von Code. – Bhas

Antwort

0

Die Zielfunktion an den unteren Grenzen der Parameter ausgewertet Sie unendlich vorgesehen ist

LLL(c(0,0)) 
# [1] Inf 

Deshalb schlägt L-BFGS-B fehl. Versuchen Sie eine andere untere Grenze, z. B. c(0.001,0.001), und Sie erhalten eine Lösung.

optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0.001,0.001)) 

$par 
[1] 0.6865841 0.0010000 

$value 
[1] 369.5532 

$counts 
function gradient 
     14  14 

$convergence 
[1] 0 

$message 
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" 

Um die 95% Vertrauensintervalle für die Parameter zu erhalten diese versuchen:

res <- optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0.005,0.005), hessian=TRUE) 
n <- length(s1) 
res$par # solution 
# [1] 1.900928 0.005000 
res$par - 1.96*sqrt(diag(solve(res$hessian)))/n # lower limit for 95% confint 
# [1] 1.888152372 0.004963286 
res$par + 1.96*sqrt(diag(solve(res$hessian)))/n # upper limit for 95% confint 
# [1] 1.913703040 0.005036714 

beziehen sich auf diesen Artikel: http://www.ms.uky.edu/~mai/sta321/MLEexample.pdf

+0

Sie haben mich auf die Antwort geschlagen. Ich hatte genau die selbe Lösung. – Bhas

+0

es passiert @Bhas :) –

+0

@sandipan und Bhas Dank Ihnen beiden für die Beantwortung. Weißt du auch, wie ich die hessische Matrix ausgeben kann, damit ich die Konfidenzintervalle für die 2 Gamma-Parameter berechnen kann? Ich habe versucht, "hessian = TRUE" in optim() hinzuzufügen und würde erhalten: Fehler in optim (par = c (0,1, 0,1), LLL, Methode = "L-BFGS-B", niedriger = c (0,001,: nicht -finite finite-difference value [2] –

Verwandte Themen