估计循环布尔变量的变化

时间:2015-04-27 21:37:11

标签: time-series sampling measurement probability-theory

我们有一个布尔变量X,它是true或false,并在每个时间步骤以概率p交替。即如果p为0.2,则X将平均每5个步骤交替一次。我们还有一个时间线,并在各种非均匀采样时间点观察该变量的值。

如何从观察中学习t + n时间步长之后的概率,其中t是观察时间X并且n是将来某个时间X在t + n处交替/改变值的概率给定p是未知的,我们以前只观察过X值?请注意,我计算从true更改为false,然后再次更改为true,两次更改值。

1 个答案:

答案 0 :(得分:1)

我将要解决这个问题,就好像它正在进行测试一样。

首先,让我们命名变量。

Bxx翻转机会后的布尔变量的值(并且B0是初始状态)。 P是每次机会都可以换成不同价值的机会。

鉴于每个翻转机会与其他翻转机会无关(例如,翻转之间没有最小机会数),数学非常简单;由于事件不受过去事件的影响,我们可以将它们合并为单个计算,当将Bx视为布尔值时,该算法效果最佳,但本身就是概率。

以下是我们将使用的计算域:Bx是表示真实可能性的概率(值介于0和1之间)。 P是一个概率(值介于0和1之间),表示在任何给定机会下翻转的可能性。

虚假的概率1 - Bx和不翻转的概率1 - P是概率性身份,应该非常直观。

假设这些简单规则,布尔值的一般概率概率由递归公式Bx+1 = Bx*(1-P) + (1-Bx)*P给出。

代码(在C ++中,因为它是我最喜欢的语言而你没有标记一个):

int   max_opportunities = 8;  // Total number of chances to flip.
float flip_chance = 0.2;      // Probability of flipping each opportunity.
float probability_true = 1.0; // Starting probability of truth.
                              // 1.0 is "definitely true" and 0.0 is 
                              // "definitely false", but you can extend this
                              // to situations where the initial value is not
                              // certain (say, 0.8 = 80% probably true) and
                              // it will work just as well.
for (int opportunities = 0; opportunities < max_opportunities; ++opportunities)
{
    probability_true = probability_true * (1 - flip_chance) + 
                       (1 - probability_true) * flip_chance;
}

Here is that code on ideone (the answer for P=0.2 and B0=1 and x=8 is B8=0.508398)。正如您所期望的那样,随着越来越多的机会通过,价值变得越来越不可预测,最终的概率将接近Bx=0.5。如果您的翻转机会很高(例如,使用P=0.8,则序列的开头为B={1.0, 0.2, 0.68, 0.392, 0.46112, ...},您还会观察到越来越不可能出现的振荡。(<1}}。

要获得适用于更复杂方案的更完整的解决方案,请考虑使用stochastic matrix (page 7 has an example)