重复实验的估计二项式成功概率(在 matlab 中)

Estimated binomial success probability from repeated experiments (in matlab)

假设我有一个成功概率为 p 的二项式过程。我做了一个 N=4 次试验的实验,并获得了一定数量的成功 (0-4)。现在,假设我将该实验重复 10,000 次(每个实验进行 4 次试验)以获得成功次数的分布,它看起来像这样:

请注意,由于实验的完成方式,我无法记录 0 次成功的实验数据,尽管这无疑会以某种频率发生。这就是图表上没有 0 条的原因。

我如何拟合这些数据来估计概率 p(理想情况下,如果我知道实验次数而不仅仅是比例,则为置信区间)?我更喜欢使用 MATLAB,但我愿意使用任何可以完成这项工作的工具。

更新

我可以使用 mle 拟合数据,但拟合效果不佳(见下图)。我认为问题是缺少数据(没有观察到 0 次成功的实验)。我能以某种方式告诉 mle 只适合特定范围内的数据而忽略其他值吗?

在示例中,我们有一个自定义的截断二项分布。 Matlab 有 fitdist 函数,但只接受预定义分布,不接受自定义分布。正如您所指出的,您可以使用任何工具,我用 R 显示了 p 参数的估计,但是在 Matlab 中可以使用最大似然法估计参数。 如果我们用 p = 0.3 计算二项分布的密度函数值 4 expriments 我们有:

>> den = dbinom(x=0:4, size=4, prob=0.3)
>> print(den)
 0.2401, 0.4116, 0.2646, 0.0756, 0.0081

它们的总和 = 1 因为数据中缺少 0 个值 我们有:

 0.4116, 0.2646, 0.0756, 0.0081

它们的总和小于 1。因此我们将每个除以 (1-den[1])

>> print(den[-1] / (1-den[1]))
0.54165022 0.34820371 0.09948677 0.01065930

现在它们的总和为1。这样我们就可以进行自定义分配了。

MASS 包中的

fitdistr 可以使用户提供的数据密度适合,因此 R 中的解决方案是:

library(MASS) # required for fitdistr

#generate 10000 samples from binomial distribution
smpl <- rbinom(n=10000,size=4,prob=.3)

#exclude zeros
smpl <- smpl[-which(smpl==0)]

# custom truncated density
truncated_dbinom <- function(x, prob){
    dbinom(x, 4, prob)/(1-dbinom(0, 4, prob));
}

#fit distribution to data
out <- fitdistr(smpl, truncated_dbinom,list(prob=.5),method = "Brent",lower=0,upper=1)

#estimate of p
print(out$estimate)

#standard deviation
print(out$sd)

结果:

[1] 0.3092295
[1] 0.01070016