pandas中quantile函数浅解

1 分位数(Quantile)

分位数(Quantile),亦称分位点,是连续分布函数中的一个点,该点将一个随机变量的概率分布范围分为几个等份的数值点,这个点对应概率p。若概率0<p<1,随机变量X或它的概率分布的分位数Za,是指满足条件p(X≤Za)=α的实数,常用的有中位数(即二分位数)、四分位数、百分位数等。
分位数对于实际问题能提供更加全面的分析,无论是线性模型还是非线性模型,分位数回归都是一种很好的工具,它对一般回归模型做了有益的补充。分位数回归是对以古典条件均值模型为基础的最小二乘法的延伸,它用几个分位函数来估计整体模型。分位数回归法的特殊情况就是中位数回归(最小一乘回归),用对称权重解决残差最小化问题,而其他条件分位数回归则需要用非对称权重解决残差最小化。
分位数回归采用加权残差绝对值之和的方法估计参数,其优点体现在以下几方面:首先,它对模型中的随机扰动项不需做任何分布的假定,这样整个回归模型就具有很强的稳健性;其次,分位数回归本身没有使用一个连接函数来描述因变量的均值和方差的相互关系,因此分位数回归有着比较好的弹性性质;第三,分位数回归由于是对所有分位数进行回归,因此对于数据中出现的异常点具有耐抗性;第四,不同于普通的最小二乘回归,分位数回归对于因变量具有单调变换性;最后,分位数回归估计出来的参数具有在大样本理论下的渐进优良性。

1.1.二分位数

对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数,即二分位数。
一个数集中最多有一半的数值小于中位数,也最多有一半的数值大于中位数。如果大于和小于中位数的数值个数均少于一半,那么数集中必有若干值等同于中位数。
计算有限个数的数据的二分位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。

1.2.四分位数

四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;
3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
第三四分位数与第一四分位数的差距又称四分位距(InterQuartile Range,IQR)。

1.3.百分位数

百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。运用在教育统计学中,例如表现测验成绩时,称PR值。

1.4 分位数计算

为了更一般化,在计算的过程中,我们考虑p分位。当p=0.25 0.5 0.75 时,就是在计算四分位数。首先确定p分位数的位置(有两种方法):
方法1
p o s = ( n + 1 ) p pos = (n+1)p pos=(n+1)p
方法2
p o s = 1 + ( n − 1 ) p pos = 1+(n-1)p pos=1+(n1)p

2. pandas中的quantile函数

2.1 pandas中的quantile函数定义

quantile(quantile, interpolation='linear', **kwargs)
Calculate the rolling quantile.
Parameters
quantilefloat  Quantile to compute. 0 <= quantile <= 1.
interpolation{‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’} This optional parameter specifies the interpolation method to use, when the desired quantile lies between two data points i and j:
linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j.
lower: i.
higher: j.
nearest: i or j whichever is nearest.
midpoint: (i + j) / 2.
**kwargs
For compatibility with other rolling methods. Has no effect on the result.
Returns
Series or DataFrame
Returned object type is determined by the caller of the rolling calculation.

pandas 中使用的方法2确定p分位数的位置。
给定测试数据:

   a    b
0  1    1
1  2   10
2  3  100
3  4  100

计算

df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=['a', 'b'])
print(df.quantile(.1))

结果是

a    1.3
b    3.7
Name: 0.1, dtype: float64

默认使用的是linear 插值

计算a列
pos = 1 + (4 - 1)*0.1 = 1.3
fraction = 0.3
a列中,1.3位置在1~2之间,所以i取第1个数为1,j取第2个数为2,计算分位数:
ret = 1 + (2 - 1) * 0.3 = 1.3

计算b列
pos = 1.3,b列的第1,2个数是1和10,计算分位数为:
ret = 1 + (10 - 1) * 0.3 = 3.7

在b中,假如pos等于2.5呢,即在2-3之间,那i对应就是10,j对应就是100,ret = 10 + (100-10) * 0.3 = 55

分为点p位于两个数数据点 i and j 之间时”,比如 y= [1,10,100,100],x= [0,1,2,3],对应于[0,0.333,0.667,1],当p=0.4时,i、j分别为10、100,因此,pos = 1 + (4-1)0.4=2.2,pos取小数部分即0.2,也即fraction=0.2(fraction由计算得到的pos的小数部分),,,故值为10+(100-10) 0.2=28 。 验证: df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=[‘a’, ‘b’]) print df.quantile([0.1,0.2,0.4,0.5, 0.75])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值