library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.2
library(gstat)
## Warning: package 'gstat' was built under R version 4.1.2
library(RColorBrewer)
library(sf)
## Warning: package 'sf' was built under R version 4.1.2
## Linking to GEOS 3.9.1, GDAL 3.2.1, PROJ 7.2.1
library(stars)
## Warning: package 'stars' was built under R version 4.1.2
## Loading required package: abind
library(viridis)
## Warning: package 'viridis' was built under R version 4.1.2
## Loading required package: viridisLite
# Oregon Boundaries
orotl <- st_read("C:/Users/taylu/OneDrive/Documents/Geog6000/Datafiles/oregon/oregon/orotl.shp", quiet = TRUE)
st_crs(orotl) <-4326
# Oregon Temperatures
ortann <- st_read("C:/users/taylu/OneDrive/Documents/Geog6000/Datafiles/oregon/oregon/oregontann.shp", quiet = TRUE)
st_crs(ortann) <-4326
# Oregon DEM File
orgrid <- st_read("C:/users/taylu/OneDrive/Documents/Geog6000/Datafiles/oregon/oregon/orgrid.shp", quiet = TRUE)
st_crs(orgrid)<-4326
orgrid.dem <- st_rasterize(orgrid, dx = 0.1667, dy = 0.1667)
st_crs(orgrid.dem) <- 4326
plot(orgrid.dem, reset = FALSE)
plot(ortann["tann"],
add = TRUE,
pch = 16,
cex = 1.5)

Create a Sample Variogram
ortann.var <- variogram(tann ~ 1, ortann)
plot(ortann.var, plot.numbers = TRUE)

Create Variogram Model
ortann.vgml <- vgm(psill = 3.5, "Cir", range = 190, nugget = 0.5)
plot(ortann.var, ortann.vgml)

Fit the Model to Sample Variogram
ortann.vgml2 = fit.variogram(ortann.var, ortann.vgml)
plot(ortann.var, ortann.vgml2)

Final Fitted Parameters of Variogram
ortann.vgml2
## model psill range
## 1 Nug 0.2076555 0.0000
## 2 Cir 3.7168890 208.1694
Interpolate the Annual Temperature
ortann.pred.ok <- krige(tann ~ 1, locations = ortann, newdata = orgrid.dem, model = ortann.vgml2, nmax = 40)
## [using ordinary kriging]
Predicted Value Map
my.pal <- brewer.pal(8, "Reds")
plot(ortann.pred.ok, col = my.pal, main = "Interpolated Temperature Values")

Predicted Error Map
my.pal1 <- brewer.pal(8, "Blues")
plot(ortann.pred.ok["var1.var"], col = my.pal1,
main = "Interpolated Temperature Prediction Error")

Krige.cv() Function with 5 Fold Cross Validation
ortann.cv.ok <- krige.cv(tann ~ 1,
locations = ortann,
model = ortann.vgml2,
nmax = 40,
nfold = 5)
head(ortann.cv.ok)
## Simple feature collection with 6 features and 6 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -123.883 ymin: 42.217 xmax: -117.817 ymax: 46.15
## Geodetic CRS: WGS 84
## var1.pred var1.var observed residual zscore fold
## 1 8.447431 1.0119609 9.6 1.1525694 1.1457378 1
## 2 10.728969 1.2915011 12.5 1.7710306 1.5583990 3
## 3 10.470014 1.5908109 11.1 0.6299860 0.4994841 1
## 4 10.813039 1.0373384 10.3 -0.5130391 -0.5037212 4
## 5 8.629794 0.5698257 7.6 -1.0297938 -1.3642037 5
## 6 7.914157 0.5911681 8.4 0.4858425 0.6318879 2
## geometry
## 1 POINT (-120.717 44.917)
## 2 POINT (-120.2 45.717)
## 3 POINT (-122.717 42.217)
## 4 POINT (-123.883 46.15)
## 5 POINT (-117.817 44.833)
## 6 POINT (-117.833 44.783)
Root Mean Squared Error
Average error that could be expected when making a prediction
sqrt(mean(ortann.cv.ok$residual^2))
## [1] 1.15334
R2
cor(ortann.cv.ok$observed, ortann.cv.ok$var1.pred)^2
## [1] 0.6172486
sp::bubble(as_Spatial(ortann.cv.ok)[,"residual"], pch = 16)

plot(ortann.cv.ok$var1.pred, ortann.cv.ok$residual,
xlab = 'Tann Predicted Values',
ylab = 'Tann Residuals')
abline(h = 0, lty = 2)
