我正在尝试计算未指定分布的覆盖概率。我在r
下面复制了我的代码和相应的错误消息。
首先,我将 CDF 定义如下。
CD_theta <- function(x, p, n) {
1 - pbinom (x, size = n, prob = p) + 1/2 * dbinom(x, size = n, prob = p)
然后使用以下命令估计覆盖概率。
N <- 10000
n <- 10
p <- 0.5
set.seed(1)
x <- rbinom(N, prob=p, size=n)
covered <- numeric()
cilower <- numeric()
ciupper <- numeric()
for (i in 1:N) {
CD_theta <- function(x, p, n) {
1 - pbinom (x, size = n, prob = p) + 1/2 * dbinom(x, size = n, prob = p)
}
cilower <- uniroot(function(p) CD_theta(x[i], p, n) - 0.025, c(0, 1))$root
ciupper <- uniroot(function(p) CD_theta(x[i], p, n) - 0.975, c(0, 1))$root
covered[i] <- (cilower < p) & (p < ciupper)
}
mean(covered)
错误消息和输出如下。
uniroot(function(p) CD_theta(x[i], p, n) - 0.975, c(0, 1)) 中的错误:端点处的 f() 值不是相反的符号
平均值(覆盖)[1] 0.9820282
我在编码方面有什么错误吗?我怎样才能防止这种情况?