4 votes

Comment exporter la sortie GARCH vers latex ?

Je souhaite exporter les résultats d'un modèle GARCH ajusté avec le package rugarch au latex mais je ne trouve pas d'emballage approprié.

Habituellement, le paquet stargazer serait parfait pour ça, mais stargazer ne prend en charge que la sortie de l fGarch paquet. print() ne fonctionne pas non plus.

MWE :

x <- rnorm(1:100)

spec <- rugarch::ugarchspec(
          variance.model = list(model = "sGARCH"),
          mean.model = list(armaOrder = c(0, 0),
                            include.mean = TRUE),
          distribution = "std")
fit <- rugarch::ugarchfit(spec = spec, data = x)

5voto

Emil Points 31

Vous pouvez utiliser le texreg à cet effet et le personnaliser pour le ugarchfit fonction de la rugarch paquet :

library(texreg)

#define independent variable:

y <- x #to generalize  your case (y is usually the independent variable)

extract.rugarch <- function(fit, 
                            include.rsquared = TRUE, include.loglike = TRUE, include.aic = TRUE, include.bic = TRUE) {

  # extract coefficient table from fit:
  coefnames <- rownames(as.data.frame(fit@fit$coef))
  coefs <- fit@fit$coef
  se <- as.vector(fit@fit$matcoef[, c(2)])
  pvalues <-  as.vector(fit@fit$matcoef[, c(4)])       # numeric vector with p-values

  # create empty GOF vectors and subsequently add GOF statistics from model:
  gof <- numeric()
  gof.names <- character()
  gof.decimal <- logical()
  if (include.rsquared == TRUE) {
    r2 <-  1 - (var(fit@fit$residuals) / var(y))
    gof <- c(gof, r2)
    gof.names <- c(gof.names, "R^2")
    gof.decimal <- c(gof.decimal, TRUE)
  }
  if (include.loglike == TRUE) {
    loglike <- fit@fit$LLH
    gof <- c(gof, loglike)
    gof.names <- c(gof.names, "Log likelihood")
    gof.decimal <- c(gof.decimal, TRUE)
  }
  if (include.aic == TRUE) {
    aic <- infocriteria(fit)[c(1)]
    gof <- c(gof, aic)
    gof.names <- c(gof.names, "AIC")
    gof.decimal <- c(gof.decimal, TRUE)
  }

  if (include.bic == TRUE) {
    bic <- infocriteria(fit)[c(2)]
    gof <- c(gof, bic)
    gof.names <- c(gof.names, "BIC")
    gof.decimal <- c(gof.decimal, TRUE)
  }

  # create texreg object:
  tr <- createTexreg(
    coef.names = coefnames, 
    coef = coefs,
    se = se,
    pvalues = pvalues, 
    gof.names = gof.names, 
    gof = gof, 
    gof.decimal = gof.decimal
  )
  return(tr)
}

#print table:
texreg(extract.rugarch(fit, include.rsquared = FALSE)) #for latex # as R^2 is zero in this example.

Philip Leifeld, l'auteur du paquet, a fourni une très bonne explication détaillée sur la façon de personnaliser texreg pour les paquets non pris en charge : Imprimer de "jolis" tableaux pour les modèles h2o dans R

1voto

Markus Hauschel Points 125

stargazer échoue puisque le résultat de ugarchfit est trop ambiguë. Il suffit d'extraire les valeurs souhaitées. Vous trouverez ci-dessous une réalisation de cette procédure.

(Cette version ne supporte que le modèle GARCH spécifié dans la question et ne couvre que les estimations des paramètres)

require("magrittr")

stargazer::stargazer(fit@fit$matcoef, 
  title = "Parameter Estimates of the GARCH(1, 1)") %>% 
  gsub("Std. Error", "Rob. Std. Error", .) %>%  
  gsub("t value", "Rob. t value", .) %>%  
  gsub("mu", "$\\\\mu$", .) %>%
  gsub("alpha1", "$\\\\alpha$", .) %>%
  gsub("omega", "$\\\\omega$", .) %>%  
  gsub("beta1", "$\\\\beta$", .) %>%
  gsub("shape", "$\\\\nu$", .)  %>%
  writeLines("arch_output.tex")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X