我被教导使用以下公式运行方差分析: aov(因变量〜自变量,数据集)
但我正在努力解决如何为特定数据集运行ANOVA,因为它分为三列,每列包含一个值。三列被指定为新生儿,青少年和成年人(这是仓鼠年龄),每列中的值代表血压值。我需要进行一项测试,以确定血压和年龄之间是否存在关系。
这是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
因为因变量是每列中的值^而感到困惑
答案 0 :(得分:6)
第一步是重新排列您的数据,以便在#34; long"格式而不是"宽"格式。这可以使用reshape
函数在基础R中完成,但使用gather
包中的tidyr
函数要容易得多:
library(tidyr)
result <- hampster %>%
gather(age, bp) %>%
aov(bp ~ age, .)
使用tidyr
还为我们提供了管道运算符(%>%
),让您以一种漂亮的方式将命令链接在一起。默认情况下,它通过获取前一个函数的结果并将其作为下一个函数的第一个参数插入来工作。在aov
函数中,我们使用.
运算符覆盖此函数,以明确地将gather
函数生成的数据集作为第二个参数。
答案 1 :(得分:5)
R有一个名为stack
的有用功能,可将您的数据格式转换为ANOVA所需的格式。
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
答案 2 :(得分:2)
在主题变量内运行重复度量方差分析的代码,主题变量之间没有差异,如下所示。请注意,我们使用group_by()
包中的dplyr
来保留仓鼠ID号,以便我们可以将其用作ANOVA中的错误词。
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
>