Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transition Probabilities for each observation #44

Closed
omerorsun opened this issue Apr 1, 2020 · 9 comments
Closed

Transition Probabilities for each observation #44

omerorsun opened this issue Apr 1, 2020 · 9 comments

Comments

@omerorsun
Copy link

omerorsun commented Apr 1, 2020

I am trying to decompose the forward probabilities in each time period into their constituent terms: a_{t-1}(i)q_{ij}P(o_{t}|j)

in

[a_{t}(j)=\sum_{i=1}^{N}a_{t-1}(i)q_{ij}P(o_{t}|j)]

The main challenge is the calculation of P(o_{t}|j) in multivariate case. Sometimes the joint emission probability for each state is zero for a given observation. As a result, forward probabilities should all be NAs due to zero division. However, forward_backward gives me non-zero or non-NA estimate for these scenarios. What is the specific way seqHMM deals with this scenario so that I get an non-zero or non-NA estimate?

Thank you in advance for any direction you can give.

@helske
Copy link
Owner

helske commented Apr 9, 2020

I'm not sure I follow, can you show me an example? What do you mean by joint emission probability? All "individuals" have their own hidden state sequence and a_{t}(j) is computed separately for each (possibly multichannel) sequence, so there can't be a case where all P(o_{t}|j) with different j are zero (as they have to sum to one).

@omerorsun
Copy link
Author

Let's say I have three manifest variables, X, Y, Z and observation with the values of 1, 0, 0 for these manifest variables. If some emission probabilities for these X, Y, and Z are P(1|State 1)=0, P(0|State 2)=0, P(0|State 3)=0, then the joint emission probability for State 1, State 2, State 3 will be 0 as follows:

P(1|State 1)P(0|State 1)P(0|State 1)=0

P(1|State 2)P(0|State 2)P(0|State 2)=0

P(1|State 3)P(0|State 3)P(0|State 3)=0

As a result, the forward probabilities for each observation will not sum to 1 as well.

@helske
Copy link
Owner

helske commented Apr 9, 2020

Thanks now I understand. Yes, that is possible if the emission matrix is poorly defined with respect to data or due to numerical issues during optimization, but I would think forward_backward gives error or warning in that case as well (just tested with hmm_biofam and it did)? If not, that sounds like a bug. Can you make minimal example where forward_backward behaves differently?

@omerorsun
Copy link
Author

Thank you for your response. I will send you a minimal example from my dataset shortly.

My main motivation is to extract a_{t-1}(i)q_{ij}P(o_{t}|j) before summation. I will use them as observation-specific transition probabilities from one state to another. Is there a way to extract them separately before summation without the recalculation?

@helske
Copy link
Owner

helske commented Apr 14, 2020

Unfortunately, at the moment you can't extract those terms separately. It could be pretty straightforward to make a new function for that based on this: https://github.com/helske/seqHMM/blob/master/src/internalForward.cpp if speed of "manual" computation in R is an issue though. Unfortunately, I do not have time right now but pull requests are of course very welcome. Although I'm not sure how relevant those values are in general?

@omerorsun
Copy link
Author

Thank you so much! I will experiment with the package. I have forked the package. Kind regards!

@omerorsun
Copy link
Author

omerorsun commented Apr 20, 2020

I am looking at https://github.com/helske/seqHMM/blob/master/src/internalForward.cpp
Line 13 and line 20 use %= operator rather than *= for the joint emission probabilities (P(o_{t}|j)). Is there a specific reason why this is the case given the equation for forward probabilities is a_{t-1}(i)q_{ij}P(o_{t}|j)

Thank you so much in advance!

@helske
Copy link
Owner

helske commented Apr 20, 2020

The % operator is an element-wise multiplication, so there I am just multiplying the vector of a_{t-1}(i)q_{ij}, j=1,m with each P(o_{t}|j).

@omerorsun
Copy link
Author

Thank you so much for your quick response!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants