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

时间:2016-09-16 20:36:11

标签: matlab data-fitting

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

enter image description here

请注意,由于实验的方式,我无法记录0次成功的实验数据,尽管这无疑会在某个频率发生。这就是为什么图表上没有0的条形。

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

更新

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

enter image description here

1 个答案:

答案 0 :(得分:1)

在示例中,我们有一个自定义截断二项分布。 Matlab具有fitdist功能,但只接受预定义的分发,不接受cumstom分发。当您注意到您可以使用任何工具时,我会使用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.这样我们就可以进行定制分发。

来自fitdistr包的

MASS可以使用户提供的密度适合数据,因此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