我有一个大型数据集,如下所示:
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
究竟是什么造成了这种差异?我唯一可以想象的是子集意味着四舍五入。这就是答案不同的原因吗?这里的工作机制是什么?
谢谢
答案 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