同时对R

时间:2018-09-05 20:08:44

标签: r tidyverse tidyr anova simultaneous

我有一个如下所示的数据框,但有许多其他行。 “内容”和“过程”都可以是“ a”或“ n”。

dv1  dv2  dv3  content  process
1    3    4    a        a
2    1    2    a        n
5    3    5    n        a
4    3    2    n        n

我知道如何对以这种方式设置的数据运行多个ANOVA。我将运行以下命令:

dv <- df[,1:3]
output <- lm(as.matrix(dv) ~ content * proces, data = df, 
    contrasts = list(content = contr.sum, process = contr.sum))
summary(aov(output))

我想知道是否有一种方法可以在整洁的数据帧上做同样的事情,而不必只是使用spread()将其放回与上面相同的格式。我通常使用整洁的数据,而ANOVA是我仍然对不整洁的数据进行的仅有的分析之一。另外,如果您认为按照我的方式进行ANOVA操作确实更好,并且我想通过尝试在tidyverse中做所有事情来为自己创造更多的工作,请告诉我。

这是整洁的数据框的外观:

dv   value  content  process 
dv1  1      a        a
dv1  2      a        n
dv1  5      n        a
dv1  4      n        n
dv2  3      a        a
dv2  1      a        n
dv2  3      n        a
dv2  3      n        n
dv3  4      a        a
dv3  2      a        n
dv3  5      n        a
dv3  2      n        n

2 个答案:

答案 0 :(得分:0)

只需使用tidyr的gather()重塑形状并运行相同的过程:

sdf <- tidyr::spread(tidy_data, dv, value)
sdf
#   content process dv1 dv2 dv3
# 1       a       a   1   3   4
# 2       a       n   2   1   2
# 3       n       a   5   3   5
# 4       n       n   4   3   2

dv <- sdf[,3:5]
output <- lm(as.matrix(dv) ~ content * process, data = sdf, 
             contrasts = list(content = contr.sum, process = contr.sum))
summary(aov(output))

数据

txt <- "dv   value  content  process 
dv1  1      a        a
dv1  2      a        n
dv1  5      n        a
dv1  4      n        n
dv2  3      a        a
dv2  1      a        n
dv2  3      n        a
dv2  3      n        n
dv3  4      a        a
dv3  2      a        n
dv3  5      n        a
dv3  2      n        n"

tidy_data <- read.table(text = txt, header = TRUE)

答案 1 :(得分:0)

“整洁”的方式是将nest的数据dv,然后使用purrr::map对嵌套的数据进行ANOVA。

library(tidyverse)
df.aov <- df %>%
    group_by(dv) %>%
    nest() %>%
    mutate(aov = map(data, ~aov(value ~ content * process, data = .x)))
df.aov$aov
#[[1]]
#Call:
#   aov(formula = value ~ content * process, data = .x)
#
#Terms:
#                content process content:process
#Sum of Squares        9       0               1
#Deg. of Freedom       1       1               1
#
#Estimated effects may be unbalanced
#
#[[2]]
#Call:
#   aov(formula = value ~ content * process, data = .x)
#
#Terms:
#                content process content:process
#Sum of Squares        1       1               1
#Deg. of Freedom       1       1               1
#
#Estimated effects may be unbalanced
#
#[[3]]
#Call:
#aov(formula = value ~ content * process, data = .x)
#
#Terms:
#                    content process content:process
#Sum of Squares     0.25    6.25            0.25
#Deg. of Freedom       1       1               1
#
#Estimated effects may be unbalanced

df.aov包含两列dataaov,它们分别包含listtibble中的aov


样本数据

df <- read.table(text =
    "dv   value  content  process
dv1  1      a        a
dv1  2      a        n
dv1  5      n        a
dv1  4      n        n
dv2  3      a        a
dv2  1      a        n
dv2  3      n        a
dv2  3      n        n
dv3  4      a        a
dv3  2      a        n
dv3  5      n        a
dv3  2      n        n", header = T)