# Define the dual mesh
dmesh <- book.mesh.dual(mesh)
w <- sapply(1:length(dmesh), function(i) {
if (gIntersects(dmesh[i, ], domainSP))
return(gArea(gIntersection(dmesh[i, ], domainSP)))
else return(0)
})
# augment data and compute weights
y.pp <- rep(0:1, c(nv, n))
e.pp <- c(w, rep(0, n))
# define projection matrix and stack
imat <- Diagonal(nv, rep(1, nv))
lmat <- inla.spde.make.A(mesh, xy)
A.pp <- rbind(imat, lmat)
stk.pp <- inla.stack(
data = list(y = y.pp, e = e.pp),
A = list(1, A.pp),
effects = list(list(b0 = rep(1, nv + n)),
list(i = 1:nv)),
tag = 'pp')
# run the inla function
pp.res <- inla(
y ~ 0 + b0 + f(i, model = spde),
family = 'poisson',
data = inla.stack.data(stk.pp),
control.predictor = list(A = inla.stack.A(stk.pp)),
E = inla.stack.data(stk.pp)$e)