在R中自动执行多个受试者内ANOVA

时间:2015-11-11 08:47:33

标签: r for-loop anova

我的数据正在关注

 time   id  var1    var2    var3    var4    var5    var6
a   1   36.9    82.7    22.2    24.2    37.9    46.5
a   2   35.0    88.9    27.4    27.3    37.4    44.9
a   3   39.6    85.6    23.1    24.0    35.4    46.0
a   4   37.1    87.6    25.2    25.5    39.7    47.1
a   5   36.9    87.1    25.8    25.1    36.7    44.4
a   6   37.7    89.7    25.8    26.6    41.9    41.2
a   7   36.2    87.3    25.6    26.0    34.5    42.0
a   8   37.1    88.3    25.5    26.0    39.7    41.6
a   9   34.9    87.8    26.2    26.9    35.7    45.1
a   10  39.7    87.4    24.7    23.3    40.0    41.3
b   1   37.3    91.7    27.9    27.1    39.0    46.4
b   2   41.0    87.3    23.4    23.5    39.0    49.1
b   3   36.9    91.0    27.7    27.1    43.0    44.6
b   4   34.1    91.3    28.6    28.9    38.6    42.7
b   5   35.7    87.3    25.9    26.3    41.4    44.8
b   6   39.7    89.5    25.3    25.0    39.1    45.5
b   7   42.4    89.8    25.6    22.2    43.2    50.3
b   8   37.3    89.9    26.1    26.8    38.3    42.9
b   9   37.5    93.5    29.0    27.7    40.1    50.8
b   10  39.4    91.7    26.0    26.5    42.0    51.6
c   1   38.5    89.3    24.6    26.3    41.7    48.9
c   2   38.4    85.8    24.0    24.3    35.4    40.8
c   3   40.2    94.3    27.0    27.9    40.7    44.1
c   4   35.9    88.4    26.7    26.5    37.8    44.5
c   5   37.7    88.0    25.9    24.6    36.4    44.1
c   6   34.1    84.7    25.4    25.3    37.4    43.4
c   7   36.1    84.8    24.5    24.8    39.6    44.7
c   8   38.6    90.1    26.4    25.6    38.7    47.8
c   9   34.5    84.7    25.1    25.2    37.7    42.1
c   10  35.2    84.6    24.9    24.9    33.7    38.9

时间是主体内因素,var1到var6是不同的结果指标。我想对每个结果测量进行主体内方差分析,以检查其时间变化。我在ez包中使用ezANOVA函数进行分析。

由于我的真实数据集中有许多结果变量(列)(这里仅描述了六个用于说明目的),我希望编写一个for循环,以便可以自动执行多个主体内ANOVA测试。

我使用以下代码:

library(ez)
obj<-NULL
for(i in 1:6){
    obj[[i]] <- ezANOVA(data = data, 
                        dv = .(as.factor(colnames(data)[i+2])), 
                        wid = .(id), 
                        within = .(time), 
                        detailed = T, type = 3)
}

不幸的是,我收到以下错误消息:

Error in ezANOVA_main(data = data, dv = dv, wid = wid, within = within,  : 
  "as.factor(colnames(data)[i + 2])" is not a variable in the data frame provided.

当我将“var1”放在括号内时,该功能可以很好地使用以下代码:

ezANOVA(data = data3, 
        dv = .(var1), 
        wid = .(id), 
        within = .(time), 
        detailed = T, type = 3)

我认为ezANOVA函数可能只接受.()内的确切变量名称。那里不允许使用函数。

我是否知道是否有办法同时运行多个主题内ANOVA测试,而无需手动将每个结果指标的名称输入.()

或者,如果我们可以对ezANOVA源代码进行一些修改,可以通过在R中键入ezANOVA来获得,以便在.()内允许该功能。

欢迎任何解决方案!

1 个答案:

答案 0 :(得分:1)

long包不太熟悉,但不是修改包,而是使用ezANOVA进行更多的数据操作。 检查一下,让我知道它是否适合您,或者您是否希望我改进它。 您将所有结果作为数据框获得。

dplyr

我建议你一步一步地运行代码,看它是如何工作的。 尝试手动检查结果是否正确。 如果您对输出感到满意,或者您想要进行任何修改,请告诉我。