我喜欢对ggplot中的图表进行加权。我对每种情况都有一个特定的权重因子,例如:
value weight
2 0.34
5 0.75
6 2.31
等等...绘制简单的分组条(“交叉制表”)很容易,我可以使用xtabs函数:
ftab <- round(xtabs(weightBy ~ varCount + varGroup),0)
当我想绘制直方图,简单条形图或带有加权情况的单框图时,我想保留分布,所以我使用以下函数来对案例进行加权:
weightby <- function(var, weight) {
items <- unique(var)
newvar <- c()
for (i in 1:length(items)) {
newcount = round(sum(weight[which(var==items[i])]))
newvar <- c(newvar, rep(items[i], newcount))
}
return (newvar)
}
if (!is.null(weightBy)) {
variable <- weightby(variable, weightBy)
}
但是,此功能忽略原始案例顺序,“案例”现在按升序编号 根据相关类别。但是......如果我想绘制分组框图,我需要 a)加权计数的加权变量 b)具有加权组的加权变量 c)每组中的加权平均值,中位数和分位数
我该怎么做?我有正确的加权交叉制表,但没有来自每个子组的加权平均值,因为我不能使用上面显示的函数来创建表格(因为丢失了正确的大小写顺序)。
任何提示都非常感谢!
答案 0 :(得分:1)
很不清楚你在这里问的是什么。但是你问题底部的评论表明你想要从加权数据中计算平均值和中值。最简单的方法是通过调查包。您需要使用svydesign创建一个调查设计对象 - 您可以忽略所有分层和聚类信息,只需包含权重 - 然后使用svyby()或svyquantile()等函数来计算您需要的任何内容。
如果问题只是关于ggplot2(),你可以通过使用weight = aesthetic来解决问题,除非它没有按我认为的那样做。