R中的DCC GARCH模型 - 矩阵误差

时间:2018-04-17 00:38:31

标签: r debugging

我在2010-2017期间为70多家金融机构的每日股票回报提供了一个适合的DCC GARCH模型。我正在尝试构建机构之间的互相关。但是,下面的代码给了我一个错误。问题是我不知道这个错误的根源。

以下是我的代码:

rm(list = ls())
options(error=recover)
library(rmgarch)
library(xts)
library(foreign)

dat=read.csv("equity_returns2_2010-17_updated.csv", stringsAsFactors = FALSE)
tickers = unique(dat[,2])
R = do.call(cbind, lapply(1:length(tickers), function(i){
  tmp = dat[which(dat[,2]==tickers[i]),c(1,3)]
  tmp = xts(as.numeric(tmp[,2]), as.Date(strptime(tmp[,1],"%Y%m%d")))
  colnames(tmp)=tickers[i]
  return(tmp)
}))

head(R)
exc=sapply(1:ncol(R), function(i) length(which(is.na(R[,i]))))
exc=which(exc>1)
if(length(exc)>0) R = R[,-exc]
head(R)
which(is.na(R), arr.ind = TRUE)
R = na.omit(R)

m = ncol(R)
spec=ugarchspec(mean.model=list(armaOrder=c(1,0)),variance.model=list(garchOrder=c(1,1),model="gjrGARCH", variance.targeting=TRUE))
spec = multispec(replicate(m, spec))

mspec=dccspec(uspec = spec)
fit = dccfit(mspec, dat=R, solver=c("solnp","solnp"), solver.control=list(trace=1))

它非常有效,直到" fit"。运行fit后,会出现以下错误:

.
.
.
.
Iter: 1 fn: 2654.2613    Pars:  36.63415  0.97195  0.10379  0.93518 -0.08157
Iter: 2 fn: 2654.2613    Pars:  36.63417  0.97195  0.10379  0.93518 -0.08157
solnp--> Completed in 2 iterations

Iter: 1 fn: 2654.2613    Pars:  36.63415  0.97195  0.10379  0.93518 -0.08157
Iter: 2 fn: 2654.2613    Pars:  36.63417  0.97195  0.10379  0.93518 -0.08157
solnp--> Completed in 2 iterations

error: matrix multiplication: inverse of singular matrix; suggest to use solve() instead

有关如何解决问题的任何想法?提前致谢。

1 个答案:

答案 0 :(得分:0)

我没有看到您的代码有任何问题。我认为你应该超越代码并查看你的数据,看看问题是什么。你有没有使用任何其他数据集运行此代码?