SS.ID {SSsimple} | R Documentation |
System Identification
Description
Perform non-iterative, subspace grey-box system identification
Usage
SS.ID(Z, d, rsN = NULL)
Arguments
Z |
A T x n data matrix |
d |
A scalar integer. The system “order.” |
rsN |
A 3-element integer vector, containing r, s, N as described by Ljung. |
Details
Only works when T >> n (one resolved to using SS.ID
when this is not true is free to pluck columns from Z until it is).
Complaints issued from this function to the effect that a matrix that is some function of “PP” cannot be inverted might be remedied by turning r and s down (the first two elements of the rsN
argument), or perhaps by adding a small amount of noise to Z.
This is subspace estimation. SS.ID
estimates system hyperparameters from data. One can usually henceforth solve (using SS.solve
) for good quality observation-space estimates, but should not assume the resulting state estimates are anywhere near truth. One may wish to use estimates generated with this function as initial values for iterative estimation techniques, e.g., package Stem
.
Value
A named list.
F.hat |
A d x d matrix. |
H.hat |
An n x d matrix. |
Q.hat |
A d x d matrix. |
R.hat |
An n x n matrix. |
References
Lennart Ljung. System Identification, Theory for the User. Prentice Hall, 1999.
Examples
Q <- diag(1/10, 2)
R <- diag(2, 3)
H <- matrix(1, 3, 2)
F <- diag(0.99, 2)
set.seed(9999)
xs <- SS.sim(F, H, Q, R, 2000, rep(0, 2))
## notice that while the parameter estimates appear somewhat inaccurate ...
ssid <- SS.ID( xs$Z , 2, c(3, 6, 900) ) ; ssid
## the observation estimate:
sss <- SS.solve( xs$Z, ssid$F.hat, ssid$H.hat, ssid$Q.hat, ssid$R.hat, nrow(xs$Z), 10^5, c(0,0))
Z.hat <- t( ssid$H.hat %*% t( sss$B.apri ) )
sqrt( mean( (xs$Z - Z.hat)^2 ) )
## is nontheless very close to that using true hyperparameter values:
sss.true <- SS.solve( xs$Z, F, H, Q, R, nrow(xs$Z), 10^5, c(0,0))
Z.hat <- t( H %*% t( sss.true$B.apri ) )
sqrt( mean( (xs$Z - Z.hat)^2 ) )