R中的成功/失败错误估计

时间:2017-05-19 13:45:05

标签: r binary distribution glm confidence-interval

我有成功/失败数据(在一定时期内存活/死亡的树木),并且想要估计二项分布中的错误与我的每个观察结果(7个站点)相关联。到目前为止,我一直在使用glm来执行此操作:

s <- c(1,20,0,40,2,1,0) # success
f <- c(2,0,20,4,50,0,1) # failure

#for each observation I would calculate this error: 

error <- vector ()  
z_scores <- vector ()  
p_value <- vector ()  

  for (i in 1:7) {
    models <- glm (cbind (s[i], f[i]) ~ 1, family = 'binomial')
    error [i] <- summary (models)$coefficients[2]
    z_scores [i] <- summary (models)$coefficients[3]
    p_value [i] <- summary (models)$coefficients[4]
  }

这是最好的方法吗?

如何估算二项分布的概率?

请注意,无论成功与失败的次数如何,当sf=0

时,我的错误都会非常高

1 个答案:

答案 0 :(得分:5)

这里有一些代码可以在不使用glm的情况下重新计算大部分结果(除了由零引起的极值),并解释它们背后的含义。

s <- c(1, 20, 0, 40, 2, 1, 0) # success
f <- c(2, 0, 20, 4, 50, 0, 1) # failure

#for each observation I would calculate this error: 

error <- vector()  
z_scores <- vector()  
p_value <- vector()  

for (i in 1:7) {
    models <- glm(cbind(s[i], f[i]) ~ 1, family = 'binomial')
    error[i] <- summary(models)$coefficients[2]
    z_scores[i] <- summary(models)$coefficients[3]
    p_value[i] <- summary(models)$coefficients[4]
}

logit <- function(x){
    log(x / (1 - x))
}

dlogit <- function(x){
    1 / x / (1 - x)
}

p_hat <- s / (s + f)
## sqrt(p_hat * (1 - p_hat) / (s + f))
## is the standard error of p_hat
## error1 is the standard error of logit(p_hat)
error1 <- dlogit(p_hat) * sqrt(p_hat * (1 - p_hat) / (s + f))
## divide the estimation by the standard error, you get z-score
z_scores1 <- logit(p_hat) / error1
p_value1 <- 2 * pnorm(-abs(z_scores1))

你需要知道的第一件事是标准错误,z得分,p值等背后的基本原理。在统计学中,我们首先得到一些模型(在这种情况下,二项式模型:s|(s+f) ~ Binomial(s + f, p))和我们想用它来拟合我们拥有的数据和

1)获得估计(在这种情况下为p

2)由于数据是随机生成的,我们想知道我们的估计有多好,这里有标准误差,z分数和p值来“测量估计中的随机性”,这里有一些重要的“技巧” “:既然我们不知道生成数据的真实机制,我们只能通过假设来近似计算估计中的随机性

a)我们的模型是(或类似的)数据生成的真正机制和

b)真实参数与我们的估计相似(这通常需要大样本量,在这种情况下,样本量仅为s + f,因此s + f必须足够大才能进行推理(标准误差,z分数和p值)经过验证)。我们可以看到,在i = 1,6和7的情况下,样本量非常小,这使得相应的标准误差,z分数和p值难以置信。

然后我可以谈谈我的计算背后的技术细节以及它们的含义。在glm中,除Binomial(n, p)模型外,您还假设p的模型如下:

logit(p) ~ N(mu, sigma^2)

logit函数就像我的代码中那样。

在这个简单的情况下,二项式概率p的估计只是p_hat <- s / (s + f)(是否使用glm),并且从二项式变量的方差公式中,我们可以得到估计概率p的方差为p * (1 - p) / n,如果我们认为p_hat <- s / (s + f)与假设b的真实p相似,则使用它来替换{​​{1}} },我们可以得到估计p的标准误差。遵循CLT和Delta方法,当样本量足够大时,我们可以将ps / (s + f)视为遵循正态分布,例如,logit(s / (s + f))约为s / (s + f)并且N(p, s * f / (s + f) ^ 3)约为logit(s / (s + f))

简单来说,N(logit(p), dlogit(s / (s + f)) ^ 2 * s * f / (s + f) ^ 3)计算的标准误差,z分数和p值只是glm的标准误差,z分数和p值。这些是零假设的有效结果:logit(s / (s + f)),换句话说,logit(p) = 0。因此,从p = 0.5获得的z分数和p值是为了测试样本大小glm较大时sf是否以相同的概率发生。 / p>

然后我将讨论由0引起的极值。当s + fs等于0时,ff的估计概率将为1如果这是真的,数据生成机制实际上是非随机的!!在开始时我已经说过,我们使用我们的估计来近似计算估计中的随机性,如果ss等于0,如果我们使用我们的估计作为基本事实,我们应该相信我们100%的估计,这有点荒谬。在这种情况下,许多方法如f将无效。一般来说,如果样本量glm足够大,我们认为如果s + fsfs = 0发生的概率非常小,但如果样本量非常小,如案例6或7,我们实际上无法得出任何结论。

总而言之,如果二项式模型为真,那么根据上面提供的f = 0结果,我的代码和我的分析,我们可以说glmi = 2, 3, 4, 5的概率}和s显着不同。