我对R中的函数xvalid(package 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
似乎在交叉验证期间从数据集中删除了该点,但它似乎没有从协变量/趋势数据中删除该点。有关解决此问题或使用其他包裹的任何想法吗?
提前多多感谢!