![Page 1: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/1.jpg)
Bayesian SAE using Complex Survey DataLecture 4B: Hierarchical Spatial Bayesian Modeling with INLA
Richard Li
Department of StatisticsUniversity of Washington
1 / 50
![Page 2: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/2.jpg)
Outline
Spatial hierarchical normal model
Spatial Lognormal-binomial model
2 / 50
![Page 3: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/3.jpg)
Spatial hierarchical normal model
3 / 50
![Page 4: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/4.jpg)
Hierarchical normal model
Recall the hierarchical normal model
yij |θi , σ2 ∼ Normal(θi , σ
2)
θi |µ, τ 2 ∼ Normal(µ, τ 2
)And we use the following ‘default’ priors on the unknown parameters
µ ∼ Normal(µ0, γ
20
)σ2 ∼ InvGamma
(ν0/2, ν0σ
20/2)
τ 2 ∼ InvGamma(η0/2, η0τ
20 /2)
The hyperparameters we need to specify are
I µ0 and τ 20 are the prior guess at the µ and the certainty of this guess.
I σ0 and ν0 are the prior guess at the within-area variance σ2 and thecertainty of this guess.
I τ0 and η0 are the prior guess at the across-area variance τ and thecertainty of this guess.
4 / 50
![Page 5: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/5.jpg)
Hierarchical normal model
We change the notation a little by denote σδ = τ , and can rewrite theprevious model as
yij = µ+ δi + εij
εij |σ2ε ∼ Normal(0, σ2
ε )
δi |σ2δ ∼ Normal(0, σ2
δ)
We can now add in the spatial smoothing effect by letting
yij = µ+ δi + si + εij
si |si ′ , i ′ ∈ ne(i) ∼ Normal(1
ni
∑i ′∈ne(i)
si ′ ,σ2s
ni)
where si is a intrinsic conditional autoregressive (ICAR) random effect inspace.
5 / 50
![Page 6: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/6.jpg)
Spatial smoothing: read map
Similar as before, we read in the map files first
# install.packages('maptools')
library(maptools)
f <- "../data/HRA_ShapeFiles/HRA_2010Block_Clip.shp"
kingshape <- readShapePoly(f)
# install.packages("rgdal")
library(rgdal)
kingshape <- readOGR('../data/HRA_ShapeFiles',
layer = 'HRA_2010Block_Clip')
## OGR data source with driver: ESRI Shapefile
## Source: "../data/HRA_ShapeFiles", layer: "HRA_2010Block_Clip"
## with 48 features
## It has 9 fields
6 / 50
![Page 7: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/7.jpg)
Spatial smoothing: read map
To perform spatial smoothing using ICAR, we first need to construct anadjacency matrix where each row and column is a region.
I Diagonal elements are 0
I Off-diagonal elements are 1 if the two corresponding regions areadjacent and 0 if otherwise
library(spdep)
nb.r <- poly2nb(kingshape, queen = F, row.names = kingshape$HRA2010v2_)
mat <- nb2mat(nb.r, style = "B", zero.policy = TRUE)
colnames(mat) <- rownames(mat)
mat <- as.matrix(mat[1:dim(mat)[1], 1:dim(mat)[1]])
7 / 50
![Page 8: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/8.jpg)
Spatial smoothing: read data
We read in the simulated data from before. Notice:
I When using INLA, the index of the areas needs to be the same orderas in the adjacency matrix. It can be easily missed if data has beenreordered
I So we need to recode the area index in the dataset first.
load("../data/simKing.rda")
pop$area <- match(pop$areaname, colnames(mat))
8 / 50
![Page 9: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/9.jpg)
Spatial smoothing: read data
I We randomly sample 2, 000 observation from the population andcalculate the naive area mean.
I Multiple random effects each need an index variable (unstruct andstruct below).
set.seed(1)
samp <- pop[sample(1:dim(pop)[1], 2000), ]
samp <- data.frame(unstruct = samp$area, struct = samp$area,
value = samp$weight)
theta.naive <- aggregate(value ~ unstruct, samp, mean)[,
2]
9 / 50
![Page 10: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/10.jpg)
Recall non-spatial smoothing
library(INLA)
newx <- data.frame(value=NA, unstruct = 1:48, struct=1:48)
hyperprior1 <- list(theta=list(prior='loggamma',
param=c(1, 0.5)))
hyperprior2 <- list(theta=list(prior='loggamma',
param=c(1, 0.1)))
formula <- value ~ 1+f(unstruct, model="iid",
hyper = hyperprior2)
fit1 <- inla(formula,
data=rbind(newx, samp), family = "gaussian",
control.family = list(hyper =hyperprior1),
control.predictor = list(compute = TRUE))
10 / 50
![Page 11: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/11.jpg)
Spatial smoothing
formula2 <- value ~ 1+
f(struct,model='besag',
adjust.for.con.comp=TRUE,
constr=TRUE,graph=mat,
scale.model = TRUE,
hyper = hyperprior2) +
f(unstruct, model="iid",
hyper = hyperprior2)
fit2 <- inla(formula2,
data=rbind(newx, samp), family = "gaussian",
control.family = list(hyper = hyperprior1),
control.predictor = list(compute = TRUE))
The structured effects are all scaled to have unit generalized marginalvariance, so that we can use the same hyperpriors as the independentterm. See https://www.math.ntnu.no/inla/r-inla.org/
tutorials/inla/scale.model/scale-model-tutorial.pdf for moredetails about the scaled models.
11 / 50
![Page 12: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/12.jpg)
Spatial smoothing: the posterior
par(mfrow = c(2, 2))
plot(fit2$marginals.fixed[[1]], type = "l", xlab = "mu",
ylab = "density", main = "Fixed")
plot(inla.tmarginal(function(x) 1/x, fit2$marginals.hyperpar[[1]]),
type = "l", xlab = "sigma2", ylab = "density",
main = "Noise")
plot(inla.tmarginal(function(x) 1/x, fit2$marginals.hyperpar[[2]]),
type = "l", xlab = "sigma2", ylab = "density",
main = "Structured")
plot(inla.tmarginal(function(x) 1/x, fit2$marginals.hyperpar[[3]]),
type = "l", xlab = "sigma2", ylab = "density",
main = "Untructured")
12 / 50
![Page 13: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/13.jpg)
Spatial smoothing: the posterior
176 178 180 182 184
0.0
0.2
0.4
0.6
0.8
Fixed
mu
dens
ity
380 400 420 440
0.00
00.
010
0.02
00.
030
Noise
sigma2
dens
ity
20 40 60 80 100
0.00
0.01
0.02
0.03
0.04
Structured
sigma2
dens
ity
0 20 40 60 80 100
01
23
45
Untructured
sigma2
dens
ity
13 / 50
![Page 14: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/14.jpg)
Spatial smoothing: compare with non-spatial smoothing
par(mfrow = c(1, 2))
theta.median <- fit1$summary.linear.predictor[1:48,
"0.5quant"]
plot(theta.naive, theta.median, xlim = c(170, 200),
ylim = c(170, 200), xlab = "MLE", ylab = "INLA",
main = "Non-spatial smoothing")
abline(c(0, 1), col = "red")
theta.spatial <- fit2$summary.linear.predictor[1:48,
"0.5quant"]
plot(theta.naive, theta.spatial, xlim = c(170, 200),
ylim = c(170, 200), xlab = "MLE", ylab = "INLA",
main = "Spatial smoothing")
abline(c(0, 1), col = "red")
14 / 50
![Page 15: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/15.jpg)
Spatial smoothing: compare with non-spatial smoothing
●
●●
●
●●
●
●
●
●
●
●
●
●
● ●
●●
●●
●
●
●
●
●●
●
●
●●
●
●●
●●
●●
●
●
●●
●
●
●
●
●
●●
170 175 180 185 190 195 200
170
180
190
200
Non−spatial smoothing
MLE
INLA
●
●●
●
● ●
●
●
●●
●
●
●
●
● ●
●●
●● ●
●
●
●
●●
●
●
●●
●
●
●●
●
● ●
●
●
● ●● ●
●
●
●
●
●
170 175 180 185 190 195 200
170
180
190
200
Spatial smoothing
MLE
INLA
15 / 50
![Page 16: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/16.jpg)
Spatial smoothing: compare with non-spatial smoothing
Now we organize the posterior medians of θi , εi , and si into a data frame
samp.aggre <- aggregate(value ~ unstruct, samp, mean)
colnames(samp.aggre)[2] <- "MLE"
samp.aggre$median <- theta.median
samp.aggre$median.spatial <- theta.spatial
samp.aggre$u.spat <- fit2$summary.random$struct[, "0.5quant"]
samp.aggre$u.iid <- fit2$summary.random$unstruct[,
"0.5quant"]
samp.aggre$name <- colnames(mat)
16 / 50
![Page 17: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/17.jpg)
Spatial smoothing: random effects
library(ggplot2)
library(gridExtra)
lim <- range(c(samp.aggre$u.iid, samp.aggre$u.spat))
geo <- fortify(kingshape, region = "HRA2010v2_")
geo1 <- merge(geo, samp.aggre, by = "id", by.y = "name")
g1 <- ggplot(geo1)
g1 <- g1 + geom_polygon(aes(x = long, y = lat, group = group,
fill = u.spat), color = "black")
g1 <- g1 + theme_void() + scale_fill_gradient2(limits = lim,
midpoint = 0)
17 / 50
![Page 18: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/18.jpg)
Spatial smoothing: random effects
g2 <- ggplot(geo1)
g2 <- g2 + geom_polygon(aes(x = long, y = lat, group = group,
fill = u.iid), color = "black")
g2 <- g2 + theme_void() + scale_fill_gradient2(limits = lim,
midpoint = 0)
grid.arrange(grobs = list(g1, g2), ncol = 2)
−5
0
5
u.spat
−5
0
5
u.iid
18 / 50
![Page 19: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/19.jpg)
Spatial smoothing: random effects
We can also compare the structured random effects from the spatialsmoothing model to that form the non-spatial smoothing model
samp.aggre$u.iid.nonspace <- fit1$summary.random$unstruct[,
"0.5quant"]
lim3 <- range(c(samp.aggre$u.iid.nonspace, samp.aggre$u.spat))
geo1 <- merge(geo, samp.aggre, by = "id", by.y = "name")
g0 <- ggplot(geo1)
g0 <- g0 + geom_polygon(aes(x = long, y = lat, group = group,
fill = u.iid.nonspace), color = "black")
g0 <- g0 + theme_void() + scale_fill_gradient2(limits = lim3,
midpoint = 0)
g0 <- g0 + ggtitle("Non-spatial smoothing random effects")
g1 <- g1 + ggtitle("Spatial smoothing structured random effects") +
scale_fill_gradient2(limits = lim3, midpoint = 0)
19 / 50
![Page 20: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/20.jpg)
Spatial smoothing: random effects
grid.arrange(grobs = list(g0, g1), ncol = 2)
−5
0
5
10
u.iid.nonspace
Non−spatial smoothing random effects
−5
0
5
10
u.spat
Spatial smoothing structured random effects
20 / 50
![Page 21: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/21.jpg)
Mean weight without smoothing
g1 <- ggplot(geo1)
lim <- range(c(samp.aggre$MLE, samp.aggre$median, samp.aggre$median.spatial))
g1 <- g1 + geom_polygon(aes(x = long, y = lat, group = group,
fill = MLE), color = "black")
g1 <- g1 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
g2 <- ggplot(geo1) + geom_polygon(aes(x = long, y = lat,
group = group, fill = median), color = "black")
g2 <- g2 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
g3 <- ggplot(geo1)
g3 <- g3 + geom_polygon(aes(x = long, y = lat, group = group,
fill = median.spatial), color = "black")
g3 <- g3 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
21 / 50
![Page 22: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/22.jpg)
MLE v.s. Spatial smoothing
grid.arrange(grobs = list(g1, g3), ncol = 2)
170
180
190
MLE
170
180
190
median.spatial
22 / 50
![Page 23: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/23.jpg)
Non-spatial v.s. Spatial smoothing
grid.arrange(grobs = list(g2, g3), ncol = 2)
170
180
190
median
170
180
190
median.spatial
23 / 50
![Page 24: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/24.jpg)
Spatial Lognormal-binomial model
24 / 50
![Page 25: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/25.jpg)
Simulated binary outcome
set.seed(1)
samp <- pop[sample(1:dim(pop)[1], 2000), ]
samp <- data.frame(unstruct = samp$area, value = samp$diabetes)
samp.aggre <- aggregate(value ~ unstruct, samp, sum)
samp.aggre$n <- aggregate(value ~ unstruct, samp, length)[,
2]
samp.aggre$struct <- samp.aggre$unstruct
25 / 50
![Page 26: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/26.jpg)
Non-spatial smoothing of binomial model
formula = value ~ 1 + f(unstruct, model = "iid", param = c(0.5,
0.0015))
fit3 <- inla(formula, family = "binomial", data = samp.aggre,
Ntrials = n, control.predictor = list(compute = TRUE))
26 / 50
![Page 27: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/27.jpg)
Spatial smoothing of binomial model
formula = value ~ 1 +
f(struct,model='besag',
adjust.for.con.comp=TRUE,
constr=TRUE,graph=mat,
scale.model = TRUE,
param = c(0.5, 0.0015)) +
f(unstruct, model='iid', param=c(0.5,0.0015))
fit4 <- inla(formula,
family="binomial", data=samp.aggre, Ntrials=n,
control.predictor = list(compute = TRUE))
27 / 50
![Page 28: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/28.jpg)
Posteriors: non-spatial smoothing
par(mfrow = c(1, 2))
plot(fit3$marginals.fixed[[1]], type = "l", xlab = "mu",
ylab = "density", main = "Intercept")
plot(density(inla.rmarginal(1e+05, fit3$marginals.hyperpar[[1]])),
type = "l", xlab = "precision", ylab = "density",
main = expression(sigma[epsilon]^-2))
−6 −5 −4 −3 −2 −1
0.0
0.5
1.0
1.5
Intercept
mu
dens
ity
0.0 0.5 1.0 1.5 2.0
0.0
0.5
1.0
1.5
2.0
σε−2
precision
dens
ity
28 / 50
![Page 29: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/29.jpg)
Posteriors: spatial smoothing
par(mfrow = c(1, 3))
plot(fit4$marginals.fixed[[1]], type = "l", xlab = "mu",
ylab = "density", main = "Intercept")
plot(density(inla.rmarginal(1e+05, fit4$marginals.hyperpar[[1]])),
type = "l", xlab = "precision", ylab = "density",
main = expression(sigma[S]^-2))
plot(density(inla.rmarginal(1e+05, fit4$marginals.hyperpar[[2]])),
type = "l", xlab = "precision", ylab = "density",
main = expression(sigma[epsilon]^-2))
−5 −4 −3 −2
0.0
0.5
1.0
1.5
2.0
Intercept
mu
dens
ity
0.0 0.5 1.0 1.5 2.0 2.5 3.0
0.0
0.5
1.0
1.5
σS−2
precision
dens
ity
0 5000 15000 250000.
0000
0.00
100.
0020
σε−2
precision
dens
ity
29 / 50
![Page 30: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/30.jpg)
Compare results
prev <- data.frame(truth = aggregate(diabetes ~ area,
pop, mean)[, 2], mle = aggregate(value ~ unstruct,
samp, mean)[, 2], size = aggregate(value ~ unstruct,
samp, length)[, 2])
prev <- cbind(prev, fit3$summary.fitted.values, fit4$summary.fitted.values)
prev$name <- colnames(mat)
colnames(prev)[6:8] <- c("lower", "median", "upper")
colnames(prev)[11:14] <- c("sd.sp", "lower.sp", "median.sp",
"upper.sp")
g <- ggplot(prev, aes(x = truth, y = median, ymin = lower,
ymax = upper))
g <- g + geom_point() + geom_errorbar(alpha = 0.5) +
geom_abline(color = "red")
g <- g + geom_point(aes(x = truth, y = median.sp),
color = "blue")
g
30 / 50
![Page 31: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/31.jpg)
Compare results
●
●
●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●●●
●
●
●
●
●
● ●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●●●
●
●
●
●●
●
●
●
● ●●
●
●
●●
●
●●
●
●●●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●●
●
0.0
0.2
0.4
0.6
0.0 0.1 0.2 0.3 0.4
truth
med
ian
31 / 50
![Page 32: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/32.jpg)
Spatial smoothing: random effects
prev$u.spat <- fit4$summary.random$struct[, "0.5quant"]
prev$u.iid <- fit4$summary.random$unstruct[, "0.5quant"]
geo <- fortify(kingshape, region = "HRA2010v2_")
geo2 <- merge(geo, prev, by = "id", by.y = "name")
lim <- range(c(prev$u.spat, prev$u.iid))
g1 <- ggplot(geo2) + geom_polygon(aes(x = long, y = lat,
group = group, fill = u.spat), color = "black")
g1 <- g1 + theme_void() + scale_fill_gradient2(limits = lim,
midpoint = 0)
32 / 50
![Page 33: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/33.jpg)
Spatial smoothing: random effects
g2 <- ggplot(geo2) + geom_polygon(aes(x = long, y = lat,
group = group, fill = u.iid), color = "black")
g2 <- g2 + theme_void() + scale_fill_gradient2(limits = lim,
midpoint = 0)
grid.arrange(grobs = list(g1, g2), ncol = 2)
−1
0
1
2
u.spat
−1
0
1
2
u.iid
33 / 50
![Page 34: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/34.jpg)
Spatial smoothing: random effects
Again we compare the structured random effects to the random effectsfrom the non-spatial smoothing model.
prev$u.iid.nonspace <- fit3$summary.random$unstruct[,
"0.5quant"]
lim2 <- range(c(prev$u.iid.nonspace, prev$u.spat))
geo2 <- merge(geo, prev, by = "id", by.y = "name")
g0 <- ggplot(geo2)
g0 <- g0 + geom_polygon(aes(x = long, y = lat, group = group,
fill = u.iid.nonspace), color = "black")
g0 <- g0 + theme_void() + scale_fill_gradient2(limits = lim2,
midpoint = 0)
g0 <- g0 + ggtitle("Non-spatial smoothing random effects")
g1 <- g1 + ggtitle("Spatial smoothing structured random effects") +
scale_fill_gradient2(limits = lim2, midpoint = 0)
34 / 50
![Page 35: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/35.jpg)
Spatial smoothing: random effects
grid.arrange(grobs = list(g0, g1), ncol = 2)
−1
0
1
2
3u.iid.nonspace
Non−spatial smoothing random effects
−1
0
1
2
3u.spat
Spatial smoothing structured random effects
35 / 50
![Page 36: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/36.jpg)
Mean prevalence
lim <- range(c(prev$mle, prev$median, prev$median.sp))
g1 <- ggplot(geo2) + geom_polygon(aes(x = long, y = lat,
group = group, fill = mle), color = "black")
g1 <- g1 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
g1
0.0
0.1
0.2
0.3
0.4
mle
36 / 50
![Page 37: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/37.jpg)
Mean prevalence with non-spatial smoothing
g2 <- ggplot(geo2) + geom_polygon(aes(x = long, y = lat,
group = group, fill = median), color = "black")
g2 <- g2 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
g2
0.0
0.1
0.2
0.3
0.4
median
37 / 50
![Page 38: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/38.jpg)
Mean prevalence with spatial smoothing
g3 <- ggplot(geo2) + geom_polygon(aes(x = long, y = lat,
group = group, fill = median.sp), color = "black")
g3 <- g3 + theme_void() + scale_fill_distiller(direction = 1,
limits = lim)
g3
0.0
0.1
0.2
0.3
0.4
median.sp
38 / 50
![Page 39: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/39.jpg)
MLE vs Spatial smoothing
grid.arrange(grobs = list(g1, g3), ncol = 2)
0.0
0.1
0.2
0.3
0.4
mle
0.0
0.1
0.2
0.3
0.4
median.sp
39 / 50
![Page 40: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/40.jpg)
Non-spatial vs Spatial smoothing
grid.arrange(grobs = list(g2, g3), ncol = 2)
0.0
0.1
0.2
0.3
0.4
median
0.0
0.1
0.2
0.3
0.4
median.sp
40 / 50
![Page 41: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/41.jpg)
Uncertainty measure
We can visually compare the binomial standard errors and confidenceintervals with the posterior summaries from the two smoothing models
prev$mle.se <- sqrt(prev$mle * (1 - prev$mle)/prev$size)
prev$mle.lower <- prev$mle - 1.96 * prev$mle.se
prev$mle.upper <- prev$mle + 1.96 * prev$mle.se
lim <- range(c(prev$mle.se, prev$sd, prev$sd.sp))
par(mfrow = c(1, 2))
plot(prev$mle.se, prev$sd, xlab = "se(MLE)", ylab = "Posterior sd",
xlim = lim, ylim = lim, main = "Non-spatial smoothing")
abline(c(0, 1), col = "red")
plot(prev$mle.se, prev$sd.sp, xlab = "se(MLE)", ylab = "Posterior sd",
xlim = lim, ylim = lim, main = "Spatial smoothing")
abline(c(0, 1), col = "red")
41 / 50
![Page 42: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/42.jpg)
Uncertainty measure
Naive binomial confidence interval versus posterior credible interval fromthe spatial smoothing mode
●
●
●
●
●●
●
●
●
●●●
●●●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●●
0.00 0.02 0.04 0.06 0.08 0.10
0.00
0.02
0.04
0.06
0.08
0.10
Non−spatial smoothing
se(MLE)
Pos
terio
r sd ●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
0.00 0.02 0.04 0.06 0.08 0.10
0.00
0.02
0.04
0.06
0.08
0.10
Spatial smoothing
se(MLE)
Pos
terio
r sd
42 / 50
![Page 43: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/43.jpg)
Uncertainty measure
Naive binomial confidence interval versus posterior credible interval fromthe spatial smoothing mode
par(mfrow = c(1, 2))
plot(prev$truth, prev$mle, xlab = "Truth", ylab = "MLE",
xlim = c(0, 1), ylim = c(0, 1))
segments(x0 = prev$truth, y0 = prev$mle.lower, y1 = prev$mle.upper)
abline(c(0, 1), col = "red")
abline(h = 0, col = "blue", lty = 2)
plot(prev$truth, prev$median, xlab = "Truth", ylab = "Posterior median",
xlim = c(0, 1), ylim = c(0, 1))
segments(x0 = prev$truth, y0 = prev$lower, y1 = prev$upper)
abline(c(0, 1), col = "red")
abline(h = 0, col = "blue", lty = 2)
43 / 50
![Page 44: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/44.jpg)
Uncertainty measure
●
●
●
●
●●●●● ●●
●
●●
●●●
●
●
●
●
●●●●
●●
●
●●●●●
●
●●
●●●
●
●
●●
●
●●
●●
0.0 0.2 0.4 0.6 0.8 1.0
0.0
0.2
0.4
0.6
0.8
1.0
Truth
MLE
●
●
●
●
●●●●● ●●
●
●● ●
●●
●
●●
●
●●●●
●●
●
●●●●●
●●●●●●
●
●
●●
●●
●●●
0.0 0.2 0.4 0.6 0.8 1.00.
00.
20.
40.
60.
81.
0
Truth
Pos
terio
r m
edia
n
44 / 50
![Page 45: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/45.jpg)
Uncertainty measure
par(mfrow = c(1, 2))
plot(1:48, prev$mle - prev$truth, xlab = "HRA index",
ylab = "MLE bias", ylim = c(-0.3, 0.3))
segments(x0 = 1:48, y0 = prev$mle.lower - prev$truth,
y1 = prev$mle.upper - prev$truth)
abline(h = 0, col = "blue", lty = 2)
plot(1:48, prev$median - prev$truth, xlab = "HRA index",
ylab = "Posterior median bias", ylim = c(-0.3,
0.3))
segments(x0 = 1:48, y0 = prev$lower - prev$truth, y1 = prev$upper -
prev$truth)
abline(h = 0, col = "blue", lty = 2)
45 / 50
![Page 46: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/46.jpg)
Uncertainty measure
●
●
●
●
●●
●●●
●
●●●
●●
●
●
●
●●
●
●
●●
●
●●
●
●●●●●
●
●●
●●●
●
●●
●●
●●
●●
0 10 20 30 40
−0.
3−
0.2
−0.
10.
00.
10.
20.
3
HRA index
MLE
bia
s
●
●
●
●
●●●
●●
●
●●
●●
●●●
●
●●
●●
●●
●
●
●
●
●●●●●
●
●●●●
●
●
●●●●●●
●●
0 10 20 30 40−
0.3
−0.
2−
0.1
0.0
0.1
0.2
0.3
HRA index
Pos
terio
r m
edia
n bi
as
46 / 50
![Page 47: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/47.jpg)
Spatial smoothing: decomposition of variation
I It could be interesting to evaluate the proportion of varianceexplained by the structured spatial component
I However, estimated σ2s and σ2
ε are not directly comparable
yij = µ+ δi + si + εij
εij |σ2ε ∼ Normal(0, σ2
ε )
δi |σ2δ ∼ Normal(0, σ2
δ)
si |si ′ , i ′ ∈ ne(i) ∼ Normal(1
ni
∑i ′∈ne(i)
si ′ ,σ2s
ni)
I They are more comparable after setting scale.model = TRUE inf() function, since the covariance function for s are rescaled.
47 / 50
![Page 48: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/48.jpg)
Spatial smoothing: decomposition of variation
sigma2.spatial <- inla.emarginal(function(x) {1/x
}, fit4$marginals.hyper$"Precision for struct")
sigma2.iid <- inla.emarginal(function(x) {1/x
}, fit4$marginals.hyper$"Precision for unstruct")
prop <- sigma2.spatial/(sigma2.spatial + sigma2.iid)
c(sigma2.spatial, sigma2.iid, prop)
## [1] 1.7752373 0.0222911 0.9875990
About 98.8% of variance are explained by the spatial random effects.
48 / 50
![Page 49: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/49.jpg)
Spatial smoothing: decomposition of variation
I Alternatively, we may also compare the empirical posterior marginalvariance instead
I Let s2u =∑n
i=1(ui − u)2/(n − 1), for a sample u form the posteriordistribution of s
I The fraction of variance explained by the spatial random effectvector u is frac = s2u/(s2u + σ2
δ).
I By sampling a large enough number of values from the marginalposterior distribution of the random effects, we can compute theaverage fraction of variance explained
49 / 50
![Page 50: Bayesian SAE using Complex Survey DataSpatial smoothing: read map To perform spatial smoothing using ICAR, we rst need to construct an adjacency matrix where each row and column is](https://reader034.vdocuments.net/reader034/viewer/2022042415/5f3047c11752ee00f8115123/html5/thumbnails/50.jpg)
Spatial smoothing: decomposition of variation
spatial <- matrix(NA, 1e5, 48)
for (i in 1:48){spatial[,i] <- inla.rmarginal(1e4,
fit4$marginals.random$struct[[i]])
}S.spatial <- apply(spatial,1,var)
S.iid <- inla.rmarginal(1e4,
inla.tmarginal(function(x){1/x},fit4$marginals.hyper$"Precision for unstruct"))
prop2 <- mean(S.spatial/(S.spatial+S.iid))
c(mean(S.spatial), mean(S.iid), prop2)
## [1] 1.55145909 0.02555173 0.98512008
About 98.5% of variance are explained by the spatial random effectsusing the empirical marginal variance.
50 / 50