我对 R 相当陌生,我正在尝试对从荷兰各地不同站点收集的温度测量值进行插值。我有大约 35 个站点的数据,这些站点每 10 分钟进行一次测量,时间跨度约为两周。因此,我认为最好创建一个循环来处理这个问题。要查看插值技术的效果如何,我想对每个时间戳进行交叉验证。
为了做到这一点,我使用了 automap 包中的 Autokrige 函数,接下来我使用了 automap 包中的 compare.cv 函数,以便获得所有时间戳的最重要统计数据的概览。除此之外,我确保只有在至少 25 个站注册测量时才进行交叉验证。
然而问题是,我的代码如下所述在大多数情况下都有效,但在 4 种情况下会发出以下警告:
1. In sqrt(ret[[var.name]]) : NaNs produced
2. In sqrt(ret[[var.name]]) : NaNs produced
3. In sqrt(ret[[var.name]]) : NaNs produced
4. In sqrt(ret[[var.name]]) : NaNs produced
当我尝试对包括所有交叉验证的总列表使用 compare.cv 命令时,它给了我以下错误:
"Error in quantile.default(as.numeric(x), c(0.25, 0.75), na.rm = na.rm, :
missing values and NaN's not allowed if 'na.rm' is FALSE"
我想知道是什么导致 Autokrige 函数在交叉验证中生成 NaN,更重要的是如何从 results.cv 中删除它们以便我可以使用 compare.cv 函数?
rm(list=ls())
# load packages
require(sp)
require(gstat)
require(ggmap)
require(automap)
require(ggplot2)
#load data (download link provided below)
load("download path") https://www.dropbox.com/s/qmi3loub29e55io/meassurements_aug.RDS?dl=0
# make data spatial and assign spatial coordinate system
coordinates(meassurements) = ~x+y
proj4string(meassurements) <- CRS("+init=epsg:4326")
meassurements_df <- as.data.frame(meassurements)
# loop for cross validation
timestamp <- meassurements$import_log_id
results.cv=list()
for (i in unique(timestamp)) {
x = meassurements_df[which(meassurements$import_log_id == i), ]
if(sum(!is.na(x$temperature)) > 25){
results.cv[[paste0(i)]] = autoKrige.cv (temperature ~ 1, meassurements[which(meassurements$import_log_id == i & !is.na(meassurements$temperature)), ])
}
}
# calculate key statistics (RMSE MAE etc)
compare.cv(results.cv)
谢谢!