markov-realization: Realizations of Markov chains.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Please see the README on GitHub at https://github.com/alexloomis/markov#markov-tutorial


[Skip to Readme]

Properties

Versions 0.1.0, 0.1.0, 0.2.1, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.4
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), contravariant (>=1.5.1 && <1.6), discrimination (>=0.4 && <0.5), generic-deriving (>=1.12.4 && <1.13), MonadRandom (>=0.5.1.1 && <0.6) [details]
License BSD-3-Clause
Copyright 2019 Alex Loomis
Author Alex Loomis
Maintainer atloomis@math.arizona.edu
Category Statistics
Home page https://github.com/alexloomis/markov
Bug tracker https://github.com/alexloomis/markov/issues
Source repo head: git clone git://github.com/alexloomis/markov.git
Uploaded by alexloomis at 2019-06-17T00:22:59Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for markov-realization-0.1.0

[back to package description]

Markov Tutorial

Let Xn denote the nth state of a Markov chain with state space ℕ. For x ≠ 0 define transition probabilities

p(x,0) = q,

p(x,x) = r, and

p(x,x+1) = s.

When x = 0, let p(x,0) = q+r, p(x,x+1) = s. Let p(x,y) = 0 in all other cases. Suppose we wanted to find P[Xn = j ∩ d = k], where d denotes the number of transitions from a positive integer to zero. There are three values we need to track — extinctions, probability, and state. Extinctions add a value to a counter each time they happen and the counter takes integral values, so they can be represented by Sum Int. Probabilities are multiplied each step, and added when duplicate steps are combined. We want decimal probabilities, so we can represent this with Product Rational. We will make a new type for the state.

data Extinction = Extinction Int
    deriving Generic
    deriving newtype (Eq, Num, Show)
    deriving anyclass Grouping

All that remains is to make an instance of Markov.

instance Markov (Sum Int, Product Rational) Extinction where
    transition x = case state x of
        0 -> [ 0 >*< (q+r) >*< id
             , 0 >*< s >*< (+1) ]
        _ -> [ 1 >*< q >*< const 0
             , 0 >*< r >*< id
             , 0 >*< s >*< (+1) ]
        where q = 0.1; r = 0.3; s = 0.6

We can now easily see a list of states, deaths, and the probabilities.


> chain [pure 0 :: Sum Int :* Product Rational :* Extinction] !! 3

((0,8 % 125),0)
((0,111 % 500),1)
((1,51 % 500),0)
((0,9 % 25),2)
((1,9 % 250),1)
((0,27 % 125),3

This means that starting from a state of zero, after three time steps there is a 51/500 chance that the state is zero and there has been one death.