使用 optim 来最大化 r 中的可能性时出错
Error in using optim to maximise the likelihood 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 })}
用来解释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 函数的问题,我想不通!!请帮忙!
是啊!您的功能有两个问题。这对我有用:
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)
}
以前的问题:
LL_funk
只接受1个参数,即参数向量。
- 在
R
分配的 LHS 中,ts
和 y
实际上并未引用数据集中的列。
所以,我有这些功能:
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 函数的问题,我想不通!!请帮忙!
是啊!您的功能有两个问题。这对我有用:
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)
}
以前的问题:
LL_funk
只接受1个参数,即参数向量。- 在
R
分配的 LHS 中,ts
和y
实际上并未引用数据集中的列。