Вычисление доверительного интервала с использованием функции «ci»

#r #group-by #confidence-interval

#r #группировка по #доверительный интервал

Вопрос:

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

 id <- c(1101:1108)
age <- c(12,15,14,12,3,1,2,5)
length <- c(52,62,63,58,79,45,65,25)
result <- c("TRUE","FALSE","TRUE","FALSE","TRUE","FALSE","TRUE","FALSE")
data<-data.frame(id, age, length, result)


    id age length result
1 1101  12     52   TRUE
2 1102  15     62  FALSE
3 1103  14     63   TRUE
4 1104  12     58  FALSE
5 1105   3     79   TRUE
6 1106   1     45  FALSE
7 1107   2     65   TRUE
8 1108   5     25  FALSE
  

что я хочу сделать, так это вычислить среднее значение и доверительный интервал 0,95 для параметра длины для каждой группы результата, поэтому я использовал приведенный ниже код:

 g <- data %>% select(length,result) %>% group_by(result) %>% summarise(Ave_length=mean(length, na.rm=TRUE))
  

и для вычисления доверительного интервала для каждой группы я использовал следующую функцию из gmodels пакета

 ci(data$length[data$result=="TRUE"], 0.95)
ci(data$length[data$result=="TRUE"], 0.95)
  

Как бы то ни было, я получил предупреждающее сообщение » Предупреждающее сообщение:
В ci.numeric(data$length[data $result == «TRUE»], 0,95) :
Нет класса или неизвестного класса. Использование вычисления по умолчанию «.

Есть ли у вас какие-либо предложения о том, как я могу это исправить? или есть какая-либо другая функция, которую я могу использовать для вычисления доверительного интервала

Комментарии:

1. Это предупреждающее сообщение, а не ошибка

2. @akrun спасибо, я отредактировал свой вопрос, все еще с этим предупреждением, могу ли я доверять результату, который он дает?

3. просто для ie существуют разные методы ci methods('ci') , и он не смог найти class данные, поэтому он использует параметр по умолчанию для ci.numeric

Ответ №1:

О warning сообщении беспокоиться не о чем.

 methods('ci')
#[1] ci.binom      ci.estimable* ci.lm*        ci.lme*       ci.numeric*  
  

Если мы проверим исходный код, он начинается с a warning без какой-либо проверки.

 getAnywhere('ci.numeric')
function (x, confidence = 0.95, alpha = 1 - confidence, na.rm = FALSE, 
    ...) 
{
    warning("No class or unkown class.  Using default calcuation.") ####
    est <- mean(x, na.rm = na.rm)
    stderr <- sd(x, na.rm = na.rm)/sqrt(nobs(x))
    ci.low <- est   qt(alpha/2, nobs(x) - 1) * stderr
    ci.high <- est - qt(alpha/2, nobs(x) - 1) * stderr
    retval <- c(Estimate = est, `CI lower` = ci.low, `CI upper` = ci.high, 
        `Std. Error` = stderr)
    retval
}
  

Возможно, разработчики могут изменить его в будущем. Кроме того, вместо unkown unknown

Это означает, что numeric класс vector s получает это предупреждение

 ci(rnorm(10))
#  Estimate   CI lower   CI upper Std. Error 
# 0.3754708 -0.2600370  1.0109787  0.2809300 
#Warning message:
#In ci.numeric(rnorm(10)) :
#  No class or unkown class.  Using default calcuation.
  

Похоже, эта проблема проявляется только для numeric класса. Если мы применим ci к lm модели ( ci.lm )

 ci(lm(Sepal.Length ~ Species, iris))
#                  Estimate  CI lower CI upper Std. Error       p-value
#(Intercept)          5.006 4.8621258 5.149874 0.07280222 1.134286e-113
#Speciesversicolor    0.930 0.7265312 1.133469 0.10295789  8.770194e-16
#Speciesvirginica     1.582 1.3785312 1.785469 0.10295789  2.214821e-32
  

поскольку ci.lm warning в начале нет

 getAnywhere('ci.lm')
function (x, confidence = 0.95, alpha = 1 - confidence, ...) 
{
    x <- summary(x)
    est <- coef(x)[, 1]
    ci.low <- est   qt(alpha/2, x$df[2]) * coef(x)[, 2]
    ci.high <- est - qt(alpha/2, x$df[2]) * coef(x)[, 2]
    retval <- cbind(Estimate = est, `CI lower` = ci.low, `CI upper` = ci.high, 
        `Std. Error` = coef(x)[, 2], `p-value` = coef(x)[, 4])
    retval
}
  

Возможная причина заключается в том, что ci методы в первую очередь проверяют or lm и lme class т. Д., И если ни один из них не найден, он переключается в режим по умолчанию с ci помощью for numeric class, и warning это вводит в заблуждение в этом отношении