Гессенская матрица в optim() в R
У меня возникли некоторые проблемы с использованием optim() в R, чтобы решить для вероятности, связанной с интегралом и получить гессенскую матрицу для 2 параметров. Алгоритм сходится, но я получаю ошибку, когда использую опцию hessian=TRUE в optim(). Ошибка:
Ошибка в интегрировании (integrand1, lower = s1[i] - 1, upper = s1[i]): значение функции не ограничено
Также было предупреждающее сообщение АН
Вот мой код:
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))
optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0,0), hessian=TRUE)
Спасибо за вашу помощь!
1 ответ
optim
минимизирует функцию. Вы могли бы построить функцию правдоподобия с учетом аргумента rate
, Это нужно немного возиться, чтобы получить сюжет. Сделай это так:
z2 <- function(rate) {
par <- numeric(2)
par[1] <- .68
par[2] <- rate
y <- LLL(par)
y
}
z1 <- Vectorize(z2,vectorize.args="rate")
curve(z1, from=.001,to=1)
Вы увидите, что функция минимальна для самого низкого значения для rate
, То же самое, если вы измените from
в .1
, Я не могу судить, является ли оценка действительной.