Извлечь p-значения и тесты `mvabund::anova.manyglm` в виде одной таблицы

Я хотел бы получить раздел «Одномерные тесты» из результата anova.manyglm, но атрибуты по умолчанию дают две отдельные таблицы, поэтому я пытаюсь объединить их, чтобы тест и столбцы p-значения одной и той же переменной оставались рядом друг с другом. .

library(mvabund)
data("Tasmania")
attach(Tasmania)
tasmvabund=mvabund(copepods)
tas_mod = manyglm(tasmvabund~ block*treatment)
tas_sum <- summary.manyglm(tas_mod)
tas_aov <- anova.manyglm(tas_mod, resamp = "perm.resid",  p.uni= "adjusted", nBoot = 50)



  > str(tas_aov)
List of 11
 $ family      : chr "negative.binomial"
 $ p.uni       : chr "adjusted"
 $ test        : chr "Dev"
 $ cor.type    : chr "I"
 $ resamp      : chr "perm.resid"
 $ nBoot       : num 50
 $ shrink.param: num [1:4] 0 0 0 0
 $ n.bootsdone : num 50
 $ table       :'data.frame':   4 obs. of  4 variables:
  ..$ Res.Df  : int [1:4] 15 12 11 8
  ..$ Df.diff : num [1:4] NA 3 1 3
  ..$ Dev     : num [1:4] NA 117.5 66.9 37.4
  ..$ Pr(>Dev): num [1:4] NA 0.0196 0.0196 0.0588
  ..- attr(*, "heading")= chr [1:2] "Analysis of Deviance Table\n" "Model: tasmvabund ~ block * treatment"
  ..- attr(*, "title")= chr "\nMultivariate test:\n"
 $ uni.p       : num [1:4, 1:12] NA 0.4706 0.0196 0.451 NA ...
  ..- attr(*, "title")= chr "Univariate Tests:"
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "(Intercept)" "block" "treatment" "block:treatment"
  .. ..$ : chr [1:12] "Ameira" "Adopsyllus" "Ectinosoma" "Ectinosomat" ...
 $ uni.test    : num [1:4, 1:12] NA 4.93 13.94 6.35 NA ...
  ..- attr(*, "title")= chr "Univariate Tests:"
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "(Intercept)" "block" "treatment" "block:treatment"
  .. ..$ : chr [1:12] "Ameira" "Adopsyllus" "Ectinosoma" "Ectinosomat" ...
 - attr(*, "class")= chr "anova.manyglm"

При этом печатается только многомерный раздел.

tas_aov$table
'data.frame':   4 obs. of  4 variables:
 $ Res.Df  : int  15 12 11 8
 $ Df.diff : num  NA 3 1 3
 $ Dev     : num  NA 117.5 66.9 37.4
 $ Pr(>Dev): num  NA 0.0196 0.0196 0.0588
 - attr(*, "heading")= chr [1:2] "Analysis of Deviance Table\n" "Model: tasmvabund ~ block * treatment"
 - attr(*, "title")= chr "\nMultivariate test:\n"

Это печатает только p-значения одномерных тестов.

tas_aov$uni.p
 str(tas_aov$uni.p)
 num [1:4, 1:12] NA 0.4706 0.0196 0.451 NA ...
 - attr(*, "title")= chr "Univariate Tests:"
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:4] "(Intercept)" "block" "treatment" "block:treatment"
  ..$ : chr [1:12] "Ameira" "Adopsyllus" "Ectinosoma" "Ectinosomat" ...

И это печатает только тестовую таблицу.

tas_aov$uni.test
 str(tas_aov$uni.test)
 num [1:4, 1:12] NA 4.93 13.94 6.35 NA ...
 - attr(*, "title")= chr "Univariate Tests:"
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:4] "(Intercept)" "block" "treatment" "block:treatment"
  ..$ : chr [1:12] "Ameira" "Adopsyllus" "Ectinosoma" "Ectinosomat" ...

Итак, я пытаюсь объединить их, а затем упорядочить столбцы по именам, но пока мне это не удалось.

tab <- cbind(tas_aov$uni.p, tas_aov$uni.test)

tab[ , order(names(tab))]
Error in order(names(tab)) : argument 1 is not a vector

В идеале мне нужен только исходный раздел Univariate, потому что в нем аккуратно напечатаны имена столбцов, т. Е. Тест рядом с p-значениями, но я доволен просто объединением таблиц. Большое спасибо за любые подсказки.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из подходов состоит в том, чтобы поворачивать обе матрицы дольше, а затем соединять их изнутри:

library(tidyverse)
tas_aov$uni.test %>%
  as.data.frame %>%
  rownames_to_column("variable") %>%
  pivot_longer(-variable,names_to = "species", values_to = "test") %>%
inner_join({
tas_aov$uni.p %>%
    as.data.frame %>%
    rownames_to_column("variable") %>%
    pivot_longer(-variable,names_to = "species", values_to = "pval")}) %>%
dplyr::filter(!is.na(test))
# A tibble: 36 x 4
   variable species      test   pval
   <chr>    <chr>       <dbl>  <dbl>
 1 block    Ameira       4.93 0.549 
 2 block    Adopsyllus  17.6  0.0392
 3 block    Ectinosoma   7.71 0.549 
 4 block    Ectinosomat 10.9  0.235 
 5 block    Haloschizo   3.13 0.725 
 6 block    Lepta.A     20.9  0.0196
 7 block    Lepta.B      8.02 0.549 
 8 block    Lepta.C     13.8  0.0784
 9 block    Mictyricola  6.77 0.549 
10 block    Parevansula  6.10 0.549 
# … with 26 more rows

Если вы предпочитаете, вы можете вернуться к широкому:

tas_aov$uni.test %>%
  as.data.frame %>%
  rownames_to_column("variable") %>%
  pivot_longer(-variable,names_to = "species", values_to = "test") %>%
inner_join({
tas_aov$uni.p %>%
    as.data.frame %>%
    rownames_to_column("variable") %>%
    pivot_longer(-variable,names_to = "species", values_to = "pval")}) %>%
dplyr::filter(!is.na(test)) %>%
pivot_wider(id_cols = "species", names_from = "variable", 
            values_from = c("test","pval"),names_glue = "{variable}_{.value}") %>%
relocate("species", sort(names(.)))
# A tibble: 12 x 7
   species     block_pval block_test `block:treatment_pval` `block:treatment_test` treatment_pval treatment_test
   <chr>            <dbl>      <dbl>                  <dbl>                  <dbl>          <dbl>          <dbl>
 1 Ameira          0.549        4.93                  0.510             6.35               0.0196       1.39e+ 1
 2 Adopsyllus      0.0392      17.6                   0.765             1.30               0.961        9.10e- 2
 3 Ectinosoma      0.549        7.71                  0.784             0.836              0.0196       1.47e+ 1
 4 Ectinosomat     0.235       10.9                   0.784             1.12               0.922        4.09e- 1
 5 Haloschizo      0.725        3.13                  0.922             0.000168           0.490        2.10e+ 0
 6 Lepta.A         0.0196      20.9                   0.196            13.1                0.961        1.46e- 1
 7 Lepta.B         0.549        8.02                  0.471             7.40               0.725        1.36e+ 0
 8 Lepta.C         0.0784      13.8                   0.784             0.340              0.255        5.80e+ 0
 9 Mictyricola     0.549        6.77                  0.510             5.27               0.0392       1.17e+ 1
10 Parevansula     0.549        6.10                  0.706             1.73               1            1.78e-15
11 Quin            0.549        6.02                  0.922             0.000128           0.0784       8.81e+ 0
12 Rhizothrix      0.216       11.6                   0.922             0.00000308         0.137        7.83e+ 0

Большое спасибо. Мне нравится длинный стол, потому что он простой, но широкий стол экономит больше места. Есть ли способ изменить порядок столбцов в широкой таблице, чтобы тест находился рядом с p-значениями? Текущее решение объединило все тесты и p-значения вместе, что было таким же, как cbind().

hnguyen 16.12.2020 04:43

Вы можете использовать аргумент names_glue, чтобы поставить test и pval в конце. Затем используйте relocate, чтобы упорядочить столбцы в алфавитном порядке.

Ian Campbell 16.12.2020 04:55

Другие вопросы по теме