2013-03-04 51 views
3

我想分析动物的运动角度。我有跟踪数据,每秒有10个录音。每次记录的数据包括动物的位置(x,y),相对于先前记录的角度和距离,还包括速度和加速度。 我想分析动物在制作特定角度时的速度,但由于我的数据的时间分辨率非常高,因此每一转都包含许多细微的角度。R中的运动数据分析;航班和时间子采样

我想有两种可能的方法来解决这个问题,我不知道如何在R中实现这样的事情,并将不胜感激。

第一:通过某个因素减少我的时间分辨率。但是,这带来了丢失可能重要部分数据的缺点。尽管如此,我将如何能够自动对子样本进行采样,例如对数据集进行每第3次或第10次记录?

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

enter image description here

+0

你在这里问过的非常有趣的问题。我可以问这个数字来自哪张纸吗?我使用来自海鸟(Larus fuscus)的GPS跟踪数据(在Twitter @ThomasEvans上查看我),并且我也在大部分分析中使用R. – 2013-03-15 16:25:37

+0

谢谢你。看来我已经找到了在R中创建航班的方法,所以如果它有效,我可以让你知道吗? (我会在星期一进行测试..)这个数字来自de Knegt等人的'贴片密度决定了大型食草动物的运动模式和觅食效率'。 – Joeri 2013-03-15 17:34:25

回答

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的列的规则,但是如果你看着围绕向量到第二个到最后一个点,一个点将不再符合标准。根据您如何定义航段然后(例如,如果您希望它是满足您的条件且不关心内部情况的最大可能点集),您可能需要一些不同的东西(例如,反向工作的转发)。
+0

谢谢,据我了解你在做什么,确实有所帮助(对于迟到的回复感到抱歉)。那么为什么你用平均角度代替实际角度呢?而且我不明白从哪个角度使用平均角度与第四点形成三角形。 你是否知道如何在数据集的每个角度实现这一点,并同时在R中创建具有所需航班的数据集? – Joeri 2013-03-05 10:57:31

+0

非常感谢Nicolas,你真的让我走了! – Joeri 2013-03-07 09:41:46

+0

我的荣幸;这听起来像是一个非常有趣的项目,我很高兴能够提供一些帮助。我想到了我现在添加的两个澄清点,以防它们也可能有帮助。 – nicolas 2013-03-07 14:26:58