【问题标题】:Finding a density peak / cluster centrum in 2D grid / point process在二维网格/点过程中找到密度峰值/簇中心
【发布时间】:2012-06-10 02:32:45
【问题描述】:

我有一个数据集,其中包含由个人手机记录的每分钟 GPS 坐标。 IE。该数据集有 1440 行具有 LON/LAT 值。根据数据,我想对参与者家的位置进行点估计(经度/纬度值)。让我们假设家是他们在给定的 24 小时间隔内花费大部分时间的单一位置。此外,GPS 传感器在大多数情况下具有很高的精度,但有时它会完全关闭,从而导致巨大的异常值。

我认为解决此问题的最佳方法是将其视为点过程并使用 2D 密度估计来找到峰值。在 R 中是否有本地方法可以做到这一点?我查看了 kde2d (MASS) 但这似乎并没有真正起到作用。 Kde2d 使用密度值创建数据范围的 25x25 网格。然而,在我的数据中,这个人每天可以轻松地旅行 100 英里或更多,所以这些街区通常是一个太大的估计值。我可以缩小范围并使用更大的网格,但我确信必须有更好的方法来获得点估计。

【问题讨论】:

  • 如果您正在寻找坐标的质心,那么坐标上的聚类算法可能是一种合理的方法,kmeans 有一个中心?包flexclustkmedians 选项,这将缓解一些与异常值有关的问题
  • 嗯,我有点担心 kmeans 会将太多的点聚集在一起(例如,找到一个与家在一起的集群,还有附近的超市和咖啡店),然后这个集群的中心实际上会是离开。最好直接找到高密度位置而不将点分组。
  • 是的。这可能是一个过于简单的解决方案。您可以通过查看访问过的位置范围来定义边界,然后在 kde2d 中定义网格点的数量以反映合理的空间分辨率。
  • 您可以对数据进行四舍五入(例如,以数百米为单位,假设房屋宽度小于 100 米),并使用table 查找得分最多的位置。
  • 查看 adehabitatLT 中的居住时间以获取其他选项

标签: r geospatial spatial cran


【解决方案1】:

trip 包中有“花费时间”功能(我是作者)。您可以根据跟踪数据创建对象,了解随着时间推移的基本跟踪过程,并简单地处理假设修复之间的直线段的点。如果“家”是最大值像素所在的位置,即当您根据持续时间分解所有段并将它们汇总为单元格时,那么很容易找到它。来自tripGrid 函数的“花费时间”网格是具有标准sp 包类的SpatialGridDataFrame,并且行程对象可以由一个或多个轨道组成。

如果 lon/lat 不适合您的范围,使用 rgdal 您可以轻松地将坐标转换为适当的地图投影,但它对线段的网格/时间计算没有影响。

有一个简单的speedfilter 可以删除暗示移动过快的修复,但这非常简单并且可能引入新问题,通常更新或过滤轨道以排除不太可能的移动可能非常复杂。 (根据我的经验,网格化所花费的基本时间可以让您获得与许多复杂模型一样好的估计,这些模型只会带来新的复杂性)。该过滤器适用于笛卡尔坐标或长/纬度坐标,使用sp 中的工具来计算距离(长/纬度是可靠的,而糟糕的地图投影选择可能会带来问题 - 像人类在陆地上这样的短距离可能没什么大不了的) .

(函数tripGrid 使用pixellate.psp 计算直线段的精确分量,但该细节隐藏在实现中)。

在数据准备方面,trip 严格遵守合理的时间顺序,如果数据有重复、乱序等,将阻止您创建对象。有一个从?trip 中的文本文件,一个非常简单的(真正)虚拟数据示例是:

library(trip)
d <- data.frame(x = 1:10, y = rnorm(10), tms = Sys.time() + 1:10, id = gl(1, 5))
coordinates(d) <- ~x+y
tr <- trip(d, c("tms", "id"))
g <- tripGrid(tr)

pt <- coordinates(g)[which.max(g$z), ]
image(g, col = c("transparent", heat.colors(16)))
lines(tr, col = "black")
points(pt[1], pt[2], pch = "+", cex = 2)

该虚拟轨道没有重叠区域,但它表明找到“花费时间”中的最大点很简单。

【讨论】:

    【解决方案2】:

    如何使用最小化所有事件的平方和距离的位置?如果我的大脑工作正常,这可能接近任何内核平滑的最高水平。

    如果您的数据包含两个集群(家庭和工作),那么我认为该位置将位于最大的集群中,而不是它们之间。它与 x 和 y 坐标的简单平均值不同。

    对于这方面的不确定性,无论您的位置不确定性是多少(如果您从 GPS 获得该值会很好,否则猜测 - 50 米?)并重新计算。重复 100 次,对这些位置进行内核平滑处理,然后找到 95% 的轮廓。

    不严谨,我需要试验一下这个最小距离/内核至上的东西……

    【讨论】:

    • 不,但感谢您提醒我明天是她的生日。我的意思是内核平滑表面的最大值的位置...今天可能有时间考虑一下...
    【解决方案3】:

    作为对 spacedman 的回应 - 我很确定最小二乘法不起作用。最小二乘以服从异常值的要求而闻名,而对“附近”的事物没有太大的权重。这与期望的相反。

    在我看来,二方估计器可能会更好地工作 - 但我从未使用过它。我认为它还需要一些调整。

    它或多或少类似于距 0 一定距离的最小二乘估计量,然后权重在此之外是恒定的。所以一旦一个点变成异常值,它的惩罚是恒定的。我们不希望离群值随着远离它们而变得越来越重,我们宁愿将它们保持不变,并让优化专注于更好地拟合集群附近的事物。

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 2015-11-27
      • 2013-05-25
      • 1970-01-01
      • 2019-09-24
      • 2020-07-17
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多