[R] farimaSim

Diethelm Wuertz wuertz at itp.phys.ethz.ch
Mon Aug 1 00:07:10 CEST 2005


Hansi Weissensteiner wrote:

>Hello!
>
>I installed the fSeries package to get some farima time-series which i tried
>with farimaSim, but unfortunately i got always an error. I tried it this way:
>
>  
>
>>farimaSim(n = 1000, model = list(ar = 0.5,  d = 0.3, ma = 0.1), method="freq")
>>    
>>
>
>Error in farimaSim(n = 1000, model = list(ar = 0.5, d = 0.3, ma = 0.1),  :
> ... used in an incorrect context
>  
>
In the function definition of farimaSim the dots argument is missing.
Replace or overwrite  farimaSim by the following function.
I have to aplogize for any inconveniances caused by this bug.
The bug will be fixed in the next version of Rmetrics.

Diethelm Wuertz



farimaSim =
function(n = 1000, model = list(ar = c(0.5, -0.5), d = 0.3, ma = 0.1),
method = c("freq", "time"), ...)
############  ^^^^^^^^^^   #### Insert the dots!!!!
{   # A function implemented by Diethelm Wuertz

    # Description:
    #   Simulates a FARMA Time Series Process
   
    # Note:
    #   Splus-Like argument list
   
    # Example:
    #   armaSim(model = list(ar = c(0.5, -0.5), d = 0.2, ma = 0.1))
    #   armaSim(model = list(d = 0.2, ma = 0))
    #   armaSim(model = list(d = 0.2))
   
    # FUNCTION:
   
    # Settings:
    innov = NULL
    n.start = 100
    start.innov = NULL
    rand.gen = rnorm
   
    # Simulate:
    if (!is.list(model))
        stop("model must be list")
    if (is.null(innov))
        innov = rand.gen(n, ...)
    n = length(innov)
    if (is.null(start.innov))
        start.innov = rand.gen(n, ...)
    n.start = length(start.innov)

    # AR PART:
    p = length(model$ar)
    if (p == 1 && model$ar == 0)
        p = 0
    if (p) {
        minroots = min(Mod(polyroot(c(1, -model$ar))))
        if (minroots <= 1) stop("ar part of model is not stationary")
    }
   
    # MA PART:
    q = length(model$ma)
    if (q == 1 && model$ma == 0)
        q = 0
    if (n.start < p + q)
        stop("burn-in must be as long as ar + ma")
   
    # DIFFERENCING:
    ## if (model$d < 0) stop("d must be positive ")
    dd = length(model$d)   
    if (dd) {
        # FRACDIFF if "dd" is a non-integer value:
        d = model$d
        if (d != round(d) ) {
            TSMODEL = "FRACDIFF"
        } else {
            TSMODEL = "ARIMA" }
    } else {
        d = 0
        TSMODEL = "ARIMA"
    }
   
    # ARMA:
    if (TSMODEL == "ARIMA") {
        stop("d is a short range model")
    }
       
    if (TSMODEL == "FRACDIFF") {
        if (p == 0) model$ar = 0
        if (q == 0) model$ma = 0
        mu = 0
        # Use Fortran Routine from R's contributed fracdiff package:
        # This is a BUILTIN function ...
        x = .Fortran("fdsim", as.integer(n), as.integer(p), as.integer(q),
            as.double(model$ar), as.double(model$ma), as.double(model$d),
            as.double(mu), as.double(rnorm(n + q)), x = double(n + q),
            as.double(.Machine$double.xmin), 
as.double(.Machine$double.xmax),
            as.double(.Machine$double.neg.eps), 
as.double(.Machine$double.eps),
            PACKAGE = "fSeries")$x[1:n]
    }
              
    # Return Value:
    ans = as.ts(x)
    attr(ans, "model") = model
    ans
}



The result will be:

farimaSim(n = 1000, model = list(ar = 0.5,  d = 0.3, ma = 0.1), 
method="freq")
Time Series:
Start = 1
End = 1000
Frequency = 1
   [1]  3.2301357515  2.7050870252  3.4878581467  4.1825601460  5.1286599175
   [6]  5.5220029973  5.1488261085  5.9423142081  3.5078481961  2.1189096844
  [11]  2.5885700846  2.2224732255  3.0389690791  2.8123050401  2.6096020908
  [16]  2.3095398924  1.4900953088  2.6017795027  3.5148157279  3.4317135045
...
 [991] -0.5745174996  0.9022402358 -0.5675451281  1.4723458150  2.2187064082
 [996]  1.6818662030  0.3170217298  0.9290833661  0.5800528928 -1.6796471062
attr(,"model")
attr(,"model")$ar
[1] 0.5

attr(,"model")$d
[1] 0.3

attr(,"model")$ma
[1] 0.1




>Some ideas?
>
>Regards,
>
>    ___
> _ /_|_|   Hansi Weissensteiner
>/o\__/O\=  csae1552 at uibk.ac.at
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>  
>




More information about the R-help mailing list