从样本中抽取d次观察n次并计算平均值

时间:2018-05-07 11:48:54

标签: r resampling

考虑以下数据:

x <- c(2, 4, 6, 8)
mean(x)
[1] 5

现在我想绘制2观察。这给了我6个组合。我想计算所有6组合的平均值,以及这些6值的平均值。也就是说,我应该得到以下方法:

(2+4)/2 = 3
(2+6)/2 = 4
(2+8)/2 = 5
(4+6)/2 = 5
(4+8)/2 = 6
(6+8)/2 = 7

我知道订单可能与上述不同,但每次都应该给我一个平均5(在上面的情况下:(3+4+5+5+6+7)/6 = 5)。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

One Line回答:

mean(rowMeans(t(combn(x,2))))

逐步解释:

用&#39;绘制2个观察值&#39;你实际上是指从x:

中选择2个对象/观察
x <- c(2, 4, 6, 8) 
combn(x, 2)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    2    2    2    4    4    6
## [2,]    4    6    8    6    8    8

使用t()您可以将其转换为:

t(combn(x,2))
##      [,1] [,2]
##  [1,]    2    4
##  [2,]    2    6
##  [3,]    2    8
##  [4,]    4    6
##  [5,]    4    8
##  [6,]    6    8

您可以按rowMeans()

计算的方式
rowMeans(t(combn(x,2)))
## [1] 3 4 5 5 6 7

如果你计算出它的平均值,你得到了你想要的东西。

mean(rowMeans(t(combn(x,2))))
## [1] 5

答案 1 :(得分:0)

我认为OP正朝着正确的方向使用sample来绘制2次观察n次(如标题所示)。但不知何故,解决方案的角度朝着combn函数变化(这不是一个正确的选项)。

选项是将samplereplicate一起使用:

x <- c(2, 4, 6, 8)

mean(replicate(6, sample(x,2)))
#[1] 4.666667        #There is random-ness in set of observations selected.

在上述尝试中,replicate提供了6组2个观察结果:

replicate(6, sample(x,2))
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    2    4    4    4    8    8
# [2,]    6    2    2    8    6    2

就我个人而言,我认为combn在这里使用是正确的选择。 combn返回所选观察次数的所有可能组合。这意味着,每个观察(x)在从combn函数接收的组合集中出现的次数相同。这意味着,mean的{​​{1}}将与combn(x,2)相同。因此,在这种情况下使用mean(x)有什么意义。