The basic idea goes as follows. Suppose \(\pi\) is a joint distribution on variables \(x_1\) and \(x_2\) specified by the following table (see the linked paper page 620).
\(\pi\) | \(x_1=0\) | \(x_1=1\) |
\(x_2=0\) | \(\frac{1}{2}\) | \(\frac{1}{2}\) |
\(x_2=1\) | 0 | 0 |
and further suppose \(\nu\) is the uniform distribution on variables \(x_1\) and \(x_3\):
\(\pi\) | \(x_1=0\) | \(x_1=1\) |
\(x_2=0\) | \(\frac{1}{2}\) | \(\frac{1}{2}\) |
\(x_2=1\) | 0 | 0 |
Then we define $$ (\pi \rhd \nu)(x_1,x_2,x_3) = \frac{ \pi(x_1,x_2) \nu(x_2, x_3) } { \nu^{\downarrow(2)}(x_2) } $$ where the down arrow indicates a marginal distribution. This division may not always be defined. For example the composition \(\pi \rhd \nu(x)\) is defined for all combinations of \(x_1\),\(x_2\) and \(x_3\) whereas the composition \(\nu \rhd \pi(x)\) is defined for only some, as in the table below which can be compared to that on page 630 of Jirousek's paper.
\(x_1\) | \(x_2\) | \(x_3\) | \(\pi \rhd \nu(x)\) | \(\nu \lhd \pi(x)\) |
false | false | false | Some(0.25) | Some(0.125) | false | false | true | Some(0.25) | Some(0.125) | false | true | false | Some(0.0) | None | false | true | true | Some(0.0) | None | true | false | false | Some(0.25) | Some(0.125) | true | false | true | Some(0.25) | Some(0.125) | true | true | false | Some(0.0) | None | true | true | true | Some(0.0) | None |
Conveniently Scala allows function names like |> and <|, and the monadic representation of results. Here None means undefined, and a finer point about the implementation below is that I might have used a ternary operator to resolve 0*0/0=0, as per Jirousek's convention.
Anyway, here's the code
No comments:
Post a Comment