【问题标题】:Weight cases for cross tabulation, with means用于交叉制表的重量箱,带有平均值
【发布时间】:2013-04-06 13:15:21
【问题描述】:

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

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

非常感谢任何提示!

【问题讨论】:

  • 也许我应该举一个直观的例子。假设我想要按性别分组的变量“年龄”的箱线图:!Click here for box plots example image。现在,如果我用 xtabs(体重〜年龄+性别)对“年龄”和“性别”进行加权,我有正确的权重,但我需要知道每组的新平均值和中值(女性和男性的平均年龄) - 不知道该怎么做。
  • 你为什么不直接使用重量美学?
  • 好的,aes(weight=...) 有助于分组箱线图和小提琴图,非常感谢!我想念的最后一件事是计算加权组的平均值。我使用 ggplot(mydat, aes(x=group, y=frq, fill=group, weight=wb)) + geom_boxplot() + stat_summary(fun.y="mean" 对未加权数据(wb 设置为 1)执行此操作, geom="点", 形状=21)。当我使用加权数据(wb 设置为某个权重因子)时,箱线图分位数和中位数明显变化,但均值不变。
  • P.S.:对于非分组框或小提琴图,获取平均值没有问题,因为我手动计算了没有 stat_summary 函数的加权平均值。

标签: r weighted


【解决方案1】:

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

如果问题只是关于 ggplot2(),您可能只需使用 weight= 美学就可以解决问题,除非它不符合我的想法。

【讨论】:

  • 谢谢,彼得,我会检查包装和重量美学。我想要的是用加权数据绘制一个分组箱线图。原始数据没有加权,但我对每种情况都有一个权重因子(参见我上面帖子中的示例)。我可以使用 xtabs 来计算计数和分组变量的加权交叉表。或者我可以使用 Hmisc 包中的 wtd.mean 和 wtd.quantile 函数来计算加权平均值和分位数 - 但仅限于单个变量。我现在不能做的是为每个“列”/grp 计算加权平均值的加权交叉表
  • 我不知道如何使用调查包。我尝试过以下操作: require(survey) df
  • 好的,我在脚本中发现了一个错误。 ggplot 的重量美学现在一切正常!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多