{-# 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 ::
Double ->
Double ->
String ->
Int ->
Bool ->
Proposal Double
slide m s = createProposal (slideSimple m s)
slideSymmetricSimple :: Double -> Double -> ProposalSimple Double
slideSymmetricSimple s t = genericContinuous (normalDistr 0.0 (s * t)) (+) Nothing
slideSymmetric ::
Double ->
String ->
Int ->
Bool ->
Proposal Double
slideSymmetric s = createProposal (slideSymmetricSimple s)
slideUniformSimple :: Double -> Double -> ProposalSimple Double
slideUniformSimple d t =
genericContinuous (uniformDistr (- t * d) (t * d)) (+) Nothing
slideUniform ::
Double ->
String ->
Int ->
Bool ->
Proposal Double
slideUniform d = createProposal (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 ::
Double ->
Double ->
String ->
Int ->
Bool ->
Proposal (Double, Double)
slideContrarily m s = createProposal (slideContrarilySimple m s)