【发布时间】:2011-03-07 09:41:04
【问题描述】:
我尝试实现Hampel tanh estimators 来规范化高度不对称的数据。为此,我需要执行以下计算:
鉴于x - 一个排序的数字列表和m - x 的中位数,我需要找到a 使得x 中大约70% 的值落入@987654330 范围内@。我们对x 中的值分布一无所知。我使用 numpy 在 python 中编写,我最好的想法是编写某种随机迭代搜索(例如,如Solis and Wets 所述),但我怀疑有更好的方法,或者以更好的算法或作为现成的功能。我搜索了 numpy 和 scipy 文档,但找不到任何有用的提示。
编辑
Sethsuggested 使用 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)
【问题讨论】:
-
你说你对分布一无所知,但想要一个关于中位数对称的范围。这并不完全一致。
-
迈克尔,我希望我在问题开头的澄清能回答你的问题
-
是的,这很好地阐明了意图。
标签: python algorithm numpy scipy sampling