深入探索異常值我剛剛偶然發現了 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
我想在測試名稱+溫度+VDD 的每個組合的測量列上運行離群值
PS 我在這裡閱讀了很多帖子來了解使用“GROUP”的方法,但沒有成功。
我很感激任何幫助。
謝謝。
回覆:深入探索異常值為什麼要寫劇本?你可以去
分析=>篩選=>探索異常值
並以交互方式運行它。無需編寫腳本。
回覆:深入探索異常值該腳本不會為您提供演算法。該腳本將僅呼叫 Explore Outliers 平台。您需要前往幫助系統並尋找「探索異常值」平台的統計資料。