2016-07-20 13 views
0

So zu maximieren, habe ich diese Funktionen:Fehler bei Optim mit der Wahrscheinlichkeit in r

funk1 <- function(a,x,l,r) { 
x^2*exp(-(l*(1-exp(-r*a))/r))} 

funk2 <- function(x,l,r) { 
sapply(x, function (s) { 
integrate(funk1, lower = 0, upper = s, x=s, l=l, r=r)$value })} 

die verwendet werden, in den Daten y zu erklären,

z <- data.frame(ts = 1:100, 
      y = funk2(1:100, l = 1, r = 1) + rpois(100, 1:100)) 

Ich wünsche Optim verwenden, um die Wahrscheinlichkeit maximieren, so I definiert eine Wahrscheinlichkeitsfunktion:

LL_funk <- function(l,r) { 
n=nrow(z) 
R = sum((funk2(ts,l,r) - y)^2) 
logl = -((n/2)*log(R)) 
return(-logl) 
} 

und ich versucht, mit Optim

012 zu passen
fit <- optim(par=c(0.5,0.5), fn= LL_funk, method="Nelder-Mead") 

Aber ich erhalte eine Fehlermeldung:

Error in integrate(funk1, lower = 0, upper = s, x = s, l = l, r = r) : 
a limit is missing 

Ich bin nicht sicher, warum? Ich konnte laufen NLS Fitting funk2 (x, l, r) zu y

nls(y ~ funk2(ts,l,r), data = z, start = list(l = 0.5, r = 0.5)) 

Das heißt funk2 arbeitet. Ich denke, es ist das Problem mit der LL-Funktion, die ich entworfen habe, was ich nicht herausfinden kann !! Bitte Hilfe!

Antwort

1

Yup! Es gab zwei Probleme mit deiner Funktion. Dieser arbeitete für mich:

LL_funk <- function(params) { 
    n=nrow(z) 
    l = params[1] 
    r = params[2] 
    R = sum((funk2(z$ts,l,r) - z$y)^2) 
    logl = -((n/2)*log(R)) 
    return(-logl) 
} 

Frühere Ausgaben:

  • LL_funk dauert nur 1 Argument, das der Vektor der Parameter ist.
  • In LHS der Zuordnung von R, ts und y wurden nicht tatsächlich auf Spalten in Ihrem Dataset bezogen.
+0

Vielen Dank! Wusste nicht, dass die LL-Funktion nur ein Argument benötigt. zweites Problem war der Tippfehler. – VitalSigns

+0

@ZheyuanLi Ja, ich sollte damit anfangen, sehr vorsichtig. Vielen Dank! – VitalSigns