我被教导用公式运行方差分析: AOV(因变量~自变量,数据集)
但我正在努力为如何为特定数据集运行方差分析,因为它分为三列,每列包含一个值。这三列分别指定为新生儿、青少年和成人(仓鼠年龄),每列中的值表示血压值。我需要进行测试以确定血压和年龄之间是否存在关系。
这是数据在 R 中的样子:
> hamster
Newborn adolescent adult
1 108 110 105
2 110 105 100
3 90 100 95
4 80 90 85
5 100 102 97
6 120 110 105
7 125 105 100
8 130 115 110
9 120 100 95
10 130 120 115
11 145 130 125
12 150 125 120
13 130 135 130
14 155 130 125
15 140 120 115
混淆,因为因变量是每列中的值^
R 有一个名为stack
的有用函数,可将您的数据格式转换为方差分析所需的格式。
aov(values ~ ind, stack(hamster))
# Call:
#
# aov(formula = values ~ ind, data = stack(hamster))
#
# Terms:
# ind Residuals
# Sum of Squares 1525.378 11429.867
# Deg. of Freedom 2 42
#
# Residual standard error: 16.49666
# Estimated effects may be unbalanced
第一步是重新排列数据,使其采用"长"格式而不是"宽"格式。 这可以在 base R 中使用reshape
函数完成,但在tidyr
包中使用gather
函数要容易得多:
library(tidyr)
result <- hampster %>%
gather(age, bp) %>%
aov(bp ~ age, .)
使用tidyr
还为我们提供了管道运算符(%>%
),它使您可以以一种漂亮的方式将命令链接在一起。 默认情况下,它的工作原理是获取上一个函数的结果并将其作为下一个函数的第一个参数插入。 在您的aov
函数中,我们使用.
运算符覆盖了这一点,以显式地将gather
函数生成的数据集作为第二个参数放入。
运行重复测量方差分析的代码如下,其中主体变量内有一个,主体变量之间没有。请注意,我们使用dplyr
包中的group_by()
来保留仓鼠 ID 号,以便我们可以将其用作方差分析中的错误项。
hamsterData <- "id Newborn adolescent adult
1 108 110 105
2 110 105 100
3 90 100 95
4 80 90 85
5 100 102 97
6 120 110 105
7 125 105 100
8 130 115 110
9 120 100 95
10 130 120 115
11 145 130 125
12 150 125 120
13 130 135 130
14 155 130 125
15 140 120 115"
hamster <- read.table(text = hamsterData,header = TRUE )
library(tidyr)
library(dplyr)
result <- hamster %>% group_by(id) %>%
gather(age,bp, Newborn,adolescent,adult)
result$age <- factor(result$age,levels=c("Newborn","adolescent","adult"))
options(contrasts=c("contr.sum","contr.poly"))
modelAOV <- aov(bp ~ age + Error(factor(id)),data = result)
summary(modelAOV)
。和输出:
> modelAOV <- aov(bp ~ age + Error(factor(id)),data = result)
> summary(modelAOV)
Error: factor(id)
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 14 10013 715.2
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
age 2 1525 762.7 15.07 3.6e-05 ***
Residuals 28 1417 50.6
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>