python分位数回归模型_分位数回归及其Python源码导读

本文介绍了Python中分位数回归模型的使用,通过一个收入与食品消费的例子展示了分位数回归的过程,包括预处理、中位数回归、数据可视化和模型评估。分位数回归用于探究不同分位数下因变量与自变量的关系,不受异常值影响,适合处理非正态分布数据。文章还深入讨论了分位数回归的原理,并分析了statsmodels库中QuantReg类的源码实现。
摘要由CSDN通过智能技术生成

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

我们要探测自变量

equation?tex=y 与因变量

equation?tex=x 的关系,最简单的方法是线性回归,即假设:

equation?tex=y_%7Bi%7D+%3D+%5Cbeta_%7B0%7D+%2B+%5Cbeta_%7B1%7D+x_%7Bi%7D+%2B+e_%7Bi%7D%2C+i%3D1%2C...%2Cn

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

equation?tex=%5Cbeta_%7B0%7D%E4%B8%8E%5Cbeta_%7B1%7D 的无偏估计

equation?tex=%5Ctilde%7B%5Cbeta_%7B0%7D%7D

equation?tex=%5Ctilde%7B%5Cbeta_%7B1%7D%7D 。为了解决

equation?tex=%5Ctilde%7B%5Cbeta_%7B0%7D%7D

equation?tex=%5Ctilde%7B%5Cbeta_%7B1%7D%7D的可靠性问题,我们同时对残差

equation?tex=e_%7Bi%7D 做了假设,即:

equation?tex=e_%7Bi%7D为均值为0,方差恒定的独立随机变量。

equation?tex=%5Ctilde%7By_%7Bi%7D%7D+%3D%5Ctilde%7B%5Cbeta_%7B0%7D%7D+%2B+%5Ctilde%7B%5Cbeta_%7B1%7D%7Dx_%7Bi%7D 即为给定自变量

equation?tex=x_%7Bi%7D 下,因变量

equation?tex=y_%7Bi%7D 的条件均值。

假如残差

equation?tex=e_%7Bi%7D 不满足我们的假设,或者更重要地,我们不仅仅想要知道

equation?tex=y_%7Bi%7D 的在给定

equation?tex=x_%7Bi%7D下的条件均值,而且想知道条件中位数(更一般地,条件分位数),那么OLS下的线性回归就不能满足我们的需求。分位数回归(Quantile Regression)

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

这个例子出自statasmodels:Quantile Regression.

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.

由结果可以知道

equation?tex=foodexp_%7Bmedian%7D%3D81.4623+%2B+0.5602income+ ,如何得到回归系数的估计?结果中的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 = m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值