1

我想对 geoR 包中的 ca20-Dataset 进行交叉验证。例如,使用 meuse 数据集,这工作正常,但对于这个数据集,我遇到了 SpatialPointsDataFrame 尺寸的奇怪问题。也许您可以自己尝试一下并解释为什么 autoKrige.cv 函数不起作用(我尝试了几个 nfold-values 但这只会更改错误消息的位置值...):

library(geoR)
library(gstat)
library(automap)
data(ca20)
east=ca20$coords[,1]
north=ca20$coords[,2]
concentration=ca20$data
frame=data.frame(east,north)
data=data.frame(concentration)
points<-SpatialPoints(data.frame(east,north),proj4string=CRS(as.character(NA)))
pointsframe<-SpatialPointsDataFrame(points,data, coords.nrs = numeric(0),proj4string = CRS(as.character(NA)), match.ID = TRUE)
krig=autoKrige(pointsframe$concentration~1,pointsframe)
plot(krig)
cv=autoKrige.cv(pointsframe$concentration~1,pointsframe)

我希望有人能重现这个问题,我的 R 版本是 2.15,所有包都是最新的(至少不超过一个月左右......)。

谢谢你的帮助!!

4

1 回答 1

1

首先,您构建 SpatialPointsDataFrame 的方式可以更轻松地完成:

library(geoR)
library(gstat)
library(automap)

...并构建 SPDF:

pointsframe = data.frame(ca20$coords)
pointsframe$concentration = ca20$data
coordinates(pointsframe) = c("east", "north")

您遇到的问题在于如何使用formula论点。您将空间对象添加pointsframe到公式中,实质上是将向量直接放入公式中。您应该只在公式中使用列名,如下所示:

cv=autoKrige.cv(concentration~1,pointsframe)

它有效:

> summary(cv)
            [,1]      
mean_error  -0.01134  
me_mean     -0.0002237
MAE         6.02      
MSE         60.87     
MSNE        1.076     
cor_obspred 0.7081    
cor_predres 0.01343   
RMSE        7.802     
RMSE_sd     0.7041    
URMSE       7.802     
iqr         9.519 
于 2013-01-20T19:23:43.227 回答