使用rmgarch估计DCC-GARCH(1,1)模型时遇RRuntimeError求助
我有一个包含5个资产对数收益率的DataFrame,无缺失值等问题。在Jupyter Notebook中使用rmgarch包估计DCC-GARCH(1,1)模型,已完成包的安装与导入,但估计模型时持续报错:
RRuntimeError: Error in round(object@mfit$matcoef, 6):non-numeric argument to mathematical function.
已将DataFrame转换为as.numeric()格式,单变量GARCH(1,1)模型可正常运行,但多变量dccfit步骤始终报错。尝试过2个、3个资产的情况,也在RStudio中运行代码,均出现相同错误。
附相关代码:
# 定义GARCH(1,1)模型 univariate_spec <- ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(garchOrder = c(1,1),model = "sGARCH"),distribution.model = "norm") # 定义DCC(1,1)模型 n <- dim(data)[2] dcc_spec <- dccspec(uspec = multispec(replicate(n, univariate_spec)), dccOrder = c(1,1),model=c("DCC"),distribution = c("mvnorm")) dcc_fit <- dccfit(dcc_spec, data=data) dcc_fit # 单变量情况可正常运行 # garch_fit <- ugarchfit(spec = univariate_spec, data = data) # garch_fit
转换数据为矩阵/时间序列类型:rmgarch的
dccfit要求输入数据为矩阵(matrix)或xts时间序列对象,而非DataFrame。即使使用as.numeric()转换,若数据仍保留DataFrame结构,会导致内部处理异常。执行以下代码转换:# 将DataFrame转换为矩阵 data_matrix <- as.matrix(data)之后在
dccfit中替换为data=data_matrix。调整multispec生成方式:
replicate(n, univariate_spec)生成的对象可能存在格式兼容问题,改用lapply循环生成单变量模型规格,确保每个规格都是有效的ugarchspec对象:uspec_list <- lapply(1:n, function(x) univariate_spec) dcc_spec <- dccspec(uspec = multispec(uspec_list), dccOrder = c(1,1),model=c("DCC"),distribution = c("mvnorm"))先验证单变量批量拟合结果:在执行DCC拟合前,先批量拟合所有资产的单变量GARCH模型,确认每个模型都能正常收敛,避免因个别资产拟合失败导致DCC步骤出错:
uni_fits <- multifit(multispec(uspec_list), data = data_matrix) # 查看拟合结果,确认无报错 uni_fits若批量拟合正常,再将结果传入
dccfit:dcc_fit <- dccfit(dcc_spec, data = data_matrix, fit = uni_fits)检查并处理极端值:若收益率数据存在极端值,可能导致模型拟合过程中出现非数值结果。可先对数据做标准化处理:
data_scaled <- scale(data_matrix)
内容的提问来源于stack exchange,提问作者BKS

