繁体   English   中英

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

[英]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新手也是如此。 如果你有一个大数据集,它可能会有点慢。 但是,通过有效的方法,可以更容易地从具有更多知识和经验的人那里获得帮助来优化它。


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM