Re: [R] farimaSim

2005-07-31 Thread Diethelm Wuertz
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\=  [EMAIL PROTECTED]

__
R-help@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

  


__
R-help@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


Re: [R] farimaSim

2005-07-31 Thread Gabor Grothendieck
Note that if the only difference is the addition of ... to the formal arguments
then you can just do this once in your session before using farimaSim:

  formals(farimaSim) - c(formals(farimaSim), alist(... = ))

Now farimaSim will have ... as an argument. e.g.

 formals(farimaSim) - c(formals(farimaSim), alist(... = ))
 args(farimaSim)
function (n = 1000, model = list(ar = c(0.5, -0.5), d = 0.3, 
ma = 0.1), method = c(freq, time), ...) 



On 7/31/05, Diethelm Wuertz [EMAIL PROTECTED] wrote:
 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\=  [EMAIL PROTECTED]
 
 __
 R-help@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
 
 
 
 
 __
 R-help@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


__
R-help@stat.math.ethz.ch mailing list

[R] farimaSim

2005-07-26 Thread Hansi Weissensteiner
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

Some ideas?

Regards,

___
 _ /_|_|   Hansi Weissensteiner
/o\__/O\=  [EMAIL PROTECTED]

__
R-help@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


Re: [R] farimaSim

2005-07-26 Thread Martin Maechler
 Hansi == Hansi Weissensteiner [EMAIL PROTECTED]
 on Tue, 26 Jul 2005 17:40:45 +0200 writes:

Hansi Hello!  I installed the fSeries package to get some
Hansi farima time-series which i tried with farimaSim, but
Hansi unfortunately i got always an error. I tried it this
Hansi way:

 farimaSim(n = 1000, model = list(ar = 0.5, d = 0.3, ma =
 0.1), method=freq)

Hansi Error in farimaSim(n = 1000, model = list(ar = 0.5, d
Hansi = 0.3, ma = 0.1), : ... used in an incorrect context

Hansi Some ideas?

Yes, the function farimaSim() is bogous, pretty obviously if you look
at it. 

I've wondered for a while if we (R developers) shouldn't
improve R CMD check so as to require that every exported
function in a package must have at least one running example.
For the farimaSim(), there is no call possible without an error
message.

Package 'fracdiff', though much older,  has a working
fracdiff.sim() function.

Martin Maechler, ETH Zurich

__
R-help@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