В настоящее время я пытаюсь воспроизвести статью о корреляции доходности фондового рынка и, более конкретно, я использую модель марковского переключения на 3 фондовых индексах, чтобы увидеть, есть ли два разных состояния.Я максимизирую функцию правдоподобия для оценки 10 параметров, используя алгоритм BHHH.Тем не менее, я получаю следующую ошибку, когда я выполняю функцию, используя в качестве отправной точки набор данных:
Ошибка цитаты в warnMessage (t1, ft1, i): значение функции должно быть числовым для 'numericGradient'
По существу, функция правдоподобия состоит из двух частей, и я сначала пытаюсь оценить первую для gkt, которую можно найти на странице 65 следующей статьи https://onlinelibrary.wiley.com/doi/pdf/10.1111/1468-0300.00047).
Мой код следующий
g_function <- function(param){
mu_0 <- param[1]
h_0 <- param[2]
mu_1 <- param[3]
h_1 <- param[4]
mu_2 <- param[5]
h_2 <- param[6]
rho_01 <- param[7]
rho_12 <- param[8]
rho_02 <- param[9]
v <- param[10]
g <- lgamma((v+nrow(returns2))/2)*(sqrt(pi*(v-2))*gamma(v/2))**(-nrow(returns2))*((1 + returns2*matrix(c(h_0,rho_01,rho_02,
rho_01,h_1,rho_12,
rho_02,rho_12,h_2), ncol = 3, byrow = TRUE)**(-1)*returns2)/(v-2))**(-(v+nrow(returns2))/2)*matrix(c(h_0,rho_01,rho_02, rho_01,h_1,rho_12, rho_02,rho_12,h_2), ncol = 3, byrow = TRUE)**(1/2)
}
x <- maxLik(logLik = g_function, start = c(mu_0 = mean(returns$SP500), mu_1 = mean(returns$DAX), mu_2 = mean(returns$FTSE100), h_0 = var(returns$SP500), h_1 = var(returns$DAX), h_2 = var(returns$FTSE100), rho_01 = cor(returns$SP500, returns$DAX), rho_12 = cor(returns$DAX, returns$FTSE100), rho_02 = cor(returns$SP500, returns$FTSE100), v = 3), method = "BHHH")
Мне не очень удобны функции, может объяснить, почему ... Большое спасибо за вашу помощь!