| TSrestrictedModel {dse1} | R Documentation |
Put restrictions on a "TSmodel".
TSrestrictedModel(model,
coefficients=NULL,
restriction=NULL)
model |
An object containing an object of class TSmodel (unrestricted). |
coefficients |
coefficients of the restricted model. |
restriction |
function that maps the coefficients of the restricted model into the coefficients of the unrestricted model. |
BEWARE THIS CLASS OF MODELS IS EXPERIMENTAL AND MAY CHANGE.
This is the constructor for a "TSrestrictedModel","TSmodel""
The argument model should specify a TSmodel which is not a
TSrestrictedModel.
This constructor defines a new class of model TSrestrictedModel,
which is composed of an unrestricted TSmodel, a new set of
coefficients, and a function
called restriction which maps the new set of coefficients into
the unrestricted TSmodel. So, if mod1 is a TSrestrictedModel,
then mod1$restriction(mod1$TSmodel, mod1$coefficients) should return
an unrestricted TSmodel with it coefficients specified.
Methods like l.TSrestrictedModel sets the arrays using the set
of coefficients for the TSrestrictedModel and
restrictions/equalities defined in the function restriction.
It is possible the class is misnamed. It should be possible to construct some extentions of TSmodels by definining restrictions on an enlarged model (but I have not played with this yet).
TSmodel,
ARMA,
SS,
TSestModel,
TSdata
rngValue10 <- list(seed=10, kind="Mersenne-Twister", normal.kind="Inversion")
# example 1
z <- ARMA(A=c(1, 0.3), B=1)
mod1 <- TSrestrictedModel(z,
coefficients=coef(z),
restriction=function(m, AllCoef){setArrays(m, 2*AllCoef)})
mod1
# example 2
mod2 <- TSrestrictedModel(z, coefficients=c(3, coef(z)),
restriction=function(m, AllCoef){ setArrays(m, AllCoef[1]*AllCoef[-1])})
mod2
# example 3
z <- toSS(ARMA(A=c(1, 0.3, 0.1), B=1))
mod3 <- TSrestrictedModel(z, coefficients=c(2,.3, 4, coef(z)),
restriction=function(m, AllCoef){
mm <- setArrays(m, AllCoef[-(1:3)])
P0 <- matrix(0,2,2)
P0[,1] <- AllCoef[1:2]
P0[,2] <- AllCoef[2:3]
mm$P0 <- P0
setTSmodelParameters(mm)
})
mod3
# example 4
# Starting P0 ("big k") symmetric with off diagonal element smaller than diag.
P0 <- matrix(1e6,4,4)
diag(P0 )<- 1e7
# lower triangle will be parameters
P0[outer(1:4, 1:4, ">=")]
length(P0[outer(1:4, 1:4, ">=")]) # number of parameters
Hloadings <- t(matrix(c(
8.8, 5.2,
23.8, -12.6,
5.2, -2.0,
36.8, 16.9,
-2.8, 31.0,
2.6, 47.6), 2,6))
z <- SS(F=t(matrix(c(
0.8, 0.04, 0.2, 0,
0.2, 0.5, 0, -0.3,
1, 0, 0, -0.2,
0, 1, 0, 0 ), c(4,4))),
H=cbind(Hloadings, matrix(0,6,2)),
Q=diag(c(1, 1, 0, 0),4),
R=diag(1,6),
z0=c(10, 20, 30,40),
P0=NULL
)
# The restriction constructions P0 from the lower triangle
mod4 <- TSrestrictedModel(z,
coefficients=c(P0[outer(1:4, 1:4, ">=")],coef(z)),
restriction=function(m, AllCoef){
mm <- setArrays(m, AllCoef[-(1:10)])
P0 <- matrix(0,4,4)
P0[outer(1:4, 1:4, ">=")] <- AllCoef[1:10]
P0 <- P0 + t(P0)
diag(P0) <- diag(P0)/2
mm$P0 <- P0
setTSmodelParameters(mm)
})
mod4
z <- simulate(SS(F=t(matrix(c(
0.8, 0.04, 0.2, 0,
0.2, 0.5, 0, -0.3,
1, 0, 0, -0.2,
0, 1, 0, 0 ), c(4,4))),
H=cbind(Hloadings, matrix(0,6,2)),
Q=diag(c(1, 1, 0, 0),4),
R=diag(1,6),
z0=c(10, 20, 30,40),
P0=diag(c(10, 10, 10, 10)) ),
rng=rngValue10)
state.sim <- z$state # for comparison below
y.sim <- outputData(z) # simulated indicators
coef(mod4)
coef(l(mod4, TSdata(output=y.sim)))
summary(l(mod4, TSdata(output=y.sim)))
zz <- smoother(l(mod4, TSdata(output=y.sim)))
summary(zz)
tfplot(state.sim,state(zz))
tfplot(state.sim,state(zz, smoother=TRUE))
est.mod4 <- estMaxLik(mod4, TSdata(output=y.sim),
algorithm.args=list(method="BFGS", upper=Inf, lower=-Inf, hessian=TRUE,
control=list(maxit=10000))
)
summary(est.mod4)
sest.mod4 <- smoother(est.mod4)
summary(sest.mod4)
tfplot(sest.mod4, graphs.per.page=3)
tfplot(state.sim, state(sest.mod4, smoother=TRUE))
tfplot(state.sim, state(sest.mod4, filter=TRUE))
coef(sest.mod4)
coef(mod4)