我目前正在尝试复制有关股市收益相关性的论文,更具体地说,我正在对3个股指使用Markov转换模型来查看是否存在两种不同的状态。我正在使用BHHH算法最大化似然函数以估计10个参数。但是,当我使用数据集作为起点执行函数时,出现以下错误:
warnMessage(t1,ft1,i)中的Blockquote错误: 函数值必须是'numericGradient'的数字
基本上,似然函数由两部分组成,我首先尝试估计gkt的第一个部分,该文章可以在以下文章https://onlinelibrary.wiley.com/doi/pdf/10.1111/1468-0300.00047的第65页中找到。
我的代码如下
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")
我对功能不是很满意,请解释一下原因...非常感谢您的帮助!