Python统计学11——分位数回归

article/2025/9/21 21:49:38

分位数回归也是数理统计里面经典的模型,他相对于在最小二乘模型上进行了改进,虽然本身还是线性的参数模型,但对损失函数进行了改进。我们都知道最小二乘的损失函数是均方误差最小,分位数的损失函数是:

可以看到分位数损失函数会对高估的值和低估的值给予一个不同的权重,这样就可以做到‘’分位‘’。

该模型对于存在异方差的数据有很好的的效果。能准确计算出5%~95%的置信区间

具体看代码理解:

导入包,加载自带的案例数据

import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as pltdata = sm.datasets.engel.load_pandas().data
data.head()

 

 X是收入,y是食物支出,很经典的发散数据,因为不同收入区间的家庭的食物支出比例不一样,随着X增大,Y的波动也增大。存在异方差。


q=0.5时候的分位数回归

mod = smf.quantreg("foodexp ~ income", data)
res = mod.fit(q=0.5)
print(res.summary())

 当q不一样是回归出来的系数是不一样的。我们计算0.05,0.15,0.25.....0.95分位数出来的回归系数,还有最小二乘的回归系数。

quantiles = np.arange(0.05, 0.96, 0.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)

 


画图对比

x = np.arange(data.income.min(), data.income.max(), 50)
get_y = lambda a, b: a + b * xfig, ax = plt.subplots(figsize=(6, 4))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=0.2)
ax.set_xlim((200, 3000))
ax.set_ylim((200, 2000))
legend = ax.legend()
ax.set_xlabel("Income", fontsize=16)
ax.set_ylabel("Food expenditure", fontsize=16)

 透明蓝色散点为样本点。蓝色虚线为不同分位数上的回归方程。

可以看出的几个结论:

'''粮食支出随着收入的增加而增加

粮食支出的分散度随着收入的增加而增加

最小二乘估计值与低收入观测值的拟合度相当差(即OLS线越过大多数低收入家庭)'''

而且5%~95%的回归方程区间涵盖了所有的真实样本点,置信区间很准确。


 画出回归系数随着分位数的变化图

n = models.shape[0]
plt.plot(models.q, models.b, color="black", label="Quantile Reg.")
plt.plot(models.q, models.ub, linestyle="dotted", color="black")
plt.plot(models.q, models.lb, linestyle="dotted", color="black")plt.plot(models.q, [ols["b"]] * n, color="red", label="OLS")
plt.plot(models.q, [ols["lb"]] * n, linestyle="dotted", color="red")
plt.plot(models.q, [ols["ub"]] * n, linestyle="dotted", color="red")plt.ylabel(r"$\beta_{income}$")
plt.xlabel("Quantiles of the conditional food expenditure distribution")
plt.legend()
plt.show()

 

#上图画出了回归系数随着分位数的变化而变化,OLS系数是恒定的,分位数回归的系数随着分位数变大而变大

#在大多数情况下,分位数回归点估计值位于OLS置信区间之外,这表明收入对食品支出的影响在整个分布区间内可能不是恒定的


http://chatgpt.dhexx.cn/article/wgIWlgCv.shtml

相关文章

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

分位数回归(quantile regression)R实现 一、基本介绍二、使用分位数回归的原因三、R 语言实现分位数回归 一、基本介绍 回归分析的主要目的:实证检验理论分析中因变量与自变量之间的关系。传统的均值回归,主要使用因变量的条件均…

分位数回归(Stata)

基于分位数回归的成都空气质量指数的数据分析 空气质量指数计算公式为: (1)线性回归模型得到的是一种条件均值,并未考虑到因变量总体上的分布特征,在需要了解因变量位置(分位数)上的信息时&…

分位数回归—R语言实现

大家好,我是带我去滑雪,每天教你一个小技巧! 分位数回归—R语言实现 1、分位数基本介绍——什么是分位数? 2、分位数回归用途——为什么要使用分位数回归? 3、图形分析——如何进行分位数回归图像分析? …

分位数回归-Quantile regression

一、分位数回归概念 分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。 以往的回归模型实际上是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数,分位数呈何种关系。它最早由Koenker和Bassett(1978)提出。 …

分位数回归(Quantile regression)笔记

分位数回归(Quantile regression)是在给定 X \mathbf{X} X的条件下估计 y \mathbf{y} y的中位数或其他分位数, 这是与最小二乘法估计条件均值最大的不同。 分位数回归也是一种线性回归,它为第 q q q个分位数( q ∈ ( …

分位数回归(quantile regression)简介和代码实现

普通最小二乘法如何处理异常值? 它对待一切事物都是一样的——它将它们平方! 但是对于异常值,平方会显著增加它们对平均值等统计数据的巨大影响。 我们从描述性统计中知道,中位数对异常值的鲁棒性比均值强。 这种理论也可以在预测…

分位数回归(Quantile Regression)

在介绍分位数回归之前,先重新说一下回归分析,我们之前介绍了线性回归、多项式回归等等,基本上,都是假定一个函数,然后让函数尽可能拟合训练数据,确定函数的未知参数。尽可能拟合训练数据,一般是…

C语言最全函数大全

以下图片以字母顺序排列,语法着色版本。 每个函数包含函数名,功能,用法,举例...

C语言函数大全-- s 开头的函数(2)

s 开头的函数(2) 1. setlinestyle1.1 函数说明1.2 演示示例1.3 运行结果 2. setmem2.1 函数说明2.2 演示示例 3. setmode3.1 函数说明3.2 演示示例3.3 运行结果 4. setpalette4.1 函数说明4.2 演示示例4.3 运行结果 5. setrgbpalette5.1 函数说明5.2 演示…

C语言函数大全-- i 开头的函数

i 开头的函数 1. imagesize1.1 函数说明1.2 演示示例1.3 运行结果 2. initgraph2.1 函数说明2.2 演示示例2.3 运行结果 3. inport3.1 函数说明3.2 演示示例 4. insline4.1 函数说明4.2 演示示例 5. installuserdriver5.1 函数说明5.2 演示示例 6. installuserfont6.1 函数说明6…

函数 C语言】

函数的声明和定义 函数间调用关系是&#xff0c;由于函数调用其他函数&#xff0c;替他函数也可以互相调用&#xff0c;同一个函数可以被一个或多个函数调用任意次。 先声明&#xff0c;后调用。 #include <stdio.h> //去标准库下找文件 #include "stdio.h"…

【C语言】函数详解

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️专栏&#xff1a;✈️C语言快速入门       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点…

C语言函数大全-- s 开头的函数(1)

s 开头的函数&#xff08;1&#xff09; 1. sbrk1.1 函数说明1.2 演示示例 2. scalb&#xff0c;scalbf&#xff0c;scalbl2.1 函数说明2.2 演示示例 3. scalbln&#xff0c;scalblnf&#xff0c;scalblnl3.1 函数说明3.2 演示示例3.3 运行结果 4. scalbn&#xff0c;scalbnf&a…

【详解C语言】函数

文章目录 1. 函数是什么&#xff1f;2. C语言中函数的分类&#xff1a;1. 库函数&#xff1a;2. 自定义函数 3. 函数的参数3.1 实际参数&#xff08;实参&#xff09;3.2 形式参数&#xff08;形参&#xff09; 4. 函数的调用&#xff1a;4.1 传值调用4.2 传址调用4.3 练习 5. …

C语言函数介绍

1.字母的大小写转换-->islower() 2.快速排序函数-->qsort() 下面正式给大家介绍这两个函数 &#xff08;1&#xff09;islower() islower() 函数用来检测一个字符是否是小写字母。 在默认情况下&#xff0c;小写字母包括&#xff1a; a,b,c,d,e,f,g,h,i,j,k,l,m,n,o…

C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

文章目录 C语言函数库:一. <ctype.h>二. <math.h>三. <stdio.h>四. <stdlib.h>五. <time.h>六. <string.h> 文档资料 C语言函数库: C语言的常用的标准头文件有 &#xff1a; <ctype.h>   <time.h>   <stdio.h> <…

【C语言进阶】最常用的库函数大全——从入门到精通

目录 前言&#xff1a; 一.字符串函数 1.strlen——求字符串长度 strlen 2.长度不受限制的字符串函数 a.strcpy——字符串拷贝 strcpy b.strcat——追加字符串 strcat c.strcmp——字符串比较 strcmp 3.长度受限制的字符串函数——strncpy,strncat,strncmp 为什么会…

C语言一些常用的函数

目录 sizeof()运算符strlen()函数abort()函数exit()函数Sleep()函数atof()将字符串转换成浮点数atoi()将字符串转换成整型数的函数atol()将字符串转换成长整型数的函数strlwr()函数strupr()函数 sizeof()运算符 sizeof()运算符: 编译器自带的,不用到任何包都能用。用法&…

C语言常用函数详解

函数详解&#xff1a; strlen(字符串长度)sizeof(字节大小)strcmp(字符串比较)strcpy(字符串拷贝)strcat(字符串追加)strncpy(字符串按字节拷贝)strncmp(字符串按字节比较)strncat(字符串按字节追加)strstr(查找字符串)strtok(查找符号)memcpy(按字节拷贝数据&#xff08;任意类…

C语言的中常用的函数

一、main函数 一个C程序就是由若干头文件和函数组成&#xff0c;有且只有一个主函数&#xff0c;即main函数。 #include <stdio.h>int main(){printf("c语言主函数");return 0; } C程序就是执行主函数里的代码&#xff0c;C语言中的唯一入口。 main前面的int…