Я столкнулся с ошибкой при попытке использовать функцию optim, чтобы найти функцию правдоподобия журнала профиля. Я использую обобщенное распределение Парето с двумя неизвестными параметрами и в зависимости от нескольких известных параметров. Значение риска и параметр формы xi. Я пытаюсь написать функцию, которая будет принимать некоторые начальные значения обоих параметров и оптимизировать функцию логарифмического правдоподобия по xi с фиксированным VaR. В конечном счете, я хочу, чтобы вывод был максимальным значением логарифмической функции правдоподобия для VaR. Я пытаюсь воссоздать код, чтобы я мог его понять. Но я также слежу за чьим-то кодом, который предположительно выполнил имитацию Однако копирование их кода дословно приводит к ошибкам.
Код ниже начинается с нескольких сконструированных параметров. Тогда есть функция b, чтобы определить параметр, используемый в GPD. Затем мы определяем логарифмическую функцию правдоподобия прологлик, которая принимает два неизвестных параметра xi и xVaR. Когда я выбираю некоторые примеры значений и вычисляю выходные данные b и prologlik вручную, я получаю те же значения, что и код. Однако, когда я запускаю функцию pllMax (2,2), я получаю сообщение об ошибке «Неограниченное значение с конечной разностью [1]». Может кто-нибудь сказать мне, как я могу это исправить и написать функцию, которая может принимать параметры xi и xVaR и возвращать максимальное значение логарифмической вероятности по xi с фиксированным xVaR?
library(extraDistr)
u <- 1
a <- .75
frac <- .5
y <- c(3,3)
data <- y - u
b <- function(xi, xVaR){
k <- (1-a)/frac
beta <- xi*(xVaR-u)/(k^(-xi)-1)
return(beta)
}
prologlik <- function(xi,xVaR){
beta <- b(xi, xVaR)
out <- sum(dgpd(data, mu=0, sigma=beta, xi=xi, log=TRUE))
return(out)
}
pllMax <- function(xi,xVaR){
optimfit <- optim(xi, fn=prologlik, xVaR, gr=NULL, method="BFGS")
xi.est <- optimfit$par
llmax <- -1*prologlik(xi.est, xVaR)
output <- c(xi.est, llmax)
return(output)
}
pllMax(2,2)