だから、私はこれらの機能を持っています:
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 })}
これは、データ y を説明するために使用されます。
z <- data.frame(ts = 1:100,
y = funk2(1:100, l = 1, r = 1) + rpois(100, 1:100))
optim を使用して尤度を最大化したいので、尤度関数を定義しました。
LL_funk <- function(l,r) {
n=nrow(z)
R = sum((funk2(ts,l,r) - y)^2)
logl = -((n/2)*log(R))
return(-logl)
}
そして私はoptimを使ってフィットしようとしました
fit <- optim(par=c(0.5,0.5), fn= LL_funk, method="Nelder-Mead")
しかし、私はエラーが発生します:
Error in integrate(funk1, lower = 0, upper = s, x = s, l = l, r = r) :
a limit is missing
なぜかわからないのですが?nls フィッティング funk2(x,l,r) を y に実行できます
nls(y ~ funk2(ts,l,r), data = z, start = list(l = 0.5, r = 0.5))
これは、funk2 が機能していることを意味します。私が設計したLL関数の問題だと思いますが、わかりません!! 助けてください!