ggplot2:用回归系数绘制两个模型

时间:2017-03-02 16:15:51

标签: r ggplot2

我想用ggplot2复制下图(虽然更大,但我不知道为什么这个数字如此之小)。

Original graph developed in Stata

(这项研究的主题是穆斯林少数民族青年的融合。)

我用Stata中的包-coefplot-开发了上面的原始图,现在尝试在R中使用相同的颜色。

在R和ggplot2中,我从使用MplusAutomation获得的两个简单数据帧开始(来自Mplus应用程序中的估计)。可以使用以下代码重现数据帧:

resModel1 <- 
  structure(list(param = c("FEMALE", "CHRISTIAN", "MUSLIM"), 
  low2.5 = c(-0.436, 0.038, 0.19), 
  est = c(-0.271, 0.18, 0.354), up2.5 = c(-0.106, 0.323, 0.519)), 
  .Names = c("param", "low2.5", "est", "up2.5"), row.names = 7:9, 
  class = c("data.frame", "mplus.params"))

resModel2 <- 
  structure(list(param = c("FEMALE", "CHRISTIAN", "MUSLIM", "CHRISTGI", "MUSLIMGI"), 
  low2.5 = c(-0.672, -0.256, -0.018, 0.131, -0.143), 
  est = c(-0.437, -0.038, 0.237, 0.403, 0.237), up2.5 = c(-0.203,                                                                                 0.18, 0.493, 0.675, 0.617)), .Names = c("param", "low2.5", "est", "up2.5"), 
  row.names = 7:11, class = c("data.frame", "mplus.params"))

然后我尝试使用ggplot2开发两个图并将它们与gridExtra结合使用:

library(ggplot2)
limits <- aes(ymax  = up2.5, ymin = low2.5) 

plot1 <- ggplot(resModel1, aes(x=param, y=est)) + 
  geom_pointrange(limits, color = "darkblue") + 
  scale_x_discrete("") + 
  geom_hline(yintercept=0, color="red") + 
  theme_bw() + 
  theme(text = element_text(size=10)) +
  ylab(NULL) + 
  coord_flip() 

plot2 <- ggplot(resModel2, aes(x=param, y=est)) + 
  geom_pointrange(limits, color="darkblue") + 
  scale_x_discrete("") + 
  geom_hline(yintercept=0, color="red") + 
  theme_bw() + 
  theme(text = element_text(size=10)) +
  ylab(NULL) + 
  coord_flip()

library(gridExtra)
grid.arrange(plot1, plot2, ncol=2)

......最后得到以下情节:

enter image description here

我希望做到以下几点:

  1. 手工分类系数(按此顺序:基督徒,穆斯林,女性)
  2. 对齐模型中相同预测因子的系数(如在Stata中开发的图中所做的那样,其中&#34;穆斯林女孩&#34;和#34;基督徒女孩&#34;绘制在Plot1中没有结果,制作所有预测变量/参数在Model1和Model 2中对齐)
  3. 在图中包含回归系数(在回归分析中代表点估计值的点上方的数字)。
  4. 更改预测变量的名称(例如,从MUSLIMGI到#34;穆斯林女孩&#34;),而不修改数据框。
  5. 将两个图的x刻度调整为相同。 (另外,将两个模型命名为,我认为我应该能够弄清楚自己该怎么做。)
  6. 在搜索解决方案时,我找到了一个名为coefplot的R包(ggplot2的一种附加组件),但我不确定coefplot是否可以开发情节我我想在ggplot2中自行编写代码以获得灵活性。

    我还找到了sjp.glmhttps://strengejacke.wordpress.com/2013/03/22/plotting-lm-and-glm-models-with-ggplot-rstats/),但是当我在R外估计统计模型并且需要绘制数据框中可用的参数时,我无法看到该函数如何帮助我。

1 个答案:

答案 0 :(得分:4)

至少让你开始,修复第1,2,3和5点。第4点是不可取的,只是编辑你的data.frame要容易得多,不要对你自己施加人为限制。

df <- rbind(resModel1, resModel2)
df$model <- rep(c('Model 1', 'Model 2'), c(nrow(resModel1), nrow(resModel2)))
df$param_f <- factor(df$param, 
                     rev(c('CHRISTIAN', 'MUSLIM', 'FEMALE', 'CHRISTGI', 'MUSLIMGI')),
                     rev(c('Christian', 'Muslum', 'Female', 'Christian girls', 'Muslim girls')))

ggplot(df, aes(x = param_f, y = est)) + 
  geom_pointrange(aes(ymax = up2.5, ymin = low2.5), color = "darkblue") +
  geom_text(aes(label = est), nudge_x = 0.15) + 
  scale_x_discrete("") + 
  geom_hline(yintercept = 0, color = "red") + 
  theme_bw() + 
  theme(text = element_text(size=10)) +
  ylab(NULL) + 
  coord_flip() +
  facet_grid(~model)

enter image description here