分位数回归(quantile regression)R实现

分位数回归用于研究因变量与自变量在不同分布位置的关系,特别是在离群值和非正态分布情况下,提供更稳健的估计。与均值回归相比,分位数回归能更好地描述被解释变量的条件分布。R语言中利用包实现分位数回归,通过设置不同分位数,可以分析解释变量对不同收入群体的影响。例如,在IQ与收入水平的关系中,分位数回归显示,对于高收入群体,IQ的边际效应更显著。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本介绍

回归分析的主要目的:实证检验理论分析中因变量与自变量之间的关系。传统的均值回归,主要使用因变量的条件均值函数来描述在自变量每一个特定数值下的因变量的均值,从而揭示自变量与因变量的关系。

条件均值模型存在不足:当研究收入分配等问题时,我们可能主要关注的是处于分布低尾的穷人和分布高尾的富人等处于因变量非中心位置的情况,而 (1) 条件均值模型主要考虑的是因变量的均值,难以扩展到这种非中心位置,此时只能使用分位数模型进行估计。此外,(2) 条件均值模型经常受到离群值的困扰。在使用条件均值模型进行实证研究时,面对存在离群值的样本数据时,最常使用的方法是对数据进行缩尾,剔除离群值。然而,很多时候剔除离群值会导致对中心位置的测度具有误导性结论。尤其, (3) 条件均值模型假定残差项服从独立同分布、正态性、方差齐性等关键问题在现实中难以满足

因此,提出了中位数模型替代条件均值模型中位数是表示分布的中心位置,即0.5分位数。其他位置上的分位数则描述了一种分布的非中心位置。随着协变量的变化,分位数回归模型强调了条件分位数的变化由于所有分位数都是可用的,所以对任何预先决定的分布位置进行建模都是可能的。因此,可以对分布的任意非中心位置进行建模,可选的研究的问题也就变得更加广泛。例如贫困问题(对穷人进行研究)、收入分配问题(穷人与富人的收入),教育问题(好成绩与差成绩),税收问题(对穷人与富人的不同影响)等等。与条件均值模型相比,分位数回归则具有无法比拟的优势。

普通最小二乘估计(OLS)与分位数回归估计的异同
在这里插入图片描述
分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。以往的回归模型实际上是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数、分位数呈何种关系。它最早由Koenker和Bassett(1978)提出。

OLS回归估计量的计算是基于最小化残差平方。分位数回归估计量的计算也是基于一种非对称形式的绝对值残差最小化。其中,中位数回归运用的是最小绝对值离差估计(LAD,least absolute deviations estimator)。

分位数回归的优点
(1) 能够更加全面的描述被解释变量条件分布的全貌,而不是仅仅分析被解释变量的条件期望(均值),也可以分析解释变量如何影响被解释变量的中位数、分位数等。不同分位数下的回归系数估计量常常不同,即解释变量对不同水平被解释变量的影响不同。
(2) 中位数回归的估计方法与最小二乘法相比,估计结果对离群值则表现的更加稳健,而且,分位数回归对误差项并不要求很强的假设条件,因此对于非正态分布而言,分位数回归系数估计量则更加稳健。

目前,分位数回归已经获得了巨大的发展,不仅可以进行简单的横断面数据的估计,而且还可以进行panel数据模型估计、干预效应模型估计、计数模型估计、因变量是区间值的logistic模型估计、工具变量估计等。

二、使用分位数回归的原因

大部分的计量模型都是在估计条件期望值,因为条件期望值是因变量最好的估计值。对于非连续变量,期望值本身已经能够很大程度上描述出随机变量的分布。但是对于连续变量,仅仅依靠期望值并不能完整描述出变量的分布形态。比如收入水平,中位数相比于平均数更有代表性。因为平均数容易受到异常值的影响,如果只考虑平均值,那么穷人就会被富人代表,一个国家的平均收入也许很高,但是这或许只能代表一小部分人,而中位数则能代表大部分普通人的真实收入。

下面这幅散点图反映了个人智商水平(IQ)和收入水平(wage)之间的关系,其中红线就是使用 OLS 进行线性回归得到的蓝线从上至下依次为 0.9 分位数、中位数、0.1 分位数的回归线。可以发现,对于前 10% 的收入群体,IQ 的增长对收入的边际效应更为明显。所以,使用分位数回归能够更加全面完整的分析因变量的条件分布
在这里插入图片描述

三、R 语言实现分位数回归

R语言进行分位数回归需要quantreg包,其中, rq()函数的用法和 lm() 类似,但是多了一个设定分位数的参数 tau,这个参数可以接受单个值,也可以接受向量值。plot() 函数则可以绘制不同分位数回归的系数值的折线图,和 OLS 线性回归的系数值做比较。

本文使用wooldridgeR包的示例数据集 wage2 进行解释说明,回归的因变量是收入水平 wageIQ某种程度上可以指代受访者的个人能力,educ 表示受访者的受教育年限,marriedblack 都分类变量,取值 1 表示受访者分别为已婚和黑裔。

首先只采用 IQ 作为自变量进行回归,分位数选取 [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]。

library(tidyverse)
library(wooldridge)
library(quantreg)
library(AER)

### 查看分布
ggplot(data = wage2, ma
<think>好的,我现在需要处理用户的问题:用户想要寻找实现分位数回归的代码,特别是涉及工具变量方法的实现。用户之前提到了工具变量方法,所以可能需要结合之前的回答。首先,我要回忆分位数回归的基础知识和相关实现方式。 首先,分位数回归不同于普通线性回归,它估计的是因变量在特定分位数上的条件分位数。工具变量(IV)方法用于处理内生性问题,当解释变量与误差项相关时,IV可以帮助得到一致的估计。 接下来,用户需要代码示例。我记得在Python中,可以使用statsmodels库进行分位数回归,比如QuantReg类。但工具变量方法可能需要更复杂的处理,比如两阶段最小二乘法(2SLS)的扩展,或者使用专门的分位数回归IV方法。 根据引用[2],Harding和Lamarche(2009)提出了面板数据分位数回归的工具变量估计方法。可能需要查找相关的Python实现是否有现成的库,或者需要手动实现。然而,可能用户需要的是具体的代码示例,所以可能需要结合现有的包,比如使用linearmodels中的IV2SLS,或者分位数回归的扩展。 首先,我应该先给出基本的分位数回归代码,例如使用statsmodels的QuantReg。然后,再讨论工具变量的情况。因为工具变量在分位数回归中的实现可能比较复杂,可能需要分步进行,比如先进行第一阶段回归,然后用预测值进行分位数回归。不过这种方法可能并不完全正确,因为传统的2SLS是针对均值的,而分位数回归需要不同的处理。 在引用[3]中提到了Python实现高斯过程分位数回归,但用户的问题是关于工具变量方法的,所以可能需要更相关的代码。可能Harding和Lamarche的方法在Python中没有现成的实现,可能需要参考R中的包,比如quantreg中的rqiv函数,但用户可能需要Python代码。 所以,可能需要给出一个基于两阶段的方法,或者使用现有的库。例如,使用ivmodels库中的方法结合分位数回归。或者,使用GMM(广义矩估计)方法来实现工具变量分位数回归。 首先,我应该分步回答: 1. 基本分位数回归代码(statsmodels) 2. 工具变量分位数回归的方法介绍 3. 可能的Python实现步骤,例如手动两阶段方法,或者使用现有库如qregIV(如果有的话) 检查现有的Python包,发现statsmodels的QuantReg不支持工具变量。可能需要参考文献中的方法,比如Chernozhukov和Hansen的IVQR方法,或者使用GMM。 不过,用户可能需要示例代码,所以可能需要构造一个两阶段的示例,例如: 第一阶段:用工具变量回归内生变量,得到预测值 第二阶段:在分位数回归中使用预测值作为解释变量 但这种方法是否适用于分位数回归的IV呢?可能需要说明这只是一个近似,而严格的IV分位数回归需要更复杂的方法,比如使用矩条件或工具变量分位数回归的专门算法。 因此,在回答中需要明确说明方法的局限性,并提供可能的实现步骤,同时给出参考文献供用户进一步研究。 此外,引用[2]提到Harding和Lamarche的面板数据分位数回归工具变量方法,可能需要引导用户参考R的包,或者在Python中使用rpy2调用R的quantreg包中的rqiv函数。不过这可能对用户来说较为复杂。 总结回答的结构: 1. 分位数回归基本实现(Python代码) 2. 工具变量分位数回归方法简介 3. Python实现工具变量分位数回归的步骤或示例(可能基于两阶段方法或现有库) 4. 相关问题和扩展 同时,需要确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,并正确引用参考文献。</think>以下是关于分位数回归实现及工具变量方法的详细说明: ### 分位数回归基础实现 分位数回归可通过$Q_y(\tau|X) = X\beta(\tau)$建模,目标函数为最小化加权绝对偏差: $$\min_{\beta} \sum_{i=1}^n \rho_\tau(y_i - X_i\beta)$$ 其中$\rho_\tau(u) = u(\tau - I(u<0))$为损失函数。 **Python代码示例(statsmodels):** ```python import statsmodels.api as sm import numpy as np # 生成数据 n = 200 X = np.random.normal(size=(n, 2)) y = X[:,0] + 0.5*X[:,1] + np.random.laplace(size=n) # 使用拉普拉斯分布生成厚尾数据 # 分位数回归拟合(以中位数为例) model = sm.QuantReg(y, sm.add_constant(X)) result = model.fit(q=0.5) print(result.summary()) ``` ### 工具变量分位数回归方法 当存在内生性问题时,需引入工具变量$Z$。Harding and Lamarche(2009)[^2]提出的方法通过以下步骤实现: 1. **第一阶段**:用工具变量$Z$估计内生变量$X_{endog}$的预测值 2. **第二阶段**:将预测值$\hat{X}_{endog}$代入分位数回归模型 #### Python实现思路 ```python from linearmodels import IV2SLS from statsmodels.regression.quantile_regression import QuantReg # 生成模拟数据 n = 500 Z = np.random.normal(size=(n, 2)) # 工具变量 X_endog = Z[:,0] + np.random.normal(size=n) # 内生变量 X_exog = np.random.normal(size=(n, 1)) # 外生变量 y = 0.8*X_endog + 0.5*X_exog.flatten() + np.random.laplace(scale=0.5, size=n) # 第一阶段:工具变量回归 X = np.column_stack([X_exog, X_endog]) iv_model = IV2SLS(y, sm.add_constant(X_exog), sm.add_constant(Z)) iv_res = iv_model.fit() X_hat = iv_res.predict() # 获取预测值 # 第二阶段:分位数回归 qr_model = QuantReg(y, sm.add_constant(np.column_stack([X_exog, X_hat]))) qr_result = qr_model.fit(q=0.5) print(qr_result.summary()) ``` ### 注意事项 1. 上述两阶段方法是对传统2SLS的扩展,但严格的分位数回归工具变量方法需要更复杂的矩条件估计[^2] 2. 更精确的实现可参考R语言`quantreg`包的`rqiv`函数,或使用GMM方法 3. 内生性检验需使用分位数回归版的Hausman检验
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hucy_Bioinfo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值