Løsningskisse til oblig
Kode til oppgave 5:
set.seed(2555885)
p = 0.9
P = matrix(c(p,1-p,1-p,p),ncol=2)
q = 0.9
Q = rbind(c(0.7,0.25,0.05),c(0.05,0.25,0.7))
#Simulate
N = 50
x = rep(NA,N)
x[1] = 1
for(n in 2:N)
x[n] = sample(1:2,1,prob=P[x[n-1],])
S = rep(NA,N)
for(n in 1:N)
S[n] = sample(1:3,1,prob=Q[x[n],])
#S = c(1,1,1,2,1,1,2,2,2,1,2,1,1,1,1)
N = length(S)
Fn = matrix(nrow=N,ncol=2)
Fn[1,] = c(0.5,0.5)*Q[,S[1]]
Pn = Fn[1,2]/sum(Fn[1,])
for(n in 2:N)
{
for(j in 1:2)
Fn[n,j] = Q[j,S[n]]*sum(Fn[n-1,]*P[,j])
Pn = c(Pn,Fn[n,2]/sum(Fn[n,]))
}
Pn2 = Pn
plot.ts(Pn,ylim=c(0,1))
points(0.5*(S-1))
Bn = matrix(nrow=N,ncol=2)
Bn[N,] = c(1,1)
for(n in (N-1):1)
{
for(j in 1:2)
Bn[n,j] = sum(Q[,S[n+1]]*Bn[n+1,]*P[j,])
Pn2[n] = (Fn[n,2]*Bn[n,2])/sum(Fn[n,]*Bn[n,])
}
lines(Pn2,col=2)
Pn3 = Q[2,S]/(Q[1,S]+Q[2,S])
lines(Pn3,col=3)
Gir følgende plott:
Kommentar:
Hvis man observerer 1 eller 3, er man ganske sikker om X er to eller ikke. Derimot er man ikke så sikker hvis man observerer S = 2. Men siden X er Markov, og ikke hopper veldig ofte frem og tilbake, vil det hjelpe å kunne vite verdiene til S i et område rundt ruten man ser på. Siden man bare tar hensyn til hva som skjedde til venstre i 5e, mens man også tar hensyn til hva som skjedde både til venstre og høyre i 5f, får man nå sikrere konklusjoner.