问题同之前我发的几个帖子,主要还是根据发病数预测疾病的流行状态,发病数这个观测在流行与未流行状态下产生的概率服从poisson分布,matlab程序如下:
j=0:10 # j 为观测值,即发病数
A1=(5.^j) *exp(-1.7)
B1=factorial(j)
p1=A.1/B1 #p1:未流行状态下发病数的概率
j=0:10
A2=(15.^j) *exp(-4.8)
B2=factorial(j)
p2=A2./B2 #p2:流行状态下发病数的概率
tr = [0.8874,0.1126;
0.4677,0.5323]; #tr:两个状态的转移概率
e = [p;p2;]; #e:两个状态下发病数的概率
seq = hmmgenerate(100,tr,e);
[estTR, estE] = hmmtrain(seq,tr,e);
estimatedStates = hmmviterbi(seq,tr,e);
pStates = hmmdecode(seq, tr, e) #分别产生观测序列、参数估计值和状态序列
现在的问题是,j 即发病数很大,在700-3000左右,这样j的阶乘B就很大,在matlab中就不能显示,为“INF”,P 就为0了,之后的参数估计值和状态序列这些就没有意义了。但实际上在几百万人中发生千多的病例,应该也算是poisson分布,我现在就不知道应该怎么处理这种观测值 j 很大matlab给不出结果的情形呢?是数据可以在怎么转化或者分布出问题了,还是程序有其他写法呢?
本人是学生,非常希望再次得到大家的帮助,谢谢!