所有数据子集均值的均值与总体均值不同

时间:2014-09-29 06:57:05

标签: r

我有一个大型数据集,如下所示:

str(ldt)
 data.frame':   116105 obs. of  11 variables:
 $ s      : Factor w/ 35 levels "1","10","11",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ PM     : Factor w/ 3 levels "C","F","NF": 3 3 3 3 3 3 3 3 3 3 ...
 $ day    : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ block  : Factor w/ 3 levels "1","2","3": 2 2 2 2 2 2 2 2 2 2 ...
 $ item   : chr  "parity" "grudoitong" "gunirec" "pirul" ...
 $ C      : logi  TRUE TRUE TRUE TRUE TRUE FALSE ...
 $ S      : Factor w/ 2 levels "Nonword","Word": 2 1 1 1 2 2 2 1 2 1 ...
 $ R      : Factor w/ 2 levels "Nonword","Word": 2 1 1 1 2 1 2 1 2 1 ...
 $ RT     : num  0.838 1.026 0.93 0.553 0.815 ...

当我从该数据集中获得因子时,然后获得这些均值,它与原始数据集的平均值略有不同。当我将它分成更多因素并获得这些方法的均值时,它又是不同的。例如:

mean(ldt$RT[ldt$C])
[1] 0.6630013
mean(tapply(ldt$RT[ldt$C],list(s=ldt$s[ldt$C], PM= ldt$PM[ldt$C]),mean))
[1] 0.6638781
mean(tapply(ldt$RT[ldt$C],list(s=ldt$s[ldt$C], day = ldt$day[ldt$C], item=ldt$S[ldt$C], PM=ldt$PM[ldt$C]),mean))                
[1] 0.6648401

究竟是什么造成了这种差异?我唯一可以想象的是子集意味着四舍五入。这就是答案不同的原因吗?这里的工作机制是什么?

谢谢

1 个答案:

答案 0 :(得分:7)

平均值与所有数字的平均值不同。

简单示例:获取数据集

1,3,5,6,7

1和3的平均值显然是2,平均值5,6,7是6。 因此,手段的平均值为4.

但是,我们有1 + 3 + 5 + 6 + 7 = 22和22/5 = 4.4。

因此,您的问题出在计算的数学方面而不是您的代码。 要克服这个问题,你必须使用加权平均值,例如将外部均值的加权与每组中的数值加权除以观察总数。在我们的例子中:

2/5 * 2 + 3/5 * 6 = 4.4