external.regressors = NULL)
external.regressors = NULL, variance.targeting = F)
distribution.model = dist.spec)
根据你提供的代码和问题描述,可能的原因是 ugarchfit
函数中的 data
参数需要传入的数据类型是 numeric
类型,但是 zyzb
变量是一个 list
类型的数据,导致类型不匹配,从而抛出了 'list' object cannot be coerced to type 'double'
的错误。
为了解决这个问题,你可以将 zyzb
变量转换为 numeric
类型的一维向量。这可以通过将 zyzb
变量中的所有元素连接或 unlist 得到。
另外,read_excel
函数会将 Excel 文件中的每个 sheet 读取为一个数据框。因此,需要根据实际情况指定要读取的 sheet 名称或序号,例如 read_excel("zyzb.xls", sheet = "Sheet1")
或 read_excel("zybz.xls", sheet = 1)
。
综合以上说明,你可以修改代码如下:
library(readxl)
library(rugarch)
# 从 Excel 文件中读取数据到 zyzb 数据框中
zyzb <- read_excel("zyzb.xls", sheet = "Sheet1")
# 将 zyzb 数据框转换为一维的数值向量
zyzb.vec <- unlist(zyzb)
# 声明 GARCH 模型参数
mean.spec <- list(armaOrder = c(1, 1), include.mean = TRUE, archm = FALSE,
archpow = 1, arfima = FALSE, external.regressors = NULL)
var.spec <- list(model = "sGARCH", garchOrder = c(2, 1), submodel = NULL,
external.regressors = NULL, variance.targeting = FALSE)
dist.spec <- "norm"
myspec <- ugarchspec(mean.model = mean.spec, variance.model = var.spec,
distribution.model = dist.spec)
# 估计模型
fit <- ugarchfit(spec = myspec, data = zyzb.vec, solver.control = list(trace = 0))
# 显示估计结果
show(fit)
以上代码首先使用 read_excel
函数读取 Excel 文件中的数据,然后使用 unlist
函数将数据框转换为一维数值向量。接着,定义 GARCH 模型参数和分布模型参数,然后使用 ugarchfit
函数估计 GARCH 模型。最后,使用 show
函数在控制台显示 GARCH 模型的估计结果。