Как агрегировать данные и выполнять пользовательскую функцию для расчета доверительных интервалов - PullRequest
2 голосов
/ 03 октября 2019

У меня есть фрейм данных с тремя переменными: Год, Местоположение и Концентрация, где я хочу объединить данные по году и местоположению и рассчитать доверительные интервалы для концентрации.

Year <- rep(c(2010, 2011, 2012, 2013), each=15)
Location <- rep(c("Texas", "Colorado", "Washington"), times = 4, each = 5)
Concentration <- runif(60, 0, 100)

conc_data <- cbind.data.frame(Year, Location, Concentration)
head(conc_data)

  Year Location Concentration
1 2010    Texas      22.54480
2 2010    Texas      70.38605
3 2010    Texas      79.53292
4 2010    Texas      95.62562
5 2010    Texas      38.81795
6 2010 Colorado      68.69821

Я пытался использовать функцию агрегирования с пользовательской функцией для расчета доверительных интервалов, опубликованных @efbbrown здесь: Как рассчитать доверительные интервалы для вектора? . Однако он использует все данные о концентрации для расчета более низкого доверительного интервала вместо информации о концентрации в группе.

aggregate(Concentration ~ Location + Year, data = conc_data, function(x) confidence_interval_lwr(conc_data$Concentration, 0.95))

confidence_interval_lwr <- function(vector, interval) {
  # Standard deviation of sample
  vec_sd <- sd(vector)
  # Sample size
  n <- length(vector)
  # Mean of sample
  vec_mean <- mean(vector)
  # Error according to t distribution
  error <- qt((interval + 1)/2, df = n - 1) * vec_sd / sqrt(n)
  # Confidence interval as a vector
  lwr <- c("lower" = vec_mean - error)
  return(lwr)
}

Я хотел бы получить нижний предел доверительного интервала для каждого года и местоположения как таковой:

Year   Location  lwr
1 2010      Texas  8.2
2 2010   Colorado  5.9
3 2010 Washington 15.0
4 2011      Texas 10.0
5 2011   Colorado  2.0
6 2011 Washington 18.0

1 Ответ

0 голосов
/ 03 октября 2019

Если мы предоставляем анонимную функцию (function(x)), 'x' возвращает 'Концентрацию'

aggregate(cbind(lwr = Concentration) ~ Location + Year, data = conc_data, 
      function(x) confidence_interval_lwr(x, 0.95))
#  Location Year        lwr
#1    Colorado 2010 13.1289089
#2       Texas 2010 14.3379460
#3  Washington 2010 30.4922382
#4    Colorado 2011 18.9369171
#5       Texas 2011  0.6261571
#6  Washington 2011 12.2817138
#7    Colorado 2012  3.7365737
#8       Texas 2012 11.1165898
#9  Washington 2012 32.9729329
#10   Colorado 2013 23.9445299
#11      Texas 2013  3.0298597
#12 Washington 2013  9.0199863

ПРИМЕЧАНИЕ: значения будут другими, поскольку при создании * 1006 не было set.seed* колонка

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