[英]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.