跳轉到內容

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 的個人網頁
上一節:非引數方法 索引 下一節:二項式模型
華夏公益教科書