you can use the following code example (at the end it plots for one of the outcomes). But, notice that it E(y_0|y_observed), not actually in terms of p_y(y_0|y_observed). You can add the noise term afterworks.
### ADDED FROM HERE
### (with added control.compute=list(config=TRUE) in the previous inla(...) call)
### 1. samples from the joint posterior
system.time(s1 <- inla.posterior.sample(1, result))
system.time(ss <- inla.posterior.sample(1e3, result, add.names=FALSE))
### 2. identify the components of each linear predictor
tail(xn <- rownames(s1[[1]]$latent))
ii1 <- list(grep('intercept1', xn),
grep('s1:', xn))
str(ii1)
ii2 <- list(grep('intercept2', xn),
grep('s2:', xn),
grep('s12:', xn))
str(ii2)
ii3 <- list(grep('intercept3', xn),
grep('s3:', xn),
grep('s13:', xn),
grep('s23:', xn))
str(ii3)
### 1. define a (spatial) grid projector
nxy <- c(99, 101)
proj1grid <- inla.mesh.projector(mesh, dims=nxy)
np <- nrow(proj1grid$proj$A)
### 2. build the spacetime projector matrix
stloc0 <- kronecker(
matrix(1, k, 1), ### repeat coords each time
proj1grid$lattice$loc)
A0st <- inla.spde.make.A(mesh, stloc0, n.group = k,
group = rep(1:k, each = np))
### 3. evaluate the sum of each linear predictor term
pred1s <- sapply(ss, function(x)
drop(x$latent[ii1[[1]],1] + A0st%*%x$latent[ii1[[2]], ]))
pred2s <- sapply(ss, function(x)
drop(x$latent[ii2[[1]],1] + A0st%*%x$latent[ii2[[2]], ] +
A0st%*%x$latent[ii2[[3]], ]))
pred3s <- sapply(ss, function(x)
drop(x$latent[ii3[[1]],1] + A0st%*%x$latent[ii3[[2]], ] +
A0st%*%x$latent[ii3[[3]], ] +
A0st%*%x$latent[ii3[[4]], ]))
### 4. compute summaries
pred1.m <- matrix(rowMeans(pred1s), np)
pred1.sd <- matrix(apply(pred1s, 1, sd), np)
### 5. visualize
par(mfrow=c(2,2), mar=c(1,1,0.1,0.1), mgp=c(2,0.5,0))
for(j in 1:4)
image.plot(proj1grid$x, proj1grid$y, matrix(pred1.m[,j], nxy[1]))
par(mfrow=c(2,2), mar=c(1,1,0.1,0.1), mgp=c(2,0.5,0))
for(j in 1:4)
image.plot(proj1grid$x, proj1grid$y, matrix(
pred1.sd[,1], nxy[1]))