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,可选
要计算的分位数列表。
- alphapfloat,可选
绘图位置参数,默认值为 0.4。
- betapfloat,可选
绘图位置参数,默认值为 0.4。
- axisint,可选
执行修剪的轴。 如果为 None(默认),则首先将输入数组展平。
- limittuple,可选
(下限, 上限) 值的元组。 忽略此开区间之外的 a 值。
- 返回:
- mquantilesMaskedArray
包含计算出的分位数的数组。
备注
此公式与 R 非常相似,只是
m
从alphap
和betap
的计算方式不同,在 R 中,m
是根据每种类型定义的。参考文献
[1]R 统计软件: https://r-project.org.cn/
[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])
使用二维数组,指定轴和限制。
>>> 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 --]]