2015-10-28 51 views
0

AOV分析誤差項我有一個數據幀「DF」修正了作爲R

str(df) 
'data.frame': 120 obs. of 5 variables: 
$ id  : Factor w/ 30 levels "1","2","3","4",..: 1 1 1 1 7 7 7 7 13 13 ... 
$ GroupID : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ... 
$ score : num 0.00667 0.48125 0.61538 0.55714 0.23077 ... 
$ Control1: Factor w/ 2 levels "0","1": 1 1 2 2 1 1 2 2 1 1 ... 
$ Control2: Factor w/ 2 levels "0","1": 1 2 1 2 1 2 1 2 1 2 ... 

我有30名受試者(以便ID從1到30),在5組分(組ID從1到5 )。當我將兩個變量Control1和Control2分別設置爲0和1(因此有4種組合:00,01,10,11)時,每個組運行4個實驗。對於每個實驗我記錄一個值(變量'分數')。

因此,主題1,2..6屬於組1,主題7,8..12屬於組2,依此類推。 Control1和Control2是實驗條件,例如,Control1 == 0表示在實驗過程中關閉燈光,Control2 == 1表示在實驗過程中打開聲音,'score'是我在實驗中從每個對象測量的值。

現在我想用'aov'函數分析數據。我想告訴R,Control1和Control2是固定效應變量,GroupID是隨機變量。我想看看GroupID和Control1和Control2的交互,以及GroupID和Control1,GroupID和Control2等之間的交互。

所以我做:

> summary (aov (score ~ GroupID * Control1 * Control2 + Error(id/(Control1 * Control2)), data = df)) 

Error: id 
      Df Sum Sq Mean Sq F value Pr(>F) 
GroupID 4 2.004 0.5010 6.189 0.00132 ** 
Residuals 25 2.024 0.0809     
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Error: id:Control1 
       Df Sum Sq Mean Sq F value Pr(>F) 
Control1   1 0.4955 0.4955 13.50 0.00114 ** 
GroupID:Control1 4 0.3832 0.0958 2.61 0.05974 . 
Residuals  25 0.9177 0.0367     
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Error: id:Control2 
       Df Sum Sq Mean Sq F value Pr(>F)  
Control2   1 0.4132 0.4132 21.261 0.000102 *** 
GroupID:Control2 4 0.0982 0.0246 1.263 0.310568  
Residuals  25 0.4858 0.0194      
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Error: id:Control1:Control2 
          Df Sum Sq Mean Sq F value Pr(>F)  
Control1:Control2   1 0.3741 0.3741 23.899 4.97e-05 *** 
GroupID:Control1:Control2 4 0.1689 0.0422 2.698 0.0538 . 
Residuals     25 0.3914 0.0157      
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

請看控制1的F值。它顯示值'13.50',它是控制1的平方和(0.4955)除以殘差平方和(0.9177),然後與殘差自由度(25)相乘的結果。但我想控制1的F比應計算爲:控制1的總和平方(0.4955)除以組ID:控制1的總和平方(0.3822)然後乘以組ID的自由度:控制1(4),所以它應該是5.186。另外,關鍵的F值應該根據自由度4而不是25來計算。所以在這種情況下,它並不重要。

我的同事爭辯說,問題可能在於,R明白GroupID是固定效應,而不是隨機效應,但她不知道R.無論如何,這只是一種建議。

那麼,如何告訴R如上所述計算F比?

我的完整數據:

df 
    id GroupID  score Control1 Control2 
1 1  1 0.006666667  0  0 
2 1  1 0.481250000  0  1 
3 1  1 0.615384615  1  0 
4 1  1 0.557142857  1  1 
5 7  2 0.230769231  0  0 
6 7  2 0.428571429  0  1 
7 7  2 0.218750000  1  0 
8 7  2 0.260000000  1  1 
9 13  3 0.328571429  0  0 
10 13  3 0.412500000  0  1 
11 13  3 1.000000000  1  0 
12 13  3 0.976923077  1  1 
13 19  4 0.256250000  0  0 
14 19  4 0.576923077  0  1 
15 19  4 0.714285714  1  0 
16 19  4 0.573333333  1  1 
17 25  5 0.353846154  0  0 
18 25  5 0.446666667  0  1 
19 25  5 0.885714286  1  0 
20 25  5 0.525000000  1  1 
21 2  1 0.027272727  0  0 
22 2  1 0.050000000  0  1 
23 2  1 0.153846154  1  0 
24 2  1 0.142857143  1  1 
25 8  2 0.161538462  0  0 
26 8  2 0.578571429  0  1 
27 8  2 0.430000000  1  0 
28 8  2 0.727272727  1  1 
29 14  3 0.585714286  0  0 
30 14  3 0.490000000  0  1 
31 14  3 0.836363636  1  0 
32 14  3 0.792307692  1  1 
33 20  4 0.630000000  0  0 
34 20  4 0.738461538  0  1 
35 20  4 0.221428571  1  0 
36 20  4 0.254545455  1  1 
37 26  5 0.092307692  0  0 
38 26  5 0.227272727  0  1 
39 26  5 0.235714286  1  0 
40 26  5 0.410000000  1  1 
41 3  1 0.071428571  0  0 
42 3  1 0.472727273  0  1 
43 3  1 0.527272727  1  0 
44 3  1 0.312500000  1  1 
45 9  2 0.154545455  0  0 
46 9  2 0.168750000  0  1 
47 9  2 0.154545455  1  0 
48 9  2 0.114285714  1  1 
49 15  3 0.187500000  0  0 
50 15  3 0.645454545  0  1 
51 15  3 0.700000000  1  0 
52 15  3 0.845454545  1  1 
53 21  4 0.236363636  0  0 
54 21  4 0.636363636  0  1 
55 21  4 0.750000000  1  0 
56 21  4 0.850000000  1  1 
57 27  5 0.472727273  0  0 
58 27  5 0.350000000  0  1 
59 27  5 0.393750000  1  0 
60 27  5 0.336363636  1  1 
61 4  1 0.015384615  0  0 
62 4  1 0.600000000  0  1 
63 4  1 0.460000000  1  0 
64 4  1 0.458823529  1  1 
65 10  2 0.600000000  0  0 
66 10  2 0.511764706  0  1 
67 10  2 0.414285714  1  0 
68 10  2 0.515384615  1  1 
69 16  3 0.576470588  0  0 
70 16  3 0.600000000  0  1 
71 16  3 0.715384615  1  0 
72 16  3 0.820000000  1  1 
73 22  4 0.250000000  0  0 
74 22  4 0.500000000  0  1 
75 22  4 0.647058824  1  0 
76 22  4 0.684615385  1  1 
77 28  5 0.230000000  0  0 
78 28  5 0.238461538  0  1 
79 28  5 0.200000000  1  0 
80 28  5 0.321428571  1  1 
81 5  1 0.427272727  0  0 
82 5  1 0.716666667  0  1 
83 5  1 0.792307692  1  0 
84 5  1 0.630000000  1  1 
85 11  2 0.092307692  0  0 
86 11  2 0.720000000  0  1 
87 11  2 0.500000000  1  0 
88 11  2 0.790909091  1  1 
89 17  3 0.400000000  0  0 
90 17  3 1.000000000  0  1 
91 17  3 1.000000000  1  0 
92 17  3 1.000000000  1  1 
93 23  4 0.600000000  0  0 
94 23  4 0.684615385  0  1 
95 23  4 0.630000000  1  0 
96 23  4 0.572727273  1  1 
97 29  5 0.353846154  0  0 
98 29  5 0.490909091  0  1 
99 29  5 0.470000000  1  0 
100 29  5 0.325000000  1  1 
101 6  1 0.109090909  0  0 
102 6  1 0.558333333  0  1 
103 6  1 0.320000000  1  0 
104 6  1 0.090909091  1  1 
105 12  2 0.026666667  0  0 
106 12  2 0.418181818  0  1 
107 12  2 0.416666667  1  0 
108 12  2 0.254545455  1  1 
109 18  3 0.245454545  0  0 
110 18  3 0.833333333  0  1 
111 18  3 0.836363636  1  0 
112 18  3 0.946666667  1  1 
113 24  4 0.508333333  0  0 
114 24  4 0.646666667  0  1 
115 24  4 0.581818182  1  0 
116 24  4 0.609090909  1  1 
117 30  5 0.866666667  0  0 
118 30  5 0.745454545  0  1 
119 30  5 0.481818182  1  0 
120 30  5 0.775000000  1  1 
+0

如果你知道如何手動計算,爲什麼你需要R來爲你做?如果我正確地閱讀你的問題,這對我來說似乎是一個邊緣案例。 –

+0

另外,通常最好使用'dput(df)'來顯示數據,而不是像現在那樣打印'df'。 –

+0

Hi @Alex,但計算所有東西(平方和,自由度以及所有這些東西的總和......)會很痛苦。我相信Excel甚至可以做到,但R可以以更好的方式完成。 – mamatv

回答

0

這裏有一個答案,雖然不是一個 「解決方案」。

aov是對lm函數進行方差分析的包裝。它不是設計的來處理隨機效應。因此,正如我在評論中提到的那樣,你的申請是一個邊緣案例。

如果您希望編寫自定義代碼來處理這種邊緣情況,那麼您非常歡迎。 SO不是一個免費的開發服務,或者正如我最近在C++中提到的其中一個問題中提到的那樣:「不,我們不是在這裏爲你寫代碼,對不起。」

+0

嗨,我很抱歉,如果有什麼不明確的地方。我不指望有人爲我寫代碼,但如果你的答案是正確的,那麼這是一個有效的答案。 – mamatv