n=100
mydat = SpatialPointsDataFrame(cbind(runif(n), runif(n)),
data=data.frame(cov1 = rnorm(n), cov2 = rpois(n, 0.5))
)
# simulate a random field
trueParam = c(variance=2^2, range=0.15, rough=2, nugget=0.5^2)
mydat$U = GaussRF(mydat, param=trueParam)
# add fixed effects
mydat$Y = -3 + 0.5*mydat$cov1 + 0.2*mydat$cov2 +
mydat$U + rnorm(length(mydat), 0, sd=sqrt(trueParam["nugget"]))
par(mfrow=c(1,2))
spplot(mydat, "U", col.regions=rainbow(10), main="U")
spplot(mydat, "Y", col.regions=rainbow(10), main="Y")
par(mfrow=c(1,1))
myres = likfitLgm(mydat, Y ~ cov1 + cov2,
param=c(range=0.1,nugget=0.1,rough=2),
paramToEstimate = c("range","nugget")
)
myres$summary
# without a nugget
myresNoN = likfitLgm(mydat, Y ~ cov1 + cov2,
param=c(range=0.1,nugget=0,rough=1), paramToEstimate = c("range")
)
myresNoN$summary
# plot variograms of data, true model, and estimated model
myv = variog(mydat, formula=Y ~ cov1 + cov2,option="bin", max.dist=0.5)
plot(myv, ylim=c(0, max(c(1.2*sum(trueParam[c("variance", "nugget")]),myv$v))),
main="variograms")
distseq = seq(0, 0.5, len=50)
lines(distseq,
sum(myres$param[c("variance", "nugget")]) - matern(distseq, param=myres$param),
col='blue', lwd=3)
lines(distseq,
sum(trueParam[c("variance", "nugget")]) - matern(distseq, param=trueParam),
col='red')
lines(distseq,
sum(myresNoN$param[c("variance", "nugget")]) -
matern(distseq, param=myresNoN$param),
col='green', lty=2, lwd=3)
legend("bottomright", fill=c("black","red","blue","green"),
legend=c("data","true","MLE","no N"))
# calculate likelihood
temp=loglikLgm(param=myres$param,
data=mydat,
trend = Y ~ cov1 + cov2,
reml=FALSE, minustwotimes=FALSE)
# an anisotropic example
trueParamAniso = param=c(variance=2^2, range=0.2, rough=2,
nugget=0,aniso.ratio=4,aniso.angle.degrees=10, nugget=0)
mydat$U = GaussRF(mydat, par=trueParamAniso)
mydat$Y = -3 + 0.5*mydat$cov1 + 0.2*mydat$cov2 +
mydat$U + rnorm(length(mydat), 0, sd=sqrt(trueParamAniso["nugget"]))
par(mfrow=c(1,2))
oldmar = par("mar")
par(mar=rep(0.1, 4))
plot(mydat, col=as.character(cut(mydat$U, breaks=50, labels=heat.colors(50))),
pch=16, main="aniso")
plot(mydat, col=as.character(cut(mydat$Y, breaks=50, labels=heat.colors(50))),
pch=16,main="iso")
par(mar=oldmar)
myres = likfitLgm(mydat, Y ~ cov1 + cov2,
param=c(range=0.1,nugget=0,rough=2, aniso.angle.degrees=0, aniso.ratio=2),
paramToEstimate = c("range","nugget","aniso.ratio","aniso.angle.degrees")
)
myres$summary
par(mfrow=c(1,2))
myraster = raster(nrows=30,ncols=30,xmn=0,xmx=1,ymn=0,ymx=1)
covEst = matern(myraster, c(0.5, 0.5), par=myres$param)
covTrue = matern(myraster, c(0.5, 0.5), par=trueParamAniso)
plot(covEst, main="estimate")
plot(covTrue, main="true")
par(mfrow=c(1,1))
Run the code above in your browser using DataLab