【问题标题】:Calculating confidence interval using "ci" function使用“ci”函数计算置信区间
【发布时间】:2020-10-23 20:42:24
【问题描述】:

我有一组数据,除了找到每个组的列的平均值之外,我还想找到一个 置信区间。样本数据如下:

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) 中: 没有类或未知类。使用默认计算。”

您对我如何解决这个问题有什么建议吗?或者有没有其他函数可以用来计算置信区间

【问题讨论】:

  • 这是一条警告消息,而不是错误
  • @akrun 谢谢,我编辑了我的问题,仍然有这个警告,我可以相信它产生的结果吗?
  • 只是ci的方法不同,即methods('ci')找不到数据的class,所以使用ci.numeric的默认选项

标签: r group-by confidence-interval


【解决方案1】:

warning 消息无需担心。

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

如果我们检查源代码,它以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 class vectors 收到此警告

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 方法主要是检查lmlme class 等,如果没有找到它们,它会切换到ci 的默认模式numeric类和warning 在这方面有点误导

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多