# produces the matrix above
matrix(NNmat(7, 7)[,25], 7, 7)
params=c(range = 1.5,
cellSize=0.5,
kappa=1,
var=5^2)
data(nn32)
# precision matrix without adjusting for edge effects
precMat =maternGmrfPrec(nn32, params=params)
# and with the adjustment
precMatCorr =maternGmrfPrec(nn32, params=params, adjust.edges=TRUE)
midcell = 32*16 + 16 # the middle cell
edgeCell = 32*5 + 5 # cell near corner
# show precision of cell 32,32
precMid=matrix(precMat[,midcell], 32, 32, byrow=TRUE)
precMid[seq(16-4, 16+4), seq(16-4, 16+4)]
# variance matrices
varMat = solve(precMat)
varMatCorr = solve(precMatCorr)
# compare covariance matrix to the matern
xseq = seq(-20*params["cellSize"], 20*params["cellSize"], len=1000)
plot(xseq,
(params["var"]*2^(1-params["kappa"])/gamma(params["kappa"])) *
(abs(xseq)/params["range"])^params["kappa"] *
besselK(abs(xseq)/params["range"], nu=params["kappa"]), type = 'l',
ylab='cov', xlab='dist',ylim=c(0, 1.1*params["var"]))
# middle cell
varMid=matrix(varMat[,midcell], 32, 32, byrow=TRUE)
varMidCorr=matrix(varMatCorr[,midcell], 32, 32, byrow=TRUE)
xseqMid = params["cellSize"] *seq(-16,15)
points(xseqMid, varMid[,16], col='red')
points(xseqMid, varMidCorr[,16], col='blue', cex=0.5)
# edge cells
varEdge=matrix(varMat[,edgeCell], 32, 32, byrow=TRUE)
varEdgeCorr=matrix(varMatCorr[,edgeCell], 32, 32, byrow=TRUE)
xseqEdge = params["cellSize"] *seq(-5, 26)
points(xseqEdge, varEdge[,5], pch=3,col='red')
points(xseqEdge, varEdgeCorr[,5], pch=3, col='blue')
legend("topright", lty=c(1, NA, NA, NA, NA), pch=c(NA, 1, 3, 16, 16),
col=c('black','black','black','red','blue'),
legend=c('matern', 'middle','edge','unadj', 'adj')
)
# construct matern variance matrix
Nx = attributes(precMat)$Nx
Ny = attributes(precMat)$Ny
cellSize = params["cellSize"]
coords = cbind(rep(cellSize*(1:Nx), Ny),
rep(cellSize*(Ny:1), rep(Ny, Nx)))
distmat = as.matrix(dist(coords))
covMatMatern = distmat / params["range"]
covMatMatern = (params["var"]*2^(1-params["kappa"] )/
gamma(params["kappa"])) * covMatMatern^params["kappa"] *
besselK(covMatMatern , nu=params["kappa"])
diag(covMatMatern) = params["var"]
prodUncor = covMatMatern prodCor = covMatMatern
quantile(diag(prodUncor))
quantile(diag(prodCor))
quantile(prodUncor[lower.tri(prodUncor,diag=FALSE)])
quantile(prodCor[lower.tri(prodCor,diag=FALSE)])
Run the code above in your browser using DataLab