我在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
有关如何解决问题的任何想法?提前致谢。
答案 0 :(得分:0)
我没有看到您的代码有任何问题。我认为你应该超越代码并查看你的数据,看看问题是什么。你有没有使用任何其他数据集运行此代码?