寻找一个公式来找到我的数据中的“肘部”嗨,JMP 朋友们,
(在常规 JMP 18.0.1 上,附有示例数据)
我正在分析一些数据,其中我需要找到我的数据出现“拐点”或拐点的时间(x 点)。我的数据中有一个初始小峰值,并且一直在手动进行这项工作。但是,这很慢,我想将其自动化,因为我将对数百个测试执行此操作,这些测试返回类似于下面的图表,具有不同的峰值时间/数量和不同的“平坦”时间。“平坦”时间通常不是很平坦,而是逐渐减少。您可以在所附的图表图像(示例/虚拟数据)中看到我想要找到的点/区域。
任何关于我能做什么的帮助都会非常有帮助。我认为设置一个标志列是找到它的好方法,但我不确定我可以使用什么 JSL 或公式来使标志起作用。
任何关于如何解决这一问题的帮助都将非常有帮助,谢谢!

自动化和脚本基础数据分析与建模数据探索与可视化视窗回复:寻找一个公式来找到我的数据中的“肘部”我以数据点的形式寻找肘部,其中接下来的 10 个数据点都大于前一个数据点。这绝对是一个虚构的算法。但它看起来可能是识别肘部的一种可能方法。


这是我为名为 Elbow 的列创建的公式
As Constant(
flag = 0;
lookAhead = 10;
);
val = .;
If( flag == 0 & Row() < N Rows( Current Data Table() ) - lookAhead,
If(
Min(
:Counts[Index( Row() + 1, Row() + lookAhead + 1 )] - :Counts[
Index( Row(), Row() + lookAhead )]
) > 0,
val = (flag = 1)
)
);
val;
回复:寻找一个公式来找到我的数据中的“肘部”好的,所以这个解决方案要复杂得多。
想象一下,如果您将一个函数拟合到峰值曲线,然后计算二阶导数?

用图形更容易看清。图中第一条轨迹是原始数据、拟合模型、拟合的一阶和二阶导数。可能不太容易看清,但二阶导数的最大值(蓝线)是第一条线上肘部的中间(三角形标记)。
以下是我使用 JSL 实现此目的的方法。(注意:我更改了第一列的名称)
在这个脚本中,我让 JMP 整理所有的微积分以及曲线拟合。
Names Default To Here( 1 );
dt=Open( "$Examples/Example for Elbow.jmp" );
obj=dt <<FIT curve=""></FIT>
<P>最后一步将“肘部”行变成红色三角形标记。但您也可以轻松地将选定的行子集放入表格中,并将其与所有其他拟合值一起添加到表格中。我没有尝试使用数百个表格,但我认为如果您将其放入循环中以遍历大量数据表,它将执行得相当快。</P>回复:寻找一个公式来找到我的数据中的“肘部”您可以看一下 Spectris 插件。它可用于拟合主峰和次峰(可能是造成肩峰的原因)。
https://community.jmp.com/t5/JMP-Add-Ins/Spectris-Graphical-spectral-data-processing/ta-p/650521
M
回复:寻找一个公式来找到我的数据中的“肘部”嗨,拜伦,
谢谢你!我试过对平滑函数进行二阶导数计算,但似乎没有效果。但我还没有试过倾斜法线函数。我会试一试,看看它能给我带来什么!我还在想办法编写“Kneedle”算法的脚本,我发现它可以很好地找到图形中的“肘部”点。
谢谢!
罗谢尔