# example with raster
myraster = raster(nrows=20,ncols=30,xmn=-3,xmx=3,ymn=-2,ymx=2)
param = c(range=2, rough=2, aniso.ratio=0.6, aniso.angle.degrees=30)
# plot correlation of each cell with the origin
myMatern = matern(myraster, c(0,0), param)
plot(myMatern)
# correlation matrix for all cells with each other
myraster = raster(nrows=4,ncols=6,xmn=-3,xmx=3,ymn=-2,ymx=2)
myMatern = matern(myraster, param=c(range=2, rough=2))
dim(myMatern)
# plot the cell ID's
values(myraster) = seq(1, ncell(myraster))
mydf = as.data.frame(myraster, xy=TRUE)
plot(mydf$x, mydf$y, type='n')
text(mydf$x, mydf$y, mydf$layer)
# correlation between bottom-right cell and top right cell is
myMatern[6,24]
# example with points
mypoints = SpatialPointsDataFrame(cbind(runif(5), runif(5)),data=data.frame(id=1:5))
matern(mypoints, param=param)
#x=mypoints;y=NULL;param=param
# example with vector of distances
range=3
distVec = seq(0, 2*range, len=100)
roughSeq = c(0.5, 1, 2,20)
theCov = NULL
for(D in roughSeq) {
theCov = cbind(theCov, matern(distVec, param=c(range=range, rough=D)))
}
matplot(distVec, theCov, type='l', lty=1, xlab='distance', ylab='correlation')
legend("topright", fill=1:length(roughSeq), legend=roughSeq,title='rough')
# exponential
distVec2 = seq(0, max(distVec), len=20)
points(distVec2, exp(-2*(distVec2/range)),cex=0.5)
# gaussian
points(distVec2, exp(-2*(distVec2/range)^2), col='blue',cex=0.5)
legend("right", pch=1, col=c('black','blue'), legend=c('exp','gau'))
# comparing to geoR and RandomFields
covGeoR = covRandomFields = NULL
for(D in roughSeq) {
covGeoR = cbind(covGeoR,
geoR::matern(distVec, phi=param["range"]/sqrt(8*D), kappa=D))
covRandomFields = cbind(covRandomFields,
RandomFields::CovarianceFct(distVec, model="matern",
param = c(mean=0, variance=1, nugget=0,
scale=param["range"]/2, nu=D) ))
}
matplot(distVec, theCov, type='l', lty=1, xlab='distance', ylab='correlation')
matpoints(distVec, covGeoR, cex=0.5, pch=1)
matpoints(distVec, covGeoR, cex=0.5, pch=2)
Run the code above in your browser using DataLab