2014-09-29 80 views
0

不同我有一個大的數據集,它看起來像這樣:是指從總平均

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

數據中是否有NA值?您可以顯示以下輸出:sapply(ldt,function(x)sum(is.na(x)))和head(ldt) – rnso 2014-09-29 07:49:35

回答

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