Get the coefficients of models
modelCoef.Rd
Get the coefficients of an object, optionally specifying the expected format.
Arguments
- object
an object.
- convention
the convention to use for the return value, a character string or any object from a supported class, see Details.
- component
if not missing, specifies a component to extract, see Details.
- ...
not used, further arguments for methods.
Details
modelCoef
is a generic function for extraction of coefficients
of model objects. What `coeffcients' means depends on the class of
object
but it can be changed with the optional argument
convention
. In effect, modelCoef
provides a very
flexible and descriptive way of extracting coefficients from models in
various forms.
The one-argument form, modelCoef(object)
, gives the
coefficients of object
. In effect it defines, for the purposes
of modelCoef
, the meaning of `coefficients' for class
class(modelCoef)
.
Argument convention
can be used to specify what kind of value
to return.
If convention
is not a character string, only its class is
used. Conceptually, the value will have the format and meaning of the
value that would be returned by a call to modelCoef(obj)
with
obj
from class class(convention)
.
If convention
is a character string, it is typically the name
of a class. In this case modelCoef(object, "someclass")
is
equivalent to modelCoef(object, new("someclass"))
. Note that
this is conceptual - argument convention
can be the name of a
virtual class, for example. Also, for some classes of object
character values other than names of classes may be supported.
For example, if obj
is from class "ArmaModel",
modelCoef(obj)
returns a list with components "ar" and "ma",
which follow the "BD" convention. So, to get such a list of
coefficients from an object
from any class capable of
representing ARMA models, set convention = "ArmaModel"
in the
call to modelCoef{}
.
modelCoef()
will signal an error if object
is not
compatible with target
(e.g. if it contains unit roots).
(see filterCoef
if you need to expand any multiplicative
filters).
TODO: rethink this, it does not reflect current behaviour!
If there is no class which returns exactly what is needed some
additional computation may be necessary. In the above
"ArmaModel" example we might need the coefficients in the "BJ"
convention, so we would need to change the signs of the MA
coefficients to achieve this. Since this is a very common operation,
a convenience feature is available. Setting convention = "BJ"
requests ARMA coefficients with "BJ" convention. For completeness, the
the settings "SP" (signal processing) and "BD" (Brockwell-Davis) are
also available.
The methods for modelCoef()
in package "sarima" return a list
with components depending on argument "convention", as outlined
above.
Examples
## define a seasonal ARIMA model, it has a number of components
m1 <- new("SarimaModel", iorder = 1, siorder = 1, ma = -0.3, sma = -0.1, nseasons = 12)
m1
#> An object of class "SarimaModel"
#> Model: (1-B)(1-B^s)X(t) = Theta(B)Theta_s(B^s)e(t)
#>
#> Intercept: 0
#> SigmaSq: NA
#> Period: 12
#> Order of differencing: 1
#> Order of seasonal differencing: 1
#>
#> ar coefficients: <None>
#> ma coefficients: -0.3
#> seasonal ar coefficients: <None>
#> seasonal ma coefficients: -0.1
## Get the coefficients corresponding to a 'flat' ARMA model,
## obtained by multiplying out AR-like and MA-like terms.
## A simple way is to use modelCoef() with a suitable convention:
modelCoef(m1, "ArmaModel")
#> $ar
#> [1] 1 0 0 0 0 0 0 0 0 0 0 1 -1
#>
#> $ma
#> [1] -0.30 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.10
#> [13] 0.03
#>
modelCoef(m1, "ArmaFilter") ## same
#> $ar
#> [1] 1 0 0 0 0 0 0 0 0 0 0 1 -1
#>
#> $ma
#> [1] -0.30 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.10
#> [13] 0.03
#>
## Here is another model
m1a <- new("SarimaModel", iorder = 1, siorder = 1, ar = 0.6, nseasons = 12)
modelCoef(m1a, "ArmaModel")
#> $ar
#> [1] 1.6 -0.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 -1.6 0.6
#>
#> $ma
#> numeric(0)
#>
modelCoef(m1a, "ArmaFilter") ## same
#> $ar
#> [1] 1.6 -0.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 -1.6 0.6
#>
#> $ma
#> numeric(0)
#>
## if only AR-like terms are allowed in a computation,
## use convention = "ArModel" to state it explicitly.
##
## this works, since m1a contains only AR-like terms:
modelCoef(m1a, "ArModel")
#> $ar
#> [1] 1.6 -0.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 -1.6 0.6
#>
#> $ma
#> numeric(0)
#>
modelCoef(m1a, "ArFilter") ## same
#> $ar
#> [1] 1.6 -0.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 -1.6 0.6
#>
#> $ma
#> numeric(0)
#>
## ... but these would throw errors if evaluated,
## since model m1a contains both AR-like and MA-like terms,
if (FALSE) {
modelCoef(m1, "ArModel")
modelCoef(m1, "ArFilter")
modelCoef(m1, "MaModel")
modelCoef(m1, "MaFilter")
}