我一直在R中使用glm()来计算控制单个二项式绘制的logit概率参数的置信区间。
P <- 20 # Number of successes
D <- 1 # Number of failures
model1 <- glm(matrix(c(P,D), nrow=1) ~ 1, family="binomial") # Successes modeled as binomial draw from successes+failures
summary(model1)
confint(model1) # Confidence interval on binomial parameter p
我注意到,如果成功或失败的次数为零(P=0
或D=0
),则返回的置信区间毫无意义。
binomial_fun <- function(p) {choose(N, K)*(p^K)*(1-p)^(N-K)} # A binomial function
logit_fun <- function(p) {log(p/(1-p))} # A logit function
f_upper <- function(a) {integrate(binomial_fun, 0, a )$value/integrate(binomial_fun, 0, 1 )$value - .975}
f_lower <- function(a) {integrate(binomial_fun, a, 1 )$value/integrate(binomial_fun, 0, 1 )$value - .975}
# These functions will take value zero when a corresponds to the 97.5% and 2.5% points
# of the normalized binomial likelihood given N and K.
N <- P+D # N is the number of trials
K <- P # K is the number of successes
uci2 <- logit_fun(uniroot( f_upper, c(0, 1) )$root) # Look for a solution in [0,1]
lci2 <- logit_fun(uniroot( f_lower, c(0, 1) )$root) # Look for a solution in [0,1]
这为P=0
或D=0
提供了有意义的置信区间。
但是,即使glm()
和confint()
都不为零,它也会从P
+ D
提供不同的置信区间。
confint(model1)
c(lci2, uci2)
与glm()
+ confint()
相比,我计算的lci和uci往往更接近于零。
confint()
如何计算间隔?我确信有一个很好的理由可以在更复杂的glms的性能方面这样做,但在这个简单的情况下它似乎是一个奇怪的结果。