Рассчитать 95% доверительный интервал для нескольких столбцов в кадре данных R

Мне нужно получить/вычислить 95% достоверный интервал для моих данных. Мои данные состоят из десяти столбцов и более 5000 строк. Вот некоторые примеры данных.

      data <- data.frame(A = c(-7.595932, -6.451768, -4.682111, -8.781488, -4.251690), 
                   B = c(0.8324450, 0.9451657, 0.8773759, 0.6044753, 0.6553995),
                   C = c(22.747480, 15.477470, 18.745407, 9.622865, 21.137619), 
                   D = c(-11.684762, -13.474299, -9.783277, -7.747501, -12.352081))

Я просто не уверен, какую функцию использовать, так как каждый раз получаю разные результаты, и она работает только с одним столбцом за раз. Я пробовал следующие функции:

      ci(data$`A`, confidence = 0.95)  ## R package gmodels

а также

      CI(data$`A`, confidence = 0.95) ##R package Rmisc

Кто-нибудь еще сталкивался с такой же проблемой?

3 ответа

Две функции дают вам фактически одно и то же:

      library(gmodels)
library(Rmisc)
 CI(data$A)
    upper      mean     lower 
-3.975568 -6.352598 -8.729627 
 ci(data$A, confidence = 0.95)
  Estimate   CI lower   CI upper Std. Error 
-6.3525978 -8.7296274 -3.9755682  0.8561414 

Чтобы применить его ко всем столбцам, используйте lapplyили же sapply:

      > sapply(data,CI)
              A         B        C          D
upper -3.975568 0.9648266 24.01143  -8.198957
mean  -6.352598 0.7829723 17.54617 -11.008384
lower -8.729627 0.6011180 11.08091 -13.817811

Если вам нужен достоверный интервал (из байесовской статистики), это требует дополнительной настройки, выбора априорной вероятности и вероятности. В некоторых функциях уже есть некоторые значения по умолчанию, поэтому вам может это сойти с рук, но вы должны действительно знать, что делаете, прежде чем слепо применять такие концепции. Вот пример для демонстрационных целей.

      library(bayestestR)

data <- data.frame(A = c(-7.595932, -6.451768, -4.682111, -8.781488, -4.251690), 
                   B = c(0.8324450, 0.9451657, 0.8773759, 0.6044753, 0.6553995),
                   C = c(22.747480, 15.477470, 18.745407, 9.622865, 21.137619), 
                   D = c(-11.684762, -13.474299, -9.783277, -7.747501, -12.352081))

sapply(data,ci,ci=0.95)

        A         B         C        D        
CI      95        95        95       95       
CI_low  -8.662932 0.6095677 10.20833 -13.36208
CI_high -4.294732 0.9383867 22.58649 -7.951079

Неясно, это то, что вы ищете, но вы можете получить распечатку среднего значения каждой переменной с доверительным интервалом 95% для среднего значения следующим образом:

      lapply(data, function(x) {
   paste0(round(mean(x), 2), " (95% CI: ",
   paste(round(sort(mean(x) + c(1.96, -1.96) * sd(x)/sqrt(length(x))), 2),
         collapse = " to "), ")")
 } )

#> $A
#> [1] "-6.35 (95% CI: -8.03 to -4.67)"
#>
#> $B
#> [1] "0.78 (95% CI: 0.65 to 0.91)"
#>
#> $C
#> [1] "17.55 (95% CI: 12.98 to 22.11)"
#>
#> $D
#> [1] "-11.01 (95% CI: -12.99 to -9.03)"
Другие вопросы по тегам