【问题标题】:Weighted mean using aggregated使用聚合的加权平均值
【发布时间】:2020-07-09 11:18:11
【问题描述】:

很抱歉问了一个非常基本的问题,但我陷入了一个难题,似乎无法摆脱。

我的代码看起来像

Medicine  Biology  Business sex weights
0           1          0     1     0.5
0           0          1     0     1
1           0          0     1     05
0           1          0     0     0.33
0           0          1     0     0.33
1           0          0     1     1 
0           1          0     0     0.33
0           0          1     1     1
1           0          0     1     1

前三个是研究领域,第四个变量与性别有关。显然还有更多的观察。 我想要得到的是研究领域(医学、生物学、商业)的平均水平,由可变的性别(因此男性的平均值和女性的平均值)。为此,我使用了以下代码:

barplot_sex<-aggregate(x=df_dummies[,1:19] , by=list(df$sex),
                            FUN= function(x) mean(x)

效果很好,给了我我需要的东西。我的问题是我现在需要使用加权平均值,但我不能使用

FUN= function(x) weighted.mean(x, weights)

因为观察比研究领域多得多。

我设法做的唯一选择是编辑(箱线图)并手动更改值,但随后 R 不保存更改。另外,我确信一定有一种简单的方法可以完全满足我的需要。

任何帮助将不胜感激。

最好的, 加布里埃尔

【问题讨论】:

  • 您想使用什么重量?你的预期结果是什么?附带说明一下,您可以将当前函数缩短为 aggregate(df_dummies, list(df$sex), mean) aggregate(.~sex, df_dummies, mean),结果相同
  • 权重用于重复观察,非整数也是如此,因为有些学生研究的不仅仅是一个领域。预期的结果将与我现在得到的类似,只是使用加权平均值而不是简单平均值。感谢您提供有关如何缩短代码 btw 的信息

标签: r aggregate weighted-average


【解决方案1】:

使用by

by(dat, dat$sex, function(x) sapply(x[, 1:3], weighted.mean, x[, "weights"]))
# dat$sex: 0
# Medicine   Biology  Business 
# 0.0000000 0.3316583 0.6683417 
# --------------------------------------------------------------------------------------- 
# dat$sex: 1
# Medicine    Biology   Business 
# 0.82352941 0.05882353 0.11764706 

数据:

dat <- structure(list(Medicine = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L
), Biology = c(1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L), Business = c(0L, 
1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L), sex = c(1L, 0L, 1L, 0L, 0L, 
1L, 0L, 1L, 1L), weights = c(0.5, 1, 5, 0.33, 0.33, 1, 0.33, 
1, 1)), class = "data.frame", row.names = c(NA, -9L))

【讨论】:

  • 我一头雾水,你补过重量吗?还是我错过了什么?
  • @DanielO 我发明了一些,因为我认为它们不见了 :) 啊,你打算按性别称重吗??
  • 那么@jay.sf 有一个正确的答案。也可以使用by(dat, dat$sex, function(x) sapply(x[, 1:3], weighted.mean, x[, 5])) 缩短它(以轻微的可读性为代价)
  • 我已经修改了帖子以显示权重的样子。我需要的基本上是男性业务的加权平均数,以及女性业务的加权平均数。我可以使用 ~lm 并在那里添加权重来做到这一点,但似乎我正在为应该微不足道的事情做一些不必要的额外步骤!
  • @DanielO Thx,已申请回答。
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2014-08-09
  • 2021-08-31
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多