R 运动数据分析;飞行和时间二次抽样

R 运动数据分析;飞行和时间二次抽样,r,spatial,temporal,R,Spatial,Temporal,我想分析动物运动的角度。我有每秒10次录音的跟踪数据。每次记录的数据包括动物的位置(x,y)、相对于先前记录的角度和距离,此外还包括速度和加速度。 我想分析动物在形成特定角度时的速度,然而,由于我的数据的时间分辨率很高,每转一圈都由许多微小的角度组成 我想有两种可能的方法来解决这个问题,对于这两种方法我都不知道如何在R中实现这一点,我将非常感谢您的帮助 第一:降低我的时间分辨率的某个因素。然而,这带来了可能丢失重要数据部分的缺点。尽管如此,我如何能够自动进行子采样,例如每隔3次或10次记录我的数

我想分析动物运动的角度。我有每秒10次录音的跟踪数据。每次记录的数据包括动物的位置(x,y)、相对于先前记录的角度和距离,此外还包括速度和加速度。 我想分析动物在形成特定角度时的速度,然而,由于我的数据的时间分辨率很高,每转一圈都由许多微小的角度组成

我想有两种可能的方法来解决这个问题,对于这两种方法我都不知道如何在R中实现这一点,我将非常感谢您的帮助

第一:降低我的时间分辨率的某个因素。然而,这带来了可能丢失重要数据部分的缺点。尽管如此,我如何能够自动进行子采样,例如每隔3次或10次记录我的数据集

第二:将直线运动转化为所谓的“飞行”;以规则为基础的大致相同方向的步骤聚合,由急转弯分隔(见图)。当与飞行主方向的垂直距离大于x时,两点之间的飞行结束,该值可以任意设置。有人知道如何使用我拥有的xy坐标位置数据来实现这一点吗


听起来有三件事你可能需要帮助:算法、数学或R语法

您需要的算法可能取决于数据的具体情况。例如,您有多少数据?它是什么格式的?它是二维的还是三维的?一种可能是遍历数据集。对于每个新点,您需要检查之前的所有点,以查看它们是否在所需的列中。但是,如果数据集很大,这可能会非常慢。最坏情况下,所有数据点都在一个航段中,这意味着你将检查第一个点的次数与检查数据点的次数相同,第二个点的次数减少一次,等等。这意味着n+(n-1)+(n-2)+……+1=n(n-1)/2次操作。这是O(n^2);相对于数据集的大小,操作时间可能有二次增长。因此,您可能需要更复杂的东西

检查一个点是否在所需的x列内的数学方法非常简单,尽管更复杂的数学方法可能有助于提供更好的算法。一种方法是使用向量算法。举个例子,假设你有点A、B和C。你的目标是看看B是否落在从A到C的向量周围一列宽度为x的列中。为此,找到与C正交的向量v,然后看看向量从A到B到v的标量投影的大小是否小于x。有很多文献可以帮助我们做这类事情,这就是一个例子

我想这就是我可以开始的地方(用一个布尔函数来表示一个单独的点),因为它看起来像一个R函数来确定这一点是很方便的。然后是另一个函数,它获取一组点并计算向量v,并为集合中的每个点调用第一个函数。然后运行一些数据,看看需要多长时间

恐怕我在R语法方面帮不了什么忙,尽管它在我想学的东西清单上。我昨晚查阅了R的手册,里面有很多有用的例子。我相信这是非常可行的,即使是像我这样的新手。如果你有一个大数据集,它可能会有点慢。然而,有了一些有效的东西,从拥有更多知识和经验的人那里获得帮助来优化它可能会更容易


如果有帮助,有两个快速澄清要点:

  • 上面的建议只是从单个动物的数据开始,所以当我谈论数据增长时,我指的是单个动物的平均数据样本量。如果这很慢,您可能需要首先修复它。然后,您可能需要分析/优化一个算法,以便在之后处理多个动物
  • 我隐式地假设飞行段的定义是相邻数据点的最大子集,其中没有“子”飞行段违反列规则。也就是说,我想我可以举一个例子,一组点满足你的规则,在向量到最后一个点的宽度为x的列中,但是如果你看向量到第二个到最后一个点的宽度为x的列,一个点将不再符合标准。取决于您如何定义飞行段(例如,如果您希望它是满足您的条件的最大可能点集,并且不关心内部发生的情况),您可能需要一些不同的东西(例如,向后工作而不是向前工作)

  • 谢谢,据我所知,这确实有助于你做什么(顺便说一句,很抱歉回复太晚)。那么,为什么要使用平均角度而不是实际角度呢?我不知道从哪一点开始,你用平均角度和第四点形成一个三角形。你知道如何在数据集的每一个角度上实现这一点,同时在R中创建一个包含所需航班的数据集吗?非常感谢Nicolas,你真的让我走了!我的荣幸;这听起来是一个非常有趣的项目,我很高兴能帮上一点忙。我想到了两个澄清的要点,我现在要补充,以防它们可能也有帮助。你们在这里问了一个非常有趣的问题。请问这个数字是从哪一张纸上得来的?我使用海鸟(Larus fuscus)的GPS跟踪数据(在twitter@ThomasEvans上查找我),我的大部分分析也使用R。谢谢。看起来我已经找到了一种在R中创建航班的方法,所以如果它有效,我可以让你知道吗?(我将在星期一进行测试…)