Доверительный интервал и p.values ​​для разницы между средними с функцией суммирования и tidyverse - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь выяснить, как повернуть фрейм данных от длинного к широкому, группируя его по двум переменным (огранка алмаза и цвета D и F от алмаза df) и одновременно суммируя некоторые ключевые особенности данных.

В частности, я пытаюсь получить разницу между двумя средними значениями, 95% CI и p-значениями вокруг этой разницы.

Здесь - это пример моей желаемой выходной таблицы (красным цветом - то, что я пытаюсь выполнить sh).

Пример кода ниже, показывающий, как далеко я Получено:

library(tidyverse)

# Build summary data

diamonds <- diamonds %>% 
  select(cut, depth, color) %>% 
  filter(color == "F" | color == "D") %>% 
  group_by(cut, color) %>% 
  summarise(mean = mean(depth), #calculate mean & CIs
            lower_ci = mean(depth) - qt(1- 0.05/2, (n() - 1))*sd(depth)/sqrt(n()),
            upper_ci = mean(depth) + qt(1- 0.05/2, (n() - 1))*sd(depth)/sqrt(n()))

# Turn table from long to wide

diamonds <- dcast(as.data.table(diamonds), cut ~ color, value.var = c("mean", "lower_ci", "upper_ci"))

# Rename & calculate the mean difference

diamonds <- diamonds %>%
  rename(
    Cut = cut,
    Mean.Depth.D = mean_D,
    Mean.Depth.F = mean_F,
    Lower.CI.Depth.D = lower_ci_D,
    Lower.CI.Depth.F = lower_ci_F,
    Upper.CI.Depth.D = upper_ci_D,
    Upper.CI.Depth.F = upper_ci_F) %>% 
  mutate(Mean.Difference = Mean.Depth.D - Mean.Depth.F)

# Re-organize the table

diamonds <- subset(diamonds, select = c(Cut:Mean.Depth.F, Mean.Difference, Lower.CI.Depth.D:Upper.CI.Depth.F))

#Calculate the CIs (upper and lower) and p.values for mean difference for each cut and insert them into the table.

?

Я думаю, что я должен вычислить CI и средние значения p-значений глубины между цветами D и F в какой-то момент, прежде чем я подведу итог, но не совсем уверен, как.

Спасибо за ввод.

1 Ответ

1 голос
/ 05 марта 2020

Чтобы сравнить средние значения (с t-тестами) для цветов D и F по различным значениям для cut, вам нужно сделать следующее:

library(broom)

diamonds %>% 
   filter(color %in% c("D", "F")) %>% 
   group_by(cut) %>% 
   do( tidy(t.test(data=., depth~color)))
...