我想分析动物运动的角度。我有跟踪数据,每秒有10个录音。每次记录的数据包括动物的位置(x,y),相对于先前记录的角度和距离,并且还包括速度和加速度。 我想分析动物在制作特定角度时的速度,但是由于我的数据的时间分辨率如此之高,每个转弯都包含许多微小的角度。
我认为有两种可能的方法来解决这个问题,我不知道如何在R中实现这样的事情,并且将非常感谢帮助。
第一个:通过某个因素降低我的时间分辨率。然而,这带来了丢失可能的重要数据部分的缺点。尽管如此,我怎样才能自动进行子采样,例如我的数据集的第3或第10次记录?
第二种:将直线运动转换为所谓的“飞行”;基于规则的步骤聚合在大致相同的方向上,由急转弯分开(见图)。当距离该主要方向的垂直距离大于x时,两点之间的飞行结束,该值可以任意设定。有没有人知道如何用我拥有的xy坐标位置数据做到这一点?
答案 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新手也是如此。如果你有一个大数据集,它可能会有点慢。但是,通过有效的方法,可以更容易地从具有更多知识和经验的人那里获得帮助来优化它。
两个快速澄清点,以防它们有用: