# TODO make them all methods
id_shock <- function(type = c("none", "cholesky", "triangular",
"sign", "magnitude", "zero")) {
type <- match.arg(type)
id_fun <-
switch(
type,
none = id_none,
choleski = id_chol,
triangular = id_triangular,
sign = id_sign,
magnitude = id_magnitude,
zero = id_zero)
}
id_none <- function(B = NULL, ...) {
function(B) {
B
}
}
id_chol <- function(B = NULL, ...) {
function(B) t(chol(B, ...))
}
#' Identification with triangluar decomposition
#'
#' @examples
#' \dontrun{
#' A <- matrix(c(1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1), 4)
#' luDec <- lu(A)
#' L <- expand(luDec)$L
#' U <- expand(luDec)$U
#' p <- expand(luDec)$P
#' # LU is a row-permuted version of A
#' L %*% U
#' #Going back to the original identity A = PLU we can recover A
#' P %*% L %*% U
#' }
#'
#' @importFrom Matrix expand lu
#' @export
id_triangular <- function(x, ...) {
function(x) {
out <- t(as.matrix(Matrix::expand(Matrix::lu(x, ...))$U))
dimnames(out) <- dimnames(x)
out
}
}
id_lr <- function() {
# Finf_big = inv(eye(length(Fcomp))-Fcomp); % from the companion
# Finf = Finf_big(1:nvar,1:nvar);
# D = chol(Finf*sigma*Finf')'; % identification: u2 has no effect on y1 in the long run
# invA = Finf\D;
}
# There is work to be done on rotation matrix
id_sign <- function(x, sign_vec) {
function(B) {
# out <- t(chol(B))
# t(out) %*% t(sign_vec)
}
}
id_magnitude <- function(x) {
}
id_zero <- function(x) {
}
id_iv <- function(x, iv) {
# component <- match.arg(component)
mres <- model$residuals
t <- nrow(mres)
n <- ncol(mres)
p <- model$p
bet <- model$coefficients
matM <- as.matrix(iv)[-c(1:p),, drop = FALSE]
# Identification
gamma <- crossprod(mres, matM) / t
}
id_proxy <- id_iv
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.