###########################
##Spatial poisson
###########################
##Generate count data
n <- 100
coords <- cbind(runif(n,1,100),runif(n,1,100))
phi <- 3/75
sigma.sq <- 2
R <- sigma.sq*exp(-phi*as.matrix(dist(coords)))
w <- mvrnorm(1, rep(0,n), R)
x <- as.matrix(rep(1,n))
beta <- 0.1
y <- rpois(n, exp(x%*%beta+w))
##Collect samples
beta.starting <- coefficients(glm(y~x-1, family="poisson"))
beta.tuning <- t(chol(vcov(glm(y~x-1, family="poisson"))))
n.samples <- 25000
m.1 <- spGLM(y~1, family="poisson", coords=coords,
starting=
list("beta"=beta.starting, "phi"=0.06,"sigma.sq"=1, "w"=0),
tuning=
list("beta"=0.1, "phi"=0.01, "sigma.sq"=0.01, "w"=0.005),
priors=
list("beta.Flat", "phi.Unif"=c(0.03, 0.3), "sigma.sq.IG"=c(2, 1)),
cov.model="exponential",
n.samples=n.samples, verbose=TRUE, n.report=500)
m.1$p.samples[,"phi"] <- 3/m.1$p.samples[,"phi"]
burn.in <- 0.75*n.samples
print(summary(mcmc(m.1$p.samples[burn.in:n.samples,])))
beta.hat <- mean(m.1$p.samples[burn.in:n.samples,1])
w.hat <- rowMeans(m.1$sp.effects[,burn.in:n.samples])
y.hat <-exp(x%*%beta.hat+w.hat)
##Take a look
par(mfrow=c(1,2))
surf <- mba.surf(cbind(coords,y),no.X=100, no.Y=100, extend=TRUE)$xyz.est
image(surf, main="obs")
contour(surf, drawlabels=FALSE, add=TRUE)
text(coords, labels=y, cex=1, col="blue")
surf <- mba.surf(cbind(coords,y.hat),no.X=100, no.Y=100, extend=TRUE)$xyz.est
image(surf, main="Fitted counts")
contour(surf, drawlabels=FALSE, add=TRUE)
text(coords, labels=round(y.hat,0), cex=1, col="blue")
###########################
##Spatial logistic
###########################
##Generate binary data
n <- 50
coords <- cbind(runif(n,1,100),runif(n,1,100))
phi <- 3/50
sigma.sq <- 1
R <- sigma.sq*exp(-phi*as.matrix(dist(coords)))
w <- mvrnorm(1, rep(0,n), R)
x <- as.matrix(rep(1,n))
beta <- 0.1
p <- 1/(1+exp(-(x%*%beta+w)))
y <- rbinom(n, 1, prob=p)
##Collect samples
beta.starting <- coefficients(glm(y~x-1, family="binomial"))
beta.tuning <- t(chol(vcov(glm(y~x-1, family="binomial"))))
n.samples <- 50000
m.1 <- spGLM(y~1, family="binomial", coords=coords,
starting=
list("beta"=beta.starting, "phi"=0.06,"sigma.sq"=1, "w"=0),
tuning=
list("beta"=beta.tuning, "phi"=0.1, "sigma.sq"=0.1, "w"=0.01),
priors=
list("beta.Normal"=list(0,10), "phi.Unif"=c(0.03, 0.3),
"sigma.sq.IG"=c(2, 1)),
cov.model="exponential",
n.samples=n.samples, verbose=TRUE, n.report=500)
m.1$p.samples[,"phi"] <- 3/m.1$p.samples[,"phi"]
burn.in <- 0.75*n.samples
print(summary(mcmc(m.1$p.samples[burn.in:n.samples,])))
beta.hat <- mean(m.1$p.samples[burn.in:n.samples,1])
w.hat <- rowMeans(m.1$sp.effects[,burn.in:n.samples])
y.hat <- 1/(1+exp(-(x%*%beta.hat+w.hat)))
##Take a look
par(mfrow=c(1,2))
surf <- mba.surf(cbind(coords,y),no.X=100, no.Y=100, extend=TRUE)$xyz.est
image(surf, main="Observed")
contour(surf, add=TRUE)
points(coords[y==1,], pch=19, cex=1)
points(coords[y==0,], cex=1)
surf <- mba.surf(cbind(coords,y.hat),no.X=100, no.Y=100, extend=TRUE)$xyz.est
image(surf, main="Fitted probabilities")
contour(surf, add=TRUE)
points(coords[y==1,], pch=19, cex=1)
points(coords[y==0,], cex=1)Run the code above in your browser using DataLab