有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />| 有沒有辦法自動化/編寫異常值過濾的 Winsor 過程? 我從 Brady 找到了兩個插件,但它們不排除異常行,它們只與增強摘要功能有關。 |
插補插件
擴展摘要加載項
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?謝謝,這很有意義。 我想我誤解了 AMC 簡報中提到 Huber 的部分...... 我以為他們的意思是 Huber M 估計,但我同意它只是迭代 windsorizing。
感謝您提供該鏈接。 這很有幫助。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?花時間閱讀一些 wiki 文章可能是值得的。Winsorization 只是一個過程,類似於修剪。
維基百科:
Winsorising 或 Winsorisation 是通過限制統計數據中的極值來減少可能虛假異常值的影響的統計數據轉換。
我們只需要一個百分位數,這裡我們使用 1.5sigma。
在引用的文章中,他們使用中位數進行 winsorize,然後使用 winsorized 數據更好地預測中心和傳播。然後他們再次進行 winsorize 以更好地預測中心和傳播。在這裡,我們進行 winsorize 以獲得穩健的準確均值/標準偏差。
調整常數用於 Huber 的 M 估計。這個過程是相反的,相反,您使用 M 估計來得出一個可靠的準確均值/標準差,然後對數據進行 winsorize。當 K 接近無窮大時,M 估計均值 = 均值。當 K 接近 0 時,M 估計均值 = 中位數。
您可以查看本演示文稿的第 16 頁http://www.bauer.uh.edu/rsusmel/phd/ec1-25.pdf
因此,為了回答您的問題,未使用調整常數 K b/c 我們沒有使用 Huber 的 M 估計。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?對於此線程中的代碼所基於的 AMC 技術簡介中的示例,調整常數 k 是多少?我已經看到與調諧常數相關的理論方程式,但我還沒有看到任何描述 windsorizing +/- n*sigma 和 sigma_new = x * stddev(data) 的內容,其中(我猜)n 和x 與調諧常數有關。
謝謝,
麥克風
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?本質上,我們正在做的是解釋對中位數/MAD 的高估。在我們的示例數據集中,在 winzorization 過程中使用中值/MAD 過度調整了離群點。
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
中位數和瘋狂估計:
均值 = 5.2;西格瑪 = 1.05;
使用這些估計將數據更改為:
x_firstpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
這些數據讓我們更好地近似於均值和西格瑪:
調整後的平均值 = 5.34;西格瑪 = 1.04;
如果我們使用更好的估計來 winzorize 數據集,它將導致:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.905 ] ;
但是,如果我們使用 x 而不是 x_orig,代碼將找不到離群點 9.9 來相應地調整它,當 mean = 5.34 和 sigma = 1.04 時,b/c 6.775 不是離群點。
因此:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
均值和西格瑪將是相同的:
調整後的平均值 = 5.34;西格瑪 = 1.04;
西格瑪 - sigma_old = 0
我們的融合將相信它已經完成。
tl:dr - 如果您試圖找到最佳零點,您的代碼需要足夠健壯以運行兩個方向。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?我不完全明白 x=x_orig。
這似乎會造成無限循環;但它有效,所以我不能反駁。
謝謝!
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?這段代碼為我做了!謝謝!!!
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?謝謝!
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?是的是的。我們希望在調整後的均值和西格瑪發生變化的情況下對原始數據集運行 winsorization 過程。添加 x=xorig 是正確的。就像我說的,我很快就編碼了。
至於匹配論文:
由於數據集只有 1 個自由度(離群值的近似值),sigma 和 mean 都是基於 winsorization 固定的。鑑於這一事實,無法獲得 5.36 的平均值和 1.15 的西格瑪。 5.386 和 1.145 四捨五入到第二位數字將產生 5.39 和 1.15。 因此,米你最好的猜測是這是一個簡單的錯字,而不是數學的錯誤。考慮到這篇論文到目前為止的正確性,並且它來自皇家化學學會的分析方法委員會,我會給他們懷疑的好處。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?這基本上就是我所擁有的,儘管我擁有數組格式的所有內容,因此我可以檢查每次迭代的數據。 你的更乾淨,所以我希望你不介意我稍微修改了一下。 我用 Loc 函數替換了 for() 循環,因為如果其他人將它用於大型數據集,它可能會更有效。 (免責聲明,我只使用過一次或兩次此功能......希望它是正確的選擇。)
當我運行你的函數和我的函數時,我發現它在 1 次迭代中收斂,平均值為 5.339,西格瑪為 1.044。 該論文似乎表明它需要多次迭代。 我認為它們甚至是針對這個數據集的意思,但也許它們是泛化的。 他們繼續說 Huber 估計均值是 5.36,sigma 是 1.15。 我無法重現估計的平均值,但是當我在每次迭代中用 x_orig(原始數據)替換“x”數據時,我得到了 5.386 的平均值和 1.1459 的西格瑪。您可以在下面的代碼中看到啟用/禁用此功能的行。 這感覺並不是迭代某些東西的正確方法,但我不確定我在計算時哪裡出錯了。 請原諒 sig digits 錯誤,但我想在這裡展示更多關於變量內容的信息。
來自論文:

名字默認在這裡( 1個) ;
清除日誌() ;
//Paper中的數據集
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
X = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
//確定中值和穩健西格瑪(MAD)
意思是=分位數( .5 , X ) ;
是=腹肌( X -意思是) ;
瘋狂的=分位數( .5 ,是) ;
西格瑪=瘋狂的* 1.5 ;
西格莫爾德= 0 ;
//收斂
儘管(腹肌(西格瑪-西格莫爾德) > 2e-16 ,
//x = x_orig; // 嘗試打開/關閉它
X [位置( X > (意思是+ 1.5 *西格瑪))] =意思是+ 1.5 *西格瑪;
X [位置( X < (意思是- 1.5 *西格瑪))] =意思是- 1.5 *西格瑪;
意思是老=意思是;
西格莫爾德=西格瑪;
意思是=意思是( X ) ;
西格瑪= 1.134 *標準偏差( X ) ;
展示(意思是,西格瑪) ;
) ;
謝謝,
麥克風
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?CH字段: 回答你原來的問題:是的,有一種方法可以自動過濾離群值。事實上,有很多(如果不是無限的話)方法。
這銳化腳本(原始數據平均值為 5.785,JMP 穩健平均值/Huber 中心為 5.735)產生的 Winsorized 平均值為 5.339。如果你真的想去兔子洞,一個 12A 單步 Hampel W-Estimator(Andrews,DF, et. al (1972) 推薦的穩健平均值;穩健的位置估計:調查和進展;普林斯頓大學出版社)在相同數據上的收益率為 5.256。
所有這些位置測量在同一數據上如此不同,這是否令人擔憂?並不真地。正如奇蹟創造者聖格雷戈里所說,“不同的是不一樣的。”如果沒有至少某種形式的合理拒絕程序,有思想的研究人員不會使用平均值。如果在可以從腳本調用的 JMP 函數中輕鬆實現該合理過程,那就太好了,但如果沒有這個選項,Winsorizing 腳本來自銳化將是一個很好的選擇,只要您確定使用的方法並註意早期的“不良品味和不良做法”警告。
祝你有充實的一天!
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?這是我在論文之後的快速代碼:
//Paper中的數據集
x = [4.5,4.9,5.6,4.2,6.2,5.2,9.9];
//確定中值和穩健西格瑪(MAD)
均值 = 分位數 (.5,x);
y = abs(x - 均值);
MAD = 分位數(.5,y);
西格瑪 = MAD*1.5;
西格瑪爾德= 0;
//收斂
同時(abs(sigma - sigmaold)> 2e-16,
對於(i=1,i<=nrows(x),i++,
如果(x
X = 平均值 - 1.5 * 西格瑪
);
如果(x >平均+1.5*西格瑪,
X = 均值 +1.5*sigma
);
);
平均數 = 平均數;
西格瑪爾德=西格瑪;
均值 = 均值(x);
西格瑪 = 1.134*標準差(x);
);
//評價
打印(x);
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?我遵循了 msharp 鏈接到的 AMC 論文中描述的 Huber 方法。編寫腳本並不太糟糕,困難的部分是知道我是否正確解釋了算法。似乎當我迭代(比如 N 次)並使用新的均值帽 +/- 1.5 x sigma-hat 值更新數據數組時,對於第 i 次迭代,我將使用 i-1 中的數據數組,但是這對我不起作用。 通過在使用更新的均值帽和西格瑪帽時始終更新原始數據 (i=0),我獲得了更好的結果。更好的結果,但似乎是錯誤的。 有沒有人有實施這個算法的經驗?
順便說一句,根據這個頁面(分佈報告), JMP 在分佈平台中的穩健均值/標準差使用的是 Huber M 估計,但我不確定它們是如何進行 windsorizing 的。 我的腳本在某些情況下會產生類似的結果,而在其他情況下則不太相似。 但正如我上面所說,我不確定我是否做對了。
謝謝,
麥克風
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?計算穩健均值和穩健標準差的方法有很多種。我參考的文章展示瞭如何計算中位數(根據定義是穩健平均值)和 MAD(穩健標準差)。這些是最基本的。然而,任何計算中心和分佈並且能夠抵抗由於離群數據引起的變化的度量都可以被認為是穩健的均值或穩健的標準偏差,而且肯定有比中值/MAD 方法更複雜的算法。
我選擇分享那篇文章的原因是因為它使用易於理解的中位數/MAD 展示了 Winsorizing 過程的基礎知識。如果我要從頭開始對流程進行編程,我會從這裡開始。
我不是 JMP 程序員,所以我不知道他們使用的實際方法;但我懷疑他們使用那篇論文中描述的方法。那篇論文真的只是有助於理解基礎知識。論文本身陳述了最多的缺陷,對程序員來說最突出的缺陷是收斂速度慢。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?到CH字段: 現在明白多了。這不是唯一不易編寫腳本的強大過程!來自 Distribution 平台的穩健均值和穩健標準差也不是 JSL 可用的功能。請參閱去年的聖誕老人聖誕清單......
到銳化:當我向 JMP 詢問穩健均值和穩健標準差的參考時,開發人員將我引向了 Huber, PJ(1973); “穩健回歸:漸近、猜想和蒙特卡羅”; 《統計年鑑》,第 1 卷,第 5 期,pp799-821,其中詳細介紹了與您引用的參考資料大不相同的程序。Peter Huber 是 Robust Statistics 的泰坦,他關於該主題的更現代的書籍(Robust Statistics 2004)讚揚了 M 估計(Annals 論文也對此進行了詳細說明),所以我不知道 JMP 是否真的在進行 Winsorizing你參考。是不是真的?
Huber M 估計他們看起來不會太有趣而無法從頭開始編寫腳本。因此聖誕清單請求。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?通常,在不知道原因的情況下過濾異常值被認為是低品位和不良做法。即使已知原因,使用不適用於您的數據集的過濾標準也會引入比僅將異常值留在數據集中更多的錯誤。需要問重要的問題,數據是對稱的嗎?傾斜?普通的?有沒有掩蔽?您的數據集真的是兩種不同的分佈嗎?拆分它們會更好嗎?如果不實際查看數據,就不可能真正了解您的數據。自動化異常值過濾會導致錯誤的結論。就像“p-hacking”一樣糟糕。
當然,這並不意味著沒有理由將流程自動化。例如,使用離群值過濾標準自動更新控製圖上的控制限,在控製圖上查看/監控一段時間內的數據。
如果要使其自動化,則需要編寫腳本。你可以看到http://www.rsc.org/images/robust-statistics-technical-brief-6_tcm18-214850.pdf有關 Huber 方法實際作用的更多信息。希望這可以幫助。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?JMP 中的大多數操作都可以通過轉到紅色三角形並轉到腳本 > 複製腳本來編寫腳本
通過這種方式,您可以將這些腳本片段粘合到一個更大的自動化程序中。
這對於每個 JMP 操作/功能等都是如此......但以下情況下的穩健離群值過濾器功能除外:
COL > 建模實用程序 > 探索異常值
我想在給定的一組參數上使用 K=3 自動化 Huber 過濾器。我會一遍又一遍地這樣做。
我想讓它自動化以減輕我的工作量。
回复:有沒有辦法自動化/編寫異常值過濾的 Winsor 過程?你的問題讓我很困惑。Winsorising outliers 通常被定義為將極值設置為指定的百分位數,而不是排除它們。它類似於信號處理中的削波。排除離群行通常不是 Winsorising。
也就是說,您可以編寫任何您想要的算法方法。如果您編寫腳本來執行此操作,請使用矩陣。它們運行得更快,尤其是對於大型數據集。