如何使用按行组织的样本在 R 中执行单因素方差分析?

How to perform single factor ANOVA in R with samples organized by row?

我有一个数据集,其中样本按行分组。这是因为我正在处理不同的副本。这是我的数据格式的示例,其中样本 1 位于第一行,其 3 个重复值 (-5.11, -6.64, -2.44)

R1       R2      R3
-5.11   -6.64   -2.44
-4.77   -6.64    2.49
-6.64   -4.01    3.07
-6.64    0.66   -3.65
-3.06    2.7    -6.64
 3.26    3.23    1.64
 2.34    3.28    3.25
 3.14    0.79    3.18
 2.98    3.12   -6.64
-6.64   -1.85   -3.86

我想做的是使用 3 个重复项逐行进行方差分析,并有一个包含 p 值的新列。 这就是它的样子:

R1       R2      R3     p-value
-5.11   -6.64   -2.44   0.91    (1º anova)
-4.77   -6.64    2.49   0.006   (2º anova)
-6.64   -4.01    3.07   0.05    (3º anova)
-6.64    0.66   -3.65   0.0001
-3.06    2.7    -6.64   0.0006
 3.26    3.23    1.64   0.60
 2.34    3.28    3.25    ... 
 3.14    0.79    3.18    ...
 2.98    3.12   -6.64    ... 
-6.64   -1.85   -3.86    ...

我试图用 Excel 来做到这一点,但问题是 Excel 创建了一个摘要 table,而不仅仅是结果。对于少数结果,这没关系,我复制了 p 值并复制到第四列,但在这种情况下我有 13000 行...

这是一个可重现的例子:

R1 = c(-5.11,-4.77,-6.64,-6.64,-3.06,3.26,2.34)
R2 = c(-6.64,-6.64,-4.01,0.66,2.7,3.23,3.28)
R3 = c(-2.44,2.49,3.07,-3.65,-6.64,1.64,3.25)

mydata = data.frame(cbind(R1,R2,R3))

我尝试使用 R 来进行此分析,但我没有找到逐行进行分析的方法。我找到的唯一选择是按列。

提前谢谢你。

根据找到的建议 here,我们使用 stack 生成一个包含一个 value 和一个指标变量 (ind) 的数据框,然后执行 aov:

R1 = c(-5.11,-4.77,-6.64,-6.64,-3.06,3.26,2.34)
R2 = c(-6.64,-6.64,-4.01,0.66,2.7,3.23,3.28)
R3 = c(-2.44,2.49,3.07,-3.65,-6.64,1.64,3.25)

mydata = data.frame(cbind(R1,R2,R3))

mat <- t(mydata)
rownames(mat) <- NULL
colnames(mat) <- letters[seq_len(ncol(mat))]
df <- stack(as.data.frame(mat))

> head(df)
  values ind
1  -5.11   a
2  -6.64   a
3  -2.44   a
4  -4.77   b
5  -6.64   b
6   2.49   b

aov(values ~ ind, data = df)

Call:
   aov(formula = values ~ ind, data = df)

Terms:
                     ind Residuals
Sum of Squares  164.5202  179.6335
Deg. of Freedom        6        14

Residual standard error: 3.582033
Estimated effects may be unbalanced

如果我们需要更多信息,我们也可以使用anova(lm(...)):

test <- anova(lm(values ~ ind, data = df))
summary(test)

       Df         Sum Sq         Mean Sq         F value          Pr(>F)      
 Min.   : 6   Min.   :164.5   Min.   :12.83   Min.   :2.137   Min.   :0.1134  
 1st Qu.: 8   1st Qu.:168.3   1st Qu.:16.48   1st Qu.:2.137   1st Qu.:0.1134  
 Median :10   Median :172.1   Median :20.13   Median :2.137   Median :0.1134  
 Mean   :10   Mean   :172.1   Mean   :20.13   Mean   :2.137   Mean   :0.1134  
 3rd Qu.:12   3rd Qu.:175.9   3rd Qu.:23.77   3rd Qu.:2.137   3rd Qu.:0.1134  
 Max.   :14   Max.   :179.6   Max.   :27.42   Max.   :2.137   Max.   :0.1134  
                                              NA's   :1       NA's   :1  

编辑:ANOVA 不会给你单一的 p 值,但 lm 会:

总结(lm(值~ind,数据=df))

Call:
lm(formula = values ~ ind, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-4.307 -1.797 -0.440  0.550  5.597 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   -4.730      2.068  -2.287   0.0383 *
indb           1.757      2.925   0.601   0.5577  
indc           2.203      2.925   0.753   0.4637  
indd           1.520      2.925   0.520   0.6114  
inde           2.397      2.925   0.819   0.4263  
indf           7.440      2.925   2.544   0.0234 *
indg           7.687      2.925   2.628   0.0199 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.582 on 14 degrees of freedom
Multiple R-squared:  0.478, Adjusted R-squared:  0.2543 
F-statistic: 2.137 on 6 and 14 DF,  p-value: 0.1134