我有一些实验数据的向量需要处理,例如:
{
{0, 61237, 131895, 194760, 249935},
{0, 61939, 133775, 197516, 251018},
{0, 60919, 131391, 194112, 231930},
{0, 60735, 131015, 193584, 249607},
{0, 61919, 133631, 197186, 250526},
{0, 61557, 132847, 196143, 258687},
{0, 61643, 133011, 196516, 249891},
{0, 62137, 133947, 197848, 251106}
}
每个向量是一次运行的结果,由五个数字组成,这些数字表示物体通过五个传感器中的每个传感器的次数。在测量间隔内,物体的速度是恒定的(传感器到传感器的间隔是不同的,因为传感器间距不是均匀的)。从一次运行到下一次,传感器的间距保持不变,但物体的速度会在一次运行到下一次运行时发生一点变化。
如果传感器是完美的,每个矢量应该是任何其他矢量的标量倍(与它们的速度之比成比例)。但在现实中,每个传感器都会有一些"抖动",并以一些小的随机量提前或晚触发。我试图分析传感器本身有多好,也就是说,它们给我的测量结果有多少"抖动"?
所以我认为我需要做以下事情。对于每个向量,我必须对其进行缩放,然后对其进行添加和移动(对其五个元素中的每个元素添加或减去固定的数量)。然后,每列的StandardDeviation
将描述该传感器中的"噪声"或"抖动"的量。必须选择每个向量的缩放量和每个向量的移位量,以使列的标准差最小。
在我看来,Mathematica可能有一个很好的工具包来完成这个任务,事实上,我认为我可能已经找到了Standardize[]
的答案,但它似乎是面向处理标量列表的,而不是像我这样的列表(或者至少我不能把它应用到我的情况下)。
所以我正在寻找一些关于我可以使用哪个库函数来解决这个问题的提示,或者可能是我可能需要自己分解算法的提示。也许我的部分问题是我不知道去哪里看——我这里有一个"信号处理"问题,或者数据操作或数据挖掘问题,或者最小化问题,或者它可能是一个相对标准的统计函数,我只是以前没有听说过?
(作为奖励,我希望能够控制用于优化此缩放/移动的权重函数;例如,在我上面的数据中,我怀疑传感器#5有问题,所以我想在进行缩放/移动时只考虑传感器1-4的SDs)
我不能对你的算法发表太多评论,因为数据分析不是我的强项。然而,据我所知,你是想描述每个传感器的时间变化。由于来自单个传感器的数据在您的矩阵的单列中,我建议将其转置并将Standardize
映射到每组数据上。换句话说,
dat = (* your data *)
Standardize /@ Transpose[dat]
把它放回柱状形式,Transpose
结果。要从此过程中排除您的最后一个传感器,只需使用Part
([])和Span
(;;)
Standardize /@ Transpose[dat][[ ;; -2 ]]
Or, Most
Standardize /@ Most[Transpose[dat]]
考虑到这一点,我认为你将很难从速度变化中分离出时间抖动。你能有意地改变速度吗?