[英]ggplot2 errorbar with smooth confidence interval
I saw the following graph from the coefplot
Stata package the other day.前
coefplot
我从coefplot
Stata 包中看到了下图。 I am just wondering how can I draw a similar smooth confidence interval as an errorbar using ggplot?我只是想知道如何使用 ggplot 绘制与误差条类似的平滑置信区间? I have tried the
geom_errorbar
and don't think it is capable to do so.我已经尝试过
geom_errorbar
并且认为它没有能力这样做。 Any other ideas?还有其他想法吗? Thanks!
谢谢!
If you read the stata documentation for smoothed ci plot, it's actually from David Sparks who provided the code here .如果您阅读了平滑 ci 图的 stata 文档,它实际上来自David Sparks ,他在这里提供了代码。 You just need to alter it slightly to make it side by side.
你只需要稍微改变它,让它并排。
Below I modified the function from the git link, using ggplot()
instead of qplot()
:下面我从 git 链接修改了函数,使用
ggplot()
而不是qplot()
:
SmoothCoefficientPlot <- function(models, modelnames = "", removeintercept = FALSE){
Alphas <- seq(1, 99, 2) / 100
Multiplier <- qnorm(1 - Alphas / 2)
zzTransparency <<- 1/(length(Multiplier)/4)
CoefficientTables <- lapply(models, function(x){summary(x)$coef})
TableRows <- unlist(lapply(CoefficientTables, nrow))
if(modelnames[1] == ""){
ModelNameLabels <- rep(paste("Model", 1:length(TableRows)), TableRows)
} else {
ModelNameLabels <- rep(modelnames, TableRows)
}
MatrixofModels <- cbind(do.call(rbind, CoefficientTables), ModelNameLabels)
if(removeintercept == TRUE){
MatrixofModels <- MatrixofModels[!rownames(MatrixofModels) == "(Intercept)", ]
}
MatrixofModels <- data.frame(cbind(rownames(MatrixofModels), MatrixofModels))
MatrixofModels <- data.frame(cbind(MatrixofModels, rep(Multiplier, each = nrow(MatrixofModels))))
colnames(MatrixofModels) <- c("IV", "Estimate", "StandardError", "TValue", "PValue", "ModelName", "Scalar")
MatrixofModels$IV <- factor(MatrixofModels$IV)
MatrixofModels[, -c(1, 6)] <- apply(MatrixofModels[, -c(1, 6)], 2, function(x){as.numeric(as.character(x))})
MatrixofModels$Emphasis <- by(1 - seq(0, 0.99, length = length(Multiplier) + 1)[-1], as.character(round(Multiplier, 5)), mean)[as.character(round(MatrixofModels$Scalar, 5))]
OutputPlot <- ggplot(data = MatrixofModels, aes(x = IV, y = Estimate,
ymin = Estimate - Scalar * StandardError, ymax = Estimate + Scalar * StandardError,alpha = I(zzTransparency), colour = ModelName)) +
geom_point(position=position_dodge(width=0.3))
OutputPlot <- OutputPlot + geom_hline(yintercept = 0, lwd = I(7/12), colour = I(hsv(0/12, 7/12, 7/12)), alpha = I(5/12))
OutputPlot <- OutputPlot + geom_linerange(aes(size = 1/Emphasis),position=position_dodge(width=0.3),show.legend=FALSE)
OutputPlot <- OutputPlot + scale_size_continuous()
OutputPlot <- OutputPlot + coord_flip() + theme_bw()
return(OutputPlot)
}
First create two simple linear models with similar coefficients and plot:首先创建两个具有相似系数和绘图的简单线性模型:
library(ggplot2)
mdls = by(mtcars,mtcars$am,function(x)lm(mpg ~ gear + drat + vs,data=x))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.