我尝试实现Hampel tanh 估计器来标准化高度不对称的数据。为此,我需要执行以下计算:
给定x
- 一个排序的数字列表和m
- 的中位数x
,我需要找到a
大约 70% 的值x
落入范围内(m-a; m+a)
。我们对 中的值分布一无所知x
。我使用 numpy 在 python 中编写,我最好的想法是编写某种随机迭代搜索(例如,如Solis 和 Wets所述),但我怀疑有更好的方法,或者以更好的算法或作为现成的功能。我搜索了 numpy 和 scipy 文档,但找不到任何有用的提示。
编辑
Seth 建议使用 scipy.stats.mstats.trimboth,但是在我对倾斜分布的测试中,这个建议不起作用:
from scipy.stats.mstats import trimboth
import numpy as np
theList = np.log10(1+np.arange(.1, 100))
theMedian = np.median(theList)
trimmedList = trimboth(theList, proportiontocut=0.15)
a = (trimmedList.max() - trimmedList.min()) * 0.5
#check how many elements fall into the range
sel = (theList > (theMedian - a)) * (theList < (theMedian + a))
print np.sum(sel) / float(len(theList))
输出为 0.79(~80%,而不是 70)