私はRにかなり慣れていないので、オランダのさまざまなステーションから収集された温度測定値を補間しようとしています。私は、約 2 週間の期間をカバーする 10 分ごとに測定を行う約 35 の観測所のデータを持っています。したがって、これを処理するループを作成するのが最善であると考えました。補間手法がどの程度うまく機能するかを確認するために、すべてのタイムスタンプに対して相互検証を行いたいと思います。
これを行うために、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 を生成する原因と、さらに重要なことに、compare.cv 関数を使用できるように results.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)
ありがとう!