r——单行单因素方差分析



我想做一个方差分析来比较4组之间的差异(ABCD(。每个组在不同的列中包含不均匀数量的重复,每行代表我想要测试的一个单独项目。您可以将每一列视为一个复制,并且不同行之间没有关系。最后,我希望弄清楚哪一项(行(在4组之间显示出显著差异。

请参阅下面的数据结构示例。事实上,所有数据都已经标准化了。

A2A3B2<1><2>>>9>>>//tr>3>25>>>>><23>><12>>15>>25<12><13>5
A1 B1C1D12D3
蛋白1 15 30286730456643
蛋白2 2 456542312135
蛋白3 24356542513
蛋白4 243565423

一种方法:

首先,将数据重塑为模型可以处理的格式。这使用了tidyverse包。

df_long <- df %>%
pivot_longer(cols = 2:ncol(.)) %>%
pivot_wider(names_from = prot, values_from = value) %>%
separate(name, into = c("trt"), sep = "\d")

看起来像:

trt   protein1 protein2 protein3 protein4
<chr>    <dbl>    <dbl>    <dbl>    <dbl>
1 A           15        2        2        2
2 A           30        4        4        4
3 A           28        3        3        3
4 B            6       56       56       56
5 B            7       54       54       54
6 C            9       23       23       23
7 C           30       25       25       25
8 D           45       12       12       12
9 D           66       13       13       13
10 D           43        5        5        5

然后你可以很容易地使用你想应用的任何模型/统计测试。例如,要为每列生成ANOVA,可以定义一个辅助函数,然后映射到列上:

fit_aov <- function(col) {
aov(col ~ trt, data = df_long)
}
anovas <- map(df_long[, 2:ncol(df_long)], fit_aov)
summary(anovas$protein2)
Df Sum Sq Mean Sq F value   Pr(>F)    
trt          3   3648  1216.0   165.8 3.69e-06 ***
Residuals    6     44     7.3                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

最新更新