R中的运动数据分析;航班和时间子采样

时间:2013-03-04 14:28:13

标签: r spatial temporal

我想分析动物运动的角度。我有跟踪数据,每秒有10个录音。每次记录的数据包括动物的位置(x,y),相对于先前记录的角度和距离,并且还包括速度和加速度。 我想分析动物在制作特定角度时的速度,但是由于我的数据的时间分辨率如此之高,每个转弯都包含许多微小的角度。

我认为有两种可能的方法来解决这个问题,我不知道如何在R中实现这样的事情,并且将非常感谢帮助。

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

第二种:将直线运动转换为所谓的“飞行​​”;基于规则的步骤聚合在大致相同的方向上,由急转弯分开(见图)。当距离该主要方向的垂直距离大于x时,两点之间的飞行结束,该值可以任意设定。有没有人知道如何用我拥有的xy坐标位置数据做到这一点?

enter image description here

1 个答案:

答案 0 :(得分:4)

听起来有三种可能需要帮助的东西:算法,数学或R语法。

您需要的算法可能取决于数据的具体情况。例如,您有多少数据?它是什么格式的?它是2D还是3D?一种可能性是迭代您的数据集。对于每个新点,您需要检查以前的所有点,看它们是否属于您想要的列。但是,如果数据集很大,这可能会非常慢。最糟糕的情况是,所有数据点都在一个航段中,这意味着您将检查第一个点与数据点相同的次数,第二个点少一个,等等。 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。有很多文献可以帮助解决这类问题,here就是一个例子。

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

我担心我对R语法没有多大帮助,尽管它列在我想要学习的东西列表中。我昨晚检查了R的手册,它有很多有用的例子。我相信这是非常可行的,即使对于像我这样的R新手也是如此。如果你有一个大数据集,它可能会有点慢。但是,通过有效的方法,可以更容易地从具有更多知识和经验的人那里获得帮助来优化它。


两个快速澄清点,以防它们有用:

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