Как применить функцию к таблице для вывода значений P в виде новой строки - PullRequest
0 голосов
/ 10 мая 2018

У меня есть этот простой датафрейм. Столбец суммы представляет сумму строки. Я хотел бы использовать prop.test, чтобы определить P-значение для каждого столбца и представить эти данные в виде дополнительной строки, помеченной p-значением. Я могу использовать prop.test следующим образом, чтобы определить значение p для любого отдельного столбца, но не могу понять, как применить его к нескольким столбцам с помощью одной функции.

        Other Island N_Shelf N_Shore S_Shore  Sum
Type1    10      4       1       0       3    18
Type2    19     45       1       9      11    85

Это выведет p-значение для колонки острова

ResI2<- prop.test(x=TableAvE_Island$Island, n=TableAvE_Island$Sum)

Выход:

data:  TableAvE_Island$Island out of TableAvE_Island$Sum
X-squared = 4.456, df = 1, p-value = 0.03478
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.56027107 -0.05410802
sample estimates:
   prop 1    prop 2 
0.2222222 0.5294118 

Я пытался использовать команду apply, но не могу отработать ее использование, и примеры, которые мне удалось найти, не кажутся достаточно схожими. Любые указатели будут оценены.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вот пример функции broom tidy, которая берет результаты тестов и других операций и форматирует их как «аккуратные» фреймы данных.

Для первых prop.test, которые вы опубликоваливывод tidy выглядит следующим образом:

library(tidyverse)

broom::tidy(prop.test(TableAvE_Island$Island, TableAvE_Island$Sum))
#>   estimate1 estimate2 statistic    p.value parameter   conf.low
#> 1 0.2222222 0.5294118  4.456017 0.03477849         1 -0.5602711
#>     conf.high
#> 1 -0.05410802
#>                                                                 method
#> 1 2-sample test for equality of proportions with continuity correction
#>   alternative
#> 1   two.sided

Чтобы сделать это для всех переменных в вашем фрейме данных по сравнению с суммой, я gather преобразовал его в длинную форму

table_long <- gather(TableAvE_Island, key = variable, value = val, -Sum)
head(table_long)
#> # A tibble: 6 x 3
#>     Sum variable   val
#>   <int> <chr>    <int>
#> 1    18 Other       10
#> 2    85 Other       19
#> 3    18 Island       4
#> 4    85 Island      45
#> 5    18 N_Shelf      1
#> 6    85 N_Shelf      1

Затем сгруппировал данные длинной формы по переменной, перенаправив их в do, что позволяет вызывать функцию для каждой из групп в фрейме данных, используя . в качестве подставки для подмножества данных.Затем я позвонил tidy в столбец, содержащий вложенные результаты prop.test.Это дает вам фрейм данных всех релевантных результатов теста с указанием каждого из «Остров», «N_Shelf» и т. Д.

table_long %>%
    group_by(variable) %>%
    do(test = prop.test(x = .$val, n = .$Sum)) %>%
    broom::tidy(test)
#> # A tibble: 5 x 10
#> # Groups:   variable [5]
#>   variable estimate1 estimate2 statistic p.value parameter conf.low
#>   <chr>        <dbl>     <dbl>     <dbl>   <dbl>     <dbl>    <dbl>
#> 1 Island      0.222     0.529    4.46     0.0348         1  -0.560 
#> 2 N_Shelf     0.0556    0.0118   0.0801   0.777          1  -0.0981
#> 3 N_Shore     0         0.106    0.972    0.324          1  -0.205 
#> 4 Other       0.556     0.224    6.54     0.0106         1   0.0523
#> 5 S_Shore     0.167     0.129    0.00163  0.968          1  -0.183 
#> # ... with 3 more variables: conf.high <dbl>, method <fct>,
#> #   alternative <fct>

Создано в 2018-05-10 с помощью Представить пакет (v0.2.0).

0 голосов
/ 10 мая 2018

Мы могли бы gather в «длинный» формат и затем сохранить его как list столбец

library(tidyverse)
res <- gather(TableAvE_Island, key, val, -Sum) %>% 
         group_by(key) %>%
         nest() %>% 
         mutate(out = map(data, ~prop.test(.x$val, .x$Sum)))
res$out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...