###################################
##Multivariate spatial regression
###################################
##Generate some data
n <- 50 ##observed
q <- 3
nltr <- q*(q-1)/2+q
coords <- cbind(runif(n),runif(n))
theta <- rep(3/0.5,q)
A <- matrix(0,q,q)
A[lower.tri(A,TRUE)] <- rnorm(nltr, 5, 1)
K <- A%*%t(A)
Psi <- diag(1,q)
c1 <- mvCovInvLogDet(coords=coords, knots=coords,
cov.model="exponential",
V=K, Psi=Psi, theta=theta,
modified.pp=FALSE, SWM=FALSE)
w <- mvrnorm(1,rep(0,nrow(c1$C)),c1$C)
w.1 <- w[seq(1,length(w),q)]
w.2 <- w[seq(2,length(w),q)]
w.3 <- w[seq(3,length(w),q)]
##Specify starting values and collect samples
K.starting <- diag(1,q)[lower.tri(diag(1,q), TRUE)]
Psi.starting <- diag(1,q)[lower.tri(diag(1,q), TRUE)]
n.samples <- 5000
m.1 <- spMvLM(list(w.1~1,w.2~1,w.3~1), coords=coords,
starting=list("beta"=rep(1,q), "phi"=rep(3/0.5,q),
"A"=K.starting, "L"=Psi.starting),
sp.tuning=list("phi"=rep(0.1,q),
"A"=rep(0.1,nltr), "L"=rep(0.1,nltr)),
priors=list("phi.Unif"=rep(c(3/1,3/0.1),q),
"K.IW"=list(q+1, diag(1,q)), "Psi.IW"=list(q+1, diag(1,q))),
modified.pp=TRUE, cov.model="exponential",
n.samples=n.samples, sub.samples=c(2500,n.samples,5),
verbose=TRUE, n.report=100)
m.1$p.samples[,paste("phi_",1:q,sep="")] <-
3/m.1$p.samples[,paste("phi_",1:q,sep="")]
print(summary(mcmc(m.1$p.samples)))
w.hat <- rowMeans(m.1$sp.effects)
w.hat.1 <- w.hat[seq(1,length(w.hat),q)]
w.hat.2 <- w.hat[seq(2,length(w.hat),q)]
w.hat.3 <- w.hat[seq(3,length(w.hat),q)]
##Take a look
par(mfrow=c(3,2))
surf <- mba.surf(cbind(coords,w.1),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Observed 1"); contour(surf, add=TRUE)
surf <- mba.surf(cbind(coords,w.hat.1),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Fitted 1"); contour(surf, add=TRUE)
points(m.1$knot.coords, pch=19, cex=1)
surf <- mba.surf(cbind(coords,w.2),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Observed 2"); contour(surf, add=TRUE)
surf <- mba.surf(cbind(coords,w.hat.2),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Fitted 2"); contour(surf, add=TRUE)
points(m.1$knot.coords, pch=19, cex=1)
surf <- mba.surf(cbind(coords,w.3),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Observed 3"); contour(surf, add=TRUE)
surf <- mba.surf(cbind(coords,w.hat.3),
no.X=100, no.Y=100, extend=T)$xyz.est
image(surf, main="Fitted 3"); contour(surf, add=TRUE)
points(m.1$knot.coords, pch=19, cex=1)
Run the code above in your browser using DataLab