在 R 中使用 gstat 或 automap 包时重复数据
Duplicate data when using gstat or automap package in R
我正在尝试使用普通克里金法根据预测变量在 R 中使用 gstat 或 automap 包来空间预测动物将出现的位置。我有很多(超过 100 个)重复的坐标点,我不能扔掉它们因为多年来对这些站点进行了多次采样。每次我 运行 下面的普通克里金法代码,我都会得到一个 LDL 错误,这是由于重复的点。有谁知道如何在不丢弃数据的情况下解决这个问题?我已经尝试了 automap 包中的代码,该代码应该可以纠正重复项,但我无法让它工作。感谢您的帮助!
coordinates(fish) <- ~ LONGITUDE+LATITUDE
x.range <- range(fish@coords[,1])
y.range <- range(fish@coords[,2])
grd <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=3), y=seq(from=y.range[1], to=y.range[2], by=3))
coordinates(grd) <- ~ x+y
plot(grd, pch=16, cex=.5)
gridded(grd) <- TRUE
library(gstat)
zerodist(fish) ###146 duplicate points
v <- variogram(log(WATER_TEMP) ~1, fish, na.rm=TRUE)
plot(v)
vgm()
f <- vgm(1, "Sph", 300, 0.5)
print(f)
v.fit <- fit.variogram(v,f)
plot(v, model=v.fit) ####In fit.variogram(v, d) : Warning: singular model in variogram fit
krg <- krige(log(WATER_TEMP) ~ 1, fish, grd, v.fit)
## [using ordinary kriging]
##"chfactor.c", line 131: singular matrix in function LDLfactor()Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim,: LDLfactor
##automap code for correcting for duplicates
fish.dup = rbind(fish, fish[1,]) # Create duplicate
coordinates(fish.dup) = ~LONGITUDE + LATITUDE
kr = autoKrige(WATER_TEMP, fish.dup, grd)
###Error in inherits(formula, "SpatialPointsDataFrame"):object 'WATER_TEMP' not found
###somehow my predictor variables are no longer available when in a Spatial Points Data Frame??
automap
对重复观察有一个非常简单的修复,那就是丢弃它们。所以,automap
并不能真正解决你的问题。我看到一些选项:
- 丢弃重复项。
- 稍微扰乱副本的坐标,使它们不再位于完全相同的位置。
- 使用
gstat
执行space-time kriging。
关于您的具体问题,请使您的示例可重现。我能猜到的是你的 fish
对象的 rbind
没有做你期望的事情......
automap::autoKrige
需要一个公式作为第一个参数,try
kr = autoKrige(WATER_TEMP~1, fish.dup, grd)
或者你可以使用 geoR 包的函数 jitterDupCoords。
https://cran.r-project.org/web/packages/geoR/geoR.pdf
我正在尝试使用普通克里金法根据预测变量在 R 中使用 gstat 或 automap 包来空间预测动物将出现的位置。我有很多(超过 100 个)重复的坐标点,我不能扔掉它们因为多年来对这些站点进行了多次采样。每次我 运行 下面的普通克里金法代码,我都会得到一个 LDL 错误,这是由于重复的点。有谁知道如何在不丢弃数据的情况下解决这个问题?我已经尝试了 automap 包中的代码,该代码应该可以纠正重复项,但我无法让它工作。感谢您的帮助!
coordinates(fish) <- ~ LONGITUDE+LATITUDE
x.range <- range(fish@coords[,1])
y.range <- range(fish@coords[,2])
grd <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=3), y=seq(from=y.range[1], to=y.range[2], by=3))
coordinates(grd) <- ~ x+y
plot(grd, pch=16, cex=.5)
gridded(grd) <- TRUE
library(gstat)
zerodist(fish) ###146 duplicate points
v <- variogram(log(WATER_TEMP) ~1, fish, na.rm=TRUE)
plot(v)
vgm()
f <- vgm(1, "Sph", 300, 0.5)
print(f)
v.fit <- fit.variogram(v,f)
plot(v, model=v.fit) ####In fit.variogram(v, d) : Warning: singular model in variogram fit
krg <- krige(log(WATER_TEMP) ~ 1, fish, grd, v.fit)
## [using ordinary kriging]
##"chfactor.c", line 131: singular matrix in function LDLfactor()Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim,: LDLfactor
##automap code for correcting for duplicates
fish.dup = rbind(fish, fish[1,]) # Create duplicate
coordinates(fish.dup) = ~LONGITUDE + LATITUDE
kr = autoKrige(WATER_TEMP, fish.dup, grd)
###Error in inherits(formula, "SpatialPointsDataFrame"):object 'WATER_TEMP' not found
###somehow my predictor variables are no longer available when in a Spatial Points Data Frame??
automap
对重复观察有一个非常简单的修复,那就是丢弃它们。所以,automap
并不能真正解决你的问题。我看到一些选项:
- 丢弃重复项。
- 稍微扰乱副本的坐标,使它们不再位于完全相同的位置。
- 使用
gstat
执行space-time kriging。
关于您的具体问题,请使您的示例可重现。我能猜到的是你的 fish
对象的 rbind
没有做你期望的事情......
automap::autoKrige
需要一个公式作为第一个参数,try
kr = autoKrige(WATER_TEMP~1, fish.dup, grd)
或者你可以使用 geoR 包的函数 jitterDupCoords。 https://cran.r-project.org/web/packages/geoR/geoR.pdf