मैं डेटाफ़्रेम में प्रत्येक समूह पर एक फ़ंक्शन (द्विपद विश्वास अंतराल की गणना) लागू करना चाहूंगा। मान लें कि मेरे पास एक डेटाफ़्रेम है जिसमें निम्न शामिल हैं:

 df <- data.frame(group_name = sample(letters[1:5], 20, replace = T), numbers = 1:20, other_numbers = 51:70)

मैं group_name द्वारा समूहित करता हूं और सटीक फ़ंक्शन में फ़ीड करने के लिए एक वेक्टर बनाता हूं:

install.packages('PropCIs');library('PropCIs') 

df2 <- df %>% 
   group_by(group_name) %>% 
   vector = c(numbers, other_numbers) %>%
   mutate(CI = exactci(vector, conf.level = 0.95))

लेकिन मेरे द्विपद चर के स्तर अनुपलब्ध हैं।

आदर्श रूप से, मैं एक तालिका बनाने के लिए dplyr::group_modify लागू करना चाहूंगा जिसमें प्रत्येक समूह के लिए द्विपद चर के लिए विश्वास अंतराल हो, डेटाफ़्रेम में नए चर के अलावा जिसमें CI शामिल हों।

0
MeC 22 अक्टूबर 2019, 18:59
हो सकता है कि पैकेज broom इस मामले में मददगार होगा: यह एक मॉडल या स्टेट टेस्ट के आउटपुट को एक छोटे डेटा फ्रेम में बदल देता है। हालाँकि मुझे यकीन नहीं है कि यह PropCI के साथ अच्छी तरह से एकीकृत है। देखें broom.tidyverse.org
 – 
Pierre Gramme
22 अक्टूबर 2019, 19:59

2 जवाब

मैंने इसे यथासंभव स्वच्छ बनाने की कोशिश की। मैं शर्त लगाता हूं कि कोई क्लीनर दिखने वाला कोड बना सकता है। चीयर्स।

library(tidyverse)

df <- data.frame(group_name = sample(letters[1:5], 20, replace = T), numbers = 1:20, other_numbers = 51:70)

mean_ci <- function(x, conf = 0.95) {
  se <- sd(x) / sqrt(length(x))
  alpha <- 1 - conf
  mean(x) + se * qnorm(c(alpha / 2, 1 - alpha / 2))
}

df2 <- df %>% 
  group_by(group_name) %>%
  mutate(n_LCI = mean_ci(numbers)[1],
         n_UCI = mean_ci(numbers)[2],
         on_LCI = mean_ci(other_numbers)[1],
         on_UCI = mean_ci(other_numbers)[2])
0
Schilker 22 अक्टूबर 2019, 20:09
लेकिन मैं निर्दिष्ट फ़ंक्शन का उपयोग करना चाहता हूं, मैं दोनों चर के लिए औसत सीआई की गणना नहीं करना चाहता हूं। मैं द्विपद चर के दो स्तरों (संख्याओं और अन्य संख्याओं) का विश्वास अंतराल चाहता हूं।
 – 
MeC
23 अक्टूबर 2019, 02:07

मुझे पूरा यकीन नहीं है कि मैं exactci() का ठीक से उपयोग कर रहा हूं, लेकिन शायद nest() कुछ मदद कर सकता है।

df <- data.frame(
  group_name = sample(letters[1:5], 20, replace = T), 
  numbers = 1:20, 
  other_numbers = 51:70
)

library(PropCIs)
library(tidyverse) # tidyverse loads both dplyr and tidyr

df %>%
  nest(CI = -group_name) %>%
  mutate(CI = map(CI, ~ exactci(x = .x$numbers,
                                n = .x$other_numbers,
                                conf.level = .95) %>%
    unlist())
  ) %>%
  unnest_wider(CI)

#> # A tibble: 5 x 15
#>   group_name conf.int1 conf.int2 conf.int3 conf.int4 conf.int5 conf.int6
#>   <fct>          <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
#> 1 c           0.000496    0.115     0.155     0.184      0.104     0.327
#> 2 b           0.00469     0.0722    0.132     0.270     NA        NA    
#> 3 a           0.0118      0.0508    0.125     0.157      0.237     0.340
#> 4 e           0.0206      0.0403    0.104     0.135      0.145     0.165
#> 5 d           0.0302      0.0615    0.0829    0.0936     0.200     0.254
#> # ... with 8 more variables: conf.int7 <dbl>, conf.int8 <dbl>,
#> #   conf.int9 <dbl>, conf.int10 <dbl>, conf.int11 <dbl>, conf.int12 <dbl>,
#> #   conf.int13 <dbl>, conf.int14 <dbl>

2019-10-22 को reprex पैकेज द्वारा बनाया गया (v0.3.0)

nest() एक प्रकार के group_by() की तरह कार्य करता है और map() exactci() जैसे कार्यों के आसान अनुप्रयोग के लिए बनाता है।

उम्मीद है कि यह मदद करता है!

0
tomasu 22 अक्टूबर 2019, 22:25
यह आपके लिए प्रदान किए गए नमूना डेटासेट पर काम करता है? मुझे एक त्रुटि मिलती है कि सीआई नहीं मिल सकता है।
 – 
MeC
23 अक्टूबर 2019, 01:17