Как запустить ANOVA в широкоформатном формате data.frame? - PullRequest
0 голосов
/ 30 апреля 2018

Меня учили запускать ANOVA по формуле: 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

Запутано, потому что зависимой переменной являются эти значения ^ в каждом столбце

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

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
0 голосов
/ 30 апреля 2018

Код для запуска дисперсионного анализа повторных измерений с одним в пределах предметной переменной, а не между предметными переменными, выглядит следующим образом. Обратите внимание, что мы используем group_by() из пакета dplyr, чтобы сохранить номер идентификатора хомяка, чтобы мы могли использовать его как термин ошибки в 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
> 
0 голосов
/ 30 апреля 2018

Первым шагом является перестройка ваших данных, чтобы они имели «длинный» формат вместо «широкого». Это можно сделать в базе R с помощью функции reshape, но гораздо проще использовать функцию gather в пакете tidyr:

library(tidyr)
result <- hampster %>%
  gather(age, bp) %>%
  aov(bp ~ age, .)

Использование tidyr также дает нам оператор канала (%>%), который позволяет вам красиво комбинировать команды. По умолчанию он работает, беря результат предыдущей функции и вставляя его в качестве первого аргумента следующей функции. В вашей функции aov мы отвергли это с помощью оператора ., чтобы явно поместить набор данных, полученный из функции gather, в качестве второго аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...