Вычислить доверительные интервалы (биномиальные) внутри фрейма данных - PullRequest
0 голосов
/ 05 июля 2019

Я хочу получить доверительные интервалы для пропорций в моем стакане. Есть ли способ сделать это?

library(tidyverse)
library(Hmisc)
library(broom)


df <- tibble(id = c(1, 2, 3, 4, 5, 6),
  count = c(4, 1, 22, 4545, 33, 23),
           n = c(22, 65, 34, 6323, 35, 45))

Что выглядит так:

# A tibble: 6 x 3
     id count     n
  <dbl> <dbl> <dbl>
1     1     4    22
2     2     1    65
3     3    22    34
4     4  4545  6323
5     5    33    35
6     6    23    45

Используя binconf из Hmisc и tidy из broom, решение может быть из любой упаковки:

Интервалы для первого ряда:

tidy(binconf(4, 22))

# A tibble: 1 x 4
  .rownames PointEst  Lower Upper
  <chr>        <dbl>  <dbl> <dbl>
1 ""           0.182 0.0731 0.385

Я пытался использовать map в purrr, но получаю ошибки:

map(df, tidy(binconf(count, n)))

Ошибка в x [i]: объект типа 'замыкание' не может быть подмножеством

Я мог бы просто рассчитать их, используя dplyr, но я получаю значения ниже нуля (например, строка 2) или выше единицы (например, строка 5), что мне не нужно. например,

df %>% 
  mutate(prop = count / n) %>%
  mutate(se = (sqrt(prop * (1-prop)/n))) %>% 
  mutate(lower = prop - (se*1.96)) %>% 
  mutate(upper = prop + (se*1.96))

# A tibble: 6 x 7
     id count     n   prop      se   lower  upper
  <dbl> <dbl> <dbl>  <dbl>   <dbl>   <dbl>  <dbl>
1     1     4    22 0.182  0.0822   0.0206 0.343 
2     2     1    65 0.0154 0.0153  -0.0145 0.0453
3     3    22    34 0.647  0.0820   0.486  0.808 
4     4  4545  6323 0.719  0.00565  0.708  0.730 
5     5    33    35 0.943  0.0392   0.866  1.02  
6     6    23    45 0.511  0.0745   0.365  0.657 

Есть ли хороший способ сделать это? Я взглянул на функцию confint_tidy(), но не смог заставить ее работать. Есть идеи?

1 Ответ

1 голос
/ 05 июля 2019

Это может быть не аккуратно, но

> as.tibble(cbind(df, binconf(df$count, df$n)))
# A tibble: 6 x 6
     id count     n PointEst    Lower  Upper
  <dbl> <dbl> <dbl>    <dbl>    <dbl>  <dbl>
1     1     4    22   0.182  0.0731   0.385 
2     2     1    65   0.0154 0.000789 0.0821
3     3    22    34   0.647  0.479    0.785 
4     4  4545  6323   0.719  0.708    0.730 
5     5    33    35   0.943  0.814    0.984 
6     6    23    45   0.511  0.370    0.650 

, кажется, работает

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