我有正面、负面和中性事件计数的数据。例如:8(正)、5(负)和1(中性)。
我想找一些方法来计算8/5的置信区间。
另一个例子是:6 (正)、0(负)和2(中性)。
以下是数据的一个示例:

发布于 2022-01-30 16:22:30
首先应该使用table(sign(vec)),尽管它有一个缺陷:
set.seed(42)
vec <- runif(30, -1, 1)
vec
# [1] 0.82961209 0.87415083 -0.42772093 0.66089525 0.28349104 0.03819190
# [7] 0.47317663 -0.73066681 0.31398458 0.41012957 -0.08451645 0.43822450
# [13] 0.86934449 -0.48914235 -0.07541435 0.88002905 0.95645286 -0.76502528
# [19] -0.05000584 0.12066549 0.80806277 -0.72257966 0.97778346 0.89333647
# [25] -0.83512488 0.02842357 -0.21959307 0.81147626 -0.10606074 0.67200852
table(sign(vec))
# -1 1
# 11 19 这个缺陷在table中很常见:如果它没有看到它,它就不会报告它的0 (而且它不是table中的一个缺陷,只是我们对它的使用和期望)。我们可以毫不费力地解决这个问题:
table(c(sign(vec), -1:1)) - 1L
# -1 0 1
# 11 0 19 -1:1将每个预期值中的一个附加到来自sign的结果中,- 1L随后删除我们引入的计数。
可以很容易地假设您总是拥有至少一个-1、0和1 (尽管示例数据清楚地显示出有一个0) .我建议它很少是完美的,并且添加这种故障安全只会增加很少的开销,同时提供完整性的保证。
同样,如果您怀疑在任何时候都可能看到NA,那么可以添加useNA="always",但是- 1L会出现问题。为此,我们需要使用相同的技术在插入的数据中包括NA:
table(c(sign(vec), c(-1:1, NA)), useNA='always') - 1L
# -1 0 1 <NA>
# 11 0 19 0
table(c(sign(c(NA, vec)), c(-1:1, NA)), useNA='always') - 1L
# -1 0 1 <NA>
# 11 0 19 1 https://stackoverflow.com/questions/70915808
复制相似问题