【问题标题】:How to isolate the plots of this method?如何隔离这种方法的地块?
【发布时间】:2013-05-31 04:03:13
【问题描述】:

我正在使用rugarch 包并安装了一个模型。现在我想查看输出并使用绘图功能。我的问题是,第 5 个图包含一些子图,这些子图绘制在一个设备中,但我想将每个子图绘制在一个设备中。我怎样才能做到这一点?作为一个例子,我给你一个代码示例,它使用了包的 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) 将多个图绘制到一个设备中,我想隔离它们。

所以我想将它们作为单个地块并更大,现在它们太小了,因为它们都被放入一个输出中。

【问题讨论】:

  • 运行您的代码我收到以下错误(在某些型号ugarchspec-->error: the cond.distribution does not appear to be a valid choice.。也许这是我正在使用的 r 版本,但对我来说,这个例子是不可重现的......
  • 您的代码中有几个错误。 distribution.model = "GED" 应该是 distribution.model = "ged"。并且 spmodel 不存在。
  • @thijsvandenbergh 好的,抱歉,我更正了错误! Rugarch 仅适用于 R 版本 >= 3.00。我还添加了绘图输出。
  • @PLapointe 感谢您的提示!
  • 我仍在寻找答案,所以任何提示都会很棒!

标签: r statistics time-series data-visualization


【解决方案1】:

您的示例不起作用(至少对我而言),即它不会收敛。但是,这个可行:

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"Fit Coefficients (with s.e. bands)"。通过检查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)

【讨论】:

  • 谢谢,我需要时间来检查你的代码并理解它。我会回来问更多问题或接受您的回答。
  • 感谢您的回答,我现在已经检查了代码并且可以正常工作。因此我会接受你的回答。但最后一个问题:我知道,我可以通过命令 coef(mod) 获取用于创建绘图的值。这些是估计值及其使用的标准差。错误。但是我怎样才能得到这些输出的独立值呢?例如。 coef(mod)[1] 为我提供了 omega 的估计值,因此对于某个特定的窗口。现在,我想提取例如此时间点(此窗口)的欧米茄估计值。我想对 coef(mod) 的所有元素执行此操作,以获取具有相应日期的隔离值,
  • 这样我就可以自己使用 plot(values,date) 等重新创建情节。我怎样才能做到这一点?
  • 关于情节本身的一件小事,我怎样才能得到更详细的 y 轴?在 y 轴上有更详细的刻度吗?
  • @StatTistician, coef(mod) 是一个列表列表,所以coef(mod)[[1]] 返回第一个窗口的列表。它有两个元素:indexcoef,据我所知,您想要的是一个矩阵coef(mod)[[1]]$coef,尤其是一列估计值coef(mod)[[1]]$coef[, 1]。似乎你关于蜱的问题的答案不适合评论:它有点复杂,因为plot.xts 本身绘制了axis(1, ...axis(2, ...。但是,似乎使用了最大数量的刻度(至少在我的示例中),您是否尝试过缩放绘图?然后又出现了一些标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多