2017-04-10 94 views
0

我正在嘗試使用pymc來查找時間序列中的更改點。我所看到的價值隨時間而變化的概率很小,平均爲0.009,範圍爲0.001-0.016。pymc python變化點檢測的小概率。零概率錯誤

我給出了兩個概率均勻分佈,作爲零之間和最大觀察之間的先驗。

alpha = df.cnvrs.max() # Set upper uniform 
center_1_c = pm.Uniform("center_1_c", 0, alpha) 
center_2_c = pm.Uniform("center_2_c", 0, alpha) 
day_c = pm.DiscreteUniform("day_c", lower=1, upper=n_days) 

@pm.deterministic 
def lambda_(day_c=day_c, center_1_c=center_1_c, center_2_c=center_2_c): 
    out = np.zeros(n_days) 
    out[:day_c] = center_1_c 
    out[day_c:] = center_2_c 
    return out 

observation = pm.Uniform("obs", lambda_, value=df.cnvrs.values, observed=True) 

當我運行這段代碼,我得到:

ZeroProbability:隨機OBS的價值是它的支持外, 或者禁止其父母的當前值。

我對pymc非常陌生,所以不確定是否缺少明顯的東西。我的猜測是我可能沒有合適的分佈來建模小概率。

回答

0

不可能知道你在哪裏引入了這個bug,而且在任何情況下編程都是無關緊要的,沒有更多的輸出。但是這裏有一個統計問題:你以某種方式構建了一個不能產生觀測變量或當前潛在樣本的模型。爲了給出一個簡單的例子,假設你有一個負數值的數據集,並且你認爲它是伽馬分佈式的;這會產生一個錯誤,因爲數據在gamma下的概率爲零。同樣,如果在MCMC鏈期間對不可能的值進行採樣,則會引發錯誤。

+0

我明白了,但當我將均勻分佈的極限設置爲觀察值的極限時,我不確定觀察結果如何超出分佈? – dstancan