繁体   English   中英

将分位数回归估计绘制为 R 中分位数的 function

[英]Plotting quantile regression estimates as function of their quantiles in R

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

我的问题是,我想要 plot beta,这是smrq() function 在 y 轴上根据 tau 值(分位数)在 [0:1] 范围内提供的分位数回归估计; 但不幸的是我没有成功。 非常感谢您的宝贵帮助,当然,如果我忘记了什么,我可以编辑我的帖子。

代码:

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 的解决方案给出了这个图形 output:

在此处输入图像描述

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

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM