Многомерная модель Маркова-переключения - функция R - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время я пытаюсь воспроизвести статью о корреляции доходности фондового рынка и, более конкретно, я использую модель марковского переключения на 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")

Мне не очень удобны функции, может объяснить, почему ... Большое спасибо за вашу помощь!

...