我是python的新手,最近我正在做一些项目来执行马尔可夫过程的联合分布的计算。
随机内核的一个例子是 Hamilton (2005) 最近的一项研究中使用的内核,他根据美国失业数据研究了商业周期的非线性统计模型。作为计算的一部分,他估计内核
pH := 0.971 0.029 0
0.145 0.778 0.077
0 0.508 0.492
这里
S = {x1, x2, x3} = {NG, MR, SR}
,NG
对应于正常增长、MR
轻度衰退和SR
严重衰退。例如,在一个时期内从严重衰退过渡到温和衰退的概率是 0.508。期限为一个月。
基于上述马尔可夫过程的练习是
关于 Hamilton 核
pH
,并使用相同的初始条件 ψ = (0.2, 0.2, 0.6),计算经济在 0、1、2 期开始并保持在衰退中的概率(即 xt = NG fort = 0 , 1, 2)。
我的脚本就像
import numpy as np
## In this case, X should be a matrix rather than vector
## and we compute w.r.t P rather than merely its element [i][j]
path = []
def path_prob2 (p, psi , x2): # X a sequence giving the path
prob = psi # initial distribution is an row vector
for t in range(x2.shape[1] -1): # .shape[1] grasp # of columns
prob = np.dot(prob , p) # prob[t]: marginal distribution at period t
ression = np.dot(prob, x2[:,t])
path.append(ression)
return path,prob
p = ((0.971, 0.029, 0 ),
(0.145, 0.778, 0.077),
(0 , 0.508, 0.492))
# p must to be a 2-D numpy array
p = np.array(p)
psi = (0.2, 0.2, 0.6)
psi = np.array(psi)
x2 = ((0,0,0),
(1,1,1),
(1,1,1))
x2 = np.array(x2)
path_prob2(p,psi,x2)
在执行过程中,出现了两个问题。第一个是,在第一轮循环中,我不需要初始分布psi
来后乘交易矩阵p
,所以“保持衰退”的概率应该是 0.2+0.6 = 0.8,但我不知道如何编写if 语句。
第二个是,正如您可能注意到的,我使用一个名为的列表来收集每个时期“处于衰退中”的概率。最后我需要将列表中的每个元素一一相乘,我找不到实现此类任务的方法,例如(据我所知,np.multiply 只能接受两个参数)。如果确实存在这种方法,请给我一些线索。另外一个问题是请给我任何您认为可以使代码更高效的建议。谢谢你。path
path[0]*path[1]*path[2]