1

我喜欢加权案例以在 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) 每个组内的加权平均值、中位数和分位数

我该怎么做?我有正确的加权交叉表,但每个子组没有加权平均值,因为我不能使用上面显示的函数来创建表格(因为丢失了正确的案例顺序)。

任何提示都非常感谢!

4

1 回答 1

1

非常不清楚你在这里问什么。但是问题底部的评论表明您想从加权数据中计算平均值和中值。最简单的方法是通过调查包。您需要使用 svydesign 创建一个调查设计对象 - 您可以忽略所有分层和聚类信息,只包含权重 - 然后使用 svyby() 或 svyquantile() 等函数来计算您需要的任何内容。

如果问题只是关于 ggplot2(),你可能可以通过使用 weight= 美学来解决,除非它没有做我认为它做的事情。

于 2013-04-07T00:55:06.823 回答