{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Stochaskell, version 0.1.0\n",
"Copyright (C) 2015-2019 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 #-}\n",
"import Language.Stochaskell\n",
"stochaskell"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"coalLikelihood :: R->(Z,RVec,RVec)->P RVec\n",
"coalLikelihood t (n,s,g) = do\n",
" let rate y = g!(findSortedInsertIndex y s)\n",
" widths = vector\n",
" [ (s!(i+1)) - (s!i)\n",
" | i <- 1...(n-1) ] :: RVec\n",
" w = blockVector [cast (s!1), widths,\n",
" cast (t - (s!n))] :: RVec\n",
" areas = vector [ (w!j) * (g!j)\n",
" | j <- 1...(n+1) ]\n",
" area = sum' areas\n",
" y <- poissonProcess t rate area\n",
" return y\n",
"\n",
"coalPrior :: R -> P (Z,RVec,RVec)\n",
"coalPrior t = do\n",
" let lam = 3; nMax = 30; a = 1; b = 200\n",
" n <- truncated 1 nMax (poisson lam)\n",
" s' <- orderedSample\n",
" (2*n + 1) (uniform 0 t) :: P RVec\n",
" let s = vector [ s'!(2*i) | i <- 1...n ]\n",
" g <- joint vector [ gamma a b\n",
" | _ <- 1...(n+1) ]\n",
" return (n,s,g)\n",
"\n",
"type Model = (Z,RVec,RVec,RVec)\n",
"coal :: R -> P Model\n",
"coal t = do\n",
" (n,s,g) <- coalPrior t\n",
" y <- coalLikelihood t (n,s,g)\n",
" return (n,s,g,y)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"coalMovePoint :: R -> Model -> P Model\n",
"coalMovePoint t (n,s_,g,y) = do\n",
" let s i = if i == 0 then 0\n",
" else if i == (n+1) then t\n",
" else (s_!i)\n",
" j <- uniform 1 n\n",
" u <- uniform 0 1\n",
" let sj' = s (j-1) +\n",
" (s (j+1) - s (j-1)) * u\n",
" s' = s_ `replaceAt` (j, sj')\n",
" return (n,s',g,y)\n",
"\n",
"coalMoveRate :: R -> Model -> P Model\n",
"coalMoveRate t (n,s,g,y) = do\n",
" j <- uniform 1 (n+1)\n",
" u <- uniform (-1/2) (1/2)\n",
" let gj = exp (log (g!j) + u)\n",
" g' = g `replaceAt` (j, gj)\n",
" return (n,s,g',y)\n",
"\n",
"coalMoveBirth :: R -> Model -> P Model\n",
"coalMoveBirth t (n,s,g,y) = do\n",
" x <- uniform 0 t\n",
" let j = findSortedInsertIndex x s\n",
" s' = s `insertAt` (j, x)\n",
" u <- lognormal 0 1\n",
" let g' = g `insertAt` (j+1, u * (g!j))\n",
" return (n+1,s',g',y)\n",
"\n",
"coalMoveDeath :: R -> Model -> P Model\n",
"coalMoveDeath t (n,s,g,y) = do\n",
" j <- uniform 1 n\n",
" let s' = s `deleteAt` j\n",
" g' = g `deleteAt` (j+1)\n",
" return (n-1,s',g',y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"coalMoveProbs :: Z -> (R,R,R,R)\n",
"coalMoveProbs n = (e,p,b,d)\n",
" where lam = 3\n",
" nMax = 30\n",
" c = 0.9 * (real lam + 1) / (2 * real lam + 1)\n",
" b = if n == nMax then 0 else if n < (lam - 1) then c else c * real lam / (cast n + 1) :: R\n",
" d = if n == 1 then 0 else if lam < n then c else c * cast n / real lam :: R\n",
" p = if n == 1 then 0 else (1-b-d)/2 :: R\n",
" e = if n == 1 then 1-b-d else (1-b-d)/2 :: R"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"coalMove :: R -> Model -> P Model\n",
"coalMove t m@(n,_,_,_) = do\n",
" let (e,p,b,d) = coalMoveProbs n\n",
" mixture' [(e, coalMoveRate t m)\n",
" ,(p, coalMovePoint t m)\n",
" ,(b, coalMoveBirth t m)\n",
" ,(d, coalMoveDeath t m) ]\n",
"\n",
"coalStep :: R -> Model -> IO Model\n",
"coalStep t m =\n",
" coal t `rjmc` coalMove t `runStep` m"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"coalData = [ 1851.203, 1851.632, 1851.969, 1851.975, 1852.314, 1852.347, 1852.358, 1852.385, 1852.977 , 1853.196, 1853.229, 1853.319, 1853.500, 1854.135, 1856.396, 1856.506, 1856.539, 1856.618 , 1857.138, 1857.404, 1857.582, 1858.091, 1858.154, 1858.406, 1858.945, 1860.125, 1860.169 , 1860.591, 1860.851, 1860.919, 1860.971, 1861.185, 1861.738, 1861.836, 1862.138, 1862.893 , 1862.937, 1863.178, 1863.794, 1863.939, 1863.986, 1865.459, 1865.971, 1866.064, 1866.340 , 1866.452, 1866.833, 1866.948, 1866.951, 1867.635, 1867.854, 1867.862, 1868.749, 1868.903 , 1868.988, 1869.251, 1869.442, 1869.554, 1869.809, 1869.875, 1870.124, 1870.515, 1870.559 , 1870.633, 1871.027, 1871.151, 1871.167, 1871.736, 1871.816, 1872.123, 1872.240, 1872.769 , 1873.136, 1874.285, 1874.546, 1874.888, 1874.981, 1875.329, 1875.925, 1875.931, 1875.931 , 1876.966, 1877.064, 1877.105, 1877.190, 1877.779, 1877.809, 1878.184, 1878.195, 1878.236 , 1878.433, 1878.696, 1879.036, 1879.172, 1879.501, 1880.057, 1880.539, 1880.689, 1880.944 , 1881.105, 1881.968, 1882.129, 1882.296, 1882.299, 1882.335, 1882.852, 1883.797, 1883.851 , 1884.073, 1884.856, 1885.168, 1885.464, 1885.979, 1886.617, 1886.693, 1886.754, 1886.921 , 1887.134, 1887.405, 1888.298, 1889.051, 1889.198, 1889.793, 1890.102, 1890.190, 1891.252 , 1891.665, 1892.654, 1893.508, 1894.477, 1895.318, 1896.070, 1896.284, 1896.331, 1899.630 , 1901.393, 1902.671, 1905.056, 1905.188, 1905.524, 1906.773, 1908.136, 1908.270, 1908.629 , 1909.127, 1909.825, 1910.357, 1910.970, 1912.520, 1913.784, 1914.409, 1916.615, 1918.031 , 1922.529, 1922.677, 1923.569, 1927.162, 1928.114, 1930.154, 1930.748, 1931.077, 1931.830 , 1931.884, 1932.065, 1932.864, 1932.875, 1933.883, 1934.723, 1935.643, 1935.695, 1936.596 , 1937.500, 1938.354, 1939.821, 1940.218, 1940.424, 1941.420, 1941.522, 1941.574, 1942.001 , 1942.129, 1942.483, 1946.945, 1947.025, 1947.619, 1947.638, 1947.687, 1951.405, 1957.883 , 1960.489, 1962.220]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"coalData' = subtract (head days) <$> days\n",
" where days = [365.2425 * yr | yr <- coalData]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(4,[5103.668914593937,25700.783608506343,29470.225091303586,36244.890506445045],[4.892522331906208e-3,1.4197347319748954e-2,2.00712577711841e-3,1.3410980131244538e-3,2.615629151408432e-3])"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"let t = 40907\n",
"(n0,s0,g0) <- simulate (coalPrior t)\n",
"print (n0,s0,g0)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\\input ->\n",
" let v_0_0 = 1 == input.0_0 :: B\n",
" v_0_1 = 30 == input.0_0 :: B\n",
" v_0_2 = input.0_0 < 2 :: B\n",
" v_0_3 = 1.0 + 3.0 :: R\n",
" v_0_4 = 0.9 * v_0_3 :: R\n",
" v_0_5 = 1.0 + 6.0 :: R\n",
" v_0_6 = v_0_4 / v_0_5 :: R\n",
" v_0_7 = v_0_6 * 3.0 :: R\n",
" v_0_8 = 1.0 + input.0_0 :: R\n",
" v_0_9 = v_0_7 / v_0_8 :: R\n",
" v_0_10 = ifThenElse v_0_2 v_0_6 v_0_9 :: R\n",
" v_0_11 = ifThenElse v_0_1 0.0 v_0_10 :: R\n",
" v_0_12 = 1.0 - v_0_11 :: R\n",
" v_0_13 = 3 < input.0_0 :: B\n",
" v_0_14 = v_0_6 * input.0_0 :: R\n",
" v_0_15 = v_0_14 / 3.0 :: R\n",
" v_0_16 = ifThenElse v_0_13 v_0_6 v_0_15 :: R\n",
" v_0_17 = ifThenElse v_0_0 0.0 v_0_16 :: R\n",
" v_0_18 = v_0_12 - v_0_17 :: R\n",
" v_0_19 = v_0_18 / 2.0 :: R\n",
" v_0_20 = ifThenElse v_0_0 v_0_18 v_0_19 :: R\n",
" v_0_21 = ifThenElse v_0_0 0.0 v_0_19 :: R\n",
" v_0_22 = +s 1 1 1 1 :: Z\n",
" v_0_23 = getExternal x_show_0_0 :: Z\n",
" v_0_24 = 1 + input.0_0 :: Z\n",
" v_0_25 = getExternal x_show_0_1 :: Z\n",
" v_0_26 = getExternal x_show_0_2 :: R\n",
" v_0_27 = getExternal x_show_0_3 :: Z\n",
" v_0_28 = getExternal x_show_0_4 :: R\n",
" v_0_29 = getExternal x_show_0_5 :: R\n",
" v_0_30 = getExternal x_show_0_6 :: R\n",
" v_0_31 = getExternal x_show_0_7 :: Z\n",
" v_0_32 = log input.0_2!x_show_0_1 :: R\n",
" v_0_33 = x_show_0_2 + v_0_32 :: R\n",
" v_0_34 = exp v_0_33 :: R\n",
" v_0_35 = replaceIndex input.0_2 x_show_0_1 v_0_34 :: vector R\n",
" v_0_36 = x_show_0_3 == 1 :: B\n",
" v_0_37 = x_show_0_3 - v_0_24 :: Z\n",
" v_0_38 = v_0_37 == 1 :: B\n",
" v_0_39 = x_show_0_3 - 1 :: Z\n",
" v_0_40 = ifThenElse v_0_38 40907.0 input.0_1!v_0_39 :: R\n",
" v_0_41 = ifThenElse v_0_36 0.0 v_0_40 :: R\n",
" v_0_42 = negate x_show_0_3 :: Z\n",
" v_0_43 = v_0_42 == 1 :: B\n",
" v_0_44 = v_0_24 - x_show_0_3 :: Z\n",
" v_0_45 = v_0_44 == 1 :: B\n",
" v_0_46 = x_show_0_3 + 1 :: Z\n",
" v_0_47 = ifThenElse v_0_45 40907.0 input.0_1!v_0_46 :: R\n",
" v_0_48 = ifThenElse v_0_43 0.0 v_0_47 :: R\n",
" v_0_49 = v_0_48 - v_0_41 :: R\n",
" v_0_50 = v_0_49 * x_show_0_4 :: R\n",
" v_0_51 = v_0_41 + v_0_50 :: R\n",
" v_0_52 = replaceIndex input.0_1 x_show_0_3 v_0_51 :: vector R\n",
" v_0_53 = findSortedInsertIndex x_show_0_5 input.0_1 :: Z\n",
" v_0_54 = insertIndex input.0_1 v_0_53 x_show_0_5 :: vector R\n",
" v_0_55 = v_0_53 + 1 :: Z\n",
" v_0_56 = exp x_show_0_6 :: R\n",
" v_0_57 = v_0_56 * input.0_2!v_0_53 :: R\n",
" v_0_58 = insertIndex input.0_2 v_0_55 v_0_57 :: vector R\n",
" v_0_59 = input.0_0 - 1 :: Z\n",
" v_0_60 = deleteIndex input.0_1 x_show_0_7 :: vector R\n",
" v_0_61 = x_show_0_7 + 1 :: Z\n",
" v_0_62 = deleteIndex input.0_2 v_0_61 :: vector R\n",
" v_0_63 = case x_show_0_0 of\n",
" 1 ->\n",
" [input.0_0,input.0_1,v_0_35,input.0_3]\n",
" 2 ->\n",
" [input.0_0,v_0_52,input.0_2,input.0_3]\n",
" 3 ->\n",
" [v_0_24,v_0_54,v_0_58,input.0_3]\n",
" 4 ->\n",
" [v_0_59,v_0_60,v_0_62,input.0_3]\n",
" v_0_64 = poisson_lpdf v_0_63.0_0 3.0 :: R\n",
" v_0_65 = 1 > v_0_63.0_0 :: B\n",
" v_0_66 = 2 * v_0_63.0_0 :: Z\n",
" v_0_67 = v_0_66 + 1 :: Z\n",
" v_0_68 = logFactorial v_0_67 :: R\n",
" v_0_69 = uniform_cdf v_0_63.0_1!1 0.0 40907.0 :: R\n",
" v_0_70 = log v_0_69 :: R\n",
" v_0_71 = v_0_63.0_0 - 1 :: Z\n",
" v_0_72 = \n",
" [ let v_1_0 = i_1_1 + 1 :: Z\n",
" v_1_1 = uniform_cdf v_0_63.0_1!v_1_0 0.0 40907.0 :: R\n",
" v_1_2 = uniform_cdf v_0_63.0_1!i_1_1 0.0 40907.0 :: R\n",
" v_1_3 = v_1_1 - v_1_2 :: R\n",
" v_1_4 = log v_1_3 :: R\n",
" v_1_5 = 2 * v_1_0 :: Z\n",
" v_1_6 = 2 * i_1_1 :: Z\n",
" v_1_7 = v_1_5 - v_1_6 :: Z\n",
" v_1_8 = v_1_7 - 1 :: Z\n",
" v_1_9 = v_1_4 * v_1_8 :: R\n",
" v_1_10 = logFactorial v_1_8 :: R\n",
" v_1_11 = v_1_9 - v_1_10 :: R\n",
" in v_1_11\n",
" | i_1_1 <- 1...v_0_71 ] :: vector R\n",
" v_0_73 = foldl 0.0 v_0_72 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_74 = uniform_cdf v_0_63.0_1!v_0_63.0_0 0.0 40907.0 :: R\n",
" v_0_75 = 1.0 - v_0_74 :: R\n",
" v_0_76 = log v_0_75 :: R\n",
" v_0_77 = v_0_67 - v_0_66 :: Z\n",
" v_0_78 = v_0_76 * v_0_77 :: R\n",
" v_0_79 = logFactorial v_0_77 :: R\n",
" v_0_80 = v_0_78 - v_0_79 :: R\n",
" v_0_81 = \n",
" [ let v_1_0 = uniform_lpdf v_0_63.0_1!i_1_1 0.0 40907.0 :: R\n",
" in v_1_0\n",
" | i_1_1 <- 1...v_0_63.0_0 ] :: vector R\n",
" v_0_82 = foldl 0.0 v_0_81 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_83 = +s v_0_68 v_0_70 v_0_73 v_0_80 v_0_82 :: R\n",
" v_0_84 = ifThenElse v_0_65 0.0 v_0_83 :: R\n",
" v_0_85 = vectorSize v_0_63.0_2 :: Z\n",
" v_0_86 = \n",
" [ i_1_1\n",
" | i_1_1 <- 1...v_0_85 ] :: vector Z\n",
" v_0_87 = foldl 0.0 v_0_86 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = gamma_lpdf v_0_63.0_2!i_1_11 1.0 200.0 :: R\n",
" v_1_1 = i_1_12 + v_1_0 :: R\n",
" in v_1_1\n",
" v_0_88 = \n",
" [ let v_1_0 = 2 * i_1_1 :: Z\n",
" in ( let v_0_0 = 2 * i_1_1 :: Z\n",
" in v_0_0 -> let v_0_0 = log input.0_2!x_show_0_1 :: R\n",
" v_0_1 = x_show_0_2 + v_0_0 :: R\n",
" v_0_2 = exp v_0_1 :: R\n",
" v_0_3 = replaceIndex input.0_2 x_show_0_1 v_0_2 :: vector R\n",
" v_0_4 = x_show_0_3 - 1 :: Z\n",
" v_0_5 = x_show_0_3 == 1 :: B\n",
" v_0_6 = 1 + input.0_0 :: Z\n",
" v_0_7 = x_show_0_3 - v_0_6 :: Z\n",
" v_0_8 = v_0_7 == 1 :: B\n",
" v_0_9 = ifThenElse v_0_8 40907.0 input.0_1!v_0_4 :: R\n",
" v_0_10 = ifThenElse v_0_5 0.0 v_0_9 :: R\n",
" v_0_11 = x_show_0_3 + 1 :: Z\n",
" v_0_12 = negate x_show_0_3 :: Z\n",
" v_0_13 = v_0_12 == 1 :: B\n",
" v_0_14 = v_0_6 - x_show_0_3 :: Z\n",
" v_0_15 = v_0_14 == 1 :: B\n",
" v_0_16 = ifThenElse v_0_15 40907.0 input.0_1!v_0_11 :: R\n",
" v_0_17 = ifThenElse v_0_13 0.0 v_0_16 :: R\n",
" v_0_18 = v_0_17 - v_0_10 :: R\n",
" v_0_19 = v_0_18 * x_show_0_4 :: R\n",
" v_0_20 = v_0_10 + v_0_19 :: R\n",
" v_0_21 = replaceIndex input.0_1 x_show_0_3 v_0_20 :: vector R\n",
" v_0_22 = findSortedInsertIndex x_show_0_5 input.0_1 :: Z\n",
" v_0_23 = insertIndex input.0_1 v_0_22 x_show_0_5 :: vector R\n",
" v_0_24 = v_0_22 + 1 :: Z\n",
" v_0_25 = exp x_show_0_6 :: R\n",
" v_0_26 = v_0_25 * input.0_2!v_0_22 :: R\n",
" v_0_27 = insertIndex input.0_2 v_0_24 v_0_26 :: vector R\n",
" v_0_28 = input.0_0 - 1 :: Z\n",
" v_0_29 = deleteIndex input.0_1 x_show_0_7 :: vector R\n",
" v_0_30 = x_show_0_7 + 1 :: Z\n",
" v_0_31 = deleteIndex input.0_2 v_0_30 :: vector R\n",
" v_0_32 = case x_show_0_0 of\n",
" 1 ->\n",
" [input.0_0,input.0_1,v_0_3,input.0_3]\n",
" 2 ->\n",
" [input.0_0,v_0_21,input.0_2,input.0_3]\n",
" 3 ->\n",
" [v_0_6,v_0_23,v_0_27,input.0_3]\n",
" 4 ->\n",
" [v_0_28,v_0_29,v_0_31,input.0_3]\n",
" in v_0_32.0_1!i_1_1 | i_1_1 <- 1...let v_0_0 = log input.0_2!x_show_0_1 :: R\n",
" v_0_1 = x_show_0_2 + v_0_0 :: R\n",
" v_0_2 = exp v_0_1 :: R\n",
" v_0_3 = replaceIndex input.0_2 x_show_0_1 v_0_2 :: vector R\n",
" v_0_4 = x_show_0_3 - 1 :: Z\n",
" v_0_5 = x_show_0_3 == 1 :: B\n",
" v_0_6 = 1 + input.0_0 :: Z\n",
" v_0_7 = x_show_0_3 - v_0_6 :: Z\n",
" v_0_8 = v_0_7 == 1 :: B\n",
" v_0_9 = ifThenElse v_0_8 40907.0 input.0_1!v_0_4 :: R\n",
" v_0_10 = ifThenElse v_0_5 0.0 v_0_9 :: R\n",
" v_0_11 = x_show_0_3 + 1 :: Z\n",
" v_0_12 = negate x_show_0_3 :: Z\n",
" v_0_13 = v_0_12 == 1 :: B\n",
" v_0_14 = v_0_6 - x_show_0_3 :: Z\n",
" v_0_15 = v_0_14 == 1 :: B\n",
" v_0_16 = ifThenElse v_0_15 40907.0 input.0_1!v_0_11 :: R\n",
" v_0_17 = ifThenElse v_0_13 0.0 v_0_16 :: R\n",
" v_0_18 = v_0_17 - v_0_10 :: R\n",
" v_0_19 = v_0_18 * x_show_0_4 :: R\n",
" v_0_20 = v_0_10 + v_0_19 :: R\n",
" v_0_21 = replaceIndex input.0_1 x_show_0_3 v_0_20 :: vector R\n",
" v_0_22 = findSortedInsertIndex x_show_0_5 input.0_1 :: Z\n",
" v_0_23 = insertIndex input.0_1 v_0_22 x_show_0_5 :: vector R\n",
" v_0_24 = v_0_22 + 1 :: Z\n",
" v_0_25 = exp x_show_0_6 :: R\n",
" v_0_26 = v_0_25 * input.0_2!v_0_22 :: R\n",
" v_0_27 = insertIndex input.0_2 v_0_24 v_0_26 :: vector R\n",
" v_0_28 = input.0_0 - 1 :: Z\n",
" v_0_29 = deleteIndex input.0_1 x_show_0_7 :: vector R\n",
" v_0_30 = x_show_0_7 + 1 :: Z\n",
" v_0_31 = deleteIndex input.0_2 v_0_30 :: vector R\n",
" v_0_32 = case x_show_0_0 of\n",
" 1 ->\n",
" [input.0_0,input.0_1,v_0_3,input.0_3]\n",
" 2 ->\n",
" [input.0_0,v_0_21,input.0_2,input.0_3]\n",
" 3 ->\n",
" [v_0_6,v_0_23,v_0_27,input.0_3]\n",
" 4 ->\n",
" [v_0_28,v_0_29,v_0_31,input.0_3]\n",
" in v_0_32.0_0 )!v_1_0\n",
" | i_1_1 <- 1...v_0_63.0_0 ] :: vector R\n",
" v_0_89 = \\i_1_1 ->\n",
" let v_1_0 = findSortedInsertIndex i_1_1 v_0_88 :: Z\n",
" in v_0_63.0_2!v_1_0\n",
" v_0_90 = 1 + v_0_63.0_0 :: Z\n",
" v_0_91 = \n",
" [ let v_1_0 = i_1_1 + 1 :: Z\n",
" v_1_1 = v_0_88!v_1_0 - v_0_88!i_1_1 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_71 ] :: vector R\n",
" v_0_92 = 40907.0 - v_0_88!v_0_63.0_0 :: R\n",
" v_0_93 = +s v_0_71 1 1 :: Z\n",
" v_0_94 = \n",
" [ let v_1_0 = (block array ([1],[3]) [([1],v_0_88!1),([2],v_0_91),([3],v_0_92)] :: vector R)!i_1_1 * v_0_63.0_2!i_1_1 :: R\n",
" in v_1_0\n",
" | i_1_1 <- 1...v_0_90 ] :: vector R\n",
" v_0_95 = foldl 0.0 v_0_94 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_96 = poissonProcess_lpdf v_0_63.0_3 40907.0 v_0_89 v_0_95 :: R\n",
" v_0_97 = +s v_0_64 v_0_84 v_0_87 v_0_96 :: R\n",
" v_0_98 = poisson_lpdf input.0_0 3.0 :: R\n",
" v_0_99 = 1 > input.0_0 :: B\n",
" v_0_100 = 2 * input.0_0 :: Z\n",
" v_0_101 = v_0_100 + 1 :: Z\n",
" v_0_102 = logFactorial v_0_101 :: R\n",
" v_0_103 = uniform_cdf input.0_1!1 0.0 40907.0 :: R\n",
" v_0_104 = log v_0_103 :: R\n",
" v_0_105 = \n",
" [ let v_1_0 = i_1_1 + 1 :: Z\n",
" v_1_1 = uniform_cdf input.0_1!v_1_0 0.0 40907.0 :: R\n",
" v_1_2 = uniform_cdf input.0_1!i_1_1 0.0 40907.0 :: R\n",
" v_1_3 = v_1_1 - v_1_2 :: R\n",
" v_1_4 = log v_1_3 :: R\n",
" v_1_5 = 2 * v_1_0 :: Z\n",
" v_1_6 = 2 * i_1_1 :: Z\n",
" v_1_7 = v_1_5 - v_1_6 :: Z\n",
" v_1_8 = v_1_7 - 1 :: Z\n",
" v_1_9 = v_1_4 * v_1_8 :: R\n",
" v_1_10 = logFactorial v_1_8 :: R\n",
" v_1_11 = v_1_9 - v_1_10 :: R\n",
" in v_1_11\n",
" | i_1_1 <- 1...v_0_59 ] :: vector R\n",
" v_0_106 = foldl 0.0 v_0_105 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_107 = uniform_cdf input.0_1!input.0_0 0.0 40907.0 :: R\n",
" v_0_108 = 1.0 - v_0_107 :: R\n",
" v_0_109 = log v_0_108 :: R\n",
" v_0_110 = v_0_101 - v_0_100 :: Z\n",
" v_0_111 = v_0_109 * v_0_110 :: R\n",
" v_0_112 = logFactorial v_0_110 :: R\n",
" v_0_113 = v_0_111 - v_0_112 :: R\n",
" v_0_114 = \n",
" [ let v_1_0 = uniform_lpdf input.0_1!i_1_1 0.0 40907.0 :: R\n",
" in v_1_0\n",
" | i_1_1 <- 1...input.0_0 ] :: vector R\n",
" v_0_115 = foldl 0.0 v_0_114 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_116 = +s v_0_102 v_0_104 v_0_106 v_0_113 v_0_115 :: R\n",
" v_0_117 = ifThenElse v_0_99 0.0 v_0_116 :: R\n",
" v_0_118 = vectorSize input.0_2 :: Z\n",
" v_0_119 = \n",
" [ i_1_1\n",
" | i_1_1 <- 1...v_0_118 ] :: vector Z\n",
" v_0_120 = foldl 0.0 v_0_119 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = gamma_lpdf input.0_2!i_1_11 1.0 200.0 :: R\n",
" v_1_1 = i_1_12 + v_1_0 :: R\n",
" in v_1_1\n",
" v_0_121 = \n",
" [ let v_1_0 = 2 * i_1_1 :: Z\n",
" in ( let v_0_0 = 2 * i_1_1 :: Z\n",
" in v_0_0 -> input.0_1!i_1_1 | i_1_1 <- 1...input.0_0 )!v_1_0\n",
" | i_1_1 <- 1...input.0_0 ] :: vector R\n",
" v_0_122 = \\i_1_1 ->\n",
" let v_1_0 = findSortedInsertIndex i_1_1 v_0_121 :: Z\n",
" in input.0_2!v_1_0\n",
" v_0_123 = \n",
" [ let v_1_0 = i_1_1 + 1 :: Z\n",
" v_1_1 = v_0_121!v_1_0 - v_0_121!i_1_1 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_59 ] :: vector R\n",
" v_0_124 = 40907.0 - v_0_121!input.0_0 :: R\n",
" v_0_125 = +s v_0_59 1 1 :: Z\n",
" v_0_126 = \n",
" [ let v_1_0 = (block array ([1],[3]) [([1],v_0_121!1),([2],v_0_123),([3],v_0_124)] :: vector R)!i_1_1 * input.0_2!i_1_1 :: R\n",
" in v_1_0\n",
" | i_1_1 <- 1...v_0_24 ] :: vector R\n",
" v_0_127 = foldl 0.0 v_0_126 $ \\i_1_12 i_1_11 ->\n",
" let v_1_0 = i_1_11 + i_1_12 :: R\n",
" in v_1_0\n",
" v_0_128 = poissonProcess_lpdf input.0_3 40907.0 v_0_122 v_0_127 :: R\n",
" v_0_129 = +s v_0_98 v_0_117 v_0_120 v_0_128 :: R\n",
" v_0_130 = v_0_97 - v_0_129 :: R\n",
" v_0_131 = v_0_63.0_1 == input.0_1 :: B\n",
" v_0_132 = v_0_63.0_2 == input.0_2 :: B\n",
" v_0_133 = not v_0_132 :: B\n",
" v_0_134 = v_0_63.0_0 - input.0_0 :: Z\n",
" v_0_135 = v_0_134 == 1 :: B\n",
" v_0_136 = not v_0_135 :: B\n",
" v_0_137 = input.0_0 - v_0_63.0_0 :: Z\n",
" v_0_138 = v_0_137 == 1 :: B\n",
" v_0_139 = not v_0_138 :: B\n",
" v_0_140 = &&s v_0_131 v_0_133 v_0_136 v_0_139 :: B\n",
" v_0_141 = not v_0_140 :: B\n",
" v_0_142 = not v_0_131 :: B\n",
" v_0_143 = &&s v_0_132 v_0_136 v_0_139 v_0_142 :: B\n",
" v_0_144 = not v_0_143 :: B\n",
" v_0_145 = &&s v_0_133 v_0_135 v_0_139 v_0_142 :: B\n",
" v_0_146 = not v_0_145 :: B\n",
" v_0_147 = &&s v_0_133 v_0_136 v_0_138 v_0_142 :: B\n",
" v_0_148 = not v_0_147 :: B\n",
" v_0_149 = &&s v_0_141 v_0_144 v_0_146 v_0_148 :: B\n",
" v_0_150 = 1 == v_0_63.0_0 :: B\n",
" v_0_151 = 30 == v_0_63.0_0 :: B\n",
" v_0_152 = v_0_63.0_0 < 2 :: B\n",
" v_0_153 = 1.0 + v_0_63.0_0 :: R\n",
" v_0_154 = v_0_7 / v_0_153 :: R\n",
" v_0_155 = ifThenElse v_0_152 v_0_6 v_0_154 :: R\n",
" v_0_156 = ifThenElse v_0_151 0.0 v_0_155 :: R\n",
" v_0_157 = 1.0 - v_0_156 :: R\n",
" v_0_158 = 3 < v_0_63.0_0 :: B\n",
" v_0_159 = v_0_6 * v_0_63.0_0 :: R\n",
" v_0_160 = v_0_159 / 3.0 :: R\n",
" v_0_161 = ifThenElse v_0_158 v_0_6 v_0_160 :: R\n",
" v_0_162 = ifThenElse v_0_150 0.0 v_0_161 :: R\n",
" v_0_163 = v_0_157 - v_0_162 :: R\n",
" v_0_164 = v_0_163 / 2.0 :: R\n",
" v_0_165 = ifThenElse v_0_150 v_0_163 v_0_164 :: R\n",
" v_0_166 = ifThenElse v_0_150 0.0 v_0_164 :: R\n",
" v_0_167 = categorical_lpdf 1 (block array ([1],[4]) [([1],v_0_165),([2],v_0_166),([3],v_0_156),([4],v_0_162)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_168 = categorical_lpdf 2 (block array ([1],[4]) [([1],v_0_165),([2],v_0_166),([3],v_0_156),([4],v_0_162)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_169 = categorical_lpdf 4 (block array ([1],[4]) [([1],v_0_165),([2],v_0_166),([3],v_0_156),([4],v_0_162)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_170 = categorical_lpdf 3 (block array ([1],[4]) [([1],v_0_165),([2],v_0_166),([3],v_0_156),([4],v_0_162)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_171 = ifThenElse v_0_149 0.0 { v_0_140 => v_0_167, v_0_143 => v_0_168, v_0_145 => v_0_169, v_0_147 => v_0_170 } :: R\n",
" v_0_172 = foldr -1 v_0_86 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = v_0_63.0_2!i_1_11 /= input.0_2!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_173 = discreteUniform_lpdf v_0_172 1 v_0_90 :: R\n",
" v_0_174 = id { v_0_140 => v_0_173, v_0_143 => 0.0, v_0_145 => 0.0, v_0_147 => 0.0 } :: R\n",
" v_0_175 = log input.0_2!v_0_172 :: R\n",
" v_0_176 = log v_0_63.0_2!v_0_172 :: R\n",
" v_0_177 = v_0_175 - v_0_176 :: R\n",
" v_0_178 = uniform_lpdf v_0_177 -0.5 0.5 :: R\n",
" v_0_179 = id { v_0_140 => v_0_178, v_0_143 => 0.0, v_0_145 => 0.0, v_0_147 => 0.0 } :: R\n",
" v_0_180 = vectorSize v_0_63.0_1 :: Z\n",
" v_0_181 = \n",
" [ i_1_1\n",
" | i_1_1 <- 1...v_0_180 ] :: vector Z\n",
" v_0_182 = foldr -1 v_0_181 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = v_0_63.0_1!i_1_11 /= input.0_1!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_183 = discreteUniform_lpdf v_0_182 1 v_0_63.0_0 :: R\n",
" v_0_184 = id { v_0_140 => 0.0, v_0_143 => v_0_183, v_0_145 => 0.0, v_0_147 => 0.0 } :: R\n",
" v_0_185 = v_0_182 == 1 :: B\n",
" v_0_186 = v_0_182 - v_0_90 :: Z\n",
" v_0_187 = v_0_186 == 1 :: B\n",
" v_0_188 = v_0_182 - 1 :: Z\n",
" v_0_189 = ifThenElse v_0_187 40907.0 v_0_63.0_1!v_0_188 :: R\n",
" v_0_190 = ifThenElse v_0_185 0.0 v_0_189 :: R\n",
" v_0_191 = input.0_1!v_0_182 - v_0_190 :: R\n",
" v_0_192 = negate v_0_182 :: Z\n",
" v_0_193 = v_0_192 == 1 :: B\n",
" v_0_194 = v_0_90 - v_0_182 :: Z\n",
" v_0_195 = v_0_194 == 1 :: B\n",
" v_0_196 = v_0_182 + 1 :: Z\n",
" v_0_197 = ifThenElse v_0_195 40907.0 v_0_63.0_1!v_0_196 :: R\n",
" v_0_198 = ifThenElse v_0_193 0.0 v_0_197 :: R\n",
" v_0_199 = v_0_198 - v_0_190 :: R\n",
" v_0_200 = v_0_191 / v_0_199 :: R\n",
" v_0_201 = uniform_lpdf v_0_200 0.0 1.0 :: R\n",
" v_0_202 = id { v_0_140 => 0.0, v_0_143 => v_0_201, v_0_145 => 0.0, v_0_147 => 0.0 } :: R\n",
" v_0_203 = v_0_180 + 1 :: Z\n",
" v_0_204 = foldr v_0_203 v_0_181 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = v_0_63.0_1!i_1_11 /= input.0_1!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_205 = uniform_lpdf input.0_1!v_0_204 0.0 40907.0 :: R\n",
" v_0_206 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_145 => 0.0, v_0_147 => v_0_205 } :: R\n",
" v_0_207 = v_0_85 + 1 :: Z\n",
" v_0_208 = foldr v_0_207 v_0_86 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = v_0_63.0_2!i_1_11 /= input.0_2!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_209 = findSortedInsertIndex input.0_1!v_0_204 v_0_63.0_1 :: Z\n",
" v_0_210 = input.0_2!v_0_208 / v_0_63.0_2!v_0_209 :: R\n",
" v_0_211 = log v_0_210 :: R\n",
" v_0_212 = normal_lpdf v_0_211 0.0 1.0 :: R\n",
" v_0_213 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_145 => 0.0, v_0_147 => v_0_212 } :: R\n",
" v_0_214 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_145 => 0.0, v_0_147 => v_0_213 } :: R\n",
" v_0_215 = vectorSize input.0_1 :: Z\n",
" v_0_216 = v_0_215 + 1 :: Z\n",
" v_0_217 = \n",
" [ i_1_1\n",
" | i_1_1 <- 1...v_0_215 ] :: vector Z\n",
" v_0_218 = foldr v_0_216 v_0_217 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = input.0_1!i_1_11 /= v_0_63.0_1!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_219 = discreteUniform_lpdf v_0_218 1 v_0_63.0_0 :: R\n",
" v_0_220 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_145 => v_0_219, v_0_147 => 0.0 } :: R\n",
" v_0_221 = +s v_0_171 v_0_174 v_0_179 v_0_184 v_0_202 v_0_206 v_0_214 v_0_220 :: R\n",
" v_0_222 = categorical_lpdf 1 (block array ([1],[4]) [([1],v_0_20),([2],v_0_21),([3],v_0_11),([4],v_0_17)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_223 = categorical_lpdf 2 (block array ([1],[4]) [([1],v_0_20),([2],v_0_21),([3],v_0_11),([4],v_0_17)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_224 = categorical_lpdf 4 (block array ([1],[4]) [([1],v_0_20),([2],v_0_21),([3],v_0_11),([4],v_0_17)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_225 = categorical_lpdf 3 (block array ([1],[4]) [([1],v_0_20),([2],v_0_21),([3],v_0_11),([4],v_0_17)] :: Array [(1,v_0_22)] R) :: R\n",
" v_0_226 = ifThenElse v_0_149 0.0 { v_0_140 => v_0_222, v_0_143 => v_0_223, v_0_147 => v_0_224, v_0_145 => v_0_225 } :: R\n",
" v_0_227 = foldr -1 v_0_119 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = input.0_2!i_1_11 /= v_0_63.0_2!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_228 = discreteUniform_lpdf v_0_227 1 v_0_24 :: R\n",
" v_0_229 = id { v_0_140 => v_0_228, v_0_143 => 0.0, v_0_147 => 0.0, v_0_145 => 0.0 } :: R\n",
" v_0_230 = log v_0_63.0_2!v_0_227 :: R\n",
" v_0_231 = log input.0_2!v_0_227 :: R\n",
" v_0_232 = v_0_230 - v_0_231 :: R\n",
" v_0_233 = uniform_lpdf v_0_232 -0.5 0.5 :: R\n",
" v_0_234 = id { v_0_140 => v_0_233, v_0_143 => 0.0, v_0_147 => 0.0, v_0_145 => 0.0 } :: R\n",
" v_0_235 = foldr -1 v_0_217 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = input.0_1!i_1_11 /= v_0_63.0_1!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_236 = discreteUniform_lpdf v_0_235 1 input.0_0 :: R\n",
" v_0_237 = id { v_0_140 => 0.0, v_0_143 => v_0_236, v_0_147 => 0.0, v_0_145 => 0.0 } :: R\n",
" v_0_238 = v_0_235 == 1 :: B\n",
" v_0_239 = v_0_235 - v_0_24 :: Z\n",
" v_0_240 = v_0_239 == 1 :: B\n",
" v_0_241 = v_0_235 - 1 :: Z\n",
" v_0_242 = ifThenElse v_0_240 40907.0 input.0_1!v_0_241 :: R\n",
" v_0_243 = ifThenElse v_0_238 0.0 v_0_242 :: R\n",
" v_0_244 = v_0_63.0_1!v_0_235 - v_0_243 :: R\n",
" v_0_245 = negate v_0_235 :: Z\n",
" v_0_246 = v_0_245 == 1 :: B\n",
" v_0_247 = v_0_24 - v_0_235 :: Z\n",
" v_0_248 = v_0_247 == 1 :: B\n",
" v_0_249 = v_0_235 + 1 :: Z\n",
" v_0_250 = ifThenElse v_0_248 40907.0 input.0_1!v_0_249 :: R\n",
" v_0_251 = ifThenElse v_0_246 0.0 v_0_250 :: R\n",
" v_0_252 = v_0_251 - v_0_243 :: R\n",
" v_0_253 = v_0_244 / v_0_252 :: R\n",
" v_0_254 = uniform_lpdf v_0_253 0.0 1.0 :: R\n",
" v_0_255 = id { v_0_140 => 0.0, v_0_143 => v_0_254, v_0_147 => 0.0, v_0_145 => 0.0 } :: R\n",
" v_0_256 = uniform_lpdf v_0_63.0_1!v_0_218 0.0 40907.0 :: R\n",
" v_0_257 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_147 => 0.0, v_0_145 => v_0_256 } :: R\n",
" v_0_258 = v_0_118 + 1 :: Z\n",
" v_0_259 = foldr v_0_258 v_0_119 $ \\i_1_11 i_1_12 ->\n",
" let v_1_0 = input.0_2!i_1_11 /= v_0_63.0_2!i_1_11 :: B\n",
" v_1_1 = ifThenElse v_1_0 i_1_11 i_1_12 :: Z\n",
" in v_1_1\n",
" v_0_260 = findSortedInsertIndex v_0_63.0_1!v_0_218 input.0_1 :: Z\n",
" v_0_261 = v_0_63.0_2!v_0_259 / input.0_2!v_0_260 :: R\n",
" v_0_262 = log v_0_261 :: R\n",
" v_0_263 = normal_lpdf v_0_262 0.0 1.0 :: R\n",
" v_0_264 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_147 => 0.0, v_0_145 => v_0_263 } :: R\n",
" v_0_265 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_147 => 0.0, v_0_145 => v_0_264 } :: R\n",
" v_0_266 = discreteUniform_lpdf v_0_204 1 input.0_0 :: R\n",
" v_0_267 = id { v_0_140 => 0.0, v_0_143 => 0.0, v_0_147 => v_0_266, v_0_145 => 0.0 } :: R\n",
" v_0_268 = +s v_0_226 v_0_229 v_0_234 v_0_237 v_0_255 v_0_257 v_0_265 v_0_267 :: R\n",
" v_0_269 = v_0_221 - v_0_268 :: R\n",
" v_0_270 = eye v_0_215 :: matrix R\n",
" v_0_271 = ifThenElse { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => v_0_240 } 40907.0 { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => input.0_1!v_0_241 } :: R\n",
" v_0_272 = ifThenElse { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => v_0_238 } 0.0 v_0_271 :: R\n",
" v_0_273 = ifThenElse { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => v_0_248 } 40907.0 { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => input.0_1!v_0_249 } :: R\n",
" v_0_274 = ifThenElse { { v_0_140 => 0, v_0_143 => 1, v_0_147 => 0, v_0_145 => 0 } => v_0_246 } 0.0 v_0_273 :: R\n",
" v_0_275 = v_0_274 - v_0_272 :: R\n",
" v_0_276 = v_0_275 * v_0_253 :: R\n",
" v_0_277 = v_0_272 + v_0_276 :: R\n",
" v_0_278 = replaceIndex input.0_1 v_0_235 v_0_277 :: vector R\n",
" v_0_279 = vectorSize v_0_278 :: Z\n",
" v_0_280 = deleteIndex input.0_1 v_0_204 :: vector R\n",
" v_0_281 = vectorSize v_0_280 :: Z\n",
" v_0_282 = insertIndex input.0_1 v_0_260 v_0_63.0_1!v_0_218 :: vector R\n",
" v_0_283 = vectorSize v_0_282 :: Z\n",
" v_0_284 = zeros v_0_215 v_0_118 :: matrix R\n",
" v_0_285 = vectorSize input.0_3 :: Z\n",
" v_0_286 = zeros v_0_215 v_0_285 :: matrix R\n",
" v_0_287 = v_0_231 + v_0_232 :: R\n",
" v_0_288 = exp v_0_287 :: R\n",
" v_0_289 = replaceIndex input.0_2 v_0_227 v_0_288 :: vector R\n",
" v_0_290 = vectorSize v_0_289 :: Z\n",
" v_0_291 = v_0_204 + 1 :: Z\n",
" v_0_292 = deleteIndex input.0_2 v_0_291 :: vector R\n",
" v_0_293 = vectorSize v_0_292 :: Z\n",
" v_0_294 = v_0_260 + 1 :: Z\n",
" v_0_295 = v_0_261 * input.0_2!v_0_260 :: R\n",
" v_0_296 = insertIndex input.0_2 v_0_294 v_0_295 :: vector R\n",
" v_0_297 = vectorSize v_0_296 :: Z\n",
" v_0_298 = zeros v_0_290 v_0_215 :: matrix R\n",
" v_0_299 = eye v_0_118 :: matrix R\n",
" v_0_300 = zeros 1 v_0_118 :: matrix R\n",
" v_0_301 = \n",
" [ let v_1_0 = i_1_1 == v_0_227 :: B\n",
" v_1_1 = ifThenElse { v_0_140 => v_1_0 } 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_118 ] :: vector R\n",
" v_0_302 = asRow v_0_301 :: matrix R\n",
" v_0_303 = v_0_302 / input.0_2!v_0_227 :: matrix R\n",
" v_0_304 = v_0_300 + v_0_303 :: matrix R\n",
" v_0_305 = v_0_288 * v_0_304 :: matrix R\n",
" v_0_306 = replaceIndex v_0_299 v_0_227 v_0_305!1 :: matrix R\n",
" v_0_307 = zeros v_0_290 v_0_285 :: matrix R\n",
" v_0_308 = zeros v_0_285 v_0_215 :: matrix R\n",
" v_0_309 = zeros v_0_285 v_0_118 :: matrix R\n",
" v_0_310 = eye v_0_285 :: matrix R\n",
" v_0_311 = +s v_0_118 v_0_215 v_0_285 :: Z\n",
" v_0_312 = zeros v_0_215 1 :: matrix R\n",
" v_0_313 = zeros v_0_118 1 :: matrix R\n",
" v_0_314 = v_0_288 * [[1]] :: matrix R\n",
" v_0_315 = replaceIndex v_0_313 v_0_227 v_0_314!1 :: matrix R\n",
" v_0_316 = zeros v_0_285 1 :: matrix R\n",
" v_0_317 = zeros 1 v_0_215 :: matrix R\n",
" v_0_318 = matrixCols v_0_270 :: Z\n",
" v_0_319 = zeros 1 v_0_318 :: matrix R\n",
" v_0_320 = +s v_0_317 v_0_317 v_0_317 v_0_319 :: matrix R\n",
" v_0_321 = \n",
" [ let v_1_0 = i_1_1 == v_0_172 :: B\n",
" v_1_1 = ifThenElse v_1_0 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_85 ] :: vector R\n",
" v_0_322 = asRow v_0_321 :: matrix R\n",
" v_0_323 = v_0_322 / v_0_63.0_2!v_0_172 :: matrix R\n",
" v_0_324 = negate v_0_323 :: matrix R\n",
" v_0_325 = v_0_324 <> v_0_306 :: matrix R\n",
" v_0_326 = \n",
" [ let v_1_0 = i_1_1 == v_0_172 :: B\n",
" v_1_1 = ifThenElse v_1_0 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_118 ] :: vector R\n",
" v_0_327 = asRow v_0_326 :: matrix R\n",
" v_0_328 = v_0_327 / input.0_2!v_0_172 :: matrix R\n",
" v_0_329 = +s v_0_300 v_0_300 v_0_325 v_0_328 :: matrix R\n",
" v_0_330 = zeros 1 v_0_285 :: matrix R\n",
" v_0_331 = matrixCols v_0_310 :: Z\n",
" v_0_332 = zeros 1 v_0_331 :: matrix R\n",
" v_0_333 = +s v_0_330 v_0_330 v_0_330 v_0_332 :: matrix R\n",
" v_0_334 = matrixCols v_0_312 :: Z\n",
" v_0_335 = zeros 1 v_0_334 :: matrix R\n",
" v_0_336 = v_0_324 <> v_0_315 :: matrix R\n",
" v_0_337 = matrixCols v_0_316 :: Z\n",
" v_0_338 = zeros 1 v_0_337 :: matrix R\n",
" v_0_339 = +s v_0_335 v_0_336 v_0_338 :: matrix R\n",
" v_0_340 = +s v_0_118 v_0_215 v_0_285 1 :: Z\n",
" v_0_341 = \n",
" [ let v_1_0 = v_0_235 - i_1_1 :: Z\n",
" v_1_1 = v_1_0 == 1 :: B\n",
" v_1_2 = ifThenElse { v_0_143 => v_1_1 } 1.0 0.0 :: R\n",
" in v_1_2\n",
" | i_1_1 <- 1...v_0_215 ] :: vector R\n",
" v_0_342 = asRow v_0_341 :: matrix R\n",
" v_0_343 = ifThenElse { v_0_143 => v_0_240 } v_0_317 v_0_342 :: matrix R\n",
" v_0_344 = ifThenElse { v_0_143 => v_0_238 } v_0_317 v_0_343 :: matrix R\n",
" v_0_345 = \n",
" [ let v_1_0 = i_1_1 - v_0_235 :: Z\n",
" v_1_1 = v_1_0 == 1 :: B\n",
" v_1_2 = ifThenElse { v_0_143 => v_1_1 } 1.0 0.0 :: R\n",
" in v_1_2\n",
" | i_1_1 <- 1...v_0_215 ] :: vector R\n",
" v_0_346 = asRow v_0_345 :: matrix R\n",
" v_0_347 = ifThenElse { v_0_143 => v_0_248 } v_0_317 v_0_346 :: matrix R\n",
" v_0_348 = ifThenElse { v_0_143 => v_0_246 } v_0_317 v_0_347 :: matrix R\n",
" v_0_349 = v_0_348 - v_0_344 :: matrix R\n",
" v_0_350 = v_0_349 * v_0_253 :: matrix R\n",
" v_0_351 = +s v_0_317 v_0_344 v_0_350 :: matrix R\n",
" v_0_352 = replaceIndex v_0_270 v_0_235 v_0_351!1 :: matrix R\n",
" v_0_353 = ifThenElse { v_0_143 => v_0_240 } 40907.0 { v_0_143 => input.0_1!v_0_241 } :: R\n",
" v_0_354 = ifThenElse { v_0_143 => v_0_238 } 0.0 v_0_353 :: R\n",
" v_0_355 = ifThenElse { v_0_143 => v_0_248 } 40907.0 { v_0_143 => input.0_1!v_0_249 } :: R\n",
" v_0_356 = ifThenElse { v_0_143 => v_0_246 } 0.0 v_0_355 :: R\n",
" v_0_357 = v_0_356 - v_0_354 :: R\n",
" v_0_358 = v_0_357 * v_0_253 :: R\n",
" v_0_359 = v_0_354 + v_0_358 :: R\n",
" v_0_360 = replaceIndex input.0_1 v_0_235 v_0_359 :: vector R\n",
" v_0_361 = vectorSize v_0_360 :: Z\n",
" v_0_362 = zeros v_0_361 v_0_118 :: matrix R\n",
" v_0_363 = zeros v_0_361 v_0_285 :: matrix R\n",
" v_0_364 = zeros v_0_118 v_0_215 :: matrix R\n",
" v_0_365 = zeros v_0_118 v_0_285 :: matrix R\n",
" v_0_366 = v_0_357 * [[1]] :: matrix R\n",
" v_0_367 = replaceIndex v_0_312 v_0_235 v_0_366!1 :: matrix R\n",
" v_0_368 = \n",
" [ let v_1_0 = i_1_1 == v_0_182 :: B\n",
" v_1_1 = ifThenElse v_1_0 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_215 ] :: vector R\n",
" v_0_369 = asRow v_0_368 :: matrix R\n",
" v_0_370 = v_0_369 * v_0_199 :: matrix R\n",
" v_0_371 = v_0_199 ** 2 :: R\n",
" v_0_372 = v_0_370 / v_0_371 :: matrix R\n",
" v_0_373 = zeros 1 v_0_180 :: matrix R\n",
" v_0_374 = \n",
" [ let v_1_0 = v_0_182 - i_1_1 :: Z\n",
" v_1_1 = v_1_0 == 1 :: B\n",
" v_1_2 = ifThenElse v_1_1 1.0 0.0 :: R\n",
" in v_1_2\n",
" | i_1_1 <- 1...v_0_180 ] :: vector R\n",
" v_0_375 = asRow v_0_374 :: matrix R\n",
" v_0_376 = ifThenElse v_0_187 v_0_373 v_0_375 :: matrix R\n",
" v_0_377 = ifThenElse v_0_185 v_0_373 v_0_376 :: matrix R\n",
" v_0_378 = negate v_0_377 :: matrix R\n",
" v_0_379 = v_0_378 * v_0_199 :: matrix R\n",
" v_0_380 = \n",
" [ let v_1_0 = i_1_1 - v_0_182 :: Z\n",
" v_1_1 = v_1_0 == 1 :: B\n",
" v_1_2 = ifThenElse v_1_1 1.0 0.0 :: R\n",
" in v_1_2\n",
" | i_1_1 <- 1...v_0_180 ] :: vector R\n",
" v_0_381 = asRow v_0_380 :: matrix R\n",
" v_0_382 = ifThenElse v_0_195 v_0_373 v_0_381 :: matrix R\n",
" v_0_383 = ifThenElse v_0_193 v_0_373 v_0_382 :: matrix R\n",
" v_0_384 = v_0_383 - v_0_377 :: matrix R\n",
" v_0_385 = v_0_191 * v_0_384 :: matrix R\n",
" v_0_386 = v_0_379 - v_0_385 :: matrix R\n",
" v_0_387 = v_0_386 / v_0_371 :: matrix R\n",
" v_0_388 = v_0_387 <> v_0_352 :: matrix R\n",
" v_0_389 = +s v_0_317 v_0_317 v_0_372 v_0_388 :: matrix R\n",
" v_0_390 = matrixCols v_0_299 :: Z\n",
" v_0_391 = zeros 1 v_0_390 :: matrix R\n",
" v_0_392 = +s v_0_300 v_0_300 v_0_300 v_0_391 :: matrix R\n",
" v_0_393 = matrixCols v_0_313 :: Z\n",
" v_0_394 = zeros 1 v_0_393 :: matrix R\n",
" v_0_395 = v_0_387 <> v_0_367 :: matrix R\n",
" v_0_396 = +s v_0_338 v_0_394 v_0_395 :: matrix R\n",
" v_0_397 = v_0_215 - 1 :: Z\n",
" v_0_398 = deleteIndex v_0_270 v_0_204 :: matrix R\n",
" v_0_399 = zeros v_0_281 v_0_118 :: matrix R\n",
" v_0_400 = zeros v_0_281 v_0_285 :: matrix R\n",
" v_0_401 = zeros v_0_293 v_0_215 :: matrix R\n",
" v_0_402 = v_0_118 - 1 :: Z\n",
" v_0_403 = deleteIndex v_0_299 v_0_291 :: matrix R\n",
" v_0_404 = zeros v_0_293 v_0_285 :: matrix R\n",
" v_0_405 = matrixCols v_0_398 :: Z\n",
" v_0_406 = zeros 1 v_0_405 :: matrix R\n",
" v_0_407 = \n",
" [ let v_1_0 = i_1_1 == v_0_204 :: B\n",
" v_1_1 = ifThenElse v_1_0 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_215 ] :: vector R\n",
" v_0_408 = asRow v_0_407 :: matrix R\n",
" v_0_409 = +s v_0_317 v_0_317 v_0_406 v_0_408 :: matrix R\n",
" v_0_410 = matrixCols v_0_403 :: Z\n",
" v_0_411 = zeros 1 v_0_410 :: matrix R\n",
" v_0_412 = +s v_0_300 v_0_300 v_0_300 v_0_411 :: matrix R\n",
" v_0_413 = +s v_0_317 v_0_317 v_0_317 v_0_406 :: matrix R\n",
" v_0_414 = \n",
" [ let v_1_0 = i_1_1 == v_0_208 :: B\n",
" v_1_1 = ifThenElse v_1_0 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_118 ] :: vector R\n",
" v_0_415 = asRow v_0_414 :: matrix R\n",
" v_0_416 = v_0_415 * v_0_63.0_2!v_0_209 :: matrix R\n",
" v_0_417 = v_0_63.0_2!v_0_209 ** 2 :: R\n",
" v_0_418 = v_0_416 / v_0_417 :: matrix R\n",
" v_0_419 = v_0_418 / v_0_210 :: matrix R\n",
" v_0_420 = \n",
" [ let v_1_0 = i_1_1 == v_0_209 :: B\n",
" v_1_1 = ifThenElse { v_0_147 => v_1_0 } 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_85 ] :: vector R\n",
" v_0_421 = asRow v_0_420 :: matrix R\n",
" v_0_422 = input.0_2!v_0_208 * v_0_421 :: matrix R\n",
" v_0_423 = negate v_0_422 :: matrix R\n",
" v_0_424 = v_0_423 / v_0_417 :: matrix R\n",
" v_0_425 = v_0_424 / v_0_210 :: matrix R\n",
" v_0_426 = v_0_425 <> v_0_403 :: matrix R\n",
" v_0_427 = +s v_0_300 v_0_300 v_0_419 v_0_426 :: matrix R\n",
" v_0_428 = insertIndex v_0_270 v_0_260 v_0_317!1 :: matrix R\n",
" v_0_429 = zeros v_0_283 v_0_118 :: matrix R\n",
" v_0_430 = zeros v_0_283 v_0_285 :: matrix R\n",
" v_0_431 = insertIndex v_0_312 v_0_260 [[1]]!1 :: matrix R\n",
" v_0_432 = insertIndex v_0_312 v_0_260 [[0]]!1 :: matrix R\n",
" v_0_433 = zeros v_0_297 v_0_215 :: matrix R\n",
" v_0_434 = \n",
" [ let v_1_0 = i_1_1 == v_0_260 :: B\n",
" v_1_1 = ifThenElse { v_0_145 => v_1_0 } 1.0 0.0 :: R\n",
" in v_1_1\n",
" | i_1_1 <- 1...v_0_118 ] :: vector R\n",
" v_0_435 = asRow v_0_434 :: matrix R\n",
" v_0_436 = v_0_261 * v_0_435 :: matrix R\n",
" v_0_437 = v_0_300 + v_0_436 :: matrix R\n",
" v_0_438 = insertIndex v_0_299 v_0_294 v_0_437!1 :: matrix R\n",
" v_0_439 = zeros v_0_297 v_0_285 :: matrix R\n",
" v_0_440 = insertIndex v_0_313 v_0_294 [[0]]!1 :: matrix R\n",
" v_0_441 = v_0_261 * [[1]] :: matrix R\n",
" v_0_442 = v_0_441 * input.0_2!v_0_260 :: matrix R\n",
" v_0_443 = insertIndex v_0_313 v_0_294 v_0_442!1 :: matrix R\n",
" v_0_444 = +s v_0_118 v_0_215 v_0_285 1 1 :: Z\n",
" v_0_445 = +s v_0_118 v_0_215 v_0_285 1 1 1 1 :: Z\n",
" v_0_446 = log_det { v_0_140 => block[[block[[v_0_270,v_0_284,v_0_286],[v_0_298,v_0_306,v_0_307],[v_0_308,v_0_309,v_0_310]],block[[v_0_312],[v_0_315],[v_0_316]]],[block[[v_0_320,v_0_329,v_0_333]],v_0_339]], v_0_143 => block[[block[[v_0_352,v_0_362,v_0_363],[v_0_364,v_0_299,v_0_365],[v_0_308,v_0_309,v_0_310]],block[[v_0_367],[v_0_313],[v_0_316]]],[block[[v_0_389,v_0_392,v_0_333]],v_0_396]], v_0_147 => block[[v_0_398,v_0_399,v_0_400],[v_0_401,v_0_403,v_0_404],[v_0_308,v_0_309,v_0_310],[v_0_409,v_0_412,v_0_333],[v_0_413,v_0_427,v_0_333]], v_0_145 => block[[v_0_428,v_0_429,v_0_430,v_0_431,v_0_432],[v_0_433,v_0_438,v_0_439,v_0_440,v_0_443],[v_0_308,v_0_309,v_0_310,v_0_316,v_0_316]] } :: R\n",
" v_0_447 = v_0_269 + v_0_446 :: R\n",
" v_0_448 = +s v_0_130 v_0_269 v_0_446 :: R\n",
" v_0_449 = exp v_0_448 :: R\n",
" v_0_450 = min 1.0 v_0_449 :: R\n",
" v_0_451 = getExternal x_show_0_8 :: B\n",
" v_0_452 = ifThenElse x_show_0_8 v_0_63.0_0 input.0_0 :: Z\n",
" v_0_453 = ifThenElse x_show_0_8 v_0_63.0_1 input.0_1 :: vector R\n",
" v_0_454 = ifThenElse x_show_0_8 v_0_63.0_2 input.0_2 :: vector R\n",
" v_0_455 = ifThenElse x_show_0_8 v_0_63.0_3 input.0_3 :: vector R\n",
" in do x_show_0_0 <- categorical (block array ([1],[4]) [([1],v_0_20),([2],v_0_21),([3],v_0_11),([4],v_0_17)] :: Array [(1,v_0_22)] R) :: P Z\n",
" x_show_0_1 <- discreteUniform 1 v_0_24 :: P Z\n",
" x_show_0_2 <- uniform -0.5 0.5 :: P R\n",
" x_show_0_3 <- discreteUniform 1 input.0_0 :: P Z\n",
" x_show_0_4 <- uniform 0.0 1.0 :: P R\n",
" x_show_0_5 <- uniform 0.0 40907.0 :: P R\n",
" x_show_0_6 <- normal 0.0 1.0 :: P R\n",
" x_show_0_7 <- discreteUniform 1 input.0_0 :: P Z\n",
" x_show_0_8 <- bernoulli v_0_450 :: P B\n",
" return [v_0_452,v_0_453,v_0_454,v_0_455]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"-- automatically generate RJMC transition kernel\n",
"let kernel = coal t `rjmc` coalMove t\n",
"kernel"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(4,[5103.668914593937,25700.783608506343,29470.225091303586,36244.890506445045],[4.892522331906208e-3,1.4197347319748954e-2,2.00712577711841e-3,1.3410980131244538e-3,2.615629151408432e-3]),(3,[25700.783608506343,29470.225091303586,36244.890506445045],[4.892522331906208e-3,2.00712577711841e-3,1.3410980131244538e-3,2.615629151408432e-3]),(4,[14899.056729097752,25700.783608506343,29470.225091303586,36244.890506445045],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.3410980131244538e-3,2.615629151408432e-3]),(3,[14899.056729097752,25700.783608506343,29470.225091303586],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.3410980131244538e-3]),(3,[14899.056729097752,25700.783608506343,29470.225091303586],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.3410980131244538e-3]),(3,[14899.056729097752,25700.783608506343,29470.225091303586],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.3410980131244538e-3]),(3,[14899.056729097752,25700.783608506343,29470.225091303586],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.491834168992973e-3]),(3,[14899.056729097752,25700.783608506343,29470.225091303586],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.491834168992973e-3]),(3,[14899.056729097752,25700.783608506343,30337.36331137781],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.491834168992973e-3]),(3,[14899.056729097752,25700.783608506343,30337.36331137781],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3,1.491834168992973e-3]),(2,[14899.056729097752,25700.783608506343],[4.892522331906208e-3,2.413468786837807e-3,2.00712577711841e-3])]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"samples <- iterateLimit 10 (runStep kernel) (n0,s0,g0, list coalData')\n",
"[(n,s,g) | (n,s,g,y) <- samples]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"-- sampling takes a long time, so we generate samples offline\n",
"import System.IO\n",
"output <- readFile \"rj-coal.log\" -- from stochaskell/app/rj\n",
"let samples = read <$> lines output :: [(Int,[Double],[Double])]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(3,[24969.58172348803,26526.26524169898,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,4.5984983765520634e-4,2.641155121557546e-3]),(3,[24969.58172348803,26526.26524169898,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,5.601448084736443e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3]),(2,[24969.58172348803,28059.88881142932],[3.94532773540886e-3,3.3475125679093145e-4,2.641155121557546e-3])]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"take 10 samples"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"let x = linspace (0, last coalData') 512\n",
" ys = [staircase s g <$> x | (n,s,g) <- samples] :: [[Double]]\n",
" ymean = mean ys\n",
" ymean2 = mean $ square <$> ys\n",
" ystd = sqrt $ ymean2 - square ymean"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
":opt svg\n",
"import Language.Stochaskell.Plot"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"let x' = (/10000) <$> x\n",
"pMain = do\n",
" plot . return $ PlotFillBetween \"\" (solidFillStyle $ blue `withOpacity` 0.1)\n",
" (zip x' $ zip ((10000 *) <$> ymean + ystd) ((10000 *) <$> ymean - ystd))\n",
" plot $ line \"\" [zip x' ((10000 *) <$> ymean)]\n",
" xlim (0,4)\n",
" ylim (0,100)\n",
" xlabel \"Time (10⁴ days)\"\n",
" ylabel \"Posterior mean rate\"\n",
" layout_margin .= 0\n",
"toRenderable pMain"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pHist = do\n",
" plot . return . histToPlot $ defaultNormedPlotHist\n",
" { _plot_hist_title = \"\", _plot_hist_values = [real n | (n,s,g) <- samples], _plot_hist_range = Just (1,8), _plot_hist_bins = 7 }\n",
" xlim (1,8)\n",
" layout_title .= \"Number of change points\"\n",
" layout_title_style . font_size .= 10\n",
" layout_title_style . font_weight .= FontWeightNormal\n",
" layout_margin .= 0\n",
" layout_top_axis_visibility .= AxisVisibility True True True\n",
" layout_bottom_axis_visibility .= AxisVisibility True True False\n",
" layout_right_axis_visibility .= AxisVisibility True True True\n",
" layout_left_axis_visibility .= AxisVisibility True True False\n",
" layout_x_axis . laxis_generate .= autoScaledAxis def { _la_nLabels = 7, _la_nTicks = 7 }\n",
" layout_y_axis . laxis_generate .= autoScaledAxis def { _la_nLabels = 3, _la_nTicks = 30 }\n",
"toRenderable pHist"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pX = do\n",
" setColors $ (`withOpacity` 0.75) <$> [blue,green,red,orange,yellow,violet]\n",
" plot $ line \"n=1\" [kde 625 [s !! (i-1) | (n,s,g) <- samples, n == 1] | i <- [1..1]]\n",
" plot $ line \"n=2\" [kde 625 [s !! (i-1) | (n,s,g) <- samples, n == 2] | i <- [1..2]]\n",
" plot $ line \"n=3\" [kde 625 [s !! (i-1) | (n,s,g) <- samples, n == 3] | i <- [1..3]]\n",
" xlim (0,40000)\n",
" layout_legend .= Nothing\n",
" layout_margin .= 0\n",
" layout_bottom_axis_visibility .= AxisVisibility False False True\n",
" layout_left_axis_visibility .= AxisVisibility False False True\n",
" layout_x_axis . laxis_override .= (\\d -> d { _axis_ticks = [], _axis_labels = [] })\n",
" layout_y_axis . laxis_override .= (\\d -> d { _axis_ticks = [], _axis_labels = [], _axis_grid = [] })\n",
" ylabel \"Change points\"\n",
"toRenderable pX"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import Data.Tuple\n",
"pY = do\n",
" setColors $ (`withOpacity` 0.75) <$> [blue,green,red,orange,yellow,violet]\n",
" plot $ line \"n=1\" [map swap $ kde 0.0003 [g !! i | (n,s,g) <- samples, n == 1] | i <- [0..1]]\n",
" plot $ line \"n=2\" [map swap $ kde 0.0003 [g !! i | (n,s,g) <- samples, n == 2] | i <- [0..2]]\n",
" plot $ line \"n=3\" [map swap $ kde 0.0003 [g !! i | (n,s,g) <- samples, n == 3] | i <- [0..3]]\n",
" ylim (0,0.00999)\n",
" layout_legend .= Nothing\n",
" layout_margin .= 0\n",
" layout_bottom_axis_visibility .= AxisVisibility False False True\n",
" layout_left_axis_visibility .= AxisVisibility False False True\n",
" layout_x_axis . laxis_override .= (\\d -> d { _axis_ticks = [], _axis_labels = [], _axis_grid = [] })\n",
" layout_y_axis . laxis_override .= (\\d -> d { _axis_ticks = [], _axis_labels = [] })\n",
" xlabel \"Step heights\"\n",
"toRenderable pY"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"let cell = layoutToGrid . execEC\n",
"toRenderable $ (cell pX `beside` cell pHist) `above` (cell pMain `beside` cell pY)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Haskell",
"language": "haskell",
"name": "haskell"
},
"language_info": {
"codemirror_mode": "ihaskell",
"file_extension": ".hs",
"name": "haskell",
"pygments_lexer": "Haskell",
"version": "8.4.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}