GarchDistributions          package:fSeries          R Documentation

_G_A_R_C_H _D_i_s_t_r_i_b_u_t_i_o_n_s _a_n_d _P_a_r_a_m_e_t_e_r _E_s_t_i_m_a_t_i_o_n

_D_e_s_c_r_i_p_t_i_o_n:

     A collection and description of functions to compute  density,
     distribution function, quantile function and  to generate random
     variates for the skew normal, the skew  Student-t, and skew
     generalized error distribution. In addition maximum likelihood
     estimators are available to  fit the parameters of a distribution
     and to compute  basic statistical properties.  

     The functions are:

       '[dpqr]norm'   Normal distribution from R's base package,
       '[dpqr]snorm'  Skew Normal distribution,
       '[dpqr]std'    Symmetric Student-t Distribution,
       '[dpqr]sstd'   Skew Student-t Distribution,
       '[dpqr]ged'    Symmetric GED distribution,
       '[dpqr]sged'   Skew GED distribution.

     The estimatore are:

       'normFit'   MLE parameter fit for a Normal distribution,
       'snormFit'  MLE parameter fit for a skew Normal distribution,
       'stdFit'    MLE parameter fit for a Sudent-t distribution,
       'stdFit'    MLE parameter fit for a skew Sudent-t distribution,
       'gedFit'    MLE parameter fit for a generalized error distribution,
       'nigFit'    MLE parameter fit for a skew generalized error distribution.

     Utility Function:

       'absMoments'  Computes absolute moments of a symmetric density.

_U_s_a_g_e:

     dsnorm(x, mean = 0, sd = 1, xi = 1.5)
     psnorm(q, mean = 0, sd = 1, xi = 1.5)
     qsnorm(p, mean = 0, sd = 1, xi = 1.5)
     rsnorm(n, mean = 0, sd = 1, xi = 1.5)

     dstd(x, mean = 0, sd = 1, nu = 5)
     pstd(q, mean = 0, sd = 1, nu = 5)
     qstd(p, mean = 0, sd = 1, nu = 5)
     rstd(n, mean = 0, sd = 1, nu = 5)

     dsstd(x, mean = 0, sd = 1, nu = 5, xi = 1.5)
     psstd(q, mean = 0, sd = 1, nu = 5, xi = 1.5)
     qsstd(p, mean = 0, sd = 1, nu = 5, xi = 1.5)
     rsstd(n, mean = 0, sd = 1, nu = 5, xi = 1.5)

     dged(x, mean = 0, sd = 1, nu = 2)
     pged(q, mean = 0, sd = 1, nu = 2)
     qged(p, mean = 0, sd = 1, nu = 2)
     rged(n, mean = 0, sd = 1, nu = 2)

     dsged(x, mean = 0, sd = 1, nu = 2, xi = 1.5)
     psged(q, mean = 0, sd = 1, nu = 2, xi = 1.5)
     qsged(p, mean = 0, sd = 1, nu = 2, xi = 1.5)
     rsged(n, mean = 0, sd = 1, nu = 2, xi = 1.5)

     normFit(x, ...)
     snormFit(x, ...)
     stdFit(x, ...)
     sstdFit(x, ...)
     gedFit(x, ...)
     sgedFit(x, ...)

     absMoments(n, density = c("dnorm", "dged", "dstd"), ...)

_A_r_g_u_m_e_n_t_s:

 density: [absMoments] - 
           a character string naming the symmetric density function. 

mean, sd, nu, xi: location parameter 'mean', scale parameter 'sd',
          shape parameter 'nu',  skewness parameter 'xi'. 

       n: [rnorm][r*ged][r*std] - 
           the number of observations.
           [absMoments] - 
           the number of absolute Moments. 

       p: a numeric vector of probabilities. 

    x, q: a numeric vector of quantiles. 

     ...: [*Fit] - 
           parameters parsed to the optimization function 'nlm'.
           [absMoments] - 
           parameters passed to the density function. 

_D_e_t_a_i_l_s:

     *Symmetric Normal Distibution:* 

      The functions for the normal distribution are part of R's base
     package. The functions for the symmetric Student-t  distribution
     are rescaled in such a way that they have unit  variance in
     contrast to the Student-t family 'dt', 'pt',  'qt' and 'rt' which
     are part of R's base package. The generalized error distribution
     functions are defined as  described by Nelson (1991). 

     *Skew Normal Distribution:* 

      The skew normal distribution functions are defined as described
     by Fernandez and Steel (2000). cr

     *Parameter Estimation:* 

      The function 'nlm' is used to minimize the "negative" maximum 
     log-likelihood function. 'nlm' carries out a minimization using  a
     Newton-type algorithm.

_V_a_l_u_e:

     'd*' returns the density, 'p*' returns the distribution function,
     'q*' returns the quantile function, and 'r*' generates random
     deviates, 
      all values are numeric vectors.

     '*Fit' return a list with the following components: 


estimate: the point at which the maximum value of the log liklihood 
          function is obtained. 

objective: the value of the estimated maximum, i.e. the value of the
          log liklihood function. 

 message: an integer indicating why the optimization process
          terminated. 

    code: an integer indicating why the optimization process
          terminated.
           1: relative gradient is close to zero, current iterate is
          probably  solution; 
           2: successive iterates within tolerance, current iterate is
          probably  solution; 
           3: last global step failed to locate a point lower than
          'estimate'.  Either 'estimate' is an approximate local
          minimum of the  function or 'steptol' is too small; 
           4: iteration limit exceeded; 
           5: maximum step size 'stepmax' exceeded five consecutive
          times.  Either the function is unbounded below, becomes
          asymptotic to a  finite value from above in some direction or
          'stepmax'  is too small. 

gradient: the gradient at the estimated maximum. 

   steps: number of function calls. 


     'absMoments' returns a numeric vector of length 'n' with the
     values of the absolute moments of the density function.

_A_u_t_h_o_r(_s):

     Diethelm Wuertz for the Rmetrics R-port.

_R_e_f_e_r_e_n_c_e_s:

     Nelson D.B. (1991); _Conditional Heteroscedasticity in Asset
     Returns: A New Approach_, Econometrica, 59, 347-370.

     Fernandez C., Steel M.F.J. (2000);  _On Bayesian Modelling of Fat
     Tails and Skewness_, Preprint, 31 pages.

_E_x_a_m_p_l_e_s:

     ## SOURCE("fSeries.34A-GarchDistributions")

     ## snorm -
        xmpSeries("\nStart: Skew Normal Distribuion:  > ")
        par(mfrow = c(2, 2), cex = 0.75)
        set.seed(1953)
        r = rsnorm(n = 1000, mean = 1, sd = 0.5, xi = 1.5)
        plot(r, type = "l", main = "snorm: xi = 1.5")
        # Plot empirical density and compare with true density:
        hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
        x = seq(-4, 6, 0.1)
        lines(x, dsnorm(x = x, mean = 1, sd = 0.5, xi = 1.5))
        # Plot df and compare with true df:
        plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
        lines(x, psnorm(x, mean = 1, sd = 0.5, xi = 1.5))
        # Compute quantiles:
        qsnorm(psnorm(q = -4:6, mean = 1, sd = 0.5, xi = 1.5), 
          mean = 1, sd = 0.5, xi = 1.5) 
          
     ## sstd -
        xmpSeries("\nStart: Skew Student-t Distribution:  > ")
        par(mfrow = c(2, 2), cex = 0.75)
        set.seed(1953)
        r = rsstd(n = 1000, nu = 4, xi = 1.5)
        # Print Variance:
        var(r)
        plot(r, type = "l", main = "sstd: xi = 1.5")
        # Plot empirical density and compare with true density:
        hist(r, n = 30, xlim = c(-5, 5), probability = TRUE, 
          border = "white", col = "steelblue4")
        x = seq(-5, 5, 0.1)
        lines(x, dsnorm(x = x, xi = 1.5))
        # Plot df and compare with true df:
        plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
        lines(x, psstd(x, xi = 1.5))
        # Compute quantiles:
        qsstd(psstd(q = -5:5, xi = 1.5), xi = 1.5) 
        
     ## sged -
        xmpSeries("\nStart: Skew Generalized Error Distribuion:  > ")
        par(mfrow = c(2, 2), cex = 0.75)
        set.seed(1953)
        r = rsged(n = 1000, mean = 1, sd = 0.5, xi = 1.5)
        plot(r, type = "l", main = "sged: xi = 1.5")
        # Plot empirical density and compare with true density:
        hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
        x = seq(-1, 5, 0.1)
        lines(x, dsged(x = x, mean = 1, sd = 0.5, xi = 1.5))
        # Plot df and compare with true df:
        plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
        lines(x, psged(x, mean = 1, sd = 0.5, xi = 1.5))
        # Compute quantiles:
        qsged(psged(q = -1:5, mean = 1, sd = 0.5, xi = 1.5), 
          mean = 1, sd = 0.5, xi = 1.5) 

     ## snormFit -
        xmpSeries("\nStart: MLE Fit to skew Normal Density > ")
        options(warn = -1) # suppress negative logs from nlm
        normFit(rnorm(1000))
        snormFit(rnorm(1000))
        
     ## sstdFit -
        xmpSeries("\nNext: MLE Fit to skew Student-t Density > ")
        sstdFit(rsstd(1000, mean = 1, sd = 1.5, nu = 7, xi = 2/3))
        
     ## sgedFit -
        xmpSeries("\nNext: MLE Fit to skew Generalized Error Density > ")
        sgedFit(rsged(1000, mean = -1, sd = 0.5, nu = 3, xi = 3/2),
              print.level = 2)

