对于 R 中的函数 xvalid(包 geoR),我有一个非常具体的问题,该函数仅用于空间统计,所以我希望它不是太具体以至于有人能够回答。无论如何,也欢迎对替代功能/包的建议。
我想计算一个变异函数,拟合它,然后执行交叉验证。函数 xvalid 似乎可以很好地进行交叉验证。它在我设置 reestimate=TRUE 时起作用(因此它会重新估计在交叉验证中从数据集中删除的每个点的变异函数),并且在使用趋势时它也起作用。但是,将这两者结合起来似乎不起作用......
这是使用经典 Meuse 数据集的示例:
library(geoR)
library(sp)
data(meuse) # import data
coordinates(meuse) = ~x+y # make spatialpointsdataframe
meuse@proj4string <- CRS("+init=epsg:28992") # add projection
meuse_geo <- as.geodata(meuse) # create object of class geodata for geoR compatibility
meuse_geo$data <- meuse@data # attach all data (incl. covariates) to meuse_geo
meuse_vario <- variog(geodata=meuse_geo, data=meuse_geo$data$lead, trend= ~meuse_geo$data$elev) # variogram
meuse_vfit <- variofit(meuse_vario, nugget=0.1, fix.nugget=T) # fit
# cross-validation works fine:
xvalid(geodata=meuse_geo, data=meuse_geo$data$lead, model=meuse_vfit, variog.obj = meuse_vario, reestimate=F)
# cross-validation does not work when reestimate = T:
xvalid(geodata=meuse_geo, data=meuse_geo$data$lead, model=meuse_vfit, variog.obj = meuse_vario, reestimate=T)
我得到的错误是:
Error in variog(coords = cv.coords, data = cv.data, uvec = variog.obj$uvec, : coords and trend have incompatible sizes
在交叉验证期间似乎从数据集中删除了该点,但似乎没有从协变量/趋势数据中删除该点。关于解决这个问题或使用不同的包有什么想法吗?
提前非常感谢!