diff --git a/count_data_model/elfi-Poisson-Milestone2.ipynb b/count_data_model/elfi-Poisson-Milestone2.ipynb new file mode 100644 index 0000000..c3b052c --- /dev/null +++ b/count_data_model/elfi-Poisson-Milestone2.ipynb @@ -0,0 +1,2382 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ELFI Notebook for modelling time series count data\n", + "\n", + "This notebook has been knowingly written to be as descriptive and self-containing as possible. This notebook is written in a story format. First we get some baseline results to see how ELFI works and then try to work it out on a real world dataset.\n", + "\n", + "\n", + "This is a notebook where I try out a few different things. To summarise I have tried to:\n", + "\n", + "1. See how basic ELFI can be used for modelling highly non linear temporal count data(Ricker stochastic).\n", + "2. Add more summary measures in order to reduce the variance of the samples from the original example.\n", + "3. Try out both rejection sampling and SMC on this data.\n", + "4. Implement the DTW(Dynamic Time Warping) algorithm which can be used for comparing unequal time series.\n", + "5. Model a data downloaded from the internet(Geyer data) count data on visits to a shop over 24 hours.\n", + "6. Use a simple linear Gaussian model for the data generating process\n", + "7. Carry out likelihood free inference by both SMC and Rejection sampling.\n", + "8. Carry out some diagnostics to see how variables are stored under the hood and how to use diagnostics to identify the most relevant summary statistics based on minimising the entropy approach." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Count Data and Poisson Distribution " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our case study is on count data. Count data is encountered rather frequently in day-day scenarios. Poisson distribution is one such distribution which can be used to model it. \n", + "@TODO: Write more about Poisson distribution and its important properties." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import sklearn\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import scipy\n", + "import scipy.stats as stats" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import GPy\n", + "import logging\n", + "import wget\n", + "import elfi\n", + "import pandas\n", + "import copy" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from collections import OrderedDict, Counter, defaultdict\n", + "from functools import partial\n", + "from nltk.metrics.distance import edit_distance\n", + "from scipy.stats import skew, kurtosis" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.metrics.pairwise import euclidean_distances, paired_euclidean_distances\n", + "from elfi.methods.diagnostics import TwoStageSelection" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "sns.set(color_codes=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "seed = 12345" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Always good to check the versions for debugging purposes " + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.13.1\n", + "0.19.1\n" + ] + } + ], + "source": [ + "print(np.__version__)\n", + "print(scipy.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Data Collection\n", + "Simple data collection from a url, just to illustrate how to do it properly and formatting the raw data to something usable.\n", + "Credits to http://www.stat.umn.edu/geyer/5102/data/ex6-4.txt\n", + "\n", + "Geyer data is about the number of visitors to a shop open for 24 hours. The data was collected for a duration of 14 days, amounting to a total of 336 hours. Therefore there is an inherent daily periodicity associated with the data. For our modelling exercise, we can just sum up the counts for each hour for all the days. It is also possible to model each day seperately, but the summing operation does a smoothing effect, as can be observed from the plots below. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "N_hours= 24\n", + "N_days = 14" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(336, 2)\n" + ] + } + ], + "source": [ + "url = \"http://www.stat.umn.edu/geyer/5102/data/ex6-4.txt\"\n", + "file_txt = wget.download(url)\n", + "raw_data = np.loadtxt(fname=file_txt, dtype=np.int32, skiprows=1)\n", + "print(raw_data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4 5]\n" + ] + } + ], + "source": [ + "data_dict = {}\n", + "hours = raw_data[:,0]\n", + "count = raw_data[:,1]\n", + "data_dict['hour'] = hours\n", + "data_dict['count'] = count\n", + "print(data_dict['hour'][:5])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hours_day = data_dict['hour'] \n", + "hours = np.arange(N_hours)\n", + "hours_day = (data_dict['hour'] -1) % N_hours +1\n", + "data_dict['daily_hours'] = hours_day" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "counts_cum = np.empty(N_hours)\n", + "for i, ind in enumerate(hours_day):\n", + " inds = np.arange(N_days)*N_hours + (ind-1)\n", + " counts_cum[ind-1] = np.sum(count[inds])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data_dict['hour_count'] = counts_cum\n", + "Y_geyer = counts_cum\n", + "Y_geyer_total = count" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Make sure that the observations are in the right format, they should have just one row, since while computing summary statistics, the true observation row is vertically stacked with the simulated observations which is equal to the number of batchsize." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Y_geyer = Y_geyer.flatten().reshape(1,-1)\n", + "Y_geyer_total = Y_geyer_total.flatten().reshape(1,-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plots for Geyer data" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the observed sequence\n", + "figsize=(11, 6)\n", + "fig, (ax1, ax2) = plt.subplots(2,1, figsize=figsize)\n", + "ax1.plot(Y_geyer.ravel())\n", + "ax2.plot(Y_geyer_total.ravel())" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# plotting functionality\n", + "def plot_prior(Prior, *params, **kwargs):\n", + " distribution = getattr(scipy.stats, Prior)\n", + " x = np.linspace(distribution.ppf(0.01, *params, **kwargs), distribution.ppf(0.99, *params), 500)\n", + " fig2, ax2 = plt.subplots(1, 1)\n", + " rvs_dist = distribution.rvs(*params, size=500)\n", + " ax2.plot(x, distribution.pdf(x, *params),'r-', lw=5, alpha=0.6, label=str(Prior+'-pdf'))\n", + " ax2.hist(rvs_dist, normed=True, histtype='stepfilled', alpha=0.2)\n", + " plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Lets see how the plots for the priors of the parameters look !!" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/matplotlib/axes/_axes.py:6448: UserWarning:The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_prior('uniform', 0,10)\n", + "plot_prior('expon', np.e, 3)\n", + "plot_prior('truncnorm', 0, 5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### We will try to model this time series with the help of a poisson distribution. We can try to model this with a Ricker series " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some basics about Poisson distribution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Poisson distribution belongs to the exponential family. It gives a probability dostribution over real positive integers. The Poisson distribution belongs to the exponential family. The sum of random variables which have exponential distribution remain in the exponential family. The sum of Poisson random variables(rvs) is also a Poisson distributed random variable. \n", + "It can be parameterised with the help of intesity($\\lambda$) value. \n", + "The probability of observing $k$ events in an interval is given by:\n", + "$P(X=k) = \\exp ^{-\\lambda} \\frac{\\lambda^k}{k!} $\n", + "\n", + "where $\\lambda$ is the average intensity of the events, and should be a positive real valued number.\n", + "Poisson distribution just needs one sufficient statistic from the data i.e. $X$. \n", + "The expected value(mean) and variance of a Poisson distributed rv is the same as its intensity rate.\n", + "$E(X) = \\lambda $\n", + "$Var(X) = \\lambda $\n", + "\n", + "while the mode(which can only be a positive integer) is:\n", + "$\\lceil \\lambda \\rceil -1, \\lfloor \\lambda \\rfloor$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### RIcker's Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Specify the model(Simulator) for generating synthetic obervations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Summary Statistics\n", + "\n", + "\n", + "\n", + "For \"non-standard\" and \"application-specific\" statistics of the data, we define some additional statistics which can be used further. Some of these for instance could be:\n", + "1. Number of zeros in a sequence\n", + "2. Number of large numbers in a sequence\n", + "3. Autocovariance: $\\sum_{i=2}^{n} \\frac{Y_{i}Y_{i-1}}{n}$\n", + "\n", + "\n", + "These measures are a bit adhoc, in the sense that the user has to see the data to determine what statistics should be used. For example, if the data does not have any zeros at all, the first measure is not at all useful." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class SummaryStatsEx(object):\n", + " def num_zeros(X):\n", + " val = np.sum(X==0, axis=1)\n", + " return val\n", + " \n", + " # rows correspond to the amount of batch_size if I am not wrong, and columns correspond to the simulated data.. \n", + " def num_large(X, val=100):\n", + " val = np.sum(X>100, axis=1)\n", + " return val\n", + " \n", + " def autocov(X, lag=1):\n", + " val = np.mean(X[:,lag:]*X[:,:-lag], axis=1)\n", + " return val\n", + " \n", + " def identity(X):\n", + " return X" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Distance \n", + "\n", + "This module will have all distance based measures for computing the distance(\"difference\") between observed data and simulated data. The measures are listed as:\n", + "\n", + "1. Root Mean Squared Error : $\\sqrt(\\sum_{i} (Y_i^s - Y_i^o)^2) $\n", + "2. Chi-Squared Error: $\\sum_{i} (Y_i^s - Y_i^o)^2 / Y^o_i $\n", + "3. Mean absolute Error: $\\sum_{i} |(Y_i^s - Y_i^o)| $\n", + "4. Normalised Mean absolute Error: $\\sum_{i} |(Y_i^s - Y_i^o)|/Y_i^o $\n", + "\n", + "The above measures only measure element wise difference without taking into account the temporal nature of the data. The methods given below also take that into account. It could be a worthwhile exercise to compare these two different classes of distance measures.\n", + "\n", + "One such measure is DTW(Dynamic Time Warping).\n", + "\n", + "DTW finds the best match between any two sequences of symbols by finding a path through the grid which minimises the total distance between them. This is especially helpful if there is a small offset or a random noise insertion/deletion between two similar strings. We go from left to right in both strings taking one step at a time. One step could mean an insertion or a deletion or no operation. For example, the difference between \"stiff\" and \"satiff\" would be just 1, while if we do a pairwise difference, it would be 4. We will use this for our notebook.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below we show a small illustration for DTW and code in Python for it." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def DTW(X, Y, cost_fn):\n", + " '''\n", + " \n", + " Dynamic Time Warping algorithm.\n", + " Parameters\n", + " ----------\n", + " X: sequence of observations: should be a list of numerals or string\n", + " Y: second sequence of observations: should be a list of numerals or string\n", + " cost_fn: could be anyone of the pair-wise distances, for numbers it could be 'euclidean' or 'manhattan', \n", + " for string literals it could be edit_distance.\n", + " Returns\n", + " -------\n", + " D1: cost matrix \n", + " \n", + " '''\n", + " N = len(X)\n", + " M = len(Y)\n", + " X1 = X.copy()\n", + " Y1 = Y.copy()\n", + " \n", + " \n", + " D0 = np.zeros((N+1,M+1))\n", + " large_num = 1000\n", + " D0[1:,0]= large_num\n", + " D0[0,1:] = large_num\n", + " \n", + " D1 = D0[1:,1:]\n", + " for i in np.arange(N):\n", + " for j in np.arange(M):\n", + " if not isinstance(X[0], str):\n", + " a = X[i].copy()\n", + " b = Y[j].copy()\n", + " a = a.reshape(-1,1)\n", + " b = b.reshape(-1,1)\n", + " D1[i,j] = cost_fn(a, b)\n", + " else:\n", + " D1[i,j] = cost_fn(X[i], Y[j])\n", + " \n", + " \n", + " D2 = D1.copy()\n", + " for i in range(N):\n", + " for j in range(M):\n", + " min_val = np.min(np.array([D0[i+1,j], D0[i,j+1], D0[i,j]]))\n", + " D1[i,j] += min_val\n", + " return D1[-1,-1]/np.sum(D1.shape), D2, D1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 3. 8. 12. 15. 18. 22.]\n", + " [ 5. 4. 8. 14. 17. 19. 23.]\n", + " [ 9. 7. 6. 11. 15. 18. 22.]\n", + " [ 12. 10. 11. 10. 12. 15. 18.]\n", + " [ 16. 12. 15. 14. 12. 16. 18.]\n", + " [ 21. 17. 18. 19. 17. 17. 21.]\n", + " [ 24. 19. 22. 22. 17. 20. 20.]\n", + " [ 27. 22. 23. 26. 20. 17. 20.]\n", + " [ 31. 25. 27. 26. 23. 20. 17.]]\n", + "[[ 0. 3. 5. 4. 3. 3. 4.]\n", + " [ 5. 4. 5. 6. 5. 4. 5.]\n", + " [ 4. 3. 2. 5. 4. 3. 4.]\n", + " [ 3. 3. 5. 4. 2. 3. 3.]\n", + " [ 4. 2. 5. 4. 2. 4. 3.]\n", + " [ 5. 5. 6. 5. 5. 5. 5.]\n", + " [ 3. 2. 5. 4. 0. 3. 3.]\n", + " [ 3. 3. 4. 4. 3. 0. 3.]\n", + " [ 4. 3. 5. 3. 3. 3. 0.]]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Xstr = ['Jack', 'hardly', 'plays', 'and', 'is', 'quite', 'a', 'lazy', 'boy']\n", + "Ystr = ['Jack', 'has', 'always', 'been', 'a', 'lazy', 'boy']\n", + "dist, cost, acc = DTW(Xstr,Ystr, edit_distance)\n", + "print(acc)\n", + "print(cost)\n", + "plt.imshow(acc)\n", + "plt.show()\n", + "# print(dist)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "poisson_noise = scipy.stats.poisson.rvs(0.4, Y_geyer.size)\n", + "Y_geyer_noise = Y_geyer + poisson_noise\n", + "a = np.int64(Y_geyer.copy().reshape(-1,1))\n", + "b = np.int64(Y_geyer_noise.copy().reshape(-1,1))\n", + "\n", + "dist1, cost1, acc1 = DTW(a, b, euclidean_distances)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8.72916666667\n" + ] + } + ], + "source": [ + "plt.imshow(acc1)\n", + "plt.show()\n", + "print(dist1)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Module for storing different summary and distance measures.\n", + "class DistanceMeasures(object):\n", + " \"\"\"\n", + " Each set of observation corresponds to one row of the matrix.\n", + " Collection of all pairswise-distance measures.\n", + " The true observations should be the first row \n", + " and the simulated observations the rest.\n", + " \"\"\"\n", + " \n", + " # Chi-squared Error ! \n", + " def chi_squared(*simulated, observed):\n", + " simulated = np.column_stack(simulated)\n", + " observed = np.column_stack(observed)\n", + "# simulated = np.vstack(simulated)\n", + "# observed = np.vstack(observed)\n", + " d = np.sum((simulated - observed)**2/observed, axis=1)\n", + " return d\n", + "\n", + " # Root Mean Squared Error!\n", + " def RMSE(*simulated, observed):\n", + " simulated = np.column_stack(simulated)\n", + " observed = np.column_stack(observed)\n", + "# simulated = np.vstack(simulated)\n", + "# observed = vstack(observed)\n", + "# d = np.sum((simulated - observed)**2, axis=0)\n", + " d = np.sum((simulated - observed)**2, axis=1)\n", + " return d\n", + "\n", + " # Mean Absolute Error !\n", + " def MAE(*simulated, observed):\n", + " simulated = np.column_stack(simulated)\n", + " observed = np.column_stack(observed)\n", + "# simulated = np.vstack(simulated)\n", + "# observed = np.vstack(observed)\n", + "# d = np.sum(np.abs((simulated - observed)), axis=0)\n", + " d = np.sum(np.abs((simulated - observed)), axis=1)\n", + " return d\n", + " \n", + " def DTW(observed, simulated):\n", + " simulated = np.asarray(simulated).reshape(-1,1)\n", + " observed = np.asarray(simulated).reshape(-1,1)\n", + " d, _, _ = DTW(simulated, observed)\n", + " return d\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Ricker Model\n", + "The Ricker model used in ecology has also been used in publications related to ABC, The stochastic version is a nonlinear autoregeressive model.\n", + "\n", + "$\\log N^{t} = \\log r + \\log N^{(t-1)} -N^{(t-1)} +\\sigma e^{(t)} $" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model simulator for ricker's model:\n", + "def ricker(log_rate, stock_init=1., n_obs=100, batch_size=1, random_state=None):\n", + " \"\"\"\n", + " Generates observations from Rickers model.\n", + " This is the non stochastic version.\n", + " \"\"\"\n", + " random_state = random_state or np.random\n", + " stock = np.empty((batch_size, n_obs))\n", + " stock[:,0] = stock_init\n", + " for i in range(1, n_obs):\n", + " stock[:,i] = stock[:,i-1]*np.exp(log_rate - stock[:,i-1])\n", + " \n", + " return stock\n", + "\n", + "\n", + "# stochastic Ricker\n", + "def ricker_stochastic(log_rate, std, scale=1, stock_init=1., n_obs=100, batch_size=1, random_state=None):\n", + " \"\"\"\n", + " This function will help us generate stochastic observations from a Ricker model.\n", + " The Ricker model is nonlinear autoregressive model, with negative correlation \n", + " The latent time series denoted by N is given as:\n", + " log(N[i]) = logr + logN[i-1] - N[i-1] + sigma*e[i] i = 1,..., n N[0]=0\n", + " \n", + " where logr is the log growth rate, e[i] is a Gaussian random variable.\n", + " \n", + " The obervation model is assumed to be Poisson distributed with mean given as: pN[i]\n", + " \n", + " Y[i]|N[i],p ~ Poisson(p*N[i]) \n", + " \n", + " where p is the scaling parameter.\n", + " \n", + " Parameters\n", + " ------------------\n", + " log_rate: logr\n", + " sigma: \n", + " \n", + " \n", + " \"\"\"\n", + " random_state = random_state or np.random\n", + " stock_obs = np.empty((batch_size, n_obs))\n", + " stock_prev = stock_init\n", + " stock_list = np.empty((batch_size, n_obs))\n", + " stock_list[:,0] = stock_init\n", + "\n", + " for i in range(1, n_obs):\n", + " stock = stock_prev * np.exp(log_rate - stock_prev + std*random_state.randn(batch_size))\n", + " stock_prev = stock\n", + " stock_list[:,i] = stock\n", + " stock_obs[:,i] = random_state.poisson(scale*stock, batch_size)\n", + " \n", + " return stock_obs" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# log X(t) = w1*logX(t-1) - w2*(X(t-1) - X(t-2)) + w3*eps.\n", + "# eps : N(0,1)\n", + "\n", + "def model_trial2(log_rate, std, scale=1, stock_init=1., n_obs=100, batch_size=1, random_state=None):\n", + " random_state = random_state or np.random\n", + " stock_obs = np.empty((batch_size, n_obs))\n", + " stock_prev = stock_init\n", + " stock = np.empty((batch_size, n_obs))\n", + " stock_list[:,0] = stock_init\n", + " \n", + " w1 = random_state.randn(batch_size, 4)\n", + " stock_prev_prev = 0.\n", + "# w2 = random_state.randn(batch_size, n_obs+2, 4)\n", + "\n", + " for i in range(1, n_obs):\n", + " log_stock = w1[:,0]*log_rate + w1[:,1]*np.log(stock_prev) - w1[:,2]*(stock_prev - stock_prev_prev) + \\\n", + " w1[:,3]*std*random_state.randn(batch_size)\n", + " stock = np.exp(log_stock)\n", + " stock_prev = stock\n", + " stock_prev_prev = stock_prev\n", + " stock_list[:,i] = stock\n", + " stock_obs[:,i] = random_state.poisson(np.exp(scale*stock), batch_size)\n", + " \n", + " return stock_obs" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "#### Make a model in ELFI for Ricker model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition to the summary measures given in the example, we add two more measures: skewness and kurtosis(third-order and fourth-order moments) and a measure for how many numbers are big " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# this function uses the partial functionality of functools which is very cool, \n", + "\n", + "def get_ricker_model(fn, y_obs=None, n_obs=100, true_params=None, seed_obs=None, stochastic=True, higher_order=True):\n", + " if stochastic:\n", + " simulator = partial(ricker_stochastic, n_obs=n_obs)\n", + " if true_params is None:\n", + " true_params = [3.8, 0.3, 10.]\n", + " else:\n", + " simulator = partial(ricker, n_obs=n_obs)\n", + " if true_params is None:\n", + " true_params = [3.8]\n", + " \n", + " m = elfi.ElfiModel()\n", + " if y_obs is None:\n", + " y_obs = simulator(*true_params, n_obs=n_obs, random_state=np.random.RandomState(seed_obs))\n", + " else:\n", + " n_obs = np.asanyarray(y_obs).size\n", + " sim_fn = partial(simulator, n_obs=n_obs)\n", + " sumstats = []\n", + " \n", + " if stochastic:\n", + " # full stochastic model here .. \n", + " elfi.Prior(stats.expon, np.e, 2, model=m, name='t1')\n", + " elfi.Prior(stats.truncnorm, 0, 5, model=m, name='t2')\n", + " elfi.Prior(stats.uniform, 0, 100, model=m, name='t3')\n", + " elfi.Simulator(sim_fn, m['t1'], m['t2'], m['t3'], observed=y_obs, name='Ricker')\n", + " sumstats.append(elfi.Summary(partial(np.mean, axis=1), m['Ricker'], name='Mean'))\n", + " sumstats.append(elfi.Summary(partial(np.var, axis=1), m['Ricker'], name='Var'))\n", + " sumstats.append(elfi.Summary(partial(skew, axis=1), m['Ricker'], name='skew'))\n", + " sumstats.append(elfi.Summary(partial(kurtosis, axis=1), m['Ricker'], name='kurt'))\n", + " sumstats.append(elfi.Summary(SummaryStatsEx.num_zeros, m['Ricker'], name='num_zeros'))\n", + " sumstats.append(elfi.Summary(SummaryStatsEx.num_large, m['Ricker'], name='num_large'))\n", + " elfi.Discrepancy(DistanceMeasures.chi_squared, *sumstats, name='d')\n", + " else:\n", + " # simple deterministic case here .. \n", + " elfi.Prior(stats.expon, np.e, model=m, name='t1')\n", + " elfi.Simulator(sim_fn, m['t1'], observed=y_obs, name='Ricker')\n", + " sumstats.append(elfi.Summary(partial(np.mean, axis=1), m['Ricker'], name='Mean'))\n", + " elfi.Distance('euclidean', *sumstats, name='d')\n", + " return m\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def get_ricker_model_dtw(fn, y_obs=None, n_obs=100, true_params=None, seed_obs=None,higher_order=True):\n", + " simulator = partial(ricker_stochastic, n_obs=n_obs)\n", + " \n", + " m = elfi.ElfiModel()\n", + " if y_obs is None:\n", + " y_obs = simulator(*true_params, n_obs=n_obs, random_state=np.random.RandomState(seed_obs))\n", + " else:\n", + " n_obs = np.asanyarray(y_obs).size\n", + " sim_fn = partial(simulator, n_obs=n_obs)\n", + " sumstats = []\n", + "\n", + " elfi.Prior(stats.expon, np.e, 2, model=m, name='t1')\n", + " elfi.Prior(stats.truncnorm, 0, 5, model=m, name='t2')\n", + " elfi.Prior(stats.uniform, 0, 100, model=m, name='t3')\n", + " elfi.Simulator(sim_fn, m['t1'], m['t2'], m['t3'], observed=y_obs, name='Ricker')\n", + " sumstats.append(elfi.Summary(SummaryStatsEx.identity, m['Ricker'], name='identity'))\n", + "# elfi.Discrepancy(DistanceMeasures.chi_squared, *sumstats, name='d')\n", + " elfi.Distance(partial(DistanceMeasures.DTW, observed=y_obs), *sumstats, name='d')\n", + " return m\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Generate artificial observations from the Ricker model itself using some known parameter values.\n", + "Following this, generate the full graphical model, which is the same as given in the ELFI examples." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "true_params = [3.8, 0.3, 10.]\n", + "n_obs = 100\n", + "seed_obs = 1234\n", + "Y1 = ricker_stochastic(*true_params, n_obs=n_obs, random_state=np.random.RandomState(seed_obs))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "39.76\n", + "61.1692307692\n", + "30.0\n" + ] + }, + { + "data": { + "image/png": "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3xw35/6DH/zAvu6662zbtu1du3bZH//4x7v+3P/u7/7O/u3f/m378ssvt23b5p7vnj177Kuvvtq2LMs+dOiQ/d73vrfu+6666W+lNuHuFFxyySX4oz/6IwCAbdtQFAV79+7FBRdcAMDZyvDHP/5xO4fYMnz1q1/FlVdeiRNOOAEAjpvz3rVrF8444wxce+21+OhHP4pf+7VfO27OfXJyEqZpwrIslEolqKra9ee+ceNG3HHHHfR33vnu3r0b27ZtgyRJWL9+PUzTxNzcXOz7rrrgHrUJd7eiv78fAwMDKJVKuO6663D99dfDtm26wXN/fz+Kxe7bX/Kf//mfMTY2RidyAMfFeQPA/Pw89uzZg7/+67/GF7/4RXzqU586bs69r68Phw4dwm/91m/hxhtvxNVXX9315759+3aoqqeQ8843GPeSXIdVp7kPDAygXC7T3y3L8l2YbsTU1BSuvfZavP/978e73/1u3HbbbfT/yuUyhoaG2ji61uD++++HJEl47LHH8POf/xyf+cxnfEylW88bAEZGRrB582bk83ls3rwZhUIBR44cof/fzef+93//99i2bRs++clPYmpqCr//+78PXdfp/3fzuROw+QRyvsG4Vy6XMTgYv0n2qmPux9sm3DMzM7jmmmvw6U9/GpdddhkAYMuWLXjiiScAAI888gi2bt3aziG2BN/+9rdxzz334O6778Yb3/hGfPWrX8VFF13U9ecNAG9+85vxox/9CLZt4+jRo6hUKviVX/mV4+Lch4aGaNAaHh6GYRjHxf3Ogne+559/Pnbt2gXLsnD48GFYloWxsbHY91l1XSGJW2bfvn10E+5TTz213cNqGW699Vb8x3/8BzZv3kz/9rnPfQ633nordF3H5s2bceutt0JRlDaOsrW4+uqr8YUvfAGyLOPGG288Ls77z//8z/HEE0/Atm388R//MTZs2HBcnHu5XMbOnTsxPT0NXdfxgQ98AGeffXbXn/vBgwfxiU98Avfeey9eeeUV7vnecccdeOSRR2BZFj772c/WneRWXXAXEBAQEKiPVSfLCAgICAjUhwjuAgICAl0IEdwFBAQEuhAiuAsICAh0IURwFxAQEOhCiOAuICAg0IUQwV1AQECgC/H/A/7c09wUnep7AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(Y1.ravel()[2:])\n", + "print(np.mean(Y1))\n", + "print(np.mean(Y1[Y1>0]))\n", + "print(np.median(Y1[Y1>0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "m = get_ricker_model(ricker_stochastic, y_obs=Y1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the Ricker model" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "num_zeros\n", + "\n", + "num_zeros\n", + "\n", + "\n", + "d\n", + "\n", + "d\n", + "\n", + "\n", + "num_zeros->d\n", + "\n", + "\n", + "\n", + "\n", + "t1\n", + "\n", + "t1\n", + "\n", + "\n", + "Ricker\n", + "\n", + "Ricker\n", + "\n", + "\n", + "t1->Ricker\n", + "\n", + "\n", + "\n", + "\n", + "Ricker->num_zeros\n", + "\n", + "\n", + "\n", + "\n", + "num_large\n", + "\n", + "num_large\n", + "\n", + "\n", + "Ricker->num_large\n", + "\n", + "\n", + "\n", + "\n", + "Mean\n", + "\n", + "Mean\n", + "\n", + "\n", + "Ricker->Mean\n", + "\n", + "\n", + "\n", + "\n", + "skew\n", + "\n", + "skew\n", + "\n", + "\n", + "Ricker->skew\n", + "\n", + "\n", + "\n", + "\n", + "Var\n", + "\n", + "Var\n", + "\n", + "\n", + "Ricker->Var\n", + "\n", + "\n", + "\n", + "\n", + "kurt\n", + "\n", + "kurt\n", + "\n", + "\n", + "Ricker->kurt\n", + "\n", + "\n", + "\n", + "\n", + "num_large->d\n", + "\n", + "\n", + "\n", + "\n", + "t3\n", + "\n", + "t3\n", + "\n", + "\n", + "t3->Ricker\n", + "\n", + "\n", + "\n", + "\n", + "Mean->d\n", + "\n", + "\n", + "\n", + "\n", + "skew->d\n", + "\n", + "\n", + "\n", + "\n", + "t2\n", + "\n", + "t2\n", + "\n", + "\n", + "t2->Ricker\n", + "\n", + "\n", + "\n", + "\n", + "Var->d\n", + "\n", + "\n", + "\n", + "\n", + "kurt->d\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elfi.draw(m)" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m_rej_inf = elfi.Rejection(m, m['d'], batch_size=8)" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "result = m_rej_inf.sample(500)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([,\n", + " ,\n", + " ], dtype=object)" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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wYKVTgAAAACAMax0IqT4+pd/AAAAIBgF044XVjoBAAAAAMbQdAIAAAAAjGF7LeADu23f5cIgAOwgmLZ4AQCaHiudAAAAAABjaDoBAAAAAMawvRYIYqa3+7IFDggdvtSL5nbu+1pLt68YYigJAJgTyI9CsNIJAAAAADCmQSud1dXVWrRokT777DNFREQoMzNTHTt29Hc2AAHGxUGA5sn0LgrTtcVuF30DgOauQSudb7/9tioqKvTSSy9pxowZWrZsmb9zAQAAAABCQIOazr179+r222+XJHXv3l379+/3aygAAAAAQGhwWJZl+fpN8+fP11133aW+fftKkn7729/q7bffltPJdYkAAAAAAP/ToJXOqKgouVwu99fV1dU0nAAAAACAKzSo6ezRo4fy8vIkSR999JG6dOni11AAAAAAgNDQoO21l65e+/nnn8uyLC1ZskSdO3c2kQ8AAAAAEMQa1HQCAAAAAFAfDdpeCwAAAABAfdB0AgAAAACMoekEAAAAABgTsvc5uXDhghYsWKDDhw/L4XBo8eLFNa6y+84772j16tVyOp0aPny47r//flvm3LBhg15++WW1a9dOkrR48WLFxcUFJKsknT59WsOGDdP69etrXDzKLuPpKaPdxnLo0KGKioqSJLVv315Lly51P5ebm6stW7bI6XRq8uTJuuOOOwIV02POzMxMffjhh4qMjJQkrVmzRtHR0QHJaTeXLrj22WefKSIiQpmZmerYsaP7+dqO8ZkzZzRz5kz9+OOPuvbaa7V06VK1bt3aaI4NGzbojTfekCT17dtXjz32mCzLUlJSkv7v//5PktS9e3fNmDHDaI7a5lJlZWWTjsfBgwe1ZMkS92s/+ugjrV69WjfffLOSk5Pdtbl///4aN25co3Jc8vHHH+vpp59WdnZ2jcdrq6k//vijZs2apdOnTysyMlJZWVnuemYqx+uvv66NGzcqPDxcXbp00aJFixQWFuaxLpjIUVv9vv76642NR11ZioqKNH36dPfXBw8e1IwZMzRq1Ci/nzPNlam55S+Xz4sjR44oNTVVDodD8fHxSk9PV1iYPdZzLs954MABTZo0yT0/R48erXvuuSewASVVVlZq3rx5+u6771RRUaHJkyfrxhtvtN2Y1pbzuuuus92Y1tZTtGzZ0j7jaYWot956y0pNTbUsy7Lef/996w9/+IP7uYqKCqt///7W2bNnrfLycmvYsGFWUVGR7XJalmXNmDHD+vTTTwMR7QoVFRXWlClTrLvuusv64osvajxul/GsK6Nl2Wssf/zxR2vIkCG1Pnfy5Elr0KBBVnl5uXXu3Dn3vwPBU07LsqxRo0ZZp0+fbsJEwWPHjh3WnDlzLMuyrH379tU4t+s6xhkZGda2bdssy7KsdevWWX/961+N5vjmm2+soUOHWlVVVVZ1dbU1cuRI6+DBg9bXX39tTZo0qdHvXd8cllX7XGrq8bjcP//5T2v69OmWZVnW7t27rSeffLLR7/1Tzz//vDVo0CDrvvvuq/F4XTV1/fr11rPPPmtZlmW9/vrrVkZGhtEc58+ft/r162eVlZVZlmVZTzzxhPX22297rQv+zmFZtddvU+PhLcslH374oTVmzBirqqrKyDnTHJmaW/7y03kxadIk6/3337csy7IWLlxo/etf/wpkPLef5szNzbVefPHFAKe60tatW63MzEzLsiyruLjY6tu3ry3HtLacdhzT2noKO42nPf4cY0D//v2VkZEhSTp27JhiYmLcz3355Zfq0KGDrrrqKkVERKhnz5764IMPbJdTkgoLC/X8889r9OjRWrduXSAiumVlZWnUqFG69tprazxup/GsK6Nkr7E8dOiQzp8/r/Hjx2vs2LH66KOP3M998sknuvXWWxUREaHo6Gh16NBBhw4dsl3O6upqHTlyRGlpaRo1apS2bt0akIx2tXfvXt1+++2SLq567N+/3/1cXcf48u9JSkpSfn6+0Rw///nP9cILLyg8PFwOh0NVVVVq2bKlCgsLdeLECY0ZM0aPPvqovvrqK6M56ppLTT0el5SVlWnVqlWaP3++JGn//v0qLCzUQw89pGnTpunkyZONziFJHTp00KpVq654vK6a+tPx2LNnj9EcERER2rJli3t1+dL88FQXTOSQaq/fpsbDWxZJsixLGRkZWrRokcLDw42cM82RqbnlLz+dF4WFhUpMTJTkvxrlDz/NuX//fv373//Wgw8+qHnz5qm0tDSA6f7n7rvv1uOPPy7p4jl16Vyy25jWltOOY1pbT2Gn8QzZplOSnE6n5syZo4yMDA0ePNj9eGlpaY0tgJGRkQGdLHXllKSBAwdq0aJF2rhxo/bu3at33303IBlfeeUVtWvXzv0/+MvZZTw9ZZTsM5aS1KpVK02YMEEvvviiFi9erJkzZ6qqqkqSfcbTW86ysjI99NBDWr58uV544QVt3rw5YM2xHZWWlrq3iElSeHi412N8+eORkZEqKSkxmqNFixZq166dLMtSVlaWunbtqk6dOik2NlYTJ05Udna2Jk2apFmzZhnNUddcaurxuGTr1q26++673Vs14+LiNG3aNOXk5Kh///7KzMxsdA5JSk5OltN55adcmnJ+eMoRFhama665RpKUnZ2tsrIy/eY3v/FYF0zkkGqv36bGw1sW6eL25/j4ePdHNEycM82RqbnlLz+dF5ZlyeFwSPL/HGyMn+a8+eabNXv2bG3atEk33HCDVq9eHcB0/xMZGamoqCiVlpZq2rRpSklJseWY1pbTrmP6057CTuMZ0k2ndHHla8eOHVq4cKHKysokSVFRUXK5XO7XuFyugH8OrbaclmVp3LhxateunSIiItS3b18dOHAgIPm2bdum/Px8jRkzRgcPHtScOXNUVFQkyT7j6SmjncZSkjp16qR7771XDodDnTp10tVXX2278fSWs3Xr1ho7dqxat26tqKgo9e7dm6bzMj89jtXV1e5fAuo6xpc/7nK5rtj54O8cklReXq6ZM2fK5XIpPT1dktStWzf169dPkpSQkKCTJ0/KauQtnT3lqGsuBWI8JGn79u2677773F/37t1bvXr1kiQNGDDAeO1oyvnhTXV1tbKysrR7926tWrXKXQvqqgsm1FW/AzEel7z22ms1rl1g4pxpjpp6bjXW5Z+Na+o56IsBAwaoW7du7n8H8vefnzp+/LjGjh2rIUOGaPDgwbYd05/mtPOYXt5TlJeXux8P9HiGbNP56quvurfgtG7dWg6Hwz2RO3furCNHjujs2bOqqKjQf//7X9166622y1laWqpBgwbJ5XLJsiwVFBS4J3hT27Rpk3JycpSdna1f/vKXysrKUmxsrCT7jKenjHYaS+niSsqyZcskSSdOnFBpaak7680336y9e/eqvLxcJSUl+vLLL2tcXMouOb/++muNHj1aFy5cUGVlpT788EP96le/CkhOO+rRo4fy8vIkXbwgzeXHsK5j3KNHD7333nuSpLy8PPXs2dNoDsuyNGXKFP3iF7/Qk08+qfDwcEnSc889p40bN0q6uN3tuuuuc/+l1ESOuuZSU4+HJJWUlKiiokLXXXed+7EFCxZox44dkqQ9e/YYn+d11VQT4+FNWlqaysvLtWbNGvc2W091wYS66ncgxuOS/fv3q0ePHu6vTZwzzVFTz63G6tq1qwoKCiRdnIMJCQkBTlS7CRMm6JNPPpHUNDWsvk6dOqXx48dr1qxZGjFihCR7jmltOe04prX1FN26dbPNeDqsEP1TXFlZmebOnatTp06pqqpKjz76qM6fP6+ysjKNHDnSfWVAy7I0fPhwPfjgg7bM+eqrryo7O1sRERG67bbbNG3atIDkvNyYMWO0aNEiHThwwHbj6SmjncayoqJCc+fO1bFjx+RwODRz5kx9/PHH6tChg/r166fc3Fy99NJLsixLkybEZwfiAAAEHklEQVRNUnJysi1zvvDCC3rzzTfVokULDRkyRKNHjw5ITju6dJXUzz//XJZlacmSJcrLy/N4jE+dOqU5c+bI5XKpbdu2WrFihdq0aWMsR3V1taZPn67u3bu7Xz99+nTFxcVp1qxZKisrU3h4uNLS0mpcCdrEeNQ2l5p6PPr166dPPvlEa9eu1Zo1a9zfc/ToUc2bN0/Sxf+RZ2Zm1vq58Yb49ttvNX36dOXm5mr79u0ea+r58+fdOzhatGihFStW+O0X8tpydOvWTcOHD1dCQoK7gRo7dqz69u17RV24vAHzd4666rfJ8fCU5cyZM3r44Yf1j3/8w/3aH374we/nTHNU2/9z/DW3/OXyeXH48GEtXLhQlZWViouLU2ZmpvuPd4F2ec7CwkJlZGSoRYsWuuaaa5SRkVHjYwaBkpmZqTfffLPGnQTmz5+vzMxMW41pbTlTUlK0fPlyW41pbT1F586dbTNHQ7bpBAAAAAAEXshurwUAAAAABB5NJwAAAADAGJpOAAAAAIAxNJ0AAAAAAGNoOgEAAAAAxtB0wqiSkhJNmTLF/XVlZaXGjRvnvmcQAISCy2vdSy+9pEGDBmnw4MGaO3euKioqApwOAPzj8lq3efNmDRw4UPfcc4+ysrLEDTHgCU0njPrhhx906NAhSdJXX32lMWPGaN++fQFOBQD+danWHT58WC+++KK2bNmi1157TdXV1dq8eXOg4wGAX1yqdUePHtWGDRv08ssva/v27dq3b592794d6HiwMWegAyC0ZWZm6uTJk5o6dao6duyoRx55RBs3bgx0LADwq0u1Li0tTYsWLXLfJLxLly46duxYgNMBgH9cqnXLli3TG2+8oRYtWqi4uFilpaWKiYkJdDzYGCudMGrBggW69tprtXr1as2ePVv9+/cPdCQA8LtLtS47O1u//vWvJUlnzpzRpk2b1K9fvwCnAwD/uPz3uhYtWig3N1f9+/dXbGysbrrppkDHg43RdAIA4GcnTpzQuHHjNHz4cPXq1SvQcQDAiPvvv18FBQW65ppr9NxzzwU6DmyMphMAAD/68ssvNXr0aA0dOlRTp04NdBwA8Lvjx49r7969kiSn06mBAwfqs88+C3Aq2BlNJ4xyOp2qqqoKdAwAMOpSrSstLdWECRP0+OOPa/z48YGOBQB+danWlZSUaNasWTp37pwsy9KOHTvUs2fPQMeDjdF0wqif/exnuv766zVmzJhARwEAYy7Vup49e+rUqVNav369hgwZoiFDhuiZZ54JdDwA8ItLtS4jI0MTJ07UqFGjdO+996pVq1Z6+OGHAx0PNuawuKkOAAAAAMAQVjoBAAAAAMbQdAIAAAAAjKHpBAAAAAAYQ9MJAAAAADCGphMAAAAAYAxNJwAAAADAGJpOAAAAAIAx/w97iclAsor1KwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result.plot_marginals()\n", + "# result.plot_pairs()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "m2_ricker = get_ricker_model(ricker, y_obs=Y1, stochastic=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot for non-stochastic Ricker model" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "d\n", + "\n", + "d\n", + "\n", + "\n", + "Mean\n", + "\n", + "Mean\n", + "\n", + "\n", + "Mean->d\n", + "\n", + "\n", + "\n", + "\n", + "t1\n", + "\n", + "t1\n", + "\n", + "\n", + "Ricker\n", + "\n", + "Ricker\n", + "\n", + "\n", + "t1->Ricker\n", + "\n", + "\n", + "\n", + "\n", + "Ricker->Mean\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elfi.draw(m2_ricker)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# flush all python objects here to avoid namespace collapse ..\n", + "if m:\n", + " del m\n", + " del m_rej_inf\n", + " del result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Our Note/Observations from the plots above.\n", + "In the plots above, we basically just replicated the example from ELFI, nothing original until here ..., but this is atleast a good base to start with. Also the above plots are good, and demonstrate the rejection sampling gave satifactory results with the modes of the plots close to the original true values of the parameters. " + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 24)\n" + ] + } + ], + "source": [ + "print(Y_geyer.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "m3 = get_ricker_model(ricker_stochastic, y_obs=Y_geyer)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pool = elfi.OutputPool([m3['t1'], m3['t2'], m3['t3'], m3['Ricker'], m3['Mean'], m3['Var']])\n", + "# pool2 = elfi.ArrayPool([m3['t1'], m3['t2'], m3['t3'], m3['Ricker']])" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m3_rej = elfi.Rejection(m3, m3['d'], batch_size=5, pool=pool)\n", + "# m3_rej = elfi.Rejection(m3, m3['d'], batch_size=10, pool=pool2)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/ipykernel/__main__.py:16: RuntimeWarning:divide by zero encountered in true_divide\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/ipykernel/__main__.py:16: RuntimeWarning:invalid value encountered in true_divide\n" + ] + } + ], + "source": [ + "N_samples = 400\n", + "result_geyer = m3_rej.sample(N_samples)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([,\n", + " ,\n", + " ], dtype=object)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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+aUMw9CKFSvUvXt3bz08AAAAACAEeLWIAgAAAADQHK9emgsAAAAAQHMoogAAAAAAU1FEAQAAAACmCsnPVtm5c6f+4z/+QytXrrxmXW5urg4ePKiIiAhJ0tq1a1VfX6/58+fr+++/1y233KLnnntOHTp0MC3Tpk2b9O6770qSBg0apDlz5sgwDA0cOFC33XabJOmuu+7S008/bVqmrVu3qrCwUFarVTNnztQ//MM/qKqqyqfj9P3332vBggX67rvvFBERoby8PMXExLjWl5SUaOPGjZIkwzB04MAB/f73v9fly5c1Y8YM11ilpaVpxIgRpmSSpJkzZ+rcuXMKDw9Xu3bt9Nprr+nEiRNauHChLBaLevTooaVLl6pNG+/83sedTHl5eTp48KAaGhqUmpqq8ePH6/z580pJSXHdzXro0KGaPHnyT8py5QZlX3zxhdq2bavc3Fx169bNtd4fx1GwaMnY+TvT9eZPm83m81ySdOjQIf3Lv/yLCgoKrlr+4Ycf6pVXXpHVatWYMWM0fvx4U/I0lWnTpk0qKipy/b9cvny5EhISfJqlvr5emZmZOnXqlOrq6jRz5kwNGTLEtd4f49RcJn+MU2Njo7KysnT8+HFZLBYtX778qjv8+/N4ak2am2sCzfWO5Z///Oc+e533le+++04PPfSQXn/9dVmt1qDKv379en344Yeqr69XWlqa+vfvHzT56+vrtXDhQp06dUpt2rRRTk5O0Iz/X77O3ei9bX5+vnbv3i2r1arMzEz17dvX/R0YISYnJ8dISUkx5s2bd931EyZMML777rtrvqe4uNgwDMNYv3698cYbb5iW6euvvzYefPBBo6GhwXA6nUZqaqrx+eefG1999ZUxY8YMr+ZwN9O3335r3H///cbly5eN6upq1799PU6vv/66sXr1asMwDOP3v/+9kZOTc8NtN27caKxcudIwDMPYunWr8Zvf/MarWTzJdN999xlOp/OqZTNmzDA+/vhjwzAMY8mSJcZ//ud/mpZp3759xqxZswzDMIzLly8bQ4cONc6fP2/s2bPHeOaZZ7yWwzAM4/333zcyMjIMwzCMTz75xHjiiSdc6/x1HAWLloydPzMZxvXnTzNs2LDBuP/++41x48Zdtbyurs51fF++fNl46KGHjDNnzvg1k2EYxtNPP238z//8jyk5rti2bZuRm5trGIZhnDt3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cxWIx1OoamquCUTXO5Z9+TrvbVu2bNHmzZtVUFCgnj17Ki8vTwMHDgya/P369dN///d/yzAMnT59WpcuXdIvf/nLoMkfFRXlKmc33XSTGhoagur4ueJ6mRMTE1VaWiqn06mKigo5nU63z4ZKksUwDMNXgf2lrKxMhYWFeumllyT9cCln165dNWTIEL322mt67733FB4ertGjRystLU1nz55VRkaGHA6HOnXqpJUrV6pjx46mZHI6nXrqqad01113ubZ96qmnlJCQoAULFujixYsKCwtTdna2unfvbkqmIUOGaOvWrXr77bdlGIZmzJihlJQUn4/TpUuXlJGRoTNnzig8PFwrV65UbGysXnjhBQ0fPlx9+/bVe++9p4MHD2rx4sWu7ysvL1dOTo7Cw8PVuXNn5eTkXHXJj68zPfvsszp06JDatGmjRx99VEOHDtXx48e1ZMkS1dfXKyEhQbm5udf8fZSvMh08eFD5+fnq2bOn63uu/M1oZmampB/egOXm5rr+VqSlrtz58Msvv5RhGFqxYoVKSkr8ehwFi5aMnb8zXW/+NMvJkyf11FNPaevWrXrnnXd08eJFpaamuu5yahiGxowZo0mTJvk90/bt21VQUKC2bdvql7/8pebOnevzLLm5uXrvvfeuuuvsuHHjdOnSJb+NU3OZ/DFOFy9e1KJFi3T27Fk1NDToscce06VLlwLieGpNrjfXePs9jjdd71hevHixcnNzffI670vp6elatmyZ2rRp47P3Kb7wwgsvqKysTIZh6Mknn1SXLl2CJr/D4VBmZqbOnDmj+vp615+2BEP+v3ydu9F72zVr1qikpEROp1OLFi3yqFSHZBEFAAAAAASuVnVpLgAAAADA/yiiAAAAAABTUUQBAAAAAKaiiAIAAAAATEURBeC2Q4cOKT09vclt8vLylJqaqjFjxmjr1q2SpIqKCj388MOaNGmSZs2apUuXLkmSduzYoQcffFBjxozRm2++6fP8AAAACAwUUfhFTU2NZs2a5fq6vr5ekydPdn0+EQLPxo0blZWVpcuXL99wm48//lhff/213n77bb311lvauHGjLly4oE2bNum+++7Tli1b1KNHD23btk3SD7djf+ONN/TWW2/pjTfe0IULF8x6OoAp/nKue/vtt3X//fdr1KhRWrRokerq6vycDgC84y/nujfffFMjR47UiBEjlJeXJz6gAzdCEYVfXLhwQUePHpUk/elPf1J6ero++eQTP6dCU7p27ao1a9a4vv7iiy+Unp6u9PR02e121dTU6O6773Z9ZqkkNTY2ymq1qmfPnqqurpb0wwfZW61WSdIdd9yhmpoa1dXVyTAMWSwWc58U4GNX5rrjx4/rN7/5jQoLC7Vjxw45nU6uAgAQMq7Mdd988402bdqkoqIivfPOO/rkk0+0Z88ef8dDgKKIwi9yc3P17bffavbs2dq2bZseffRR/eIXv/B3LDQhJSXFVSAlacmSJVq6dKkKCgo0cOBAvfbaa2rXrp1uuukm1dfXa+HChUpNTVVERIR+9rOfacuWLRo5cqRKSko0fPhwSVKPHj00ZswYjRw5UoMHD1ZUVJS/nh7gE1fmuuzsbC1btkyRkZGyWCy6/fbbVVFR4e94AOAVV+a6559/Xu+++646duyo6upq1dbW8tqOG6KIwi+ysrJ0yy236JVXXtE///M/a+jQof6OBA8dO3ZMy5cvV3p6uoqLi3X69GlJP/xW9NFHH1X37t01Y8YMST9cgvvcc8/p3Xff1eLFi5WRkaGjR49q9+7d2rVrlz788ENVVVXpvffe8+dTArzuylxXUFCgX/3qV5KkqqoqbdmyRUOGDPFzOgDwjr98XxceHq6tW7dq6NChio2N1Z133unveAhQFFEALRIfH6+8vDwVFBRowYIFGjx4sL7//ntNmTJFY8aM0ezZs13bRkVFyWazSZJuueUWVVdXy2azqX379mrXrp3CwsIUExPjunwXCFWnT5/W5MmTNWbMGN1zzz3+jgMAPjF+/HiVlZWpc+fOys/P93ccBChr85sAwLWWLVumjIwMNTQ0yGKx6Nlnn1VhYaG++eYbFRUVqaioSJK0YsUKLVmyRM8884ycTqcMw1B2drb+9m//VqmpqZo4caLCw8PVtWtXPfjgg35+VoDvHDt2TI899pgefvhhTZs2zd9xAMDrKisrVVFRoX79+slqtWrkyJF66623/B0LAYoiCr+wWq1qaGjwdwx4qEuXLq6PZOnTp48KCgquWh8fH68pU6Zc93v/7d/+7ZplaWlpSktL83pOIFBcmetqa2s1ffp0Pfnkkxo9erS/YwGAV12Z62pqarRgwQJt375dNptN77//vvr16+fveAhQXJoLv7j55psVFxfX7GdSAkAwuzLX9evXT2fPntXrr7+u0aNHa/To0Xr55Zf9HQ8AvOLKXJeTk6PHH39cEyZM0D/+4z+qffv2mjp1qr/jIUBZDD7cBwAAAABgIs6IAgAAAABMRREFAAAAAJiKIgoAAAAAMBVFFAAAAABgKoooAAAAAMBUFFEAAAAAgKkoogAAAAAAU/0/y8BZvqhg4o0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result_geyer.plot_marginals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also try an alternative model to the above Ricker model which we used for modelling the Geyer data.\n", + "\n", + "The above plots are not so encouraging because they show that the scale parameter for the Poisson process is close to 0, this might mean that we should use some alternate model for the latent stochastic time series, and our modelling assumptions are not really suitable for this dataset. Also, if we carefully look at the plots for the original Ricker model simulated abservations and our hourly observations, they exhibit different behaviours. While the original observations have a very high oscillatory behaviour explaining the negative covariances between subsequent observations, the Geyer observations have a much more smooth pattern and positive correlations. We try a different model then." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/numpy/core/_methods.py:116: RuntimeWarning:overflow encountered in multiply\n" + ] + }, + { + "data": { + "text/plain": [ + "inf" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result_geyer.samples['t1'].std()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Diagnostics\n", + "Lets have a look into the inside dynamics of the model and simulator. Some inbuilt methods can be used to see internals like samples, thresholds etc. It is also possible to view them " + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(m3)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['t1', 't2', 't3']\n" + ] + } + ], + "source": [ + "print(m3.parameter_names)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_class': elfi.model.elfi_model.Prior,\n", + " '_operation': functools.partial(, size=None, distribution=),\n", + " '_parameter': True,\n", + " '_stochastic': True,\n", + " '_uses_batch_size': True,\n", + " 'distribution': ,\n", + " 'size': None}" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m3.get_state('t1')" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'_operation': , '_uses_observed': True, '_class': }\n" + ] + } + ], + "source": [ + "print(m3.get_state('d'))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "arraypool = elfi.ArrayPool(['t1', 't2', 'Y', 'd'])\n", + "# rej = elfi.Rejection(d, pool=arraypool)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Our Note/Observations from the plots above.\n", + "\n", + "We also try an alternative model to the above Ricker model which we used for modelling the Geyer data.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Proposed Model\n", + "\n", + "Here, we propose a model which can handle 2nd degree interactions, unless we have some prior information about the data geenrating process, it could be hard to come up with a suitable model.\n", + "Lets have a linear Gaussian autoregressive model.\n", + "\n", + "$ X(t) = a.X(t-1) + b.X(t-2) + c.\\epsilon \\\\$\n", + "\n", + "The observation model can then be defined as a gaussian with the mean equal to latent value at that time instance.\n", + "The link function is generally taken to be an exponential function. But here, we use a simpler squaring function.\n", + "The motivation for this model is the smooth nature of the plot of the observation data. As the observations are positive integers, the values are rounded off to the nearest integer.\n", + "\n", + "$ Y(t) = N(g(X(t)), 1)$\n", + "where $g(.)$ is a link function.\n", + "\n", + "$ Y(t) = N(dX(t)^2, 1)$\n", + "where $d$ is a scaling constant.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def model_2_degree(a, b, c, d=1, stock_init=0., n_obs=100, batch_size=1, random_state=None):\n", + " random_state = random_state or np.random\n", + " stock_obs = np.empty((batch_size, n_obs))\n", + " stock_prev = stock_init\n", + " stock_list = np.empty((batch_size, n_obs))\n", + " stock_list[:,0] = stock_init\n", + " \n", + " w1 = random_state.randn(batch_size, 4)\n", + " stock_prev_prev = 0.\n", + "# w2 = random_state.randn(batch_size, n_obs+2, 4)\n", + "\n", + " for i in range(1, n_obs):\n", + " stock = a*stock_prev + b*stock_prev_prev + c*random_state.randn(batch_size)\n", + " stock_prev = stock\n", + " stock_prev_prev = stock_prev\n", + " stock_list[:,i] = stock\n", + " \n", + " stock_obs[:,i] = np.rint(random_state.normal((d*stock)**2, batch_size))\n", + "# stock_obs[:,i] = random_state.poisson((d*stock)**2, batch_size)\n", + " \n", + " return stock_obs" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def get_2degree_model(y_obs, seed_obs=None, stochastic=True, higher_order=True):\n", + " n_obs = y_obs.size \n", + "\n", + " simulator = partial(model_2_degree, n_obs=n_obs)\n", + " m = elfi.ElfiModel()\n", + " sim_fn = partial(simulator, n_obs=n_obs)\n", + " sumstats = []\n", + " elfi.Prior(stats.truncnorm, 0, 10, model=m, name='a')\n", + " elfi.Prior(stats.norm, 0, 10, model=m, name='b')\n", + " elfi.Prior(stats.norm, 0, 5, model=m, name='c')\n", + " elfi.Prior(stats.uniform, 0.0001, 4, model=m, name='d')\n", + " elfi.Simulator(sim_fn, m['a'], m['b'], m['c'], m['d'], observed=y_obs, name='2degree')\n", + " sumstats.append(elfi.Summary(partial(np.mean, axis=1), m['2degree'], name='Mean'))\n", + " sumstats.append(elfi.Summary(partial(np.var, axis=1), m['2degree'], name='Var'))\n", + " sumstats.append(elfi.Summary(partial(skew, axis=1), m['2degree'], name='skew'))\n", + " sumstats.append(elfi.Summary(partial(kurtosis, axis=1), m['2degree'], name='kurt'))\n", + " elfi.Discrepancy(DistanceMeasures.chi_squared, *sumstats, name='dist')\n", + " return m\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "m_2deg = get_2degree_model(y_obs=Y_geyer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the model(each latent observation is a weighted sum of the previous two observations.)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "c\n", + "\n", + "c\n", + "\n", + "\n", + "2degree\n", + "\n", + "2degree\n", + "\n", + "\n", + "c->2degree\n", + "\n", + "\n", + "\n", + "\n", + "a\n", + "\n", + "a\n", + "\n", + "\n", + "a->2degree\n", + "\n", + "\n", + "\n", + "\n", + "d\n", + "\n", + "d\n", + "\n", + "\n", + "d->2degree\n", + "\n", + "\n", + "\n", + "\n", + "Mean\n", + "\n", + "Mean\n", + "\n", + "\n", + "2degree->Mean\n", + "\n", + "\n", + "\n", + "\n", + "skew\n", + "\n", + "skew\n", + "\n", + "\n", + "2degree->skew\n", + "\n", + "\n", + "\n", + "\n", + "kurt\n", + "\n", + "kurt\n", + "\n", + "\n", + "2degree->kurt\n", + "\n", + "\n", + "\n", + "\n", + "Var\n", + "\n", + "Var\n", + "\n", + "\n", + "2degree->Var\n", + "\n", + "\n", + "\n", + "\n", + "dist\n", + "\n", + "dist\n", + "\n", + "\n", + "Mean->dist\n", + "\n", + "\n", + "\n", + "\n", + "b\n", + "\n", + "b\n", + "\n", + "\n", + "b->2degree\n", + "\n", + "\n", + "\n", + "\n", + "skew->dist\n", + "\n", + "\n", + "\n", + "\n", + "kurt->dist\n", + "\n", + "\n", + "\n", + "\n", + "Var->dist\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elfi.draw(m_2deg)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m_2deg_inf = elfi.Rejection(m_2deg, m_2deg['dist'], batch_size=8)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "N_samples = 1000\n", + "result_geyer_m2= m_2deg_inf.sample(N_samples)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([,\n", + " ,\n", + " ,\n", + " ], dtype=object)" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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AgAAoL7t1lNzAQAAYFcpRAEAACiUQhQAAIBC7db3iALw8drzUDIAgK5KIQoAUAc8lR+oJQrRKtXWHxN/SAAAgFrlHlEAAAAKpRAFAACgUApRAAAACuUeUQAAoKp4+Fb9U4gCAEAN66pfGdaedj80d0QBSegIl+YCAABQKIUoAAAAhVKIAgAAUCiFKAAAAIXysCIAAKAwXfXhSnyYQhRgF/kDCgCwe1yaCwAAQKEUogAAABSqw5fm/s3f/E169uyZJBkwYEBGjx6da6+9No2NjRk6dGi++93vli0kAAAA9aNDhei7776bUqmU22+/fcfPRowYkfnz5+fAAw/Mt771rbzwwgs57LDDyhYUAABgVwy/5ME2l7ntsi8XkISddejS3F/96ld55513MnHixEyYMCFPP/10tm3bloEDB6ahoSFDhw7NE088Ue6sAAAA1IEOzYjutddeOffcczNq1Ki88sor+bu/+7v07t17x//36NEjv//979tcz7777pOmpsaOROjy2vPUzofmjiggySfr379XRd+/s9V7+5LKj9Fq2sbVlKXWdea27Gr7qdJjtCO62j5KqutJ25Xe/pV+/6K1Z4x2tW1SjaptH1RbnrZ0NG+HCtFBgwbloIMOSkNDQwYNGpRevXrlrbfe2vH/zc3NHypMP8nGjVs78va00/r1myv23v3796ro+3e2cravmg82lRyj1dSHqilLPeisbdlZ+8kYLR9jqfLq8dyglseoMVEd2toH7fkwqVyX99Zan2hP3k8aox26NPdHP/pRZs+enSR58803884772SfffbJa6+9llKplBUrVmTIkCEdWTUAAAB1rkMzoiNHjszll1+esWPHpqGhIdddd1322GOPXHrppWlpacnQoUNz5JFHljsrAHWgyE+WAYDq1KFCtHv37pk7d+5Hfr5kyZLdDgQAANAVdaWn/Hb4e0QBAKpRNT0cCICPpxAFAADYDW472XUdelgRAAAAdJRCFAAAgEK5NBcAAKCTuX/9wxSiAABAl6VArAyFKABAF+GBKrVHkUS9co8oAAAAhVKIAgAAUCiFKAAAAIVSiAIAAFAohSgAAACF8tRcgJ14QiEAUK3aOk+plSdfK0TrWLlOpmulMwMAALVBIQp0KWY7AYB6VivfF+weUQAAAAqlEAUAAKBQLs0FAADgQ9pzie9Dc0d0eP1mRAEAAChU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a6+9VulIfAwzol3QMccckz59+uSOO+7If//3f+eVV17J1q1bKx0L2MmQIUPy2c9+NkkyfPjw3H///WZdoAo8/fTT+drXvpbu3bune/fuefDBBysdCfj/PPXUUznllFPSrVu39O3bNyeccEKlI/ExzIh2QY899lguvfTS7LXXXjnttNNyzDHHpFQqVToWsJOmpj9/VlgqlT70Gqicncfi2rVrfaALVaShoSGtra07Xvv7WZ0Uol3QypUr87WvfS2nn356+vXrl6effjotLS2VjgXs5Jlnnskbb7yR1tbWPPDAA/nLv/zLSkcC8v6VRY9hyzPuAAAA2klEQVQ++mi2b9+ed955J+edd17efPPNSscC/uRLX/pSHnnkkWzbti1vv/12/uu//qvSkfgYPh7ogkaNGpVLL700jzzySLp3756jjjoqa9eurXQsYCef+9znMm3atKxfvz7HHXdcRo4cWelIQJKTTz45q1evzmmnnZbW1tZMmDAhgwYNqnQs4E9OOumk/PKXv8w3vvGN9OvXL4ccckilI/ExGkquyQQAAKBALs0FAACgUApRAAAACqUQBQAAoFAKUQAAAAqlEAUAAKBQClEAAAAKpRAFAACgUP8PY2a5fuHPzeQAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result_geyer_m2.plot_marginals()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.769447329536\n", + "-0.759499297534\n", + "1.78765582317\n" + ] + } + ], + "source": [ + "print(result_geyer_m2.samples['a'].mean())\n", + "print(result_geyer_m2.samples['b'].mean())\n", + "\n", + "print(result_geyer_m2.samples['d'].mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "N = 1000\n", + "smc = elfi.SMC(m_2deg['dist'], batch_size=20000)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/scipy/stats/stats.py:934: RuntimeWarning:overflow encountered in square\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/scipy/stats/stats.py:936: RuntimeWarning:overflow encountered in multiply\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/scipy/stats/stats.py:1031: RuntimeWarning:overflow encountered in power\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/scipy/stats/stats.py:1031: RuntimeWarning:invalid value encountered in true_divide\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/ipykernel/__main__.py:16: RuntimeWarning:overflow encountered in square\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/elfi/methods/parameter_inference.py:563: RuntimeWarning:invalid value encountered in less_equal\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/numpy/core/_methods.py:112: RuntimeWarning:invalid value encountered in subtract\n", + " /u/26/dhakaa1/unix/anaconda2/envs/py35-elfi/lib/python3.5/site-packages/scipy/stats/stats.py:926: RuntimeWarning:invalid value encountered in subtract\n" + ] + } + ], + "source": [ + "# t = 0.1\n", + "N = 1000\n", + "thresholds = [.5, .25, .1]\n", + "result_geyer_smc = smc.sample(N, thresholds = thresholds)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.34185360397\n", + "11.5713095153\n", + "2.36235255385\n" + ] + } + ], + "source": [ + "print(result_geyer_smc.samples['a'].mean())\n", + "print(result_geyer_smc.samples['b'].mean())\n", + "\n", + "print(result_geyer_smc.samples['d'].mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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oh07dujiiy9WQ0ODhg0bZncsnIcV0S7o3XffVffu3fXSSy9p69atOnPmjN566y27YwH4kWPHjmnevHnasmWLAoGA/vrXv9odCcD3XnvtNf373//Wq6++qqKiIm3atEmVlZV2xwLwvddff10ffPCB/va3v2nFihX6/PPP7Y6EZrAi2gXddNNNiomJ0QsvvKDPPvtMR44c0TfffGN3LAA/kpSUpCuuuEKSNHbsWG3atIkVF8Ah9u3bpzvvvFM9evRQjx499Morr9gdCcCP7N27V2PGjFH37t0VGxurESNG2B0JzWBFtAvavn27Zs2apZ49e2r8+PG66aabZJqm3bEA/IjX+8P7hKZpnvM1AHudPx+PHTvGG7qAg3g8HhmG0fQ1r6HORBHtgvbs2aM777xT9913n/r27at9+/apoaHB7lgAfmT//v0qLy+XYRjavHmzfvnLX9odCcD3brrpJm3dulVnz57V6dOn9dBDD+n48eN2xwLwvV/84hd67bXXVFdXp//7v//Tv/71L7sjoRm8PdAFTZgwQbNmzdJrr72mHj166IYbbtCxY8fsjgXgR6688krl5uaqsrJSt9xyi1JTU+2OBOB7o0eP1sGDBzV+/HgZhqH7779fCQkJdscC8L1Ro0bpP//5j+6++2717dtXAwcOtDsSmuExuSYTAAAAAGAhLs0FAAAAAFiKIgoAAAAAsBRFFAAAAABgKYooAAAAAMBSFFEAAAAAgKUoogAAAAAAS1FEAQAAAACW+n/gbn2jBUOAeAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "result_geyer_smc.plot_marginals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Diagnostics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets come back to the original Ricker model and data and see if the additional summary measures are really helpful or not. Using the diagnostics tool, we can pin point the summary stats, which have the biggest role in obtaining data closer to the true observations." + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "theta_acc = result.samples_array" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(500, 3)\n" + ] + } + ], + "source": [ + "print(theta_acc.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# simulator = elfi.Simulator(fn_simulator, prior_t1, prior_t2, observed=y_obs)\n", + "\n", + "simulator = partial(ricker_stochastic, n_obs=n_obs)\n", + "sim_fn = partial(simulator, n_obs=n_obs)\n", + "true_params = [3.8, 0.3, 10.]\n", + "\n", + "y_obs = simulator(*true_params, n_obs=n_obs, random_state=np.random.RandomState(seed_obs))\n", + "m = elfi.ElfiModel()\n", + "elfi.Prior(stats.expon, np.e, 2, model=m, name='t1')\n", + "elfi.Prior(stats.truncnorm, 0, 5, model=m, name='t2')\n", + "elfi.Prior(stats.uniform, 0, 100, model=m, name='t3')\n", + "sim1 = elfi.Simulator(sim_fn, m['t1'], m['t2'], m['t3'], observed=y_obs, name='Rickersto')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For some reason which I dont fully understand, writing skew function as skew does not work, because I think it is already in the namespace, wrappint it with a function with a different name does the trick ." + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def ss_mean(x):\n", + " return np.mean(x, axis=1)\n", + "\n", + "def ss_var(x):\n", + " return np.var(x, axis=1)\n", + "\n", + "def ss_skew(x):\n", + " return stats.skew(x, axis=1)\n", + "\n", + "def ss_kurtosis(x):\n", + " return stats.kurtosis(x, axis=1)\n", + "\n", + "def num_zeros(x):\n", + " return np.sum(x==0, axis=1)\n", + "\n", + "def num_large(x, val=25):\n", + " return np.sum(x > val, axis=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "list_ss = []\n", + "list_ss.append(ss_mean)\n", + "list_ss.append(ss_var)\n", + "list_ss.append(num_zeros)\n", + "list_ss.append(num_large)\n", + "list_ss.append(ss_skew)\n", + "list_ss.append(ss_kurtosis)" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[, , , , , ]\n" + ] + } + ], + "source": [ + "print(list_ss)" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "diagnostics = TwoStageSelection(sim1, 'euclidean', list_ss=list_ss, seed=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "set_ss_2stage = diagnostics.run(n_sim=100000, batch_size=10000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observse that the mean function of the data and the simple function which calculates how many numbers are large in the dataset are the most influential summary stats in this study." + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(, )\n" + ] + } + ], + "source": [ + "print(set_ss_2stage)" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "list_ss_geyer = copy.deepcopy(list_ss)" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[, , , , , ]\n", + "[, , , , , ]\n" + ] + } + ], + "source": [ + "print(list_ss)\n", + "print(list_ss_geyer)" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 14. 19. 31. 60. 60. 98. 108. 127. 126. 96. 93. 76.\n", + " 63. 60. 68. 72. 97. 118. 123. 125. 78. 93. 68. 54.]]\n", + "24\n" + ] + } + ], + "source": [ + "print(Y_geyer)\n", + "n_obs = Y_geyer.size\n", + "print(n_obs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Diagnostics for the Geyer data and model. " + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sim_fn2 = partial(model_2_degree, n_obs=n_obs)\n", + "m = elfi.ElfiModel()\n", + "# sim_fn2 = partial(simulator, n_obs=n_obs)\n", + "\n", + "elfi.Prior(stats.truncnorm, 0, 10, model=m, name='a')\n", + "elfi.Prior(stats.norm, 0, 10, model=m, name='b')\n", + "elfi.Prior(stats.norm, 0, 5, model=m, name='c')\n", + "elfi.Prior(stats.uniform, 0.0001, 4, model=m, name='d')\n", + "sim_geyer = elfi.Simulator(sim_fn2, m['a'], m['b'], m['c'], m['d'], observed=Y_geyer, name='2degree1')" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "diagnostics_geyer = TwoStageSelection(sim_geyer, 'euclidean', list_ss=list_ss_geyer, seed=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "set_ss_2stage_geyer = diagnostics.run(n_sim=100000, batch_size=10000)" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(, )\n" + ] + } + ], + "source": [ + "print(set_ss_2stage_geyer)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "1. Michael U. Gutmann,Jukka Corander. Bayesian Optimization for Likelihood-Free Inference of Simulator-Based Statistical Models Journal of Machine Learning Research- JMLR 16 2015\n", + "2. Jean-Michel Marin, Pierre Pudlo, Christian P. Robert and Robin J. Ryder. Approximate Bayesian computational methods. Statistics and Computing 2011.\n", + "3. Jarno Lintusaari, Henri Vuollekoski, Antti Kangasrääsiö, Kusti Skytén, Marko Järvenpää, Michael Gutmann, Aki Vehtari, Jukka Corander and Samuel Kaski. ELFI: Engine for Likelihood Free Inference\n", + "4. Jarno Lintusaari, Michael Gutmann, Ritabratta Dutta, Samuel Kaski and Jukka Corander\n", + "Fundamentals and Recent Developments in Approximate Bayesian Computation. Oxford University Press 2017\n", + "5. Nunes, M. A., & Balding, D. J. (2010). On optimal selection of summary statistics for approximate Bayesian computation. Statistical applications in genetics and molecular biology, 9(1).\n", + "6. Blum, M. G., Nunes, M. A., Prangle, D., & Sisson, S. A. (2013). A comparative review of dimension reduction methods in approximate Bayesian computation. Statistical Science, 28(2), 189-208" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [conda env:py35-elfi]", + "language": "python", + "name": "conda-env-py35-elfi-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}