在 R 中绘制分位数回归估计作为其分位数的函数

Plotting quantile regression estimates as function of their quantiles in R

以下代码是基于瑞士数据集 (datasets::swiss) 的可重现示例。

我的问题是我想根据 tau 值(分位数)从 [ 0:1];但不幸的是我没有成功。非常感谢您的宝贵帮助,当然,如果我忘记了什么,我可以编辑我的post。

代码:

library(quantreg)
library(limma)

#Generalized Functions

minimize.logcosh <- function(par, X, y, tau) {
  diff <- y-(X %*% par)
  check <- (tau-0.5)*diff+(0.5/0.7)*logcosh(0.7*diff)+0.4
  return(sum(check))
  }

smrq <- function(X, y, tau){
  p <- ncol(X)
  op.result <- optim(
    rep(0, p),
    fn = minimize.logcosh,
    method = 'BFGS',
    X = X,
    y = y,
    tau = tau
  )
  beta <- op.result$par
  return(beta)
  }

run_smrq <- function(data, fml, response) {
  x <- model.matrix(fml, data)[,-1]
  y <- data[[response]]
  X <- cbind(x, rep(1,nrow(x)))
  
  n <- 99
  betas <- sapply(1:n, function(i) smrq(X, y, tau=i/(n+1)))
  return(betas) 
}

#Callers

swiss <- datasets::swiss
smrq_models <- run_smrq(data=swiss, fml=Fertility~., response="Fertility")

@langtang 的解决方案给出了这个图形输出:

在不对 run_smrq() 输出的“正确性”做任何评论的情况下,您可以试试这个:

library(dplyr)
library(tidyr)
library(ggplot2)

as.data.frame(t(smrq_models)) %>% 
  mutate(q=row_number()) %>% 
  pivot_longer(!q,names_to="beta",values_to = "coef") %>% 
  ggplot(aes(q,coef,color=beta)) + 
  geom_point()

此外,如果 beta 的尺度差异很大,那么您的可视化方法可能不是最合适的。作为起点,您可以添加 + facet_wrap(~beta, scales="free_y")