mquantiles#
- scipy.stats.mstats.mquantiles(a, prob=[0.25, 0.5, 0.75], alphap=0.4, betap=0.4, axis=None, limit=())[源代码]#
计算数据数组的经验分位数。
样本分位数由
Q(p) = (1-gamma)*x[j] + gamma*x[j+1]
定义,其中x[j]
是第j 阶次序统计量,gamma 是j = floor(n*p + m)
、m = alphap + p*(1 - alphap - betap)
以及g = n*p + m - j
的函数。重新解释上述方程与R比较,可以得出方程:
p(k) = (k - alphap)/(n + 1 - alphap - betap)
- (alphap,betap) 的典型值是
(0,1) :
p(k) = k/n
: cdf 的线性插值 (R 类型 4)(.5,.5) :
p(k) = (k - 1/2.)/n
: 分段线性函数 (R 类型 5)(0,0) :
p(k) = k/(n+1)
: (R 类型 6)(1,1) :
p(k) = (k-1)/(n-1)
: p(k) = mode[F(x[k])]. (R 类型 7,R 默认)(1/3,1/3):
p(k) = (k-1/3)/(n+1/3)
: 然后 p(k) ~ median[F(x[k])]. 无论 x 的分布如何,所得的分位数估计通常都是中值无偏的。(R 类型 8)(3/8,3/8):
p(k) = (k-3/8)/(n+1/4)
: Blom。如果 x 服从正态分布,得到的百分位数估计将近似无偏 (R 类型 9)(.4,.4) : 近似分位数无偏(Cunnane)
(.35,.35): APL,用于 PWM
- 参数:
- aarray_like
输入数据,作为最多 2 维的序列或数组。
- probarray_like, optional
要计算的分位数列表。
- alphapfloat, optional
绘图位置参数,默认为 0.4。
- betapfloat, optional
绘图位置参数,默认为 0.4。
- axisint, optional
执行修剪的轴。如果为 None(默认值),则首先使输入数组扁平化。
- limittuple, optional
元组(下界、上界)值。此开放区间外的 a 的值将被忽略。
- 返回值:
- mquantilesMaskedArray
包含已计算分位数的数组。
备注
此公式与R非常相似,除了
alphap
和betap
计算的m
外,在R中,m
在每种类型中都有定义。参考
[1][2]R
quantile
函数: http://stat.ethz.ch/R-manual/R-devel/library/stats/html/quantile.html示例
>>> import numpy as np >>> from scipy.stats.mstats import mquantiles >>> a = np.array([6., 47., 49., 15., 42., 41., 7., 39., 43., 40., 36.]) >>> mquantiles(a) array([ 19.2, 40. , 42.8])
使用 2D 阵列,指定轴和限制。
>>> data = np.array([[ 6., 7., 1.], ... [ 47., 15., 2.], ... [ 49., 36., 3.], ... [ 15., 39., 4.], ... [ 42., 40., -999.], ... [ 41., 41., -999.], ... [ 7., -999., -999.], ... [ 39., -999., -999.], ... [ 43., -999., -999.], ... [ 40., -999., -999.], ... [ 36., -999., -999.]]) >>> print(mquantiles(data, axis=0, limit=(0, 50))) [[19.2 14.6 1.45] [40. 37.5 2.5 ] [42.8 40.05 3.55]]
>>> data[:, 2] = -999. >>> print(mquantiles(data, axis=0, limit=(0, 50))) [[19.200000000000003 14.6 --] [40.0 37.5 --] [42.800000000000004 40.05 --]]