R中的堆栈系数图

时间:2015-09-25 16:48:20

标签: r plot

我运行一组具有相同自变量但不同因变量的模型,并希望在一个图中创建一组系数图,其中每个模型都有自己的面板。下面的代码提供直觉,但在这一点上,所有模型都集成到一个图中,而不是在一个图中并排放置3个独特的面板:

require("coefplot") 
set.seed(123)
dat <- data.frame(x = rnorm(100), z = rnorm(100), y1 = rnorm(100), y2 = rnorm(100), y3 = rnorm(100))
mod1 <- lm(y1 ~ x + z, data = dat)
mod2 <- lm(y2 ~ x + z, data = dat)
mod3 <- lm(y3 ~ x + z, data = dat)    
multiplot(mod1,mod2, mod3)

这会产生这个情节:

enter image description here

关于如何让他们在一个图中彼此相邻的任何想法?谢谢!

1 个答案:

答案 0 :(得分:2)

我以前没有使用coefplot包,但您可以直接在ggplot2创建系数图。

set.seed(123)
dat <- data.frame(x = rnorm(100), z = rnorm(100), y1 = rnorm(100), y2 = rnorm(100), y3 = rnorm(100))
mod1 <- lm(y1 ~ x + z, data = dat)
mod2 <- lm(y2 ~ x + z, data = dat)
mod3 <- lm(y3 ~ x + z, data = dat)    

## Create data frame of model coefficients and standard errors
# Function to extract what we need
ce = function(model.obj) {
  extract = summary(get(model.obj))$coefficients[ ,1:2]
  return(data.frame(extract, vars=row.names(extract), model=model.obj))
}

# Run function on the three models and bind into single data frame
coefs = do.call(rbind, sapply(paste0("mod",1:3), ce, simplify=FALSE))

names(coefs)[2] = "se" 

# Faceted coefficient plot
ggplot(coefs, aes(vars, Estimate)) + 
  geom_hline(yintercept=0, lty=2, lwd=1, colour="grey50") +
  geom_errorbar(aes(ymin=Estimate - se, ymax=Estimate + se, colour=vars), 
                lwd=1, width=0) +
  geom_point(size=3, aes(colour=vars)) +
  facet_grid(. ~ model) +
  coord_flip() +
  guides(colour=FALSE) +
  labs(x="Coefficient", y="Value") +
  theme_grey(base_size=15)

enter image description here