R:automap包中的Autokrige.cv函数生成NaN

时间:2016-02-28 16:52:53

标签: r spatial-interpolation gstat automap

我是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函数? < / p>

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) 

谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并借助于用于克里金法的SpatialPointDataFrame上的包sp的remove.duplicates()解决了这个问题。在此之前,我计算了DataFrame中相关变量的平均值。

    SPDF@data <- SPDF@data %>%
      group_by(varx,vary,varz) %>%
      mutate_at(vars(one_of(relevant_var)),mean,na.rm=TRUE) %>%
      ungroup()
    SPDF <- SPDF %>% remove.duplicates()

当我遇到同样的问题时,上面的Dropbox链接不再有效,所以我无法查看这个具体的例子。