状态空间MCMC论文笔记

论文一:

模拟案例

y t = n t ∗ c t n t = a + n t − 1 + w t c t = a 1 c t − 1 + a 2 c t − 2 + v t y_t = n_t*c_t\\ n_t =a+n_{_{t-1}} + w_{_t}\\ c_t=a_{_1}c_{_{t-1}}+a_2c_{_{t-2}}+v_t\\ yt=ntctnt=a+nt1+wtct=a1ct1+a2ct2+vt

理论推导

(一)整体思想

y ⃗ T = [ y 1 , y 2 , . . . , y n ] ′ \vec{y}_{_T}=[y_1,y_2,...,y_n]' y T=[y1,y2,...,yn] n ⃗ T = [ n 1 , n 2 , . . . , n n ] ′ \vec{n}_{_T}=[n_1,n_2,...,n_n]' n T=[n1,n2,...,nn], c ⃗ T = [ c 1 , c 2 , . . . , c n ] ′ \vec{c}_{_T}=[c_1,c_2,...,c_n]' c T=[c1,c2,...,cn], a ⃗ = [ a 1 , a 2 ] \vec{a}=[a_1,a_2] a =[a1,a2]
估计上述状态空间模型的目的是求出参数和状态在给定观测值 y ⃗ T \vec{y}_{_T} y T下的条件分布,即要得的 n ⃗ T , c ⃗ T \vec{n}_{_T},\vec{c}_{_T} n T,c T以及 a ⃗ \vec{a} a 的后验分布。
第一步,求状态在观测序列下的条件分布:
p ( n ⃗ T ∣ y ⃗ T ) p(\vec{n}_{_T}|\vec{y}_{_T}) p(n Ty T)
直接求上述的后验分布比较麻烦,可以对上述的分布进行分解:
π ( n ⃗ T ∣ y ⃗ T ) = π ( n 1 , n 2 , . . . , n T ∣ y ⃗ T ) = π ( n T ∣ y ⃗ T ) ∏ i = 1 T π ( n t ∣ n t + 1 , y ⃗ t ) (8) \pi(\vec{n}_{_T}|\vec{y}_{_T})=\pi(n_{_1},n_{_2},...,n_{_T}|\vec{y}_{_T})\\ =\pi(n_{_T}|\vec{y}_{_T})\prod_{i=1}^T \pi(n_t|n_{_{t+1}},\vec{y}_{_t}) \tag{8} π(n Ty T)=π(n1,n2,...,nTy T)=π(nTy T)i=1Tπ(ntnt+1,y t)(8)
当t=T时,状态 n t n_{_t} nt的抽样
利用(8)式,由右式第一项可知 π ( n T ∣ y ⃗ T ) \pi(n_{_T}|\vec{y}_{_T}) π(nTy T),即 n T n_{_T} nT的后验分布仅仅依赖于观测序列 y ⃗ T \vec{y}_{_T} y T,因此可以首先利用 π ( n T ∣ y ⃗ T ) \pi(n_{_T}|\vec{y}_{_T}) π(nTy T) n T n_{_T} nT进行抽样,得到 n T n_{_T} nT的一个抽样值。
当t<T时,状态 n t n_{_t} nt的抽样
根据(8)式,由右式第二项可知, n t n_{_t} nt的分布依赖于 n t + 1 n_{_{t+1}} nt+1 y ⃗ T \vec{y}_{_T} y T,我们可以根据第一种情况,得到 n T n_{_T} nT,然后由 n T n_{_T} nT y ⃗ T \vec{y}_{_T} y T得到 n T − 1 n_{_{T-1}} nT1,依次这样倒着抽样,就可以得到所有的 π ( n t ∣ n t + 1 , y ⃗ t ) \pi(n_t|n_{_{t+1}},\vec{y}_{_t}) π(ntnt+1,y t)
再根据t=T,t<T得出的抽样值,就可以计算出方程右侧的抽样值了。也就说,可以利用式(8)的右侧分解的抽样,来完成对左侧的抽样。

(二)条件分布的具体形式

(8)式右侧抽样涉及到两部分(t=T时, π ( n T ∣ y ⃗ T ) \pi(n_{_T}|\vec{y}_{_T}) π(nTy T)的分布形式,t<T时的 π ( n t ∣ n t + 1 , y ⃗ t ) \pi(n_t|n_{_{t+1}},\vec{y}_{_t}) π(ntnt+1,y t)分布形式),由于假设状态空间模型的状态和随机干扰项都是高斯的,因为条件分布也是高斯分布,所以得到:
n T ∣ y ⃗ T ∼ N ( E ( n T ∣ y ⃗ T ) , c o v ( n T ∣ y ⃗ T ) ) (9) n_{_T}|\vec{y}_{_T} \sim N(E(n_T|\vec{y}_{_T}),cov(n_T|\vec{y}_{_T})) \tag{9} nTy TN(E(nTy T),cov(nTy T))(9)
π ( n t ∣ n t + 1 , y ⃗ t ) ∼ N ( E ( n t ∣ y ⃗ t , n t + 1 ) , c o v ( n t ∣ y ⃗ t , n t + 1 ) (10) \pi(n_t|n_{_{t+1}},\vec{y}_{_t}) \sim N(E(n_t|\vec{y}_{_t},n_{_{t+1}}),cov(n_t|\vec{y}_{_t},n_{_{t+1}}) \tag{10} π(ntnt+1,y t)N(E(nty t,nt+1),cov(nty t,nt+1)(10)
再来看(9)式代表的意义,该式表示要根据观测序列,估计状态 n T n_T nT的后验分布,我们现在知道两种信息:1.观测值序列;2.状态转移方程;由这两个信息就可以得到 n T n_T nT的分布估计,并且如果估计方法是卡尔曼滤波,则这个后验分布还是最佳估计(方差最小)。因此,可以用卡尔曼滤波得到(9)式。
假设(9)式的分布解决了,就可以抽一个样本值,将这个样本值带入到(10)式,可以得到当 t < T t<T t<T时,分布参数的递推公式:
E ( n t ∣ y ⃗ t , n t + 1 ) = E ( n t ∣ y ⃗ t ) + c o v ( n t ∣ y ⃗ t ) F ′ [ F c o v ( n t ∣ y ⃗ t ) F ′ + Q ] − 1 [ n t + 1 − μ − F E ( n t ∣ y ⃗ t ) ] (11) E(n_t|\vec{y}_{_t},n_{_{t+1}})=E(n_t|\vec{y}_{_t})+cov(n_t|\vec{y}_{_t})F'[Fcov(n_t|\vec{y}_{_t})F'+Q]^{-1}[n_{_{t+1}}-\mu-FE(n_t|\vec{y}_{_t})] \tag{11} E(nty t,nt+1)=E(nty t)+cov(nty t)F[Fcov(nty t)F+Q]1[nt+1μFE(nty t)](11)
问题: μ \mu μ是什么。
C o v ( n t ∣ y ⃗ t , n t + 1 ) = C o v ( n t ∣ y ⃗ t ) + c o v ( n t ∣ y ⃗ t ) F ′ [ F c o v ( n t ∣ y ⃗ t ) F ′ + Q ] − 1 F C o v ( n t ∣ y ⃗ t ) (12) Cov(n_t|\vec{y}_{_t},n_{_{t+1}})=Cov(n_t|\vec{y}_{_t})+cov(n_t|\vec{y}_{_t})F'[Fcov(n_t|\vec{y}_{_t})F'+Q]^{-1}FCov(n_t|\vec{y}_{_t}) \tag{12} Cov(nty t,nt+1)=Cov(nty t)+cov(nty t)F[Fcov(nty t)F+Q]1FCov(nty t)(12)
按照(11),(12)得到 n t ( t = 1 , 2 , . . . , T ) n_t(t=1,2,...,T) nt(t=1,2,...,T)后,需要更新参数的值(包括系数截距项 a a a,另外一个状态变量 c t c_t ct,以及两个随机干扰项的分布参数)。
第二步,更新参数 a a a的值,根据式(6)得到a的估计值;再根据式(5)计算另一个状态 c t c_t ct的估计值。
第三步,状态向量已知,参数 a a a已知,现在对两个随机干扰项进行抽样。
(1)在状态 n t n_t nt已知,参数 a a a已知的情况下,对 w t w_t wt的标准差进行采样
(2)在状态 c t c_t ct已知,参数 a a a已知的情况下,对 v t v_t vt的标准差进行采样
(3)在状态和其他参数已知的情况下,对系数向量 a ⃗ = [ a 1 , a 2 ] \vec{a}=[a_1,a_2] a =[a1,a2]进行采样
完成采样后,就完成了参数的一轮更新,再把更新值作为初始值,重复第一步到第三步。
问题的关键,找出参数的满条件分布形式。

论文2:

状态方程:
{ y t = F t ′ θ t ⃗ + v t , v t ∼ N ( 0 , V ) θ t ⃗ = G t θ t − 1 + w t , w t ∼ N ( 0 , W ) \begin{cases} y_t=F_{_t}'\vec{\theta_t}+v_t,v_t\sim N(0,V) \\ \vec{\theta_t}=G_t\theta_{_{t-1}}+w_t,w_t \sim N(0,W) \end{cases} {yt=Ftθt +vt,vtN(0,V)θt =Gtθt1+wt,wtN(0,W)
其中, V V V是标量, W = [ w 11 0 0 0 w 22 0 0 0 w 33 ] W=\begin{bmatrix} w_{11} & 0 & 0 \\ 0 & w_{22} & 0 \\ 0 & 0 & w_{33} \end{bmatrix} W=w11000w22000w33,其中 V , W V,W V,W称为精度参数。

在精度参数 V , W V,W V,W已知的情况下,对状态参数 θ \theta θ采用FFBS抽样,根据Carter等提出的FFBS算法理论,可以对状态参数向量空间进行前项滤波,后向Gibbs抽样,从而获得时变参数的向量值。首先给定初始信息:
θ 1 ∣ D 1 ∼ N ( m 1 ⃗ , C 1 ) \theta_1|D_1 \sim N(\vec{m_1},C_1) θ1D1N(m1 ,C1)
在时刻 t = 1 , 2 , . . . , T t=1,2,...,T t=1,2,...,T上,求:
θ t ∣ D t ∼ N ( m t ⃗ , C t ) (12) \theta_t|D_t \sim N(\vec{m_t},C_t) \tag{12} θtDtN(mt ,Ct)(12)
如论文一中我们的分析,此时知道状态的初始值,知道状态方程,知道观测方程,可以用卡尔曼滤波法求出式(12)的具体表达形式,也就是说可以求出均值和协方差矩阵,由如下式子给出:
{ m t = E ( θ t ∣ D t ⃗ ) = G t ⋅ E ( θ t − 1 ∣ D t − 1 ⃗ ) + R t ⋅ F t ⋅ Q t − 1 ⋅ [ y t − f t ] f t ⃗ = F t ′ ⋅ G t ⋅ m t − 1 \begin{cases} m_t=E(\vec{\theta_t|D_t})=G_t·E(\vec{\theta_{_{t-1}}|D_{{t-1}}})+R_t·F_t·Q_{t}^{-1}·[y_t-f_t]\\ \vec{f_t}=F_t'·G_t·m_{_{t-1}} \end{cases} {mt=E(θtDt )=GtE(θt1Dt1 )+RtFtQt1[ytft]ft =FtGtmt1

应用:负荷预测天气影响因子分析

本文将采用FFBS算法,研究天气对负荷的影响效应,并建立变参数模型,研究天气的影响随时间的变化关系。本文的逻辑结构如下:

  • 首先,建立状态方程,并用kalman滤波来估计变参数模型;
  • 其次,指出kalman滤波在估计变参数时反应“迟钝”的问题,并给出初步解决思路;
  • 再次,解决思路依赖于突变点的位置,因此,建立贝叶斯模型,推断突变点的位置;
  • 最后,利用验证的模型框架,验证天气和负荷之间的动态关系。

一、模型假设

假设当天的负荷可以分解为天气影响的部分、非天气因子影响的部分以及随机干扰的部分,即天气增长率可以写成如下方程:
状态方程:
{ y t = α t ⋅ k t + β t + v t , v t ∼ N ( 0 , V ) α t = α t − 1 + w 1 t , w 1 t ∼ N ( 0 , w 1 ) β t = β t − 1 + w 2 t , w 2 t ∼ N ( 0 , w 2 ) (1) \begin{cases} y_t=\alpha_{_t}·k_t+\beta_t+v_t,v_t\sim N(0,V) \\ \alpha_{_t}=\alpha_{_{t-1}}+w_{_{1t}},w_{_{1t}} \sim N(0,w_1)\\ \beta_{_t}=\beta_{_{t-1}}+w_{_{2t}},w_{_{2t}} \sim N(0,w_2)\\ \end{cases} \tag{1} yt=αtkt+βt+vt,vtN(0,V)αt=αt1+w1t,w1tN(0,w1)βt=βt1+w2t,w2tN(0,w2)(1)
可以将上述方程写成矩阵的形式:
θ t ⃗ = [ α t , β t ] ′ \vec{\theta_t}=[\alpha_t,\beta_t]' θt =[αt,βt] X t = [ k t , 1 ] ′ X_t=[k_t,1]' Xt=[kt,1] G t = [ 1 0 0 1 ] G_{t}=\begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix} Gt=[1001] W ′ = [ w 1 t , w 2 t ] W'=[w_{_{1t}},w_{_{2t}}] W=[w1t,w2t],则 W ∼ N ( [ 0 , 0 ] ′ , [ w 1 0 0 w 2 ] ) W \sim N([0,0]',\begin{bmatrix} w_{1} & 0 \\ 0 & w_{2} \\ \end{bmatrix}) WN([0,0],[w100w2])
则方程(1)可以写作:
{ y t = X t ′ θ t ⃗ + v t , v t ∼ N ( 0 , V ) θ t ⃗ = G t ⋅ θ ⃗ t − 1 + W (2) \begin{cases} y_t=X_t'\vec{\theta_t}+v_t,v_t\sim N(0,V) \\ \vec{\theta_t}=G_t·\vec{ \theta}_{_{t-1}}+W \\ \end{cases} \tag{2} {yt=Xtθt +vt,vtN(0,V)θt =Gtθ t1+W(2)

二、实现算法

算法伪代码

初始化V,W
for i in range(迭代次数)1.求theta_t的卡尔曼滤波;也就是theta_t的分布。
	2.时间倒序对theta进行采样:
	for j in range(T):
		求出theta的后验分布,并从中抽样;
	3.根据theata的采样,对V,W进行采样,更新V,W的值。

python代码实现

代码整体结构:
在这里插入图片描述

kalman滤波

本节将实现线性卡尔曼滤波器。卡尔曼滤波的本质是定义个可观测的变量,这个变量满足1.可测量;2.可通过隐含的不可观测的变量转换而来。也就是说这个可观测变量即可测量,又可预测,那么怎么把测量和预测的信息结合起来,就是kalman滤波要解决的问题,kalman滤波假设测量值服从一个正态分布,预测值也是一个正态分布,二者相乘,就得到了方差最小的可观测变量的估计值。具体代码如下:

import numpy as np
import matplotlib.pyplot as plt
def init_theta():
    # 状态方程参数1.初始状态的协方差;2.初始状态的干扰协方差
    # 初始状态分布的协方差
    P0 = np.mat([[2.5,0], [0, 2.5]])
    # 初始状态的随机干扰的协方差
    Q0 = np.eye(2)
    # 状态的初始值
    X0 = np.mat([[0.0, 0.0]])
    # 量测方程的随机干扰
    R0 = np.mat([[3.0]])
    # 量测方程的初始均值
    # R0 = np.mat(norm.rvs(loc=0, scale=1, size=2, random_state=1)).T
    # R0 = np.mat([[0.5,0], [0, 0.5]])
    # 状态转移矩阵:单位矩阵F
    F0 = np.eye(2)
    # 状态到观测的映射矩阵H
    return P0, Q0, R0, F0, X0

def kalman_filter(observations, H):
    """
    实现kalman滤波
    :param observations:观测值,也就是Z
    :param H: 状态到观测变量映射的系数即mu = HX
    :return:
    """
    # 初始化变量
    P0, Q0, R0, F0, X0 = init_theta()
    # 更新方程
    T = len(observations)
    # 均值的更新方程
    all_mean = [X0]
    all_cov = [P0]
    H = np.mat(H).T
    observations = np.mat(observations).T
    R_k = R0  # 观测误差协方差不变
    F_k = F0  # 状态转移矩阵不变
    P_K_1 = P0
    X_k_1 = X0.T
    for t in range(1, T):
        # 因为此时收敛了,所以协方差矩阵近乎为0,此时要出现系数突变
        H_k = H[:, t].T  # 解释变量,shape = [2,1]
        Z_k = observations[t,:]  # 观测值,shape=[1,1]
        # P_k的更新方程X_k = F_k*X_(k-1) ==> cov(X_k) = F_k*cov(X_(k-1))*F_k'
        P_k = F_k*P_K_1 * F_k.T
        #卡尔曼增益K
        K = (P_k*H_k.T*np.linalg.pinv(H_k*P_k*H_k.T+R_k)).T
        X_hat_k = F_k * X_k_1
        # 更新均值
        adjust_x_k = X_hat_k + K.T*(Z_k-H_k*X_hat_k)
        # 更新协方差
        adjust_p_k = P_k - K.T*H_k*P_k
        # 更新参数
        P_K_1 = adjust_p_k
        X_k_1 = adjust_x_k
        all_mean.append(adjust_x_k)
        all_cov.append(P_K_1)
    return all_mean, all_cov
kalman滤波的案例

下面将构造一个固定系数的一元线性回归模型,模拟生成如下数据:
y = 100 x + 5 + ϵ , x ∈ [ 0 , 1 ] , ϵ ∼ N ( 0 , 1 ) (3) y = 100x+5+\epsilon,x\in[0,1],\epsilon \sim N(0,1) \tag{3} y=100x+5+ϵ,x[0,1],ϵN(0,1)(3)
然后利用kalman滤波估计方程的斜率和截距。

 number = 2000
 x = np.random.rand(number)
 y = 100 * x + 5 + np.random.randn(number)
 plt.figure(figsize=(12,8))
 plt.plot(y)
 plt.legend('y')
 plt.show()

在这里插入图片描述
下面将利用第一节中定义的状态空间模型,估计截距和斜率。

 X = np.vstack([x, np.ones(number)]).T
 means,covs = kalman_filter(observations=y, H=X)
 means = np.hstack(means[1:])
 ax1 = plt.subplot(2, 1, 1, frameon=False) 
 plt.plot(means[0, :][0].tolist()[0], 'b--')
 plt.ylabel('k')
 ax2 = plt.subplot(2, 1, 2)
 plt.plot(means[1, :][0].tolist()[0], 'r--')
 plt.ylabel('b')
 plt.show()

如下图,给定初始值后,kalman滤波很快就收敛到了参数的真实值。
在这里插入图片描述

kalman滤波在变系数估计的局限性

天气因子在不同的季节影响效应是不同的,商业体在夏季空调是开启的,经过一段时间的过渡,进入秋冬季,此时空调可能大部分是关闭的,或者完全关闭,因此,天气对负荷的影响效应可能会有一个急剧的变化。本节将模拟一个变系数线性回归模型,在默认参数情况下,验证kalman滤波能否快速识别新的用电模式。模拟生成如下数据:

y t = { 12 x t + 5 + ϵ , t ∈ { 0 , 1 , . . . , 499 } 20 x t + 5 + ϵ , t ∈ { 500 , 501 , . . . , 1999 } (4) y_t=\begin{cases} 12x_t+5+\epsilon,t\in \{0,1,...,499\} \\ 20x_t+5+\epsilon,t \in \{500,501,...,1999\} \end{cases} \tag{4} yt={12xt+5+ϵ,t{0,1,...,499}20xt+5+ϵ,t{500,501,...,1999}(4)

number = 2000
x = np.random.randn(number)
# x.sort()
y = []
for i in range(number):
	if i<500:
	    y.append(12*x[i]+5 + np.random.randn())
	else:
	    y.append(20 * x[i] + 5 + np.random.randn())
y = np.array(y)
plt.figure(figsize=(12,8))
plt.legend("y")
plt.plot(y)
plt.show()

在这里插入图片描述
利用kalman滤波估计变系数的结果如下:
在这里插入图片描述

kalman滤波估计变系数存在的问题;我们人为的在t=499处设置了一个结构突变,来模拟天气效应的变化,发现kalman滤波更过很长一段时间仍然没有收敛到真实突变的水平,kalman滤波是一个缓慢上升的过程,原因在于kalman本质上是加权平均,在第一种数据生成的过程中,kalman滤波收敛到了真实的系数水平,此时的预测模型的协方差很小,在加权平均时,权重很大,导致后面新采集的数据在加权中,权重很小,因此,要经过很长一段时间的运行,才慢慢朝着真实的第二个系数逼近,为了验证这个推测,在运行kalman滤波时,在t=500处,重置一下预测模型的协方差,让协方差为单位矩阵,效果如下:

def kalman_filter(observations, H):
    """
    实现kalman滤波
    :param observations:观测值,也就是Z
    :param H: 状态到观测变量映射的系数即mu = HX
    :return:
    """
    # 初始化变量
    P0, Q0, R0, F0, X0 = init_theta()
    # 更新方程
    T = len(observations)
    # 均值的更新方程
    all_mean = [X0]
    all_cov = [P0]
    H = np.mat(H).T
    observations = np.mat(observations).T

    R_k = R0  # 观测误差协方差不变
    F_k = F0  # 状态转移矩阵不变

    P_K_1 = P0
    X_k_1 = X0.T

    for t in range(1, T):
    
        # 因为此时收敛了,所以协方差矩阵近乎为0,此时要出现系数突变
        # 由于协方差近乎为0,导致加权平均时,导致预测值的权重高,而测量
        # 值的权重低,因此,会出现很长一段时间都找不到正确的突变系数
        if t == 500:  # 在这里重置预测模型的协方差矩阵
            P_K_1 = np.mat([[1.0, 0], [0, 1.0]])
        其余代码同上...

在这里插入图片描述
从上图来看,期间只需简单的在迭代到500处时,重置一下协方差矩阵,kalman滤波就能快速的找到真实的第二阶段的斜率。针对何时需要调整协方差矩阵,是一个可以继续研究的点,本文的重点是将协方差矩阵随机化,因此,这里就不在继续讨论这个问题了。

贝叶斯推断定位突变点

        本节将描述如何利用贝叶斯方法,来推断数据的突变点个数和突变点位置。这里的突变点可以理解为分段函数;仍然以下面的分段函数为例,来验证我们检测突变点的方法;
y t = { 12 x t + 5 + ϵ t , t ∈ { 0 , 1 , . . . , 499 } , 20 x t + 5 + ϵ t , t ∈ { 500 , 501 , . . . , 1999 } (5) y_t=\begin{cases} 12x_t+5+\epsilon_t,t\in \{0,1,...,499\}, \\ 20x_t+5+\epsilon_t,t \in \{500,501,...,1999\} \end{cases} \tag{5} yt={12xt+5+ϵt,t{0,1,...,499},20xt+5+ϵt,t{500,501,...,1999}(5)
   突变中,最重要的一种情形就是数据的均值从一个平台转换到另一个平台,从时间序列的角度来看,也就是说以往历史的样本,和最近的样本均值发生了变化,这种也是现实中常见的情形,为了模拟这种场景,在实验时,要求 x t x_t xt是平稳的,且均值非0,否则的话,突变应该是属于波动率突变的情形了,那种情形应该对波动率进行结构突变的检验,总之,这里将演示如何构造模型,检验均值突变。
当含有一个结构突变点时,根据实y取值的分布,常常可以构造如下两种类型的贝叶斯模型:

  • 当观测值y取值可正可负,则可以假设观测值的分布是正态分布:
    { y t ∼ N ( λ , σ 2 ) λ = { λ 1 ∼ e x p ( 1 / y ˉ ) , t < τ λ 2 ∼ e x p ( 1 / y ˉ ) , t ≥ τ τ ∼ D i s c r e t e U n i f o r m ( 1 , T ) σ ∼ U [ 0 , 2 σ y ] (3) \begin{cases} y_t \sim N(\lambda,\sigma_{2}) \\ \lambda = \begin{cases} \lambda_1 \sim exp(1/\bar{y}),t<\tau \\ \lambda_2 \sim exp(1/\bar{y}) ,t \ge \tau \end{cases} \\ \tau \sim DiscreteUniform(1, T)\\ \sigma \sim U[0,2\sigma_y] \end{cases} \tag{3} ytN(λ,σ2)λ={λ1exp(1/yˉ),t<τλ2exp(1/yˉ),tττDiscreteUniform(1,T)σU[0,2σy](3)
    其中, σ y \sigma_y σy表示观测值y的标准差; y ˉ \bar{y} yˉ表示观测值y的均值。T表示观测值的数量。

  • 当观测值是非负的情况,我们既可以假设其实正态分布,也可以假设其实泊松分布,或者指数分布,这里给出泊松分布的例子:
    { y t ∼ P o s s i o n ( λ ) λ = { λ 1 ∼ e x p ( 1 / y ˉ ) , t < τ λ 2 ∼ e x p ( 1 / y ˉ ) , t ≥ τ τ ∼ U [ 1 , T ] (3) \begin{cases} y_t \sim Possion(\lambda) \\ \lambda = \begin{cases} \lambda_1 \sim exp(1/\bar{y}),t<\tau \\ \lambda_2 \sim exp(1/\bar{y}) ,t \ge \tau \end{cases} \\ \tau \sim U[1, T]\\ \end{cases} \tag{3} ytPossion(λ)λ={λ1exp(1/yˉ),t<τλ2exp(1/yˉ),tττU[1,T](3)

上述两种思路的python实现和结果如下:

状态空间后采样

待续

精度参数gibbs抽样

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值