精华内容
下载资源
问答
  • 四分位数(上下四分位数计算公式)
    万次阅读
    2021-07-27 01:20:27

    四分位差(quartile deviation),也称为内距或四分间距(inter-quartile range),它是上四分位数(QU,即位于75%)与下四分位数(QL,即位于25%)的差。计算公式.

    将所有数值按大小顺序排列并分成四等份,处于三个分割点位置的得分就是四分位数。最小的四分位数称为下四分位数,所有数值中,有四分之一小于下四分位数,四分之.

    把一个数组从小到大排序,中位数是中间那个数上四分位数是排在1/4的那个数下四分位数是排在3/4的那个数如果用EXCEL计算($A$1:$A$9为数列)最小值=QUARTILE.

    哪位大神可以给我详细说一下4分位数的具体求法。。我举一个例子。。这里。

    四分位数(Quartile),即统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的得分就是四分位数。第一四分位数 (Q1),又称“较小四分位数”,.

    有一个函数是专门求四分位数的。=quartile(a1:a10,1)

    四分位数和中位数是同一类的概念,将一组数据按大小顺序排列后,按数据的个数分成四份,而这三个分割点上的数值,就称四分位数,具体分别称为:第1四分位数,第2.

    统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由.

    晕死,这个貌似不是佛法,是财务方法吧。——你看这样解释对不对?——四分位法是zhidao统计学的一种分析方法。简单地说,就是将全部数据从小到大排列,正好排 列.

    众数从=10中位数=10.5下四分位数=9.25上四分位数=13.5平均数=11.1667标准差=2.7579

    如题,是一个数字,比如10,还是一个范围,比如2-12?怎么求中四分位范围。

    四分位数是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。 四分位数作为分位数的一种形式,在统计中有着十分重要的.

    要计算过程,怎么算出来的?

    从小到大排序:17,19,20,22,23,23,,24,25 下四分位数等于该样本中所有数值由小到大排列后第25%的数字,即第2个数19。上四分位数等于该样本中所有数值由小到大排列.

    四分位数(Quartile),即统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。 第一四分位数 (Q1),又称“较小四分位数”.

    4分位数有两个25%和75%把一组数据按照大小的顺序排列其中前者的求法是,这个数的前面占全部数据的25%后者是这个数的前面占全部数据的75%

    1/4的我知道,3/4怎么算

    使用excel中quartile的函数.语法(array,quart).参数array为需要求得四分位数值的数组或数字引用区域,quart决定返回哪个四分位值.如果quart取0,1,2,3或4则函数quartile返.

    四分位差是上四分位数与下四分位数之差,也称为内距或四分间距。它主要用于测度顺序数据的离散程度。当然对于数值型数据也可以计算四分位差,但它不适合于分类数.

    lz你好IQR = Q3 ? Q1 四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述。对一个对称性分布数据(其中位数必然等于第三四分位数与第一四分位数的算术.

    75、85、87、95、99、100、101、105、113、115、125 第一个四分位数:。

    75 85 87 |95 99、100、101 105 | 113 115 125 分4段,100为中点 Q1=(87+95)/2=91 Q2=100 Q3=(105+113)/2=109 四分位数:将所有数值按大小顺序排列并分成四等份,.

    嗯,最好举例说一下说得明了一点,用话自己的话解释一下,容易看懂一些各。

    英语是quartile? 你要问的是lower quartile和 upper quartile?将所有的样本从小到大排列,并分成四等份,处于三个分割点位置(是一个数值)的得分就是四分位数。最小.

    下四分位数怎么求啊还有upper extreme和 lower extreme 怎么求,本人在美国。

    四分位数(Quartile),即统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的得分就是四分位数。 第一四分位数 (Q1),又称“较小四分位数”,.

    更多相关内容
  • 叠加在图的是连接第一四分位数和第三四分位数的虚线。 qq_plot(...,mode) 允许配置绘图的外观。 使用 mode='line'(默认值),绘图显示如上所述。 使用 mode='patch' 时,数据被绘制为补丁对象,区域由 x 分布...
  • 详细介绍了分位数回归的原理,并阐述了如何用Eviews实现
  • 多种方法实现分位数回归
  • 针对风电功率预测问题,在现有预测方法概率性区间预测的基础,提出基于深度学习分位数回归的风电功率概率预测方法。该方法采用Adam随机梯度下降法在不同分位数条件对长短期记忆神经网络(LSTM)的输入、遗忘、...
  • 我们认为,在单精度模式,变量变化方法提供了与现有最​​快方案相媲美的性能,同时显着提高了精度,而在双精度模式,这种方法提供了迄今为止对 GPU 最优化的高斯分位数,并且在不影响 Monte Carlo 应用程序...
  • 分位数估计器 实施在数据流的有效有分位数的有效计算(Cormode,Korn,Muthukrishnan,Srivastava)中找到的想法,以提供节省空间时间的估计器,用于流式分位数估计。
  • 在较低分位数下,从企业家信心指数到PPI指数的因果关系很明显,而在较高分位数下,企业家信心指数对PPI的影响很小。 低分位数的估计是积极且有意义的。 因此,提高企业家的投资信心将对PPI产生一定的积极影响。
  • 这些程序应用分位数方法来估计 alpha 稳定分布 S(alpha,beta,gamma,delta) 的参数,其中: 'alpha' 表示稳定性参数并在区间 (0,2] 定义, 'beta' 是在 [-1,1] 定义的偏度参数'gamma' 是定义在正实线的比例参数...
  • 理论CVaR模型的资产组合决策可转化为分位数回归,受此驱动,该文构建了带网络结构的自适应Lasso分位数回归,对高维资产进行选择.自适应Lasso对变量的回归系数进行加权约束,理论具有变量选择的一致性.网络结构...
  • 小波变换函数matlab代码标量的贝叶斯分位数回归 一种执行贝叶斯标量函数的分位数回归的方法,即贝叶斯FQR。 所提出的方法适用于用p设计矩阵X给定响应函数yn的N-被T矩阵数据集。 该存储库提供 一组MATLAB脚本,...
  • 从某种意义说,该方法是逐步估计分位数函数的,因此它不会与前一步拟合的函数交叉。 该算法从中间分位数(即最接近 0.5 的分位数)开始,然后随着距中间距离的增加逐渐通过分位数。 ncquantreg(x,y,n,tau,pn,pv,...
  • 分位数回归森林

    2020-12-06 14:51:01
    分位数回归森林(Quantile Regression Forests),一般回归模型预测均值,但该算法预测数据的分布。它可以用来预测给定输入的价格分布,例如,给定一些属性,汽车价格分布的第2575百分位是多少。大多数预测器在预测...

    分位数回归森林(Quantile Regression Forests),一般回归模型预测均值,但该算法预测数据的分布。它可以用来预测给定输入的价格分布,例如,给定一些属性,汽车价格分布的第25和75百分位是多少。

    大多数预测器在预测期间返回E(Y|X),这可以解释为这个问题的答案,给定输入,输出的期望值是多少?

    分位数方法,在q处返回y,其中F(Y =y|X)=q,其中q是百分位数,y是分位数。一个有用的快速用例是当有许多异常值影响条件平均值时。有时重要的是获得不同百分比的估计值(例如,在对曲线进行评分时)。

    注意:一些机器学习模型还返回P(Y|X)的整个分布。比如高斯过程和蒙德里安森林。一个有用的应用是超参数优化,其中条件分布P(Y|X)是平衡开发和探索的必要条件。

    分位数决策树

    扩展标准决策树以提供百分位数的预测是相当简单的。当一个决策树是合适的,诀窍是不仅要在叶节点上存储目标的充分统计量,如均值和方差,而且要在叶节点上存储所有的目标值。在预测中,这些被用来计算经验分位数估计。

    假设参数min_samples_leaf被设置为5,那么对于一个新的样本X,当确定Y|X在不同量子位上时,叶中的5个样本被赋予相同的权重。如果min_samples_leaf被设置为1,那么期望就等于每百分位上的分位数。

    注:分位数的经验估计有很多方法。scikit-garden,依赖于这个加权百分位数方法

    分位数回归森林

    同样的方法可以扩展到随机森林。为了估计F(Y= y |x)=q, y_train中的每个目标值都有一个权值。形式上,在估计分位数时,y_train[j]的权重为\frac{1}{T} \sum_{t=1}^{T} \frac{\mathbb{1}(y_j \in L(x))}{\sum_{i=1}^N \mathbb{1}(y_i \in L(x))},其中L(x)表示x落在叶子上。

    非正式地说,这意味着对于一个新的未知样本,我们首先找到它落在每棵树上的叶子。然后,对于训练数据中的每一个(X, y),在每棵树上按如下方式赋予y一个权重。

    如果它和新样本在同一片叶子上,那么重量就是样本在同一片叶子上的比例。

    如果没有,则权重为零。

    每个y的权值在所有树中求和并取平均值。既然我们有一个目标值数组和一个与这些目标值对应的权重数组,我们可以用它来测量经验分位数估计值。

    例:

    现在,我们将使用scikit-garden中的ExtraTreesQuantileRegressor来绘制波士顿数据集上的预测区间。

    先引入必要的库:

    加载数据和必要的估计。注意,min_samples_split被设置为10,交叉验证为5-split。

    将分位数存储在98.5%和2.5个百分位。

    绘制预测间隔,即原始目标值。我们看到大多数样本位于 95 p.c 预测间隔内。

    展开全文
  • 贝叶斯回归分位数在最近的文献中受到广泛关注,本文实现了贝叶斯系数估计回归分位数(RQ)中的变量选择,带有lasso自适应lasso惩罚的贝叶斯。还包括总结结果、绘制路径图、后验直方图、自相关图绘制分位数图的...

    原文链接:http://tecdat.cn/?p=22702

    原文出处:拓端数据部落公众号

    摘要

    贝叶斯回归分位数在最近的文献中受到广泛关注,本文实现了贝叶斯系数估计和回归分位数(RQ)中的变量选择,带有lasso和自适应lasso惩罚的贝叶斯。还包括总结结果、绘制路径图、后验直方图、自相关图和绘制分位数图的进一步建模功能。

    相关 视频:Lasso回归、岭回归等正则化回归数学原理及R语言实例

    Lasso回归、岭回归等正则化回归数学原理及R语言实例

     

    简介

    回归分位数(RQ)由(Koenker和Gilbert,1978)提出,将感兴趣的结果的条件分位数作为预测因子的函数来建模。自引入以来,分位数回归一直是理论界非常关注的话题,也在许多研究领域得到了大量的应用,如计量经济学、市场营销、医学、生态学和生存分析(Neelon等,2015;Davino等,2013;Hao和Naiman,2007)。假设我们有一个观察样本{(xi , yi);i = 1, 2, - -, n},其中yi表示因变量,xi表示协变量的k维矢量。 

    贝叶斯分位数回归

    Tobit RQ为描述非负因变量和协变量向量之间的关系提供了一种方法,可以被表述为因变量的数据未被完全观察到的分位数回归模型。关于Tobit 分位数回归模型有相当多的文献,我们可以参考Powell(1986)、Portnoy(2003)、Portnoy和Lin(2010)以及Kozumi和Kobayashi(2011)来了解概况。考虑一下这个模型。

    其中,yi是观察到的因变量,y∗i是相应的潜在的未观察到的因变量,y 0是一个已知的点。可以证明,RQ系数向量β可以通过以下最小化问题的解来持续估计

    Yu和Stander(2007)提出了一种Tobit RQ的贝叶斯方法,使用ALD计算误差,并使用Metropolis-Hastings(MH)方法从其后验分布中抽取β。


    真实数据实例

    我们考虑用真实的数据例子。

    免疫球蛋白G数据

    这个数据集包括298名6个月到6岁儿童的免疫球蛋白G的血清浓度(克/升),Isaacs等人(1983)对其进行了详细讨论,Yu等人(2003)也使用了该数据集。为了说明问题,该数据集的贝叶斯分位数回归模型(可以拟合如下)。 

    rq(血清浓度~年龄, tau=0.5, runs=2000)
    
    

    摘要函数提供估计值和95%的置信区间

     

    绘制数据,然后将五条拟合的RQ线叠加在散点图上。 

    
    R> for (i in 1:5) {
    + taus=c(0.05, 0.25, 0.5, 0.75, 0.95)
    + rq(tau=taus[i],runs=500, burn=100)
    + abline(fit, col=i)
    + }
    R> 
    R> for (i in 1:5) {
    + fit = rq(年龄+I(年龄^2),tau=taus[i],runs=500, burn=100)
    + curve(,add=TRUE)
    + }
    

    图2:免疫球蛋白G数据的散点图和RQ拟合。

    该图显示了298名6个月至6岁儿童的免疫球蛋白G的散点图。叠加在该图上的是{.05, .25, .50, .75, .95}的RQ线(左图)和 RQ线(左图)和RQ曲线(右图)。

    图可以用来评估吉布斯采样向平稳分布的收敛情况。我们在图1中只报告了τ=0.50时每个参数的路径图和后验直方图。我们使用以下代码

    plot(fit,"tracehist",D=c(1,2))
    
    

    可以通过生成路径图、后验直方图、自相关图来对Gibbs采样的绘制结果进行图形总结。路径和直方图,路径和自相关,直方图和自相关,以及路径、直方图和自相关。这个函数还有一个选项。在图3中,免疫球蛋白G数据系数的路径图表明,采样从后验空间的一个偏远区域跳到另一个区域的步骤相对较少。此外,直方图显示边际密度实际上是所期望的平稳的单变量常态。

    图3:当τ=0.50时,免疫球蛋白G数据集的系数的路径和密度图。

    前列腺癌数据

    在本小节中,我们说明贝叶斯分位数回归在前列腺癌数据集(Stamey等人,1989)上的表现。该数据集调查了等待根治性前列腺切除术的病人的前列腺特异性抗原(lpsa)水平和八个协变量之间的关系。

    这些协变量是:癌症对数体积(lcavol)、前列腺的对数重量(lweight)、年龄(age)、良性前列腺的对数体积(lbph)、精囊侵犯(svi)、胶囊穿透的对数(lcp)、格里森评分(gleason)以及格里森评分4或5的百分比(pgg45)。

    在本小节中,我们假设因变量(lpsa)均值为零,而预测因子已被标准化,均值为零。为了说明问题,我们考虑当τ=0.50时,贝叶斯lasso套索RQ(方法="BLqr")。在这种情况下,我们使用以下代码

    
    R> x=as.matrix(x)
    R> rq(y~x,tau = 0.5, method="BLqr", runs = 5000, burn = 1000, thin = 1)
    
    

    模型法可用于确定回归中的活跃变量。 

    相应的吉布斯采样的收敛性是通过生成样本的路径图和边际后验直方图评估的。因此,图可以用来提供一个关于吉布斯采样器收敛的图形检查,通过使用以下代码检查路径图和边际后验直方图。
     

    plot(fit, type="trace")
    

    上述代码的结果分别显示在图4和图5中。图4中的路径图显示,生成的样本迅速穿越了后验空间,图5中的边际后验直方图显示,条件后验分布实际上是所需的平稳单变量常态。 

    小麦数据

    我们考虑一个小麦数据集。这个数据集来自于国家小麦种植发展计划(2017)。这个小麦数据由11个变量的584个观测值组成。因变量是每2500平方米小麦产量增加的百分比。协变量是化肥尿素(U)、小麦种子播种日期(Ds)、小麦种子播种量(Qs)、激光平田技术(LT)、复合肥施肥(NPK)、播种机技术(SMT)、绿豆作物种植(SC)、作物除草剂(H)、作物高钾肥(K)、微量元素肥料(ME)。

    下面的命令给出了τ=0.50时Tobit RQ的后验分布。

    rq(y~x,tau=0.5, methods="Btqr")
    

     还可以拟合贝叶斯lassoTobit 分位数回归和贝叶斯自适应lassoTobit 分位数回归。当τ=0.50时,函数可以用来获得Tobit 分位数回归的后验平均值和95%的置信区间。 

    结论

    在本文中,我们已经说明了在分位数回归(RQ)中进行贝叶斯系数估计和变量选择。此外,本文还实现了带有lasso和自适应lasso惩罚的贝叶斯Tobit 分位数回归。还包括总结结果、绘制路径图、后验直方图、自相关图和绘制定量图的进一步建模。

    参考文献

    Alhamzawi, R., K. Yu, and D. F. Benoit (2012). Bayesian adaptive lasso quantile regression. Statistical Modelling 12 (3), 279–297.

    Brownlee, K. A. (1965). Statistical theory and methodology in science and engineering, Volume 150. Wiley New York.

    Davino, C., M. Furno, and D. Vistocco (2013). Quantile regression: theory and applications. John Wiley & Sons.


    最受欢迎的见解

    1.matlab使用贝叶斯优化的深度学习

    2.matlab贝叶斯隐马尔可夫hmm模型实现

    3.R语言Gibbs抽样的贝叶斯简单线性回归仿真

    4.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

    5.R语言中的Stan概率编程MCMC采样的贝叶斯模型

    6.Python用PyMC3实现贝叶斯线性回归模型

    7.R语言使用贝叶斯 层次模型进行空间数据分析

    8.R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

    9.matlab贝叶斯隐马尔可夫hmm模型实现

    展开全文
  • 根据排序顺序返回向量中值的分位数排名。 用法: Y = quantileranks(X, q) Y = quantileranks(X, q, permtie) X是值的向量,可能带有NaN。 q 确定分位数类: q = 4,四分位数(4分位数), q = 10,十分位数(10...
  • 分位数回归及其Python源码

    千次阅读 2020-12-06 14:51:03
    分位数回归及其Python源码天朗气清,惠风和畅。赋闲在家,正宜读书。前人文章,不得其解。代码开源,无人注释。你们不来,我行我。废话少说,直入主题。o( ̄︶ ̄)o我们要探测自变量 与因变量 的关系,最简单的方法...

    分位数回归及其Python源码

    天朗气清,惠风和畅。赋闲在家,正宜读书。前人文章,不得其解。代码开源,无人注释。你们不来,我行我上。废话少说,直入主题。o( ̄︶ ̄)o

    我们要探测自变量

    与因变量

    的关系,最简单的方法是线性回归,即假设:

    我们通过最小二乘方法 (OLS: ordinary least squares),

    的可靠性问题,我们同时对残差

    做了假设,即:

    为均值为0,方差恒定的独立随机变量。

    即为给定自变量

    下,因变量

    的条件均值。

    假如残差

    不满足我们的假设,或者更重要地,我们不仅仅想要知道

    的在给定

    下的条件均值,而且想知道是条件中位数(更一般地,条件分位数),那么OLS下的线性回归就不能满足我们的需求。分位数回归(Quantile Regression)[2]解决了这些问题,下面我先给出一个分位数回归的实际应用例子,再简述其原理,最后再分析其在Python实现的源代码。

    1. 一个例子:收入与食品消费

    这个例子出自statasmodels:Quantile Regression.[3] 我们想探索家庭收入与食品消费的关系,数据出自working class Belgian households in 1857 (the Engel data).我们用Python包statsmodels实现分位数回归。

    1.1 预处理

    %matplotlib inline

    import numpy as np

    import pandas as pd

    import statsmodels.api as sm

    import statsmodels.formula.api as smf

    import matplotlib.pyplot as plt

    data = sm.datasets.engel.load_pandas().data

    data.head()

    income foodexp

    0420.157651255.839425

    1541.411707310.958667

    2901.157457485.680014

    3639.080229402.997356

    4750.875606495.560775

    1.2 中位数回归 (分位数回归的特例,q=0.5)

    mod = smf.quantreg('foodexp ~ income', data)

    res = mod.fit(q=.5)

    print(res.summary())

    QuantReg Regression Results

    ==============================================================================

    Dep. Variable: foodexp Pseudo R-squared: 0.6206

    Model: QuantReg Bandwidth: 64.51

    Method: Least Squares Sparsity: 209.3

    Date: Mon, 21 Oct 2019 No. Observations: 235

    Time: 17:46:59 Df Residuals: 233

    Df Model: 1

    ==============================================================================

    coef std err t P>|t| [0.025 0.975]

    ------------------------------------------------------------------------------

    Intercept 81.4823 14.634 5.568 0.000 52.649 110.315

    income 0.5602 0.013 42.516 0.000 0.534 0.586

    ==============================================================================

    The condition number is large, 2.38e+03. This might indicate that there are

    strong multicollinearity or other numerical problems.

    由结果可以知道

    ,如何得到回归系数的估计?结果中的std err, t, Pseudo R-squared等是什么?我会在稍后解释。

    1.3 数据可视化

    我们先拟合10个分位数回归,分位数q分别在0.05到0.95之间。

    quantiles = np.arange(.05, .96, .1)

    def fit_model(q):

    res = mod.fit(q=q)

    return [q, res.params['Intercept'], res.params['income']] + \

    res.conf_int().loc['income'].tolist()

    models = [fit_model(x) for x in quantiles]

    models = pd.DataFrame(models, columns=['q', 'a', 'b', 'lb', 'ub'])

    ols = smf.ols('foodexp ~ income', data).fit()

    ols_ci = ols.conf_int().loc['income'].tolist()

    ols = dict(a = ols.params['Intercept'],

    b = ols.params['income'],

    lb = ols_ci[0],

    ub = ols_ci[1])

    print(models)

    print(ols)

    q a b lb ub

    0 0.05 124.880096 0.343361 0.268632 0.418090

    1 0.15 111.693660 0.423708 0.382780 0.464636

    2 0.25 95.483539 0.474103 0.439900 0.508306

    3 0.35 105.841294 0.488901 0.457759 0.520043

    4 0.45 81.083647 0.552428 0.525021 0.579835

    5 0.55 89.661370 0.565601 0.540955 0.590247

    6 0.65 74.033435 0.604576 0.582169 0.626982

    7 0.75 62.396584 0.644014 0.622411 0.665617

    8 0.85 52.272216 0.677603 0.657383 0.697823

    9 0.95 64.103964 0.709069 0.687831 0.730306

    {'a': 147.47538852370562, 'b': 0.48517842367692354, 'lb': 0.4568738130184233,

    这里拟合了10个回归,其中q是对应的分位数,a是斜率,b是回归系数。lb和ub分别是b的95%置信区间的下界与上界。

    现在来画出这10条回归线:

    x = np.arange(data.income.min(), data.income.max(), 50)

    get_y = lambda a, b: a + b * x

    fig, ax = plt.subplots(figsize=(8, 6))

    for i in range(models.shape[0]):

    y = get_y(models.a[i], models.b[i])

    ax.plot(x, y, linestyle='dotted', color='grey')

    y = get_y(ols['a'], ols['b'])

    ax.plot(x, y, color='red', label='OLS')

    ax.scatter(data.income, data.foodexp, alpha=.2)

    ax.set_xlim((240, 3000))

    ax.set_ylim((240, 2000))

    legend = ax.legend()

    ax.set_xlabel('Income', fontsize=16)

    ax.set_ylabel('Food expenditure', fontsize=16);

    上图中虚线是分位数回归线,红线是线性最小二乘(OLS)的回归线。通过观察,我们可以发现3个现象:

    随着收入提高,食品消费也在提高。

    随着收入提高,家庭间食品消费的差别拉大。穷人别无选择,富人能选择生活方式,有喜欢吃贵的,也有喜欢吃便宜的。然而我们无法通过OLS发现这个现象,因为它只给了我们一个均值。

    对与穷人来说,OLS预测值过高。这是因为少数的富人拉高了整体的均值,可见OLS对异常点敏感,不是一个稳健的模型。

    2.分位数回归的原理

    这部分是数理统计的内容,只关心如何实现的朋友可以略过。我们要解决以下这几个问题:

    什么是分位数?

    如何求分位数?

    什么是分位数回归?

    分位数回归的回归系数如何求得?

    回归系数的检验如何进行?

    如何评估回归拟合优度?

    2.1 分位数的定义]

    是随机变量,

    的累积密度函数是

    .

    分位数为:

    ,

    假设有100个人,95%的人身高少于1.9m, 1.9m就是身高的95%分位数。

    2.2 分位数的求法

    通过选择不同的

    值,使

    最小,对应的

    值即为

    分位数的估计

    .

    2.3 分位数回归

    对于OLS, 我们有:

    最小化所对应的

    ,类比地,对于

    分位数回归,我们有:

    为最小化:

    即最小化

    所对应的

    2.4 系数估计

    由于

    不能直接对

    求导,我们只能用迭代的方法来逼近

    最小时对应的

    值。statsmodels采用了Iteratively reweighted least squares (IRLS)的方法。

    假设我们要求

    最小化形如下的

    范数:

    则第t+1步迭代的

    值为:

    是对角矩阵且初始值为

    第t次迭代

    以中位数回归为例子(q=0.5),我们求:

    即最小化形如上的

    范数,

    为避免分母为0,我们取

    ,

    是一个很小的数,例如0.0001.

    2.5 回归系数的检验

    我们通过2.4,多次迭代得出

    的估计值,为了得到假设检验的t统计量,我们只需得到

    的方差的估计。

    分位数回归

    的协方差矩阵的渐近估计为:

    其中

    是对角矩阵,

    ,

    , 当

    的估计为

    其中

    为核函数(Kernel),可取Epa,Gaussian等.

    为根据Stata 12所选的窗宽(bandwidth)[5]

    回归结果中的std err即由

    获得,t统计量等于

    2.6 拟合优度

    对于OLS,我们用

    来衡量拟合优度。对于

    分位数回归,我们类比得到:

    ,其中

    为所有

    观察值的

    分位数。

    即为回归结果中的Pseudo R-squared。

    3.Python源码分析

    实现分位数回归的完整源码在 ,里面主要含有两个类QuantReg 和 QuantRegResults. 其中QuantReg是核心,包含了回归系数估计,协方差计算等过程。QuantRegResults计算拟合优度并组织回归结果。

    3.1 QuantReg类

    #QuantReg是包中RegressionModel的一个子类

    class QuantReg(RegressionModel):

    #计算回归系数及其协方差矩阵。q是分位数,vcov是协方差矩阵,默认robust即2.5的方法。核函数kernel默认

    #epa,窗宽bandwidth默认hsheather.IRLS最大迭代次数默认1000,差值默认小于1e-6时停止迭代

    def fit(self, q=.5, vcov='robust', kernel='epa', bandwidth='hsheather',

    max_iter=1000, p_tol=1e-6, **kwargs):

    """

    Solve by Iterative Weighted Least Squares

    Parameters

    ----------

    q : float

    Quantile must be between 0 and 1

    vcov : str, method used to calculate the variance-covariance matrix

    of the parameters. Default is ``robust``:

    - robust : heteroskedasticity robust standard errors (as suggested

    in Greene 6th edition)

    - iid : iid errors (as in Stata 12)

    kernel : str, kernel to use in the kernel density estimation for the

    asymptotic covariance matrix:

    - epa: Epanechnikov

    - cos: Cosine

    - gau: Gaussian

    - par: Parzene

    bandwidth : str, Bandwidth selection method in kernel density

    estimation for asymptotic covariance estimate (full

    references in QuantReg docstring):

    - hsheather: Hall-Sheather (1988)

    - bofinger: Bofinger (1975)

    - chamberlain: Chamberlain (1994)

    """

    if q < 0 or q > 1:

    raise Exception('p must be between 0 and 1')

    kern_names = ['biw', 'cos', 'epa', 'gau', 'par']

    if kernel not in kern_names:

    raise Exception("kernel must be one of " + ', '.join(kern_names))

    else:

    kernel = kernels[kernel]

    if bandwidth == 'hsheather':

    bandwidth = hall_sheather

    elif bandwidth == 'bofinger':

    bandwidth = bofinger

    elif bandwidth == 'chamberlain':

    bandwidth = chamberlain

    else:

    raise Exception("bandwidth must be in 'hsheather', 'bofinger', 'chamberlain'")

    #endog样本因变量,exog样本自变量

    endog = self.endog

    exog = self.exog

    nobs = self.nobs

    exog_rank = np.linalg.matrix_rank(self.exog)

    self.rank = exog_rank

    self.df_model = float(self.rank - self.k_constant)

    self.df_resid = self.nobs - self.rank

    #IRLS初始化

    n_iter = 0

    xstar = exog

    beta = np.ones(exog_rank)

    # TODO: better start, initial beta is used only for convergence check

    # Note the following does not work yet,

    # the iteration loop always starts with OLS as initial beta

    # if start_params is not None:

    # if len(start_params) != rank:

    # raise ValueError('start_params has wrong length')

    # beta = start_params

    # else:

    # # start with OLS

    # beta = np.dot(np.linalg.pinv(exog), endog)

    diff = 10

    cycle = False

    history = dict(params = [], mse=[])

    #IRLS迭代

    while n_iter < max_iter and diff > p_tol and not cycle:

    n_iter += 1

    beta0 = beta

    xtx = np.dot(xstar.T, exog)

    xty = np.dot(xstar.T, endog)

    beta = np.dot(pinv(xtx), xty)

    resid = endog - np.dot(exog, beta)

    mask = np.abs(resid) < .000001

    resid[mask] = ((resid[mask] >= 0) * 2 - 1) * .000001

    resid = np.where(resid < 0, q * resid, (1-q) * resid)

    resid = np.abs(resid)

    #1/resid[:, np.newaxis]为更新权重W

    xstar = exog / resid[:, np.newaxis]

    diff = np.max(np.abs(beta - beta0))

    history['params'].append(beta)

    history['mse'].append(np.mean(resid*resid))

    #检查是否收敛,若收敛则提前停止迭代

    if (n_iter >= 300) and (n_iter % 100 == 0):

    # check for convergence circle, should not happen

    for ii in range(2, 10):

    if np.all(beta == history['params'][-ii]):

    cycle = True

    warnings.warn("Convergence cycle detected", ConvergenceWarning)

    break

    if n_iter == max_iter:

    warnings.warn("Maximum number of iterations (" + str(max_iter) +

    ") reached.", IterationLimitWarning)

    #计算协方差矩阵

    e = endog - np.dot(exog, beta)

    # Greene (2008, p.407) writes that Stata 6 uses this bandwidth:

    # h = 0.9 * np.std(e) / (nobs**0.2)

    # Instead, we calculate bandwidth as in Stata 12

    iqre = stats.scoreatpercentile(e, 75) - stats.scoreatpercentile(e, 25)

    h = bandwidth(nobs, q)

    h = min(np.std(endog),

    iqre / 1.34) * (norm.ppf(q + h) - norm.ppf(q - h))

    fhat0 = 1. / (nobs * h) * np.sum(kernel(e / h))

    if vcov == 'robust':

    d = np.where(e > 0, (q/fhat0)**2, ((1-q)/fhat0)**2)

    xtxi = pinv(np.dot(exog.T, exog))

    xtdx = np.dot(exog.T * d[np.newaxis, :], exog)

    vcov = chain_dot(xtxi, xtdx, xtxi)

    elif vcov == 'iid':

    vcov = (1. / fhat0)**2 * q * (1 - q) * pinv(np.dot(exog.T, exog))

    else:

    raise Exception("vcov must be 'robust' or 'iid'")

    #用系数估计值和协方差矩阵创建一个QuantResults对象,并输出结果

    lfit = QuantRegResults(self, beta, normalized_cov_params=vcov)

    lfit.q = q

    lfit.iterations = n_iter

    lfit.sparsity = 1. / fhat0

    lfit.bandwidth = h

    lfit.history = history

    return RegressionResultsWrapper(lfit)

    #核函数表达式

    def _parzen(u):

    z = np.where(np.abs(u) <= .5, 4./3 - 8. * u**2 + 8. * np.abs(u)**3,

    8. * (1 - np.abs(u))**3 / 3.)

    z[np.abs(u) > 1] = 0

    return z

    kernels = {}

    kernels['biw'] = lambda u: 15. / 16 * (1 - u**2)**2 * np.where(np.abs(u) <= 1, 1, 0)

    kernels['cos'] = lambda u: np.where(np.abs(u) <= .5, 1 + np.cos(2 * np.pi * u), 0)

    kernels['epa'] = lambda u: 3. / 4 * (1-u**2) * np.where(np.abs(u) <= 1, 1, 0)

    kernels['gau'] = lambda u: norm.pdf(u)

    kernels['par'] = _parzen

    #kernels['bet'] = lambda u: np.where(np.abs(u) <= 1, .75 * (1 - u) * (1 + u), 0)

    #kernels['log'] = lambda u: logistic.pdf(u) * (1 - logistic.pdf(u))

    #kernels['tri'] = lambda u: np.where(np.abs(u) <= 1, 1 - np.abs(u), 0)

    #kernels['trw'] = lambda u: 35. / 32 * (1 - u**2)**3 * np.where(np.abs(u) <= 1, 1, 0)

    #kernels['uni'] = lambda u: 1. / 2 * np.where(np.abs(u) <= 1, 1, 0)

    #窗宽计算

    def hall_sheather(n, q, alpha=.05):

    z = norm.ppf(q)

    num = 1.5 * norm.pdf(z)**2.

    den = 2. * z**2. + 1.

    h = n**(-1. / 3) * norm.ppf(1. - alpha / 2.)**(2./3) * (num / den)**(1./3)

    return h

    def bofinger(n, q):

    num = 9. / 2 * norm.pdf(2 * norm.ppf(q))**4

    den = (2 * norm.ppf(q)**2 + 1)**2

    h = n**(-1. / 5) * (num / den)**(1. / 5)

    return h

    def chamberlain(n, q, alpha=.05):

    return norm.ppf(1 - alpha / 2) * np.sqrt(q*(1 - q) / n)

    3.2 QuantRegResults类

    这里我只给出计算拟合优度的代码。

    class QuantRegResults(RegressionResults):

    '''Results instance for the QuantReg model'''

    @cache_readonly

    def prsquared(self):

    q = self.q

    endog = self.model.endog

    #e为残差

    e = self.resid

    e = np.where(e < 0, (1 - q) * e, q * e)

    e = np.abs(e)

    ered = endog - stats.scoreatpercentile(endog, q * 100)

    ered = np.where(ered < 0, (1 - q) * ered, q * ered)

    ered = np.abs(ered)

    return 1 - np.sum(e) / np.sum(ered)

    4.总结

    上文我先给出了一个分位数回归的应用例子,进而叙述了分位数回归的原理,最后再分析了Python实现的源码。

    分位数回归对比起OLS回归,虽然较为复杂,但它有三个主要优势:

    能反映因变量分位数与自变量的关系,而不仅仅反映因变量均值与自变量的关系。

    分位数回归对残差不作任何假设。

    分位数回归受异常点的影响较小。

    参考

    展开全文
  • 在不对称拉普拉斯分布的误差项,统计仿真结果表明,贝叶斯正则化分位数回归在所有分位数上均优于其他分布。 并且基于非对称拉普拉斯分布,贝叶斯正则化分位数回归方法在参数估计预测方面要比非贝叶斯方法更好。...
  • 侧α分位数

    万次阅读 多人点赞 2019-01-10 20:11:15
  • 分位数回归(Quantile Regression)

    万次阅读 多人点赞 2019-07-09 22:25:16
    在介绍分位数回归之前,先重新说一下回归分析,我们之前介绍了线性回归、多项式回归、核回归等等,基本,都是假定一个函数,然后让函数尽可能拟合训练数据,确定函数的未知参数。尽可能拟合训练数据,一般是通过...
  • 3、项目安装cx-oracle,再测试一把 import cx_Oracle # 设置连接信息 username = "HBCZ" # 用户名 pwd = "1" # 密码 dbip = "127.0.0.1" # 数据库服务器ip dbname = "orcl11" # 数据库名 conn_str = '{0}/{1}@{2}:...
  • 分位数分位数及python实现

    万次阅读 2018-10-03 19:00:26
    分位数 定义:对随机变量X给定的α\alphaα ,(0&amp;amp;lt;α\alphaα&amp;amp;lt;1),若存在
  • 以中国东部某副省级市的历史负荷外界影响因素(包括温度、节假日及风力大小)为算例,运用LASSO分位数回归方法进行中期电力负荷概率密度预测,得到的平均绝对误差在中位数众数分别为3.53%3.69%,优于未考虑...
  • stata笔记数据处理——分位数的处理

    千次阅读 2021-04-25 12:40:52
    本节内容:分位数的基本概念、-pctile-命令、-xtile-命令、-pctile- 命令1 分位数的基本概念(了解)例 1:​例 2:​定义公式第p_th 百分位数值,记为 x_|p|,设 p = N_p/100例如,若求取第 25 百分位的数值,则 N_...
  • Oracle计算分组分位数

    千次阅读 2018-09-11 09:54:26
    我们在进行分析过程中,经常会有计算某个特征的分位数这个需求。下面为大家介绍如何在oracle计算某一列数据的分位数。 需要求分位数的表结构如下: select * from test_lizhen;   我们发现该表有两列,一列...
  • p分位数的原理及计算

    万次阅读 多人点赞 2018-07-17 16:54:08
    1.统计分位数概念 2.分位数的计算方法及举例 2.1首先确定p分位数的位置(依据项数分为基数、偶数情况) 2.2 求一步确定的p分位数位置处的具体值 3.python中的分位数计算 1.统计分位数概念 统计,...
  • 张晓峒分位数回归讲义解析.doc

    千次阅读 2021-01-17 16:51:44
    第15章 分位数回归模型15.1 总体分位数位数15.位数的估计.3 分位数回归.4 ...就是分位数回归,它最早由KoenkerBassett(1978)提出,是估计一回归变量X与被解释变量Y的分位数之间线性关系的建模方法。正如普通最...
  • 偶尔在机器学习的论文中了解到了分位数回归,发现这个方法应用也满广的。...而分位数的目标是最小化加权的误差绝对值: min⁡y^i∑yi≥y^iτ∣yi−y^i∣+∑yi<y^i(1−τ)∣yi−y^i∣\min_{\hat{y}_i}\quad
  • 分位数与箱线图的详细理解

    千次阅读 2020-11-18 20:32:13
    1的p,称F=p的X为此分布的分位数,或者分位数。简单的说,分位数指的就是连续分布函数中的一个点,这个点的一侧对应概率p。 维基百科的解释:分位数(英语:Quantile),亦称分位点,是指用分割点(c
  • 分位数回归--基于R

    千次阅读 2019-10-16 17:21:39
    分位数回归 分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。以往的回归模型实际是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数、分位数呈何种关系。它...
  • 基于系统风险视角,通过分位数回归技术,提出了金融市场稳定性度量的新方法,在论述金融市场稳定性度量原理的基础,设计出可行的 计算步骤,并据此实证分析了我国金融...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,536
精华内容 70,214
关键字:

上分位数和下分位数

友情链接: Guideline_S7_IE_e.rar