跳转到内容

R 编程/分位数回归

来自维基教科书,开放世界中的开放书籍

分位数回归 是一种非常古老的方法,由于计算能力的进步,近年来才流行起来。该领域的 主要研究人员之一也是一名 R 从业者,他开发了一个专门用于分位数回归的软件包 (**quantreg**)[1] ·[2]

从理论上讲,分位数回归也是线性的,因此可以包含在“线性回归”页面中。但是,这是一个非常具体的主题,我们认为为这个主题写一个专门的页面是值得的。

简单分位数模型

[编辑 | 编辑源代码]

我们从一个简单分位数模型中进行模拟。我们首先生成一个均匀的误差项 u 和一个协变量 x。

N <- 10^3
u <- runif(N)
x <- 1 + rnorm(N)
y <- qnorm(u, mean = 0, sd = 2) + qnorm(u, mean = 1, sd = 1) * x

我们估计了一些 tau(分位数)值的 分位数模型,并绘制了系数。

q1 <- rq(y ~ x, tau = seq(.1,.9,.1))
summary(q1)
plot(q1)

然后,我们绘制散点图、使用标准线性模型预测的值和使用分位数线性模型预测的值。

plot(x,y, col = "grey")
m1 <- lm(y ~ x)
abline(m1, col = "red")
taus <- seq(.1,.9,.1)
for (i in 1:length(taus)){
	abline(rq(y ~ x, tau = taus[i]), col = "blue")
	}
grid()

我们也可以同时估计所有分位数的模型。

q2 <- rq(y ~ x, tau = -1)
plot(q2, nrow = 2, ncol = 1)

计算时间

[编辑 | 编辑源代码]

对于大型数据集,最好使用“fn”或“pfn”方法。

> N <- 10^5
> u <- runif(N)
> x <- 1 + rnorm(N)
> y <- qnorm(u, mean = 0, sd = 2) + qnorm(u, mean = 1, sd = 1) * x
> system.time(rq(y ~ x, tau = .5, method = "br"))
   user  system elapsed 
   1.48    0.00    1.48 
> system.time(rq(y ~ x, tau = .5, method = "fn"))
   user  system elapsed 
   0.60    0.00    0.61 
> system.time(rq(y ~ x, tau = .5, method = "pfn")) 
   user  system elapsed 
   0.30    0.00    0.29

参考文献

[编辑 | 编辑源代码]
  1. Roger Koenker (2010). quantreg: Quantile Regression. R 包版本 4.50. http://CRAN.R-project.org/package=quantreg
  2. Roger Koenker 的个人网页
上一节:非参数方法 索引 下一节:二项式模型
华夏公益教科书