r - 如何隔离该方法的图?

标签 r statistics time-series data-visualization

我正在使用rugarch包和我安装了一个模型。现在我想查看输出并使用绘图函数。我的问题是,第五个图包含一些子图,这些子图在一个设备中绘制,但我想在单个设备中绘制每个子图。我怎样才能做到这一点?作为一个例子,我给你一个代码示例,它使用包的 sp500ret 数据:

代码:

library(rugarch)
data(sp500ret)

somemodel<-ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(2, 2)), 
mean.model = list(armaOrder = c(1, 1), include.mean = TRUE), 
distribution.model = "ged")

somefit<-ugarchfit(spec=somemodel,data=sp500ret)

rollingesti = ugarchroll(somemodel, sp500ret, n.start=500,
 refit.every = 100, refit.window = 'moving', window.size = 500, 
  calculate.VaR = FALSE, keep.coef = TRUE)

plot(rollingesti,which=5)

plot(rollingesti,which=5)将多个绘图绘制到一台设备中,我想将它们隔离。

ro

所以我希望将它们作为单个图并且更大,现在,它们太小了,因为它们都放入一个输出中。

最佳答案

你的例子不起作用(至少对我来说),即它不收敛。然而,这个有效:

library(rugarch)
data(sp500ret)
spec <- ugarchspec(distribution.model = "std")
mod <- ugarchroll(spec, data = sp500ret[1:2000,], n.ahead = 1, 
                 n.start = 1000,  refit.every = 100, refit.window = "moving", 
                 solver = "hybrid", fit.control = list(),
                 calculate.VaR = TRUE, VaR.alpha = c(0.01, 0.025, 0.05),
                 keep.coef = TRUE)

首先,我们找到一个在 plot(mod,which = 5) 中使用的方法。可以通过以下方式获得

getMethod("plot", c(x = "uGARCHroll", y = "missing"))

您对以下几行感兴趣

.intergarchrollPlot(x, choices = choices, plotFUN = paste(".plot.garchroll", 
            1:5, sep = "."), which = which, VaR.alpha = VaR.alpha, 
            density.support = density.support, ...)

其中choices“拟合系数(带s.e.带)”。通过检查 rugarch:::.intergarchrollPlot,我们最终到达 rugarch:::.plot.garchroll.5。这些图不会在任何列表或类似列表中返回,因此我提供了一些修改版本,以便您可以单独使用它们。这里我更改了前两行和最后一行:

library(xts)
x <- mod
vmodel = x@model$spec@model$modeldesc$vmodel
if (!x@model$keep.coef) 
  stop("\n\nplot-->error: keep.coef set to FALSE in estimation\n")
coefs = x@model$coef
m = dim(coefs[[1]]$coef)[1]
N = length(coefs)
Z = matrix(NA, ncol = m, nrow = N)
Zup = matrix(NA, ncol = m, nrow = N)
Zdn = matrix(NA, ncol = m, nrow = N)
for (i in 1:m) {
  Z[, i] = sapply(coefs, FUN = function(y) y$coef[i, 1])
  Zup[, i] = Z[, i] + sapply(coefs, FUN = function(y) y$coef[i, 
                                                             2])
  Zdn[, i] = Z[, i] - sapply(coefs, FUN = function(y) y$coef[i, 
                                                             2])
}
dt = sapply(coefs, FUN = function(y) as.character(y$index))
cnames = rownames(coefs[[1]]$coef)
np = rugarch:::.divisortable(m) # added rugarch:::

这是每个图单独的函数,i 是图形的编号,例如在本例中从 1 到 7:

plotFun <- function(i){
  plot(xts(Z[, i], as.POSIXct(dt)), type = "l", 
       ylim = c(min(Zdn[, i]), max(Zup[, i])), ylab = "value", xlab = "", main = "", 
       minor.ticks = FALSE, ann = FALSE, auto.grid = FALSE)
  lines(xts(Zdn[, i], as.POSIXct(dt)), col = 2)
  lines(xts(Zup[, i], as.POSIXct(dt)), col = 2)
  title(cnames[i], line = 0.4, cex = 0.9)
  grid()
}

例如:

plotFun(1)
plotFun(2)

关于r - 如何隔离该方法的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16923252/

相关文章:

javascript - 如何在 JavaScript 中比较不同样本量的平均值

r - 使用不同长度列的箱线图

r - 如何将 R 函数指向数据集的特定列?

algorithm - 如何计算给定算法的时间复杂度(岭回归)?

python - Pandas 合并时间序列,concat/append/...?

python - Panda 通过分组连接多个时间序列并扩展缺失数据

tensorflow - 如何处理keras中多元LSTM的多步时间序列预测

r - stopifnot() 与 assertError()

r - knitr 显示不带科学记数法的整数数字

python - 如何在 Python 中识别 ARIMA 模型的 p(滞后阶数)