按行进行单因素方差分析

Posted

技术标签:

【中文标题】按行进行单因素方差分析【英文标题】:One-way ANOVA analysis by row 【发布时间】:2022-01-19 23:01:59 【问题描述】:

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

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

A1 A2 A3 B1 B2 C1 C2 D1 D2 D3
protein1 15 30 28 6 7 9 30 45 66 43
protein2 2 4 3 56 54 23 25 12 13 5
protein3 2 4 3 56 54 23 25 12 13 5
protein4 2 4 3 56 54 23 25 12 13 5

【问题讨论】:

执行此操作的标准方法是将每个观察值作为一行,将每个变量作为一列。您对重新格式化数据有什么反对意见? 我不反对重新格式化这些数据,只是不知道如何在 R 中以“标准方式”处理这个问题。 【参考方案1】:

一种方法:

首先将数据重塑为模型可以处理的格式。这使用了 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

【讨论】:

非常感谢您向我展示! @wanying1107 这能回答你的问题吗? 谢谢,效果很好。我无法弄清楚的最后一步是将每种蛋白质的 p 值打印成一行。我使用 summary(anovas$protein2)[[1]][1,5] 打印一种蛋白质的值,但无法弄清楚如何将它们一起打印成一行。你能告诉我怎么做吗?非常感谢!

以上是关于按行进行单因素方差分析的主要内容,如果未能解决你的问题,请参考以下文章

如何用SPSS进行多因素方差分析

如何用SPSS进行多因素方差分析

如何用SPSS进行多因素方差分析

如何用SPSS进行多因素方差分析

如何用SPSS进行多因素方差分析?

如何用SPSS进行多因素方差分析