[英]Movement data analysis in R; Flights and temporal subsampling
我想分析动物运动的角度。 我有跟踪数据,每秒有10个录音。 每次记录的数据包括动物的位置(x,y),相对于先前记录的角度和距离,并且还包括速度和加速度。 我想分析动物在制作特定角度时的速度,但是由于我的数据的时间分辨率如此之高,每个转弯都包含许多微小的角度。
我想有两种可能的方法来解决这个问题,我不知道如何在R中实现这样的事情,并且将非常感谢帮助。
第一个:通过某个因素降低我的时间分辨率。 然而,这带来了丢失可能的重要数据部分的缺点。 尽管如此,我怎样才能自动进行子采样,例如我的数据集的第3或第10次记录?
第二种:通过将直线运动转换为所谓的“飞行”; 基于规则的步骤聚合在大致相同的方向上,由急转弯分开(见图)。 当距离该主要方向的垂直距离大于x时,两点之间的飞行结束,该值可以任意设定。 有没有人知道如何用我拥有的xy坐标位置数据做到这一点?
听起来有三个可能需要帮助的东西:算法,数学或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。 有很多文献可以帮助解决这类问题, 这里有一个例子。
我认为这是我可能开始的地方(对于单个点使用布尔函数),因为它似乎是一个R函数来确定这将是方便的。 然后是另一个函数,它接受一组点并计算向量v并为集合中的每个点调用第一个函数。 然后运行一些数据,看看需要多长时间。
我担心我对R语法没什么帮助,尽管它列在我想要学习的东西上。 我昨晚检查了R的手册,它有很多有用的例子。 我相信这是非常可行的,即使对于像我这样的R新手也是如此。 如果你有一个大数据集,它可能会有点慢。 但是,通过有效的方法,可以更容易地从具有更多知识和经验的人那里获得帮助来优化它。
两个快速澄清点,以防它们有用:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.