R 循环的单向方差分析:如何迭代一个数据帧的多个列?
这是我第一次来这里,所以放松点!老实说,以我花在故障排除上的时间,我本可以手工完成每一项工作,但我决心让这项工作顺利进行 我想运行71个不同的单因素方差分析,比较71个大脑感兴趣区域(ROI)和实验组(group)的体积。分为三组:对照组(1)、弹性组(2)和易感组(3) 我的tibble数据框如下所示:R 循环的单向方差分析:如何迭代一个数据帧的多个列?,r,dataframe,for-loop,anova,R,Dataframe,For Loop,Anova,这是我第一次来这里,所以放松点!老实说,以我花在故障排除上的时间,我本可以手工完成每一项工作,但我决心让这项工作顺利进行 我想运行71个不同的单因素方差分析,比较71个大脑感兴趣区域(ROI)和实验组(group)的体积。分为三组:对照组(1)、弹性组(2)和易感组(3) 我的tibble数据框如下所示: > head(df) # A tibble: 6 x 74 ID group whole_brain amygdala arbor_vitae auditory_cortex
> head(df)
# A tibble: 6 x 74
ID group whole_brain amygdala arbor_vitae auditory_cortex bed_nuclei
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 01mc 1 495. 16.5 5.72 5.29 1.30
2 02mc 1 494. 16.8 5.95 5.29 1.30
3 6mc 1 491. 16.9 5.75 5.31 1.17
4 11mc 1 485. 16.5 5.70 5.04 1.31
5 14mc 1 491. 17.1 6.03 5.06 1.21
6 18mc 1 492. 16.5 6.07 5.12 1.23
当我将aov()
中的第一个对象(df[,I]
)交换为一个ROI的名称(例如amygdala
)时,输出给出每个迭代ROI列名,下面是所选的方差分析(amygdala~组,data=df
)。这告诉我for循环是有效的,但是我如何克服错误信息,并让它系统地将组与每个ROI进行比较呢
任何帮助都将是惊人的,即使指出这是一个完全旧的方法,并且有更容易使用的方法
非常感谢:)看起来不是for循环本身不起作用,而是传递给aov的依赖变量之一是一个列表,而不是数字 要确定哪些列是列表,您可以:
sappy(df,class)
并查找列表和修复的变量
df$badvariable < - unlist(df$badvariable)
在方差分析的摘要中,是否要保留所有元素?你们需要从所有ANOVA中得到什么样的输出?底线是,我想知道所有ROI与组的比较的效应大小(R平方)、p值和置信区间(不是非常必要,但会很好)。从那些重要的测试中,我可以进行事后测试。
Error in model.frame.default(formula = df[, i] ~ group, data = df, drop.unused.levels = TRUE) :
invalid type (list) for variable 'df[, i]'
df$badvariable < - unlist(df$badvariable)
for(i in 4:ncol(df))
{
column <- names(df[i])
#tidy will summarise and return neat format
avz <- broom::tidy(aov(df[,i] ~ group, data = df))
# Add this condition if you only want aov with P < 0.05 printed
if(avz$p.value[1] < 0.05) {
print(column)
print(avz)
}
}