首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用in图()绘制系数图的翻转轴和系数点

用in图()绘制系数图的翻转轴和系数点
EN

Stack Overflow用户
提问于 2022-04-21 16:22:26
回答 1查看 104关注 0票数 0

我使用软件包"dotwhisker“中的函数"dwplot”来绘制一些LSDV模型的回归系数。这是我的模型:

代码语言:javascript
运行
复制
coefisubv <- lm(subv ~ Preelectoral + Electoral + Postelectoral + 
                factor(ccaa)-1, data = datos)

然后,我将其转换为dataframe,以便删除不需要的因子(Ccaa)-1变量:

代码语言:javascript
运行
复制
coefisubv <- as.data.frame(coefisubv)

之后,我想翻转轴的顺序,所以我使用函数coord_flip()。然后,我还想用vars_order()命令改变X轴中变量的顺序。

代码语言:javascript
运行
复制
dwplot(coefisubv, 
       vars_order = c("Postelectoral", "Electoral", "Preelectoral")) + 
    coord_flip()

最后,我想添加一条使用geom_line()将图中的系数点链接起来的线

代码语言:javascript
运行
复制
dwplot(coefisubv, 
       vars_order = c("Postelectoral", "Electoral", "Preelectoral")) + 
    coord_flip() + 
    geom_line(aes(Estimate, term), group=1)

其结果是:

不幸的是,正如您所看到的,geom_line()函数似乎没有认识到变量的顺序发生了变化,因此它认为变量“选举前”是变量“选举后”,而“选举后”是“选举前”。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 01:09:48

当我想做一些有点复杂的事情时,我通常会发现用broom::tidy + ggplot2手工构建系数图比较容易。在这种情况下,例如。

代码语言:javascript
运行
复制
library(tidyverse)
library(broom)
m1 <- lm(mpg ~ hp  + disp + drat + factor(cyl) - 1, mtcars)
tt <- (tidy(m1, conf.int = TRUE) 
     ## drop unwanted terms
     %>% filter(!stringr::str_detect(term, "cyl"))
     ## determine term ordering (alphabetical is default)
     %>% mutate(across(term, ~ factor(., levels = c("hp", "disp", "drat"))))
)
gg1 <- (ggplot(tt)
   +  aes(x=term, y=estimate, ymin = conf.low, ymax = conf.high)
   +  geom_pointrange(colour = "red")
   +  geom_line(aes(group = 1))
)

place

  • aes(group = 1)

  • 不需要使用coord_flip(),因为我们设置了在geom_line()中的第一个coefficients

中所需的方向,确保我们是连接点,即使x轴变量是一个因子

  • ,如果您想要将它用于多个模型的绘图,purrr::map_dfr是很棒的(如果您需要标准化coefficients

,则可以使用purrr::map_dfr来命名模型列表并使用dotwhisker::by_2sd )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71957766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档