我有一个数据框" df"
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组(GroupID从1到5)。每组运行4次实验,当我将两个变量Control1和Control2分别设置为0和1时(因此有4种组合:00,01,10,11)。对于每个实验,我都会记录一个值(变量'得分')。
因此,科目1,2..6属于第1组,科目7,8..12属于第2组,依此类推。 Control1和Control2是实验条件,例如,Control1 == 0表示在实验过程中关灯,Control2 == 1表示在实验过程中打开声音,并得分'是我在实验中从每个主题测量的值。
现在我想用' 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
请查看Control1的F值。它显示了值
 13.50',这是控制1的和平方(0.4955)除以残差和的平方(0.9177)的结果,然后乘以残差的自由度(25)。
但是我希望Control1的F比应该计算为:Control1的总和平方(0.4955)除以GroupID的Sum Square:Control1(0.3822)然后乘以GroupID的自由度:Control1(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 :(得分:0)
这是一个答案,但不是解决方案。"
aov
是执行ANOVA的lm
函数的包装器。处理随机效果不是设计。因此,正如我在评论中提到的,您的应用程序是一个边缘案例。
如果您希望编写自定义代码来处理此边缘情况,那么您非常欢迎。 SO不是一个免费的开发服务,或者最近在我提到的关于C ++的一个问题中提到的那样;不,我们不是在为你编写代码。遗憾"