r语言 - 如何在宽格式数据帧上运行方差分析?



我被教导用公式运行方差分析: 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
> 

最新更新