{-# LANGUAGE RankNTypes #-}
module Mcmc.Proposal.Slide
( slide,
slideSymmetric,
slideUniform,
slideContrarily,
)
where
import Mcmc.Proposal
import Mcmc.Proposal.Generic
import Statistics.Distribution.Normal
import Statistics.Distribution.Uniform
slideSimple :: Double -> Double -> Double -> ProposalSimple Double
slideSimple m s t = genericContinuous (normalDistr m (s * t)) (+) (Just negate)
slide ::
String ->
Int ->
Double ->
Double ->
Bool ->
Proposal Double
slide n w m s = createProposal n w (slideSimple m s)
slideSymmetricSimple :: Double -> Double -> ProposalSimple Double
slideSymmetricSimple s t = genericContinuous (normalDistr 0.0 (s * t)) (+) Nothing
slideSymmetric ::
String ->
Int ->
Double ->
Bool ->
Proposal Double
slideSymmetric n w s = createProposal n w (slideSymmetricSimple s)
slideUniformSimple :: Double -> Double -> ProposalSimple Double
slideUniformSimple d t =
genericContinuous (uniformDistr (- t * d) (t * d)) (+) Nothing
slideUniform ::
String ->
Int ->
Double ->
Bool ->
Proposal Double
slideUniform n w d = createProposal n w (slideUniformSimple d)
contra :: (Double, Double) -> Double -> (Double, Double)
contra (x, y) d = (x + d, y - d)
slideContrarilySimple :: Double -> Double -> Double -> ProposalSimple (Double, Double)
slideContrarilySimple m s t = genericContinuous (normalDistr m (s * t)) contra (Just negate)
slideContrarily ::
String ->
Int ->
Double ->
Double ->
Bool ->
Proposal (Double, Double)
slideContrarily n w m s = createProposal n w (slideContrarilySimple m s)