{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Stochaskell, version 0.1.0\n", "Copyright (C) 2015-2020 David A Roberts\n", "This program comes with ABSOLUTELY NO WARRANTY.\n", "This is free software, and you are welcome to redistribute it\n", "under certain conditions; see the LICENSE for details.\n", "\n", "Using installation directory at \n", " /home/jovyan/stochaskell" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "{-# LANGUAGE FlexibleContexts, MonadComprehensions, NoImplicitPrelude, RebindableSyntax, TypeFamilies #-}\n", "import Language.Stochaskell\n", "stochaskell" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "mhStep :: P R -> (R -> P R) -> R -> P R\n", "mhStep target proposal x = do\n", " y <- proposal x\n", " let f = lpdf target; q = lpdfCond proposal\n", " a = exp (f y - f x + q y x - q x y)\n", " accept <- bernoulli (min' 1 a)\n", " return (if accept then y else x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import IHaskell.Display" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "_v_0_0\n", "\n", "log\n", "\n", "x\n", "\n", "\n", "\n", "_v_0_1\n", "\n", "normal_lpdf\n", "\n", " \n", "\n", "2\n", "\n", "0.75\n", "\n", "\n", "\n", "_v_0_0->_v_0_1:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_2\n", "\n", " \n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_0->_v_0_2:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_1->_v_0_2:f1\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "target :: P R\n", "target = do\n", " z <- normal 2 0.75\n", " return (exp z)\n", "\n", "svg <$> (vizIR . return . lpdf target $ symbol \"x\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "%3\n", "\n", "\n", "\n", "_v_0_1\n", "\n", " \n", "\n", "+\n", "\n", "x\n", "\n", "\n", "\n", "_v_0_2\n", "\n", "log\n", "\n", " \n", "\n", "\n", "\n", "_v_0_1->_v_0_2:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_9\n", "\n", "x\n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_1->_v_0_9:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_12\n", "\n", " \n", "\n", "-\n", "\n", "x\n", "\n", "\n", "\n", "_v_0_1->_v_0_12:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_18\n", "\n", "ifThenElse\n", "\n", " \n", "\n", " \n", "\n", "x\n", "\n", "\n", "\n", "_v_0_1->_v_0_18:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_3\n", "\n", "normal_lpdf\n", "\n", " \n", "\n", "2\n", "\n", "0.75\n", "\n", "\n", "\n", "_v_0_2->_v_0_3:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_4\n", "\n", " \n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_2->_v_0_4:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_3->_v_0_4:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_8\n", "\n", " \n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_4->_v_0_8:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_5\n", "\n", "log\n", "\n", "x\n", "\n", "\n", "\n", "_v_0_6\n", "\n", "normal_lpdf\n", "\n", " \n", "\n", "2\n", "\n", "0.75\n", "\n", "\n", "\n", "_v_0_5->_v_0_6:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_7\n", "\n", " \n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_5->_v_0_7:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_6->_v_0_7:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_7->_v_0_8:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_11\n", "\n", " \n", "\n", "+\n", "\n", " \n", "\n", "\n", "\n", "_v_0_8->_v_0_11:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_10\n", "\n", "uniform_lpdf\n", "\n", " \n", "\n", "-2\n", "\n", "2\n", "\n", "\n", "\n", "_v_0_9->_v_0_10:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_10->_v_0_11:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_14\n", "\n", " \n", "\n", "-\n", "\n", " \n", "\n", "\n", "\n", "_v_0_11->_v_0_14:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_13\n", "\n", "uniform_lpdf\n", "\n", " \n", "\n", "-2\n", "\n", "2\n", "\n", "\n", "\n", "_v_0_12->_v_0_13:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_13->_v_0_14:f2\n", "\n", "\n", "\n", "\n", "\n", "_v_0_15\n", "\n", "exp\n", "\n", " \n", "\n", "\n", "\n", "_v_0_14->_v_0_15:f1\n", "\n", "\n", "\n", "\n", "\n", "_v_0_16\n", "\n", "min\n", "\n", "1\n", "\n", " \n", "\n", "\n", "\n", "_v_0_15->_v_0_16:f2\n", "\n", "\n", "\n", "\n", "\n", "_x_ns_0_1\n", "\n", "~bernoulli\n", "\n", " \n", "\n", "\n", "\n", "_v_0_16->_x_ns_0_1:f1\n", "\n", "\n", "\n", "\n", "\n", "_x_ns_0_0\n", "\n", "~uniform\n", "\n", "-2\n", "\n", "2\n", "\n", "\n", "\n", "_x_ns_0_0->_v_0_1:f1\n", "\n", "\n", "\n", "\n", "\n", "\n", "_x_ns_0_1->_v_0_18:f1\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "proposal :: R -> P R\n", "proposal x = do\n", " u <- uniform (-2) 2\n", " return (x + u)\n", "\n", "svg <$> (vizIR . mhStep target proposal $ symbol \"x\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[runStep]\n", "let v_0_0 = getExternal x_sim_0_0 :: R\n", " v_0_1 = i_9_0 + x_sim_0_0 :: R\n", " v_0_2 = log v_0_1 :: R\n", " v_0_3 = normal_lpdf v_0_2 2.0 0.75 :: R\n", " v_0_4 = v_0_3 - v_0_2 :: R\n", " v_0_5 = log i_9_0 :: R\n", " v_0_6 = normal_lpdf v_0_5 2.0 0.75 :: R\n", " v_0_7 = v_0_6 - v_0_5 :: R\n", " v_0_8 = v_0_4 - v_0_7 :: R\n", " v_0_9 = i_9_0 - v_0_1 :: R\n", " v_0_10 = uniform_lpdf v_0_9 -2.0 2.0 :: R\n", " v_0_11 = v_0_8 + v_0_10 :: R\n", " v_0_12 = v_0_1 - i_9_0 :: R\n", " v_0_13 = uniform_lpdf v_0_12 -2.0 2.0 :: R\n", " v_0_14 = v_0_11 - v_0_13 :: R\n", " v_0_15 = exp v_0_14 :: R\n", " v_0_16 = min 1.0 v_0_15 :: R\n", " v_0_17 = getExternal x_sim_0_1 :: B\n", " v_0_18 = ifThenElse x_sim_0_1 v_0_1 i_9_0 :: R\n", " in do x_sim_0_0 <- uniform -2.0 2.0 :: P R\n", " x_sim_0_1 <- bernoulli v_0_16 :: P B\n", " return [v_0_18]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "samples <- iterateLimit 10000 (runStep (mhStep target proposal)) 1" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[runStep]\n", "let v_0_0 = getExternal x_sim_0_0 :: R\n", " v_0_1 = i_9_0 * x_sim_0_0 :: R\n", " v_0_2 = log v_0_1 :: R\n", " v_0_3 = normal_lpdf v_0_2 2.0 0.75 :: R\n", " v_0_4 = v_0_3 - v_0_2 :: R\n", " v_0_5 = log i_9_0 :: R\n", " v_0_6 = normal_lpdf v_0_5 2.0 0.75 :: R\n", " v_0_7 = v_0_6 - v_0_5 :: R\n", " v_0_8 = v_0_4 - v_0_7 :: R\n", " v_0_9 = i_9_0 / v_0_1 :: R\n", " v_0_10 = uniform_lpdf v_0_9 0.5 2.0 :: R\n", " v_0_11 = v_0_10 - v_0_2 :: R\n", " v_0_12 = v_0_8 + v_0_11 :: R\n", " v_0_13 = uniform_lpdf x_sim_0_0 0.5 2.0 :: R\n", " v_0_14 = v_0_13 - v_0_5 :: R\n", " v_0_15 = v_0_12 - v_0_14 :: R\n", " v_0_16 = exp v_0_15 :: R\n", " v_0_17 = min 1.0 v_0_16 :: R\n", " v_0_18 = getExternal x_sim_0_1 :: B\n", " v_0_19 = ifThenElse x_sim_0_1 v_0_1 i_9_0 :: R\n", " in do x_sim_0_0 <- uniform 0.5 2.0 :: P R\n", " x_sim_0_1 <- bernoulli v_0_17 :: P B\n", " return [v_0_19]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "proposal :: R -> P R\n", "proposal x = do\n", " u <- uniform (1/2) 2\n", " return (x * u)\n", "\n", "samples' <- iterateLimit 10000 (runStep (mhStep target proposal)) 1" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import Language.Stochaskell.Plot\n", ":opt svg" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "toRenderable $ do\n", " plotHist \"symmetric proposal\" (real <$> samples) (0,80) 0.5\n", " plotHist \"asymmetric proposal\" (real <$> samples') (0,80) 0.5\n", " plotpdf \"target\" target (0,80)\n", " xlabel \"location\"\n", " ylabel \"density\"" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "toRenderable $ do\n", " liftCState $ colors %= map (dissolve 0.7)\n", " plot $ line \"symmetric proposal\" [zip [0..] $ real <$> samples]\n", " plot $ line \"asymmetric proposal\" [zip [0..] $ real <$> samples']\n", " xlabel \"time\"\n", " ylabel \"location\"\n", " ylim (0,80)" ] } ], "metadata": { "kernelspec": { "display_name": "Haskell", "language": "haskell", "name": "haskell" }, "language_info": { "codemirror_mode": "ihaskell", "file_extension": ".hs", "name": "haskell", "pygments_lexer": "Haskell", "version": "8.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }