【问题标题】:How do I perform calculations using the columns of a data table from an ANOVA using the dplyr and rstatix packages?如何使用 dplyr 和 rstatix 包使用来自 ANOVA 的数据表的列执行计算?
【发布时间】:2022-01-05 11:39:38
【问题描述】:

我有一个数据框并在数据之间进行了方差分析。在方差分析之后,我想使用其中一个结果列进行计算并使用mutate() 函数创建一个新列。但是,会出现一个错误,表明无法对 anova 类对象执行此操作:

Error: `x` must be a vector, not a <anova_test/data.frame/rstatix_test> object.

谁能帮我用方差分析结果的 F 列进行计算 (F + 1)?

library(dplyr)
library(rstatix)

Temperature <- factor(c(rep("cold", times = 4),
                        rep("hot", times = 4)),
                      levels = c("cold", "hot"))

Light <- factor(rep(c(rep("blue", times = 2),
                      rep("yellow", times = 2)),
                    times = 2),
                levels = c("blue", "yellow"))

Result <- c(90.40, 85.20, 21.70, 25.30,
            75.12, 77.36, 6.11, 10.8)

Data <- data.frame(Temperature, Light, Result)

NewColumn <- Data %>%
  anova_test(formula = Result ~ Temperature*Light) %>%
  mutate(New= `F` + 1) #<-------- Not working

【问题讨论】:

标签: r dataframe dplyr anova rstatix


【解决方案1】:

正如 JKupzig 在 cmets 中提到的,这是dplyr 中的一个已知问题,如下所述:https://github.com/tidyverse/dplyr/issues/5286

这个问题是由anova_test() 创建一个输出数据框引起的类向量中的元素不是data.frame。您可以按如下方式验证 anova 的输出类别:

Data %>% anova_test(formula = Result ~ Temperature*Light) %>% class()

[1] "anova_test"   "data.frame"   "rstatix_test"

作为一种解决方法,您可以在anova_test() 之后将as_tibble() 添加到dplyr 管道。这会将类按顺序重置为 tbl_dftbldata.frame

Data %>% anova_test(formula = Result ~ Temperature*Light) %>% as_tibble() %>% class()

[1] "tbl_df"     "tbl"        "data.frame"

Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>% 
    as_tibble() %>%
    mutate(New= `F` + 1)

# A tibble: 3 x 8
  Effect              DFn   DFd        F         p `p<.05`   ges     New
  <chr>             <dbl> <dbl>    <dbl>     <dbl> <chr>   <dbl>   <dbl>
1 Temperature           1     4   42.2   0.003     "*"     0.914   43.2 
2 Light                 1     4 1041.    0.0000055 "*"     0.996 1042.  
3 Temperature:Light     1     4    0.725 0.442     ""      0.153    1.72

请注意,此操作会删除 anova_testrstatix_test 类。如果这些类很重要,请使用 magrittr 包中的 set_class() 的不同解决方法(magrittrdplyr 的依赖项,因此无需单独安装)。

Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>%
    magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
    class()

[1] "anova_test"   "rstatix_test" "data.frame" 

Data %>%
   anova_test(formula = Result ~ Temperature*Light) %>%
   magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
   mutate(New = `F` + 1)

ANOVA Table (type II tests)

             Effect DFn DFd        F        p p<.05   ges      New
1       Temperature   1   4   42.250 3.00e-03     * 0.914   43.250
2             Light   1   4 1041.366 5.50e-06     * 0.996 1042.366
3 Temperature:Light   1   4    0.725 4.42e-01       0.153    1.725

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2023-02-21
    • 2019-11-02
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多