交叉制表的重量案例,有手段

时间:2013-04-06 13:15:21

标签: r weighted

我喜欢对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)每组中的加权平均值,中位数和分位数

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

任何提示都非常感谢!

1 个答案:

答案 0 :(得分:1)

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

如果问题只是关于ggplot2(),你可以通过使用weight = aesthetic来解决问题,除非它没有按我认为的那样做。