【问题标题】:How to generate weighted mean plot using ggplot2?如何使用 ggplot2 生成加权平均图?
【发布时间】:2022-01-04 22:14:43
【问题描述】:

我能够使用以下代码生成变量 lny_10 的平均移动:

p1 <- ggplot(df, aes(x = year, y = lny_10)) +
  scale_x_continuous(breaks = c(1991, 1997, 2000, 2003, 2011), lim = c(1991, 2011)) + theme_bw() + stat_summary(geom = "line", fun.y = mean)

在同一平面上,我只想添加同一变量的另一条加权平均趋势线,其中权重由每个行业的lnl之和确定因此这条新的趋势线反映了 lnl 在某个行业(制造业或渔业)中的权重。换句话说,如果 manuf 中的总和。部门大于渔业部门,则制造业部门的lny_10平均值将被赋予更大的权重。

任何帮助将不胜感激!

样本数据如下:

structure(list(firmid = structure(c("016090", "002070", "009270", 
"007700", "005800", "014990", "001460", "001460", "005800", "014990"
), format.stata = "%-6s"), year = structure(c(1992, 1992, 1992, 
1992, 1992, 1992, 1992, 1993, 1993, 1993), format.stata = "%9.0g"), 
    lny_10 = structure(c(24.0853042602539, 24.2753143310547, 
    24.1893978118896, 22.7417297363281, 24.0077304840088, 24.0432777404785, 
    24.6088676452637, 24.6565208435059, 23.8993816375732, 24.2486095428467
    ), format.stata = "%9.0g"), lnl = structure(c(6.81234502792358, 
    7.56631088256836, 7.19368600845337, 5.48063898086548, 7.38398933410645, 
    6.63331842422485, 7.81439971923828, 7.72621250152588, 7.33040523529053, 
    6.74288082122803), format.stata = "%9.0g")),  industry = structure(c("Manufacturing", "Manufacturing", "Manufacturing", 
    "Manufacturing", "Manufacturing","Fishery", "Fishery","Fishery","Fishery","Fishery"), label = "classification", format.stata = "%-51s")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

  • 你不能单独计算加权平均值吗? df %&gt;% group_by(year)%&gt;% summarise(lny_wmean = weighted.mean(lny_10,lnl))我有点困惑,因为数据没有重现你的情节。
  • @mlcyo,谢谢,我稍微修改了代码。棘手的部分是我应该按行业(制造业和渔业)考虑 lnl 的加权平均值。因此,如果制造业的权重高于另一个,则属于制造业的 lny_10 的均值将被赋予更大的权重。我希望你很清楚。
  • 嗯,你能按年份和行业分组吗?
  • @mlcyo,对不起,如果可能的话,您能否进一步说明相关代码?
  • 我从该代码中得到三列。你在使用 dplyr group_by 并总结吗?试试这个,。另外,上面的结构命令中存在错误,但我假设您的 df 不是使用它制作的。 dfweights&lt;- df %&gt;% dplyr::group_by(year, industry)%&gt;% dplyr::summarise(lny_wmean = weighted.mean(lny_10,lnl))

标签: r ggplot2 weighted-average


【解决方案1】:

按年份和行业分别计算权重,并在绘图前将它们连接回原始数据框。

library(dplyr)
library(ggplot2)

dfweights <- df %>%   
   group_by(year, industry) %>%   
   summarise(lny_wmean = weighted.mean(lny_10,lnl))  

df2 <- left_join(df, dfweights, by = c("year", "industry"))   

df2 %>%    
   ggplot() +    
   stat_summary(aes(x = year, y = lny_10), geom = "line", fun = mean, colour = "red") +   
   theme_bw() +    
   geom_line(aes(x = year , y = lny_10), colour = "blue") +      
   geom_line(aes(x = year, y = lny_wmean), colour = "green")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2018-11-25
    • 1970-01-01
    • 2015-04-02
    • 2019-02-19
    • 2018-06-03
    相关资源
    最近更新 更多