inla.stack.remove.unused {INLA} | R Documentation |
Functions for combining data, effects and observation matrices into
inla.stack
objects, and extracting information from such objects.
inla.stack.remove.unused(stack) inla.stack.compress(stack, remove.unused = TRUE) inla.stack(..., compress = TRUE, remove.unused = TRUE) inla.stack.sum( data, A, effects, tag = "", compress = TRUE, remove.unused = TRUE ) inla.stack.join(..., compress = TRUE, remove.unused = TRUE) inla.stack.index(stack, tag) inla.stack.LHS(stack) inla.stack.RHS(stack) inla.stack.data(stack, ...) inla.stack.A(stack)
stack |
A |
remove.unused |
If |
... |
For |
compress |
If |
data |
A list or codedata.frame of named data vectors. Scalars are expanded to match the number of rows in the A matrices, or any non-scalar data vectors. An error is given if the input is inconsistent. |
A |
A list of observation matrices. Scalars are expanded to diagonal matrices matching the effect vector lengths. An error is given if the input is inconsistent or ambiguous. |
effects |
A collection of effects/predictors. Each list element
corresponds to an observation matrix, and must either be a single vector, a
list of vectors, or a |
tag |
A string specifying a tag for later identification. |
For models with a single effects collection, the outer list container for
A
and effects
may be omitted.
Component size definitions:
n_l effect blocks
n_k effects
n_i data values
n_jl effect size for block l
n_j sum_l n_jl total effect size
Input:
data
(y1,…,y2) p vectors, each of length n_i
A
(A1,…,A2) matrices of size n_i by n_jl
effects
((x_[1,1],…,x_[n_k,1]),…(x_[1,n_l],…,x_[n_k,n_l])) collections of effect vectors of length n_jl
predictor(y^1, …, y^p) ~ sum_{l=1}^{n_l} A^l sum_{k=1}^{n_k} g(k, x^{k,l}) = tilde{A} sum_{k=1}^{n_k} g(k, tilde{x}^k)
where
tilde{A} = cbind( A^1, ..., A^{n_l} )
and
tilde{x}^k = rbind( x^{k,1}, ..., x^{k,n_l} )
and for each block l, any missing
x^{k,l} is replaced by an NA
vector.
A data stack of class inla.data.stack
.
Elements:
data
=(y^1, …, y^p, tilde{x}^1, …,
tilde{x}^{n_k})
A
=tilde{A}
data.names
List
of data names, length p
effect.names
List of effect names,
length n_k
n.data
Data length, n_i
index
List indexed by tag
s, each element indexing into i=1, …,
n_i
inla.stack.remove.unused
: Remove unused entries from an existing stack
inla.stack.compress
: Compress an existing stack by removing duplicates
inla.stack.sum
: Create data stack as a sum of predictors
inla.stack.join
: Join two or more data stacks
inla.stack.index
: Extract tagged indices
inla.stack.LHS
: Extract data associated with the "left hand side" of the model
(e.g. the data itself, Ntrials
, link
, E
)
inla.stack.RHS
: Extract data associated with the "right hand side" of the model
(all the covariates/predictors)
inla.stack.data
: Extract data for an inla call, and optionally join with other variables
inla.stack.A
: Extract the "A matrix" for control.predictor
inla.stack.remove.unused
: Remove
unused entries from an existing stack
inla.stack.compress
: Compress an existing stack by removing
duplicates
inla.stack
: Shorthand for inla.stack.join and inla.stack.sum
inla.stack.sum
: Create data stack as a sum of predictors
inla.stack.join
: Join two or more data stacks
inla.stack.index
: Extract tagged indices
inla.stack.LHS
: Extract data associated with the "left hand
side" of the model (e.g. the data itself, Ntrials
, link
,
E
)
inla.stack.RHS
: Extract data associated with the "right hand
side" of the model (all the covariates/predictors)
inla.stack.data
: Extract data for an inla call, and optionally
join with other variables
inla.stack.A
: Extract the "A matrix" for control.predictor
inla.spde.make.A()
, inla.spde.make.index()
n <- 200 loc <- matrix(runif(n * 2), n, 2) mesh <- inla.mesh.2d( loc.domain = loc, max.edge = c(0.05, 0.2) ) proj.obs <- inla.mesh.projector(mesh, loc = loc) proj.pred <- inla.mesh.projector(mesh, loc = mesh$loc) spde <- inla.spde2.pcmatern(mesh, prior.range = c(0.01, 0.01), prior.sigma = c(10, 0.01) ) covar <- rnorm(n) field <- inla.qsample(n = 1, Q = inla.spde.precision(spde, theta = log(c(0.5, 1))))[, 1] y <- 2 * covar + inla.mesh.project(proj.obs, field) A.obs <- inla.spde.make.A(mesh, loc = loc) A.pred <- inla.spde.make.A(mesh, loc = proj.pred$loc) stack.obs <- inla.stack( data = list(y = y), A = list(A.obs, 1), effects = list(c( list(Intercept = 1), inla.spde.make.index("spatial", spde$n.spde) ), covar = covar ), tag = "obs" ) stack.pred <- inla.stack( data = list(y = NA), A = list(A.pred), effects = list(c( list(Intercept = 1), inla.spde.make.index("spatial", mesh$n) )), tag = "pred" ) stack <- inla.stack(stack.obs, stack.pred) formula <- y ~ -1 + Intercept + covar + f(spatial, model = spde) result1 <- inla(formula, data = inla.stack.data(stack.obs, spde = spde), family = "gaussian", control.predictor = list( A = inla.stack.A(stack.obs), compute = TRUE ) ) plot(y, result1$summary.fitted.values[inla.stack.index(stack.obs, "obs")$data, "mean"], main = "Observations vs posterior predicted values at the data locations" ) result2 <- inla(formula, data = inla.stack.data(stack, spde = spde), family = "gaussian", control.predictor = list( A = inla.stack.A(stack), compute = TRUE ) ) field.pred <- inla.mesh.project( proj.pred, result2$summary.fitted.values[inla.stack.index(stack, "pred")$data, "mean"] ) field.pred.sd <- inla.mesh.project( proj.pred, result2$summary.fitted.values[inla.stack.index(stack, "pred")$data, "sd"] ) plot(field, field.pred, main = "True vs predicted field") abline(0, 1) image(inla.mesh.project(mesh, field = field, dims = c(200, 200) ), main = "True field" ) image(inla.mesh.project(mesh, field = field.pred, dims = c(200, 200) ), main = "Posterior field mean" ) image(inla.mesh.project(mesh, field = field.pred.sd, dims = c(200, 200) ), main = "Prediction standard deviation" ) plot(field, (field.pred - field) / 1, main = "True field vs standardised prediction residuals" )