R中“gstat”包中的交叉验证和方差计算
你好 当试图从R中“gstat”包中的交叉验证和方差计算,r,geospatial,spatial,R,Geospatial,Spatial,你好 当试图从gstat包中完成的反距离krig计算方差时,我遇到了一些困难。我还想在独立的变量测试集上运行交叉验证,但我不确定如何在R中使用空间数据进行交叉验证。使用meuse数据集,我试图计算方差: data(meuse); coordinates(meuse) <- ~x+y #randomly sample to get training and test data for later cross-validation set.seed = (123) sub1 <-
gstat
包中完成的反距离krig计算方差时,我遇到了一些困难。我还想在独立的变量测试集上运行交叉验证,但我不确定如何在R中使用空间数据进行交叉验证。使用meuse
数据集,我试图计算方差:
data(meuse); coordinates(meuse) <- ~x+y
#randomly sample to get training and test data for later cross-validation
set.seed = (123)
sub1 <- nrow(meuse@data); len1 <- ceiling(sub1*2/3)
m.train <- meuse
m.train@data <- meuse@data[1:len1,]
m.train@coords <- meuse@coords[1:len1,]
m.test <- meuse
m.test@data <- meuse@data[(len1+1):sub1,]
m.test@coords <- meuse@coords[(len1+1):sub1,]
## load grids:
data(meuse.grid); coordinates(meuse.grid) <- ~x+y
gridded(meuse.grid) <- TRUE; fullgrid(meuse.grid) <- TRUE
zinc.id <- krige(zinc~1, m.train, meuse.grid) ## inverse distance weighting
# --- My attempt at calculation of variance
rmse.id <- sqrt(mean((meuse.test@data$zinc - zinc.id@data$var1.pred)^2))
Warning message:
In meuse.test@data$z - zinc.id@data$var1.pred :
longer object length is not a multiple of shorter object length
数据(meuse);坐标(meuse)要执行这种比较,需要使用meuse
而不是meuse.grid
作为newdata
。或者更好地使用krige.cv
例如,使用meuse
数据集:
kr_cv = krige.cv(log(zinc)~1, meuse, vgm(.59, "Sph", 874, .04))
kr_cv[1:5,]
coordinates var1.pred var1.var observed residual zscore fold
1 (181072, 333611) 6.784729 0.1681011 6.929517 0.14478795 0.35314023 1
2 (181025, 333558) 6.777372 0.1635077 7.039660 0.26228828 0.64864901 2
3 (181165, 333537) 6.294508 0.1723531 6.461468 0.16696067 0.40216530 3
4 (181298, 333484) 6.033072 0.2191244 5.549076 -0.48399603 -1.03394256 4
5 (181307, 333330) 5.576879 0.1643513 5.594711 0.01783242 0.04398694 5
由此,您可以轻松计算交叉验证的RMSE。automap
包(免责声明:由我编写)包含一个方便的函数,可以为您计算大量这些统计数据。通常,它只接受autoKrige.cv
的输出,但使用一个小技巧,您仍然可以使用它:
library(automap)
compare.cv(list(krige.cv_output = kr_cv))
krige.cv_output
mean_error 0.0003146
me_mean 5.345e-05
MAE 0.2898
MSE 0.1515
MSNE 0.8607
cor_obspred 0.8416
cor_predres 0.05449
RMSE 0.3892
RMSE_sd 0.5391
URMSE 0.3892
iqr 0.3949
非常感谢,保罗,你的软件包看起来很有用,我一定会用的。然而,我仍然有点不确定如何包括测试和培训数据集。回到我的示例中,对不可见(测试)数据集运行交叉验证的正确公式是kr.cv.id