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