有没有办法自动化/编写异常值过滤的 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。
也就是说,您可以编写任何您想要的算法方法。如果您编写脚本来执行此操作,请使用矩阵。它们运行得更快,尤其是对于大型数据集。