【问题标题】:Duplicate data when using gstat or automap package in R在 R 中使用 gstat 或 automap 包时重复数据
【发布时间】:2016-05-14 12:22:13
【问题描述】:

我正在尝试使用普通克里金法在 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??

【问题讨论】:

  • 请编辑 Q 以包含使 fish 可访问的 library 调用(或链接)。
  • 哦,对不起,我是新手。我必须提供我的个人数据(即鱼)吗?不知道能不能看一下代码,看看哪里出错了。
  • 如果您找到该软件包的知识渊博的用户,这可能是可能的。我不是,所以我需要一个数据对象来使用。你能得到 gstat 中提供的数据对象之一的错误吗? (第一个错误看起来也不像完整的 R 错误消息。)
  • 当我为该包使用提供的 (meuse) 数据集时,一切正常。我不确定我的数据不起作用的原因是什么。我将原始问题中的错误消息修复为完整消息。

标签: r spatial-interpolation kriging gstat automap


【解决方案1】:

您也可以使用 geoR 包的 jitterDupCoords 函数。 https://cran.r-project.org/web/packages/geoR/geoR.pdf

【讨论】:

    【解决方案2】:

    automap::autoKrige 需要一个公式作为第一个参数,试试

    kr = autoKrige(WATER_TEMP~1, fish.dup, grd)
    

    【讨论】:

    • 我终于得到了这个工作,虽然我必须玩弄我的网格的尺寸。谢谢!
    【解决方案3】:

    automap对重复观察有一个非常简单的解决方法,那就是丢弃它们。所以,automap并不能真正解决您遇到的问题。我看到了一些选项:

    • 丢弃重复项。
    • 稍微扰动副本的坐标,使它们不再位于完全相同的位置。
    • 使用gstat 执行space-time kriging

    关于您的具体问题,请让您的示例可重现。我能猜到的是你的fish 对象的rbind 没有按照你的预期做......

    【讨论】:

    • 感谢您的建议,保罗。我接受了您的建议,并且能够在我的重复坐标稍微受到干扰的情况下运行 autoKrige 函数。克里金预测网格非常不清楚(即非常像素化的网格),但这可能与我最初设置网格尺寸的方式有关。谢谢!
    猜你喜欢
    • 2022-01-03
    • 2015-06-03
    • 2015-05-27
    • 2017-09-12
    • 2015-03-10
    • 2019-09-30
    • 2018-07-06
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多