深入探索异常值我刚刚偶然发现了 Explore Outliers 平台,至少可以说我非常头晕。 我的问题在于稳健拟合异常值下的排除行。 我实际上只是想看看脚本在这个平台内如何工作,特别是它如何确定要排除的行。 在使用适当的筛选限制拆分表格后,我有多达 200 多个列。
我可以将脚本保存到脚本窗口,但我只是向我展示如何以宏形式编写脚本,而不是实际的行函数。
谢谢
回复:深入探索异常值尝试放置:
Batch Interactive( 1 );
在代码的开头。
回复:深入探索异常值@ian_jmp
您能帮我解决我收到的这个错误消息吗? 当我手动运行此脚本时,它工作得很好并且不会抛出任何错误(请参阅日志的屏幕截图),但是如果我尝试在表达式中使用它并自动运行它,我会收到以下错误消息,然后收到后续错误消息(日志中显示值的每一行都被替换为缺失值。 我试图在那里放置一个 Wait() 但这没有帮助。
谢谢大卫
错误 

回复:深入探索异常值我对此感激不尽... 太不可思议了! 自从我负责绘制所有这些数据以来,异常值问题一直是我存在的烦恼(以及晶圆图创建)。 txnelson 先生启发了我有关范围检查方法的知识,当我也有规格限制来比较它时,这种方法很好,但是仅仅将原始数据与我无法使用检查的地方绘制起来对我来说很困难。
回复:深入探索异常值我之前没有尝试编写“探索异常值”脚本,因此可能有更好的方法 - 下面的代码适用于我有时间尝试的唯一情况,因此它可能会帮助您入门:
NamesDefaultToHere(1);
// Example data
dt1 = Open( "$SAMPLE_DATA/Probe.jmp" );
// Copy the data to a new table
dt2 = Eval(dt1 << getScript);
dt2 << setName((dt1 << getName||" Screened"));
// List of columns to screen
colsToScreen = {:VDP_M1, :VDP_M2, :VDP_NBASE};
// Screen for outliers using your favourite method
eo = dt2 << Explore Outliers(Y(Eval(colsToScreen)), Quantile Range Outliers( 1 ), Show Only Columns With Outliers(1), Invisible);
// Using the report, find the columns that have outliers
eoRep = Report(eo);
table = eoRep[TableBox(1)];
colList = eoRep[StringColBox(1)];
// Loop over these columns . . .
nCols = NItems(colList << get);
for(c=1, c<=nCols, c++,
// Select this column (described by a row)
CMD = Expr( table << setSelectedRows({colTBD}) );
SubstituteInto(CMD, Expr(colTBD), Eval(c));
CMD;
// Update dt2 for this column: Cells that were considered outliers are coloured red
eo << ColorCells(1);
eo << ChangeToMissing(1);
);
eoRep << closeWindow;
您可以考虑使用缺失值代码,而不是将单元格设置为缺失。
回复:深入探索异常值谢谢回复。 我发现您提到的链接,我正在研究所有信息,以确定用于我的数据的最佳方法。
我很抱歉在我的第一篇文章中没有更具体。 我想做的是将探索异常值平台自动化为我正在创建的多种绘图功能。 例如,加载我的数据表,拆分列并执行探索离群值,这显然能够选择被视为离群值的行,然后将其排除。 我注意到一行已被排除,会弹出错误。 我需要以某种方式忽略它才能继续下一栏。 我附上了一个数据表,并包含了一个 JSL,说明我如何从逻辑上看到脚本运行。 目前它还不起作用,这就是我在这里的原因。一些测试有 300 多个分割依据 (:SPEC_COL_NAMES)。
提前致谢。
----- 开始循环
----- 在 cols[1] 上运行探索异常值
----- 排除行
----- 地块分布
----- 清除行状态
----- 在 cols[2] 上运行探索异常值
----- 排除行
----- 地块分布
----- 清除行状态
----- 在 cols[i] 之后结束循环
dt = Current Data Table();
// Split Data Table by SPEC_COL_NAMES :
// This is used for a variety of things, specifically Spec Limits and Range Checks
dtsplitmeas = dt << Split(
Invisible,
Split By( :SPEC_COL_NAMES ),
Split( :Output_1 ),
Group( :wafer_number, :rownum, :colnum, :subrow, :subcol, :RowCol ),
Remaining Columns( Drop All )
);
cols = dtsplitmeas << Get Column Names( Numeric );
dtsum = dt << Summary(
Invisible,
Group( :wafer_number )
);
jjrn1 = New Window( "Distribution - Output_1 ", << Journal );
// I am taking a shot at the syntax and the way I think it should be coded.
// By all means, correct me if i am wrong and make any modifications you see fit
// I don't actually know how to address the different wafers #'s and the
// SPEC_COL_NAMES at the same time. This is why i figured 2 For() loops.
For( i = 1, i <= N Items( cols ), i++,
For( j = 1, j <= N Items( dtsum ), j++,
test = cols[i];
wfr = dtsum:wafer_number[j];
eo = Explore Outliers(
SendToByGroup( Bygroup Default ),
Y( As Column( test ) ),
Robust Fit Outliers,
Where( :wafer_number == wfr )
);
//------------------------------------------------------------ -/
// < Insert Script to Exclude Rows for col[1] in dtsplitmeas> /
// This is what my original question was /
// referring to /
//----------------------------------------------------------/
// Step into Control Chart, Control Chart Builder, Distributions, Fit Y by X plots
// Control Chart Builder is just an example
gb = Control Chart Builder(
Size( 847, 990 ),
Show Control Panel( 0 ),
Variables( Y( As Column( test ) ) ),
Chart( Position( 1 ), Limits( Sigma( "Levey Jennings" ) ) ),
Chart( Position( 2 ), Limits( Sigma( "Moving Range" ) ) )
);
// Create Control Chart for all SPEC_COL_NAMES place it into a report / journal
(gb << top Report)[Text Edit Box( 1 )] << delete; //delete the where statement
Report( gb )[Outline Box( 1 )] << Set Title( cols[i] );
jjrn2 << Append( Report( gb ) );
gb << Close Window;
// Clear Row States because when you exclude a row for a given column, it extends
// to all other colums on that row
dtsplitmeas << Clear Row States();
// Rise and Repeat for all SPEC_COL_NAMES
);
);
回复:深入探索异常值关于 '具体来说它如何确定要排除哪些行',你有没有看过必要的帮助页?
回复:深入探索异常值我是 JMP 新手。
看起来下面代码中的 3 列都是数字!每列都有离群值屏幕。
colsToScreen = {:VDP_M1, :VDP_M2, :VDP_NBASE};该脚本不适用于我的 4 列数据:
colsToScreen = {:测试名称,:温度,:VDD,:测量值}
在哪里:
测试名称:test1、test2、test3、....等。
温度:-40℃、25℃、85℃、125℃
电源电压:1.8V、2.0V、2.5V、3.0V
我想对 Testname+Temperature+VDD 的每个组合的测量值列运行 OUTLIERS
PS:我阅读了这里许多关于使用“GROUP”的帖子,但没有成功。
我感谢任何帮助。
谢谢。
回复:深入探索异常值你为什么要写剧本?你可以直接去
分析=>筛选=>探索异常值
并以交互方式运行。无需脚本。
回复:深入探索异常值该脚本不会为您提供算法。该脚本只会调用 Explore Outliers 平台。您需要转到帮助系统并查找 Explore Outliers 平台的统计详细信息。