{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# $C$$O_2$ Mauna Loa Gaussian Process Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal of this notebook is to replicate the results from [chapter 5](http://www.gaussianprocess.org/gpml/chapters/RW5.pdf), p.118, of [Gaussian Processes for Machine Learning](http://www.gaussianprocess.org/gpml/chapters/)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I did not find a way on how to make [GPflow](https://github.com/GPflow/GPflow) perform this additive decomposition and therefore I decided to implement it by hand. In this set-up GPflow is used to find the correct parameters and the hand writte code is used to decompose the addtitive parts. \n",
"\n",
"There is currently work under-way to add this functionality to GPflow. For more details have a look at [Predicting component contributions #234](https://github.com/GPflow/GPflow/issues/234)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"from IPython.display import display_html"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
" from ._conv import register_converters as _register_converters\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Christian Schuhegger \n",
"last updated: 2018-05-05 \n",
"\n",
"CPython 3.6.4\n",
"IPython 6.2.1\n",
"\n",
"numpy 1.14.2\n",
"pandas 0.22.0\n",
"matplotlib 2.2.2\n",
"seaborn 0.8.1\n",
"gpflow 1.1.0\n",
"GPy 1.9.2\n",
"bokeh 0.12.15\n",
"statsmodels 0.8.0\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -a 'Christian Schuhegger' -u -d -v -p numpy,pandas,matplotlib,seaborn,gpflow,GPy,bokeh,statsmodels"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np, pandas as pd, matplotlib.pyplot as plt, seaborn as sns, gpflow"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use the [bokeh](https://bokeh.pydata.org/en/latest/) library to make the chart interactive and so that you can zoom in. The hints on how to use bokeh on these examples came from [Looking at the Keeling Curve with GPs in PyMC3](https://bwengals.github.io/looking-at-the-keeling-curve-with-gps-in-pymc3.html)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
"
\n",
"
Loading BokehJS ...\n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
"(function(root) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" var force = true;\n",
"\n",
" if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n",
" root._bokeh_onload_callbacks = [];\n",
" root._bokeh_is_loading = undefined;\n",
" }\n",
"\n",
" var JS_MIME_TYPE = 'application/javascript';\n",
" var HTML_MIME_TYPE = 'text/html';\n",
" var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
" var CLASS_NAME = 'output_bokeh rendered_html';\n",
"\n",
" /**\n",
" * Render data to the DOM node\n",
" */\n",
" function render(props, node) {\n",
" var script = document.createElement(\"script\");\n",
" node.appendChild(script);\n",
" }\n",
"\n",
" /**\n",
" * Handle when an output is cleared or removed\n",
" */\n",
" function handleClearOutput(event, handle) {\n",
" var cell = handle.cell;\n",
"\n",
" var id = cell.output_area._bokeh_element_id;\n",
" var server_id = cell.output_area._bokeh_server_id;\n",
" // Clean up Bokeh references\n",
" if (id !== undefined) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
"\n",
" if (server_id !== undefined) {\n",
" // Clean up Bokeh references\n",
" var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
" cell.notebook.kernel.execute(cmd, {\n",
" iopub: {\n",
" output: function(msg) {\n",
" var element_id = msg.content.text.trim();\n",
" Bokeh.index[element_id].model.document.clear();\n",
" delete Bokeh.index[element_id];\n",
" }\n",
" }\n",
" });\n",
" // Destroy server and session\n",
" var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
" cell.notebook.kernel.execute(cmd);\n",
" }\n",
" }\n",
"\n",
" /**\n",
" * Handle when a new output is added\n",
" */\n",
" function handleAddOutput(event, handle) {\n",
" var output_area = handle.output_area;\n",
" var output = handle.output;\n",
"\n",
" // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
" if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
" return\n",
" }\n",
"\n",
" var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
"\n",
" if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
" toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
" // store reference to embed id on output_area\n",
" output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
" }\n",
" if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
" var bk_div = document.createElement(\"div\");\n",
" bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
" var script_attrs = bk_div.children[0].attributes;\n",
" for (var i = 0; i < script_attrs.length; i++) {\n",
" toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
" }\n",
" // store reference to server id on output_area\n",
" output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
" }\n",
" }\n",
"\n",
" function register_renderer(events, OutputArea) {\n",
"\n",
" function append_mime(data, metadata, element) {\n",
" // create a DOM node to render to\n",
" var toinsert = this.create_output_subarea(\n",
" metadata,\n",
" CLASS_NAME,\n",
" EXEC_MIME_TYPE\n",
" );\n",
" this.keyboard_manager.register_events(toinsert);\n",
" // Render to node\n",
" var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
" render(props, toinsert[toinsert.length - 1]);\n",
" element.append(toinsert);\n",
" return toinsert\n",
" }\n",
"\n",
" /* Handle when an output is cleared or removed */\n",
" events.on('clear_output.CodeCell', handleClearOutput);\n",
" events.on('delete.Cell', handleClearOutput);\n",
"\n",
" /* Handle when a new output is added */\n",
" events.on('output_added.OutputArea', handleAddOutput);\n",
"\n",
" /**\n",
" * Register the mime type and append_mime function with output_area\n",
" */\n",
" OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
" /* Is output safe? */\n",
" safe: true,\n",
" /* Index of renderer in `output_area.display_order` */\n",
" index: 0\n",
" });\n",
" }\n",
"\n",
" // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
" if (root.Jupyter !== undefined) {\n",
" var events = require('base/js/events');\n",
" var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
"\n",
" if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
" register_renderer(events, OutputArea);\n",
" }\n",
" }\n",
"\n",
" \n",
" if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
" root._bokeh_timeout = Date.now() + 5000;\n",
" root._bokeh_failed_load = false;\n",
" }\n",
"\n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"\\n\"+\n",
" \"
\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"
\\n\"+\n",
" \"
\\n\"+\n",
" \"- re-rerun `output_notebook()` to attempt to load from CDN again, or
\\n\"+\n",
" \"- use INLINE resources instead, as so:
\\n\"+\n",
" \"
\\n\"+\n",
" \"
\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"\\n\"+\n",
" \"
\"}};\n",
"\n",
" function display_loaded() {\n",
" var el = document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\");\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS is loading...\";\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
" }\n",
" } else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }\n",
"\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
" }\n",
" finally {\n",
" delete root._bokeh_onload_callbacks\n",
" }\n",
" console.info(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(js_urls, callback) {\n",
" root._bokeh_onload_callbacks.push(callback);\n",
" if (root._bokeh_is_loading > 0) {\n",
" console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" root._bokeh_is_loading = js_urls.length;\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var s = document.createElement('script');\n",
" s.src = url;\n",
" s.async = false;\n",
" s.onreadystatechange = s.onload = function() {\n",
" root._bokeh_is_loading--;\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
" run_callbacks()\n",
" }\n",
" };\n",
" s.onerror = function() {\n",
" console.warn(\"failed to load library \" + url);\n",
" };\n",
" console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }\n",
" };var element = document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\");\n",
" if (element == null) {\n",
" console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'c68beea1-de6a-4796-96e0-44e89d53224a' but no matching script tag was found. \")\n",
" return false;\n",
" }\n",
"\n",
" var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.15.min.js\"];\n",
"\n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" Bokeh.set_log_level(\"info\");\n",
" },\n",
" \n",
" function(Bokeh) {\n",
" \n",
" },\n",
" function(Bokeh) {\n",
" console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.css\");\n",
" Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.css\");\n",
" console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.css\");\n",
" Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.css\");\n",
" console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.css\");\n",
" Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.css\");\n",
" }\n",
" ];\n",
"\n",
" function run_inline_js() {\n",
" \n",
" if ((root.Bokeh !== undefined) || (force === true)) {\n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i].call(root, root.Bokeh);\n",
" }if (force === true) {\n",
" display_loaded();\n",
" }} else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!root._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" root._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\")).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
"\n",
" }\n",
"\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(js_urls, function() {\n",
" console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
"}(window));"
],
"application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"\\n\"+\n \"
\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"
\\n\"+\n \"
\\n\"+\n \"- re-rerun `output_notebook()` to attempt to load from CDN again, or
\\n\"+\n \"- use INLINE resources instead, as so:
\\n\"+\n \"
\\n\"+\n \"
\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'c68beea1-de6a-4796-96e0-44e89d53224a' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.15.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.15.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.15.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"c68beea1-de6a-4796-96e0-44e89d53224a\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import bokeh.plotting, bokeh.models, bokeh.io, bokeh.palettes\n",
"bokeh.io.output_notebook()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We take the raw data from the statsmodels package:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/statsmodels/compat/pandas.py:56: FutureWarning:The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+-----+-----------------+\n",
"| co2 | R Documentation |\n",
"+-----+-----------------+\n",
"\n",
"Mauna Loa Atmospheric CO2 Concentration\n",
"---------------------------------------\n",
"\n",
"Description\n",
"~~~~~~~~~~~\n",
"\n",
"Atmospheric concentrations of CO\\ *2* are expressed in parts per million\n",
"(ppm) and reported in the preliminary 1997 SIO manometric mole fraction\n",
"scale.\n",
"\n",
"Usage\n",
"~~~~~\n",
"\n",
"::\n",
"\n",
" co2\n",
"\n",
"Format\n",
"~~~~~~\n",
"\n",
"A time series of 468 observations; monthly from 1959 to 1997.\n",
"\n",
"Details\n",
"~~~~~~~\n",
"\n",
"The values for February, March and April of 1964 were missing and have\n",
"been obtained by interpolating linearly between the values for January\n",
"and May of 1964.\n",
"\n",
"Source\n",
"~~~~~~\n",
"\n",
"Keeling, C. D. and Whorf, T. P., Scripps Institution of Oceanography\n",
"(SIO), University of California, La Jolla, California USA 92093-0220.\n",
"\n",
"ftp://cdiac.esd.ornl.gov/pub/maunaloa-co2/maunaloa.co2.\n",
"\n",
"References\n",
"~~~~~~~~~~\n",
"\n",
"Cleveland, W. S. (1993) *Visualizing Data*. New Jersey: Summit Press.\n",
"\n",
"Examples\n",
"~~~~~~~~\n",
"\n",
"::\n",
"\n",
" require(graphics)\n",
" plot(co2, ylab = expression(\"Atmospheric concentration of CO\"[2]),\n",
" las = 1)\n",
" title(main = \"co2 data set\")\n",
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" time | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1959.000000 | \n",
" 315.42 | \n",
"
\n",
" \n",
" | 1 | \n",
" 1959.083333 | \n",
" 316.31 | \n",
"
\n",
" \n",
" | 2 | \n",
" 1959.166667 | \n",
" 316.50 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1959.250000 | \n",
" 317.56 | \n",
"
\n",
" \n",
" | 4 | \n",
" 1959.333333 | \n",
" 318.13 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" time value\n",
"0 1959.000000 315.42\n",
"1 1959.083333 316.31\n",
"2 1959.166667 316.50\n",
"3 1959.250000 317.56\n",
"4 1959.333333 318.13"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The data used to be available at http://cdiac.esd.ornl.gov/ftp/trends/co2/maunaloa.co2, \n",
"# but now it seems that more up-to-date data can be found at \n",
"# ftp://ftp.cmdl.noaa.gov/ccg/co2/trends/co2_mm_mlo.txt\n",
"\n",
"import statsmodels.api as sm\n",
"\n",
"mauna_loa_atmospheric_CO2_concentration_data = sm.datasets.get_rdataset(\"CO2\")\n",
"\n",
"print(mauna_loa_atmospheric_CO2_concentration_data.__doc__)\n",
"\n",
"data1 = mauna_loa_atmospheric_CO2_concentration_data.data\n",
"data1.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will make the data available in two formats, as row vectors as lower case x and y and as column vectors as upper case X and Y."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"x = np.array(data1.time)\n",
"y = np.array(data1.value)\n",
"X = x.reshape(-1, 1)\n",
"Y = y.reshape(-1, 1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"9e7dea3a-7e53-4adb-860f-de48a96528c2\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"c1c4514e-0875-4bb5-8a71-d2b69125b1d2\",\"type\":\"HelpTool\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d339f45b-ce52-4718-8576-3a7bf5abeca4\",\"type\":\"BasicTicker\"}},\"id\":\"362d629c-32b3-44aa-ae77-ddba50c59293\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"19b83988-56a4-4434-a5e6-50df9896603a\",\"type\":\"ResetTool\"},{\"attributes\":{\"plot\":{\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e589876a-7d9f-445a-bfb5-901a52e34dd8\",\"type\":\"BasicTicker\"}},\"id\":\"d8ca2eda-96aa-4f59-b300-2a32660bf404\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"befbd8e7-f9d6-4a58-91c1-c11c9d3d5c35\",\"type\":\"SaveTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2f046dd5-98c3-4cf0-8deb-1ee5da4a0c8f\",\"type\":\"PanTool\"},{\"id\":\"5a13a4c0-c0fc-4d3a-ba75-cc4d69d692ea\",\"type\":\"WheelZoomTool\"},{\"id\":\"81df4ead-d10f-41cd-871e-e2bedb63f119\",\"type\":\"BoxZoomTool\"},{\"id\":\"befbd8e7-f9d6-4a58-91c1-c11c9d3d5c35\",\"type\":\"SaveTool\"},{\"id\":\"19b83988-56a4-4434-a5e6-50df9896603a\",\"type\":\"ResetTool\"},{\"id\":\"c1c4514e-0875-4bb5-8a71-d2b69125b1d2\",\"type\":\"HelpTool\"}]},\"id\":\"b6c3e9f8-9787-4746-92e9-fbc695b560e4\",\"type\":\"Toolbar\"},{\"attributes\":{\"overlay\":{\"id\":\"d0fbcb9a-6068-492a-b983-6bfd6b7a8943\",\"type\":\"BoxAnnotation\"}},\"id\":\"81df4ead-d10f-41cd-871e-e2bedb63f119\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"d339f45b-ce52-4718-8576-3a7bf5abeca4\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"5a13a4c0-c0fc-4d3a-ba75-cc4d69d692ea\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"plot\":null,\"text\":\"Fit to the Mauna Loa Data\"},\"id\":\"bf434c69-188a-4edc-b308-89024bd5bb40\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"b86907d1-ac1f-40e2-a620-6469193a3e6d\",\"type\":\"ColumnDataSource\"}},\"id\":\"e8b8cb5a-93fd-4dc7-bb95-6b0429e75e7c\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"b86907d1-ac1f-40e2-a620-6469193a3e6d\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ee0ff5e4-47f0-429b-9d2e-63ad6ba1d730\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d9af718e-61c9-4d05-b499-633feafd0d2a\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"e8b8cb5a-93fd-4dc7-bb95-6b0429e75e7c\",\"type\":\"CDSView\"}},\"id\":\"2627445b-2537-4d3e-8fc7-4a30f7d83c89\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2f046dd5-98c3-4cf0-8deb-1ee5da4a0c8f\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[468]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[468]}},\"selected\":null,\"selection_policy\":null},\"id\":\"b86907d1-ac1f-40e2-a620-6469193a3e6d\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"below\":[{\"id\":\"d019aab0-7cda-42b2-88cc-1f9d28108f73\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"70d927c0-c415-496b-862d-2c821479840d\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"d019aab0-7cda-42b2-88cc-1f9d28108f73\",\"type\":\"LinearAxis\"},{\"id\":\"d8ca2eda-96aa-4f59-b300-2a32660bf404\",\"type\":\"Grid\"},{\"id\":\"70d927c0-c415-496b-862d-2c821479840d\",\"type\":\"LinearAxis\"},{\"id\":\"362d629c-32b3-44aa-ae77-ddba50c59293\",\"type\":\"Grid\"},{\"id\":\"d0fbcb9a-6068-492a-b983-6bfd6b7a8943\",\"type\":\"BoxAnnotation\"},{\"id\":\"1cf9844b-3838-4131-b363-9faaf09e1089\",\"type\":\"Legend\"},{\"id\":\"2627445b-2537-4d3e-8fc7-4a30f7d83c89\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"bf434c69-188a-4edc-b308-89024bd5bb40\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"b6c3e9f8-9787-4746-92e9-fbc695b560e4\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"3cf3c8ba-dfa1-4132-bd96-954c89e5ba81\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"128c7fc1-6bee-4624-b77a-cd16203fac2a\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"06f150fe-da81-4a67-837a-41c59a634cdc\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"baf3d214-829e-437c-b89f-8cba702dd3bc\",\"type\":\"LinearScale\"}},\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d9af718e-61c9-4d05-b499-633feafd0d2a\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ee0ff5e4-47f0-429b-9d2e-63ad6ba1d730\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"d0fbcb9a-6068-492a-b983-6bfd6b7a8943\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis_label\":\"CO2 [ppm]\",\"formatter\":{\"id\":\"835090b4-c5e4-4363-add8-1e317b8b40d2\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d339f45b-ce52-4718-8576-3a7bf5abeca4\",\"type\":\"BasicTicker\"}},\"id\":\"70d927c0-c415-496b-862d-2c821479840d\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e589876a-7d9f-445a-bfb5-901a52e34dd8\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"81085101-c574-47cf-a397-ff027a5eef43\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e589876a-7d9f-445a-bfb5-901a52e34dd8\",\"type\":\"BasicTicker\"}},\"id\":\"d019aab0-7cda-42b2-88cc-1f9d28108f73\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"81085101-c574-47cf-a397-ff027a5eef43\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"baf3d214-829e-437c-b89f-8cba702dd3bc\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"835090b4-c5e4-4363-add8-1e317b8b40d2\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"06f150fe-da81-4a67-837a-41c59a634cdc\",\"type\":\"DataRange1d\"},{\"attributes\":{\"items\":[{\"id\":\"c2dcc5ef-e4b1-4497-b5af-ed6ee33e0500\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"1cf9844b-3838-4131-b363-9faaf09e1089\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"128c7fc1-6bee-4624-b77a-cd16203fac2a\",\"type\":\"LinearScale\"},{\"attributes\":{\"label\":{\"value\":\"Observed data\"},\"renderers\":[{\"id\":\"2627445b-2537-4d3e-8fc7-4a30f7d83c89\",\"type\":\"GlyphRenderer\"}]},\"id\":\"c2dcc5ef-e4b1-4497-b5af-ed6ee33e0500\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null},\"id\":\"3cf3c8ba-dfa1-4132-bd96-954c89e5ba81\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"52911efc-f359-4ff6-9a88-84aa0e4d737c\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"9e7dea3a-7e53-4adb-860f-de48a96528c2\",\"elementid\":\"f80efd8f-683f-4ea8-8bcc-a82feaf59242\",\"modelid\":\"52911efc-f359-4ff6-9a88-84aa0e4d737c\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "52911efc-f359-4ff6-9a88-84aa0e4d737c"
}
},
"output_type": "display_data"
}
],
"source": [
"p = bokeh.plotting.figure(title=\"Fit to the Mauna Loa Data\", #x_axis_type='datetime', \n",
" plot_width=900, plot_height=600)\n",
"p.yaxis.axis_label = 'CO2 [ppm]'\n",
"p.xaxis.axis_label = 'Date'\n",
"\n",
"# true value\n",
"p.circle(x, y, color=\"black\", legend=\"Observed data\")\n",
"p.legend.location = \"top_left\"\n",
"bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Please use the GUI elements on the right top of the graph for moving and zooming into the graph."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As GPflow performs some optimization procedure to find the best fit parameters we will set-up the different aspects of the kernel functions with good starting points taken from [chapter 5](http://www.gaussianprocess.org/gpml/chapters/RW5.pdf) of [Gaussian Processes for Machine Learning](http://www.gaussianprocess.org/gpml/chapters/). In principle you could use arbitrary starting point values and it is the job of GPflow to find the best fit parameters."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As in [chapter 5](http://www.gaussianprocess.org/gpml/chapters/RW5.pdf) of [Gaussian Processes for Machine Learning](http://www.gaussianprocess.org/gpml/chapters/) we create the total fit as an additive composition of different aspects. \n",
"\n",
"* $k_1$ models a long term trend. \n",
"* $k_2$ models the seasonal variation due to the vegetation changes due to the seasons in the northern hemisphere. \n",
"* $k_3$ I will not include, as GPflow does not provide out of the box a rational quadratic kernel function. But we will see that this does not hurt us too much. \n",
"* $k_4$ finally is the short term variations plus some \"white noise\". \n",
"\n",
"To be honest, I am not sure why $k_4$ includes the white noise at all, because in principle the gaussian process provides this white noise by default via the $\\sigma_n$ parameter (see [Gaussian Process Parameter Effects](https://github.com/cs224/dev-meetup-gaussian-processes) for details), which is called `m.likelihood.variance` in GPflow."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"k1_ = gpflow.kernels.RBF(1, variance=(66.0 ** 2), lengthscales=67.0)\n",
"k2_exp_sine_squred_gamma= 2.0 / 1.3 ** 2.0\n",
"k2_exp_sine_squred_period = 1.0\n",
"k2_ = gpflow.kernels.RBF(1, variance=(2.4 ** 2.0), lengthscales=90.0) * gpflow.kernels.Periodic(1, period=k2_exp_sine_squred_period, variance=1.0, lengthscales=1.0/k2_exp_sine_squred_gamma)\n",
"# k3 = how to do a rational quadratic term in GPflow?\n",
"k4_ = gpflow.kernels.RBF(1, variance=(0.18 ** 2), lengthscales=1.6) + gpflow.kernels.White(1, variance=0.19)\n",
"k1 = k1_\n",
"k2 = k2_\n",
"k4 = k4_\n",
"kernel = k1 + k2 + k4\n",
"k_ = kernel"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/gpflow/densities.py:89: UserWarning:Shape of x must be 2D at computation.\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" class | \n",
" prior | \n",
" transform | \n",
" trainable | \n",
" shape | \n",
" fixed_shape | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" | GPR/kern/rbf_1/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 4356.0 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_1/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 67.0 | \n",
"
\n",
" \n",
" | GPR/kern/product/rbf/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 5.76 | \n",
"
\n",
" \n",
" | GPR/kern/product/rbf/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 90.0 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 1.0 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.8450000000000001 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/period | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 1.0 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_2/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.0324 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_2/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 1.6 | \n",
"
\n",
" \n",
" | GPR/kern/white/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.19 | \n",
"
\n",
" \n",
" | GPR/likelihood/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.01 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" class prior transform trainable \\\n",
"GPR/kern/rbf_1/variance Parameter None +ve True \n",
"GPR/kern/rbf_1/lengthscales Parameter None +ve True \n",
"GPR/kern/product/rbf/variance Parameter None +ve True \n",
"GPR/kern/product/rbf/lengthscales Parameter None +ve True \n",
"GPR/kern/product/periodic/variance Parameter None +ve True \n",
"GPR/kern/product/periodic/lengthscales Parameter None +ve True \n",
"GPR/kern/product/periodic/period Parameter None +ve True \n",
"GPR/kern/rbf_2/variance Parameter None +ve True \n",
"GPR/kern/rbf_2/lengthscales Parameter None +ve True \n",
"GPR/kern/white/variance Parameter None +ve True \n",
"GPR/likelihood/variance Parameter None +ve True \n",
"\n",
" shape fixed_shape value \n",
"GPR/kern/rbf_1/variance () True 4356.0 \n",
"GPR/kern/rbf_1/lengthscales () True 67.0 \n",
"GPR/kern/product/rbf/variance () True 5.76 \n",
"GPR/kern/product/rbf/lengthscales () True 90.0 \n",
"GPR/kern/product/periodic/variance () True 1.0 \n",
"GPR/kern/product/periodic/lengthscales () True 0.8450000000000001 \n",
"GPR/kern/product/periodic/period () True 1.0 \n",
"GPR/kern/rbf_2/variance () True 0.0324 \n",
"GPR/kern/rbf_2/lengthscales () True 1.6 \n",
"GPR/kern/white/variance () True 0.19 \n",
"GPR/likelihood/variance () True 0.01 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = gpflow.models.GPR(X, Y, kern=kernel)\n",
"m.likelihood.variance = 0.01\n",
"m.as_pandas_table()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Optimization terminated with:\n",
" Message: b'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH'\n",
" Objective function value: 129.032561\n",
" Number of iterations: 91\n",
" Number of functions evaluations: 133\n",
"CPU times: user 3.69 s, sys: 447 ms, total: 4.14 s\n",
"Wall time: 3.08 s\n"
]
}
],
"source": [
"%%time\n",
"opt = gpflow.train.ScipyOptimizer()\n",
"opt.minimize(m)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" class | \n",
" prior | \n",
" transform | \n",
" trainable | \n",
" shape | \n",
" fixed_shape | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" | GPR/kern/rbf_1/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 4356.219071780713 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_1/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 48.565715481551585 | \n",
"
\n",
" \n",
" | GPR/kern/product/rbf/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 5.64144286809577 | \n",
"
\n",
" \n",
" | GPR/kern/product/rbf/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 91.88714901784704 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 1.026393528093981 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.6709642212683404 | \n",
"
\n",
" \n",
" | GPR/kern/product/periodic/period | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.9997023123140168 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_2/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.16043370929892875 | \n",
"
\n",
" \n",
" | GPR/kern/rbf_2/lengthscales | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.32753755974365617 | \n",
"
\n",
" \n",
" | GPR/kern/white/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.03193821948646309 | \n",
"
\n",
" \n",
" | GPR/likelihood/variance | \n",
" Parameter | \n",
" None | \n",
" +ve | \n",
" True | \n",
" () | \n",
" True | \n",
" 0.010237414042966209 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" class prior transform trainable \\\n",
"GPR/kern/rbf_1/variance Parameter None +ve True \n",
"GPR/kern/rbf_1/lengthscales Parameter None +ve True \n",
"GPR/kern/product/rbf/variance Parameter None +ve True \n",
"GPR/kern/product/rbf/lengthscales Parameter None +ve True \n",
"GPR/kern/product/periodic/variance Parameter None +ve True \n",
"GPR/kern/product/periodic/lengthscales Parameter None +ve True \n",
"GPR/kern/product/periodic/period Parameter None +ve True \n",
"GPR/kern/rbf_2/variance Parameter None +ve True \n",
"GPR/kern/rbf_2/lengthscales Parameter None +ve True \n",
"GPR/kern/white/variance Parameter None +ve True \n",
"GPR/likelihood/variance Parameter None +ve True \n",
"\n",
" shape fixed_shape \\\n",
"GPR/kern/rbf_1/variance () True \n",
"GPR/kern/rbf_1/lengthscales () True \n",
"GPR/kern/product/rbf/variance () True \n",
"GPR/kern/product/rbf/lengthscales () True \n",
"GPR/kern/product/periodic/variance () True \n",
"GPR/kern/product/periodic/lengthscales () True \n",
"GPR/kern/product/periodic/period () True \n",
"GPR/kern/rbf_2/variance () True \n",
"GPR/kern/rbf_2/lengthscales () True \n",
"GPR/kern/white/variance () True \n",
"GPR/likelihood/variance () True \n",
"\n",
" value \n",
"GPR/kern/rbf_1/variance 4356.219071780713 \n",
"GPR/kern/rbf_1/lengthscales 48.565715481551585 \n",
"GPR/kern/product/rbf/variance 5.64144286809577 \n",
"GPR/kern/product/rbf/lengthscales 91.88714901784704 \n",
"GPR/kern/product/periodic/variance 1.026393528093981 \n",
"GPR/kern/product/periodic/lengthscales 0.6709642212683404 \n",
"GPR/kern/product/periodic/period 0.9997023123140168 \n",
"GPR/kern/rbf_2/variance 0.16043370929892875 \n",
"GPR/kern/rbf_2/lengthscales 0.32753755974365617 \n",
"GPR/kern/white/variance 0.03193821948646309 \n",
"GPR/likelihood/variance 0.010237414042966209 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m.as_pandas_table()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create a visualization of the fitted overall model. I will only plot the fit between 1990 and 2000, to on the one hand show how nicely the regression curve fits the existing data points and to show how gaussian processes can be used to predict the near term future behaviour together with some confidence interval."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"xx = np.linspace(1990, 2000, 1000).reshape(-1,1)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"def plot(m, with_data=True):\n",
" if not isinstance(m, list):\n",
" m = [m]\n",
" predictions = [model.predict_y(xx) for model in m]\n",
" \n",
" p = bokeh.plotting.figure(title=\"Fit to the Mauna Loa Data\", #x_axis_type='datetime', \n",
" plot_width=900, plot_height=600)\n",
" p.yaxis.axis_label = 'CO2 [ppm]'\n",
" p.xaxis.axis_label = 'Date'\n",
" \n",
" if with_data:\n",
" # true value\n",
" p.circle(x, y, color=\"black\", legend=\"Observed data\")\n",
" for mean, var in predictions:\n",
" xpts = xx[:,0]\n",
" p.line(xpts, mean[:,0], line_width=1)\n",
" lowerband = mean[:,0] - 2*np.sqrt(var[:,0])\n",
" upperband = mean[:,0] + 2*np.sqrt(var[:,0])\n",
" band_x = np.append(xpts, xpts[::-1])\n",
" band_y = np.append(lowerband, upperband[::-1])\n",
" p.patch(band_x, band_y, color='#7570B3', fill_alpha=0.2)\n",
" p.legend.location = \"top_left\"\n",
" bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see in the below figure the complete model matches nicely."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"2da83df9-eedd-4938-b619-a53890695bec\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"a4d0893a-e6e7-4581-863c-13e71a7d3be2\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d08bd344-7ce3-410f-972c-6c175ef5b1ae\",\"type\":\"BasicTicker\"}},\"id\":\"e8d4583c-5ba8-44cc-b7a9-e94dc77960e8\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"65ec9ce5-d513-4eda-b033-1f1fee592eb3\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"d08bd344-7ce3-410f-972c-6c175ef5b1ae\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"a960e156-97da-40a2-9f21-09e2b2915a81\",\"type\":\"PanTool\"},{\"id\":\"bf1a55d5-3fc0-4cb4-ad0a-540642960cae\",\"type\":\"WheelZoomTool\"},{\"id\":\"c98ed067-46d3-4255-bd4e-09cc80dc7eff\",\"type\":\"BoxZoomTool\"},{\"id\":\"fee132bb-ca8f-45aa-9185-7eb154503e9d\",\"type\":\"SaveTool\"},{\"id\":\"3bb0d64a-50a1-4b1f-bc03-8f4a320eb8cc\",\"type\":\"ResetTool\"},{\"id\":\"026ba89e-cdd6-4092-975a-726a84cecf71\",\"type\":\"HelpTool\"}]},\"id\":\"db194911-ab96-4a6b-ba20-4a51ceeeaba4\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"497656be-7ee5-4004-a4be-17134efa28f0\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":null,\"text\":\"Fit to the Mauna Loa Data\"},\"id\":\"31c25238-4fee-4f39-87c4-96f7320dff3d\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"0f2cc2e7-5bff-4792-892f-870e5b6862e9\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"bd424538-a783-4683-9086-d2a511ed59cf\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"75dd7495-9532-4e3a-b80a-298fdd42278e\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[468]},\"y\":{\"__ndarray__\":\"H4XrUbi2c0ApXI/C9cRzQAAAAAAAyHNAKVyPwvXYc0CuR+F6FOJzQAAAAAAA4HNACtejcD3Gc0BmZmZmZqpzQHsUrkfhmnNAexSuR+GSc0DD9Shcj6pzQHsUrkfhtnNAuB6F61HEc0ApXI/C9cxzQB+F61G41nNAUrgehevtc0BSuB6F6/1zQHsUrkfh9nNAXI/C9Sjgc0CkcD0K17tzQAAAAAAAoHNAexSuR+Gac0A9CtejcK1zQBSuR+F6wHNASOF6FK7Lc0BxPQrXo9hzQK5H4XoU5nNAKVyPwvX0c0AfhetRuAZ0QPYoXI/C+XNAH4XrUbjmc0CuR+F6FMpzQOF6FK5HrXNAw/UoXI+yc0DXo3A9Cr9zQJqZmZmZzXNAFK5H4Xrcc0BmZmZmZuZzQBSuR+F6+HNAH4XrUbgGdECamZmZmQ10QDMzMzMzB3RAMzMzMzP3c0AAAAAAANRzQPYoXI/CwXNAuB6F61G0c0AUrkfheshzQBSuR+F62HNA4XoUrkfpc0AfhetRuO5zQDMzMzMz+3NA7FG4HoUTdEDhehSuRyF0QClcj8L1FHRA4XoUrkf5c0D2KFyPwtlzQM3MzMzMwHNA4XoUrke9c0DD9Shcj85zQDMzMzMz43NAw/UoXI/2c0CF61G4HgF0QKRwPQrXC3RAZmZmZmYWdEApXI/C9SB0QEjhehSuG3RAuB6F61EEdEBxPQrXo+hzQHE9CtejyHNAj8L1KFzLc0AUrkfhethzQM3MzMzM6HNAuB6F61H0c0AUrkfhegR0QEjhehSuC3RA7FG4HoUfdEAAAAAAACB0QI/C9ShcG3RAzczMzMwQdECPwvUoXOtzQMP1KFyP2nNACtejcD3Sc0AzMzMzM+tzQAAAAAAA9HNAj8L1KFwHdEB7FK5H4RZ0QEjhehSuI3RAcT0K16M4dEDD9Shcjz50QD0K16NwOXRApHA9CtcjdEAzMzMzMwN0QEjhehSu53NA16NwPQrfc0CuR+F6FPpzQFK4HoXrDXRAH4XrUbgidEA9CtejcCV0QK5H4XoULnRAAAAAAABEdEDhehSuR010QHsUrkfhPnRArkfhehQmdEBcj8L1KAx0QJqZmZmZ8XNApHA9Ctfzc0ApXI/C9Qh0QM3MzMzMHHRAZmZmZmYmdECkcD0K1y90QEjhehSuO3RA9ihcj8JNdEBmZmZmZlZ0QDMzMzMzU3RASOF6FK4/dEAzMzMzMx90QHsUrkfhAnRAPQrXo3ABdEDD9ShcjxJ0QKRwPQrXK3RA4XoUrkc9dEBcj8L1KER0QOxRuB6FV3RAAAAAAABodECPwvUoXHN0QHE9CtejaHRA7FG4HoVbdEAAAAAAADh0QOxRuB6FI3RAUrgehesZdEDXo3A9Cit0QDMzMzMzP3RACtejcD1OdECF61G4Hl10QLgehetRbHRA7FG4HoV/dEDD9Shcj350QAAAAAAAeHRAexSuR+FidEAUrkfhekh0QHsUrkfhLnRAZmZmZmYudECamZmZmT10QI/C9ShcT3RAXI/C9ShgdEBcj8L1KGh0QFyPwvUocHRAUrgehet5dEBcj8L1KIx0QGZmZmZmhnRAMzMzMzNzdEC4HoXrUVR0QDMzMzMzM3RAZmZmZmY2dECuR+F6FEp0QJqZmZmZXXRAmpmZmZlpdEDsUbgehXd0QOF6FK5HeXRAKVyPwvWYdEBmZmZmZp50QB+F61G4jnRArkfhehR+dEDD9Shcj2J0QHsUrkfhSnRAcT0K16NQdEA9CtejcGV0QArXo3A9dnRAUrgeheuFdEBmZmZmZpZ0QArXo3A9onRA4XoUrke1dEApXI/C9cR0QGZmZmZmvnRAMzMzMzOrdEBmZmZmZpJ0QJqZmZmZdXRAuB6F61FwdECkcD0K1390QEjhehSuh3RAexSuR+GSdEDNzMzMzKh0QIXrUbgetXRASOF6FK7HdEAfhetRuM50QOF6FK5HwXRAXI/C9SiwdEBI4XoUrpN0QLgehetRdHRAj8L1KFxzdEBxPQrXo4R0QMP1KFyPlnRASOF6FK6jdEAAAAAAALR0QFK4HoXrvXRACtejcD3SdEDNzMzMzNx0QHsUrkfh1nRASOF6FK67dEBmZmZmZp50QGZmZmZmhnRAH4XrUbiCdECF61G4HpV0QD0K16NwqXRA4XoUrke5dEAK16NwPcZ0QOF6FK5H1XRAw/UoXI/mdECPwvUoXOt0QB+F61G44nRACtejcD3OdEC4HoXrUax0QArXo3A9knRAFK5H4XqMdEAK16NwPaJ0QLgehetRuHRAAAAAAADMdECkcD0K19N0QBSuR+F66HRAZmZmZmb+dECF61G4Hgl1QJqZmZmZAXVAXI/C9SjsdEA9CtejcMl0QB+F61G4tnRASOF6FK6vdECkcD0K18N0QHsUrkfh2nRAzczMzMzsdEDsUbgehfN0QOxRuB6FB3VAPQrXo3AZdUA9CtejcB11QOxRuB6FG3VAUrgehesFdUBcj8L1KOh0QJqZmZmZyXRArkfhehTGdEAAAAAAANx0QBSuR+F67HRAzczMzMwAdUA9CtejcAl1QHE9CtejHHVAj8L1KFwrdUDNzMzMzDR1QFK4HoXrMXVAKVyPwvUYdUAfhetRuP50QAAAAAAA3HRAMzMzMzPbdEBSuB6F6/F0QClcj8L1CHVAPQrXo3AddUDXo3A9CiN1QMP1KFyPPnVAmpmZmZlJdUBxPQrXo1R1QAAAAAAAUHVACtejcD02dUB7FK5H4RZ1QOxRuB6F+3RAPQrXo3D9dEB7FK5H4Q51QHE9CtejIHVAKVyPwvUwdUDNzMzMzER1QI/C9ShcU3VA4XoUrkdldUCkcD0K12t1QOF6FK5HYXVAhetRuB5FdUBcj8L1KCR1QLgehetRCHVAexSuR+EKdUDXo3A9CiN1QNejcD0KN3VAhetRuB5JdUDXo3A9Cld1QBSuR+F6aHVACtejcD12dUCPwvUoXH91QHsUrkfhcnVArkfhehRedUBmZmZmZjp1QClcj8L1HHVA16NwPQobdUA9CtejcDF1QIXrUbgeRXVAMzMzMzNTdUCamZmZmWV1QHsUrkfhbnVAuB6F61GMdUDhehSuR5l1QArXo3A9knVAKVyPwvV8dUCPwvUoXGN1QNejcD0KO3VAhetRuB49dUBI4XoUrk91QIXrUbgebXVAuB6F61F4dUDhehSuR4V1QPYoXI/CkXVArkfhehSudUAAAAAAALR1QFK4HoXrqXVA7FG4HoWTdUD2KFyPwnF1QGZmZmZmTnVAexSuR+FSdUDNzMzMzGx1QHE9CtejgHVAcT0K16OMdUCF61G4Hp11QAAAAAAAtHVAH4XrUbjCdUCkcD0K18t1QIXrUbgewXVArkfhehSmdUBcj8L1KIh1QB+F61G4bnVAUrgehetpdUApXI/C9YB1QK5H4XoUlnVA9ihcj8KhdUAUrkfheqx1QHsUrkfhunVAUrgehevVdUAUrkfheuB1QFK4HoXr1XVAXI/C9Si8dUBI4XoUrpt1QHsUrkfhinVApHA9Ctd/dUBI4XoUrpd1QOxRuB6Fq3VAPQrXo3C9dUBxPQrXo8R1QEjhehSu03VAzczMzMzsdUDD9Shcj/p1QIXrUbge8XVA4XoUrkfVdUAfhetRuL51QLgehetRpHVAexSuR+GidUAK16NwPbp1QBSuR+F6zHVAAAAAAADkdUBxPQrXo/h1QM3MzMzMAHZAw/UoXI8WdkBxPQrXoyB2QFK4HoXrGXZA7FG4HoUDdkC4HoXrUeR1QM3MzMzMyHVA7FG4HoXLdUDD9Shcj951QHsUrkfh8nVAmpmZmZkJdkAfhetRuA52QBSuR+F6GHZAXI/C9Sg0dkC4HoXrUTh2QOxRuB6FL3ZAAAAAAAAcdkC4HoXrUfh1QArXo3A92nVA4XoUrkfddUAK16NwPfJ1QFK4HoXrBXZAAAAAAAAYdkDNzMzMzCh2QEjhehSuM3ZAcT0K16NAdkAAAAAAAFB2QIXrUbgeQXZAH4XrUbgqdkBcj8L1KAx2QIXrUbge7XVAcT0K16PwdUDXo3A9Cgt2QIXrUbgeIXZAPQrXo3ApdkCuR+F6FDp2QBSuR+F6UHZASOF6FK5ndkDsUbgehXN2QFK4HoXrYXZAKVyPwvVAdkAfhetRuB52QM3MzMzMAHZA9ihcj8IBdkAK16NwPRp2QArXo3A9LnZArkfhehQ+dkCuR+F6FEp2QOxRuB6FW3ZAhetRuB5xdkDhehSuR3l2QB+F61G4cnZA16NwPQpPdkAfhetRuC52QNejcD0KD3ZASOF6FK4TdkA9CtejcCF2QOF6FK5HNXZArkfhehRKdkCamZmZmVF2QIXrUbgeZXZAw/UoXI92dkBI4XoUroN2QM3MzMzMeHZAFK5H4XpYdkBI4XoUrjd2QB+F61G4GnZAMzMzMzMfdkDNzMzMzDR2QBSuR+F6THZAPQrXo3BldkAK16NwPW52QDMzMzMzf3ZAAAAAAACUdkAfhetRuJp2QNejcD0Kj3ZAzczMzMx4dkCkcD0K11d2QD0K16NwPXZAAAAAAABAdkA9CtejcFl2QM3MzMzMcHZASOF6FK5/dkAUrkfhepB2QMP1KFyPmnZASOF6FK63dkCF61G4Hr12QM3MzMzMtHZA16NwPQqfdkAAAAAAAHh2QPYoXI/CYXZAzczMzMxcdkD2KFyPwnl2QKRwPQrXi3ZAPQrXo3ChdkBxPQrXo7R2QClcj8L1wHZAXI/C9SjMdkAzMzMzM9d2QFyPwvUo0HZAMzMzMzO7dkBxPQrXo5h2QFyPwvUoeHZAZmZmZmZ6dkDNzMzMzIx2QK5H4XoUpnZASOF6FK6zdkApXI/C9cB2QPYoXI/CyXZAZmZmZmbmdkA9CtejcO12QHsUrkfh2nZAuB6F61HIdkCF61G4Hql2QKRwPQrXg3ZA4XoUrkeNdkCkcD0K16d2QD0K16NwxXZA\",\"dtype\":\"float64\",\"shape\":[468]}},\"selected\":null,\"selection_policy\":null},\"id\":\"45a8a6db-05f1-4c2b-a829-5a5562d3c64b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"a960e156-97da-40a2-9f21-09e2b2915a81\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"45a8a6db-05f1-4c2b-a829-5a5562d3c64b\",\"type\":\"ColumnDataSource\"}},\"id\":\"d92e8c0d-2c63-4003-a660-65776f2dfa93\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"bf1a55d5-3fc0-4cb4-ad0a-540642960cae\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"75dd7495-9532-4e3a-b80a-298fdd42278e\",\"type\":\"BoxAnnotation\"}},\"id\":\"c98ed067-46d3-4255-bd4e-09cc80dc7eff\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"026ba89e-cdd6-4092-975a-726a84cecf71\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"fee132bb-ca8f-45aa-9185-7eb154503e9d\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"3bb0d64a-50a1-4b1f-bc03-8f4a320eb8cc\",\"type\":\"ResetTool\"},{\"attributes\":{\"label\":{\"value\":\"Observed data\"},\"renderers\":[{\"id\":\"0bb2b20f-3393-4858-aa06-5e2747c8c857\",\"type\":\"GlyphRenderer\"}]},\"id\":\"6f927090-91ab-44c5-9bf3-4196780bb1c7\",\"type\":\"LegendItem\"},{\"attributes\":{\"items\":[{\"id\":\"6f927090-91ab-44c5-9bf3-4196780bb1c7\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"e44a9012-cf53-412b-877a-2df7ddf128f8\",\"type\":\"Legend\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b59ccf8c-6d85-4f28-a9fe-f15c9a196d05\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"e7880245-349e-47f9-9477-6cbd3cf0dfc9\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4e8df4b6-ec5d-40b1-ae32-38386e34608c\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"88914ac8-2ad0-4f2b-9a34-a9daed75e9aa\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"04f76069-4189-4e76-822d-c0fbdd24b123\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"81fbf5c8-0d20-4590-a040-ac8f7559c34f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[2000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[2000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"52ad0d6c-860c-41d4-bbc2-be74a36fc5eb\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3a5882b1-b3e6-4f75-969a-d3db0da9734e\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"0f2cc2e7-5bff-4792-892f-870e5b6862e9\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"65ec9ce5-d513-4eda-b033-1f1fee592eb3\",\"type\":\"BasicTicker\"}},\"id\":\"8673ac62-31d0-4485-b9b0-3f03ea967132\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":0.2,\"fill_color\":\"#7570B3\",\"line_color\":\"#7570B3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d95c2f21-370b-4926-a71d-b8ac1fbe7eae\",\"type\":\"Patch\"},{\"attributes\":{\"data_source\":{\"id\":\"81fbf5c8-0d20-4590-a040-ac8f7559c34f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4e8df4b6-ec5d-40b1-ae32-38386e34608c\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"3a5882b1-b3e6-4f75-969a-d3db0da9734e\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"64ff2443-9a79-4847-bee3-7cc608385177\",\"type\":\"CDSView\"}},\"id\":\"09f5e745-bee3-4774-a946-6558c942ce3a\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"81fbf5c8-0d20-4590-a040-ac8f7559c34f\",\"type\":\"ColumnDataSource\"}},\"id\":\"64ff2443-9a79-4847-bee3-7cc608385177\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":0.1,\"fill_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"833d3325-473a-4983-a0e4-ac61e4e8b206\",\"type\":\"Patch\"},{\"attributes\":{\"plot\":{\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"65ec9ce5-d513-4eda-b033-1f1fee592eb3\",\"type\":\"BasicTicker\"}},\"id\":\"c5df5f22-dd59-4b16-bef8-5e9b72ab0274\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"52ad0d6c-860c-41d4-bbc2-be74a36fc5eb\",\"type\":\"ColumnDataSource\"}},\"id\":\"afe8f310-9fac-4ddf-80fb-799dcfabd2b6\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"8673ac62-31d0-4485-b9b0-3f03ea967132\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"77571216-de7e-43d9-9c9c-d29e826f5127\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"8673ac62-31d0-4485-b9b0-3f03ea967132\",\"type\":\"LinearAxis\"},{\"id\":\"c5df5f22-dd59-4b16-bef8-5e9b72ab0274\",\"type\":\"Grid\"},{\"id\":\"77571216-de7e-43d9-9c9c-d29e826f5127\",\"type\":\"LinearAxis\"},{\"id\":\"e8d4583c-5ba8-44cc-b7a9-e94dc77960e8\",\"type\":\"Grid\"},{\"id\":\"75dd7495-9532-4e3a-b80a-298fdd42278e\",\"type\":\"BoxAnnotation\"},{\"id\":\"e44a9012-cf53-412b-877a-2df7ddf128f8\",\"type\":\"Legend\"},{\"id\":\"0bb2b20f-3393-4858-aa06-5e2747c8c857\",\"type\":\"GlyphRenderer\"},{\"id\":\"09f5e745-bee3-4774-a946-6558c942ce3a\",\"type\":\"GlyphRenderer\"},{\"id\":\"a51551f1-f133-4023-bc66-590599d2c0a2\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"31c25238-4fee-4f39-87c4-96f7320dff3d\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"db194911-ab96-4a6b-ba20-4a51ceeeaba4\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"88914ac8-2ad0-4f2b-9a34-a9daed75e9aa\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"497656be-7ee5-4004-a4be-17134efa28f0\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"bd424538-a783-4683-9086-d2a511ed59cf\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"a4d0893a-e6e7-4581-863c-13e71a7d3be2\",\"type\":\"LinearScale\"}},\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data_source\":{\"id\":\"52ad0d6c-860c-41d4-bbc2-be74a36fc5eb\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"d95c2f21-370b-4926-a71d-b8ac1fbe7eae\",\"type\":\"Patch\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"833d3325-473a-4983-a0e4-ac61e4e8b206\",\"type\":\"Patch\"},\"selection_glyph\":null,\"view\":{\"id\":\"afe8f310-9fac-4ddf-80fb-799dcfabd2b6\",\"type\":\"CDSView\"}},\"id\":\"a51551f1-f133-4023-bc66-590599d2c0a2\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"CO2 [ppm]\",\"formatter\":{\"id\":\"e7880245-349e-47f9-9477-6cbd3cf0dfc9\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"d08bd344-7ce3-410f-972c-6c175ef5b1ae\",\"type\":\"BasicTicker\"}},\"id\":\"77571216-de7e-43d9-9c9c-d29e826f5127\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"45a8a6db-05f1-4c2b-a829-5a5562d3c64b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"04f76069-4189-4e76-822d-c0fbdd24b123\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b59ccf8c-6d85-4f28-a9fe-f15c9a196d05\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"d92e8c0d-2c63-4003-a660-65776f2dfa93\",\"type\":\"CDSView\"}},\"id\":\"0bb2b20f-3393-4858-aa06-5e2747c8c857\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"e2dce66a-a3c3-4575-9abb-b9322bedd071\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"2da83df9-eedd-4938-b619-a53890695bec\",\"elementid\":\"1a7837d8-f9e0-43dc-bb5d-2c3fbc1732df\",\"modelid\":\"e2dce66a-a3c3-4575-9abb-b9322bedd071\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "e2dce66a-a3c3-4575-9abb-b9322bedd071"
}
},
"output_type": "display_data"
}
],
"source": [
"plot(m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's split the model into components and create model $m_1$ (blue) with only the long term trend and model $m_2$ (green) with only the product term of [p.120](http://www.gaussianprocess.org/gpml/chapters/RW5.pdf):\n",
"$$\n",
"\\begin{eqnarray}\n",
"k_2(x,x')&=&\\theta_3^2\\cdot\\hbox{exp}\\left(-\\frac{(x-x')^2}{2\\theta_4^2}-\\frac{2\\sin^2(\\pi(x-x')/1.0)}{\\theta_5^2}\\right)\\\\\n",
"&=&\\left(\\theta_3^2\\cdot\\hbox{exp}\\left(-\\frac{(x-x')^2}{2\\theta_4^2}\\right)\\right)\\cdot\\left(1.0\\cdot\\hbox{exp}\\left(-\\frac{2\\sin^2(\\pi(x-x')/1.0)}{\\theta_5^2}\\right)\\right)\n",
"\\end{eqnarray}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Where $\\theta_3$ is the `variance` term in the `RBF` kernel and therefore the `variance` term in the `PeriodicKernel` kernel will be $1.0$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### How not to do it"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It turns out that the simplistic idea on how to decompose the additive components of the model by simply creating partial models is not correct. This would have looked like this:"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
" k1 = GPflow.kernels.RBF(1, variance=m.kern.rbf_1.variance.value, lengthscales=m.kern.rbf_1.lengthscales.value)\n",
" m1 = GPflow.gpr.GPR(X, Y, kern=k1)\n",
" m1.likelihood.variance = m.likelihood.variance.value\n",
" m1.fixed = True\n",
"\n",
" k2 = GPflow.kernels.RBF(1, variance=m.kern.prod.rbf.variance.value, lengthscales=m.kern.prod.rbf.lengthscales.value) \\\n",
" * \\\n",
" GPflow.kernels.PeriodicKernel(1, period=m.kern.prod.periodickernel.period.value, \n",
" variance=m.kern.prod.periodickernel.variance.value, \n",
" lengthscales=m.kern.prod.periodickernel.lengthscales.value)\n",
" m2 = GPflow.gpr.GPR(X, Y, kern=k2)\n",
" m2.likelihood.variance = m.likelihood.variance.value\n",
" m2.fixed = True\n",
"\n",
" k1 = GPflow.kernels.RBF(1, variance=m.kern.rbf_1.variance.value, lengthscales=m.kern.rbf_1.lengthscales.value)\n",
" k2 = GPflow.kernels.RBF(1, variance=m.kern.prod.rbf.variance.value, lengthscales=m.kern.prod.rbf.lengthscales.value) \\\n",
" * \\\n",
" GPflow.kernels.PeriodicKernel(1, period=m.kern.prod.periodickernel.period.value, \n",
" variance=m.kern.prod.periodickernel.variance.value, \n",
" lengthscales=m.kern.prod.periodickernel.lengthscales.value)\n",
" m3 = GPflow.gpr.GPR(X, Y, kern=(k1+k2))\n",
" m3.likelihood.variance = m.likelihood.variance.value\n",
" m3.fixed = True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### How to do it"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Have a look at [The Kernel Cookbook](http://www.cs.toronto.edu/~duvenaud/cookbook/index.html) and scroll down to \"Additive decomposition\" or look at equation 1.17 at the [kernels](https://github.com/duvenaud/phd-thesis/blob/master/kernels.pdf) chapter of David Duvenaud's Phd [thesis](https://github.com/duvenaud/phd-thesis/).\n",
"\n",
"There it says (I leave out the $\\mu$ variables as we set the mean function to be 0):\n",
"$$ f_1(X^*)|f_1(X) + f_2(X) \\sim \\mathcal{N}\\left({K_1^*}^T(K_1+K_2)^{-1}[f_1(X) + f_2(X)], ...\\right)$$\n",
"but our simplistic approach from above would have calculated the following:\n",
"$$ f_1(X^*)|f_1(X) + f_2(X) \\sim \\mathcal{N}\\left({K_1^*}^TK_1^{-1}[f_1(X) + f_2(X)], ...\\right)$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I did not find a way on how to make GPflow perform this additive decomposition and therefore I decided to implement it by hand. In this set-up GPflow is used to find the correct parameters and the hand writte code is used to decompose the addtitive parts."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import functools\n",
"\n",
"# http://www.cs.toronto.edu/~duvenaud/cookbook/index.html\n",
"\n",
"class GPCovarianceFunctionWhiteNoise:\n",
" def __init__(self, sigma):\n",
" self.sigma = float(sigma)\n",
"\n",
" def covariance(self, x1, x2):\n",
" lr = np.zeros(shape=(len(x1), len(x2)))\n",
" np.fill_diagonal(lr, self.sigma ** 2)\n",
" return lr\n",
"\n",
"class GPCovarianceFunctionSquaredExponential:\n",
" def __init__(self, l, sigma):\n",
" self.l = float(l)\n",
" self.sigma = float(sigma)\n",
"\n",
" def covariance(self, x1, x2):\n",
" return (self.sigma**2) * np.exp( -0.5 * (np.subtract.outer(x1, x2)**2) / (self.l ** 2))\n",
"\n",
"class GPCovarianceFunctionExpSine2Kernel:\n",
" def __init__(self, l, period, sigma):\n",
" self.l = float(l)\n",
" self.period = float(period)\n",
" self.sigma = float(sigma)\n",
"\n",
" def covariance(self, x1, x2):\n",
" return (self.sigma**2) * np.exp( -2.0 * np.power(np.sin((np.pi / self.period) * np.abs(np.subtract.outer(x1, x2))),\n",
" 2) / (self.l ** 2))\n",
"\n",
"class GPCovarianceFunctionSum:\n",
" def __init__(self, k1, k2):\n",
" self.k1 = k1\n",
" self.k2 = k2\n",
"\n",
" def covariance(self, x1, x2):\n",
" s1 = self.k1.covariance(x1, x2)\n",
" s2 = self.k2.covariance(x1, x2)\n",
" s = s1 + s2\n",
" return s\n",
"\n",
"class GPCovarianceFunctionProduct:\n",
" def __init__(self, k1, k2):\n",
" self.k1 = k1\n",
" self.k2 = k2\n",
"\n",
" def covariance(self, x1, x2):\n",
" p1 = self.k1.covariance(x1, x2)\n",
" p2 = self.k2.covariance(x1, x2)\n",
" p = p1 * p2\n",
" return p\n",
"\n",
"def conditional1(x_new, x, y, cov, sigma_n=0):\n",
" if not isinstance(cov, list):\n",
" cov = [cov]\n",
"\n",
" if len(cov) < 2:\n",
" total_covariance_function = cov[0]\n",
" else:\n",
" total_covariance_function = functools.reduce(lambda a, x: GPCovarianceFunctionSum(a, x), cov)\n",
"\n",
" A = total_covariance_function.covariance(x_new, x_new)\n",
" C = total_covariance_function.covariance(x_new, x)\n",
" B = total_covariance_function.covariance(x, x) + np.power(sigma_n,2)*np.diag(np.ones(len(x)))\n",
"\n",
" mu = [np.linalg.inv(B).dot(C.T).T.dot(y).squeeze()]\n",
" sigma = [(A - C.dot(np.linalg.inv(B).dot(C.T))).squeeze()]\n",
"\n",
" for i in range(0, len(cov)):\n",
" partial_covariance_function = cov[i]\n",
" C_ = partial_covariance_function.covariance(x_new, x)\n",
" mu_ = np.linalg.inv(B).dot(C_.T).T.dot(y).squeeze()\n",
" mu.append(mu_)\n",
"\n",
" return (mu, sigma)\n",
"\n",
"def predict1(x_new, x, y, cov, sigma_n=0):\n",
" l_y_pred, l_sigmas = conditional1(x_new, x, y, cov=cov, sigma_n=sigma_n)\n",
" if len(l_sigmas[0].shape) > 1:\n",
" return l_y_pred, [np.diagonal(ls) for ls in l_sigmas]\n",
" else:\n",
" return l_y_pred, l_sigmas"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(91.88714902)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m.kern.product.rbf.lengthscales.value"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"xx = np.linspace(1990, 2000, 1000)\n",
"k1 = GPCovarianceFunctionSquaredExponential(l=m.kern.rbf_1.lengthscales.value, \n",
" sigma=np.sqrt(m.kern.rbf_1.variance.value))\n",
"k2 = GPCovarianceFunctionProduct(\n",
" GPCovarianceFunctionSquaredExponential(l=m.kern.product.rbf.lengthscales.value,\n",
" sigma=np.sqrt(m.kern.product.rbf.variance.value)),\n",
" GPCovarianceFunctionExpSine2Kernel(l=m.kern.product.periodic.lengthscales.value, \n",
" period=m.kern.product.periodic.period.value, \n",
" sigma=np.sqrt(m.kern.product.periodic.variance.value)))\n",
"\n",
"k4 = GPCovarianceFunctionSum(GPCovarianceFunctionSquaredExponential(l=m.kern.rbf_2.lengthscales.value, \n",
" sigma=np.sqrt(m.kern.rbf_2.variance.value)),\n",
" GPCovarianceFunctionWhiteNoise(sigma=np.sqrt(m.kern.white.variance.value)))\n",
"\n",
"k = GPCovarianceFunctionSum(k1, GPCovarianceFunctionSum(k2, k4))\n",
"\n",
"y_pred, sigmas = predict1(xx, x, y, cov=[k1, k2, k4], sigma_n=np.sqrt(m.likelihood.variance.value))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And if we then plot $m_1$ (blue) and $m_1 + m_2$ (green) and the combined/full model $m$ (red) in the same graph we get the picture below."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"1c47f866-bbe3-4a77-8746-644a8cc510d7\":{\"roots\":{\"references\":[{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"dOgZMgoLdkCojtCQSQt2QNReIe6IC3ZAAbcPSsgLdkDiY5SkBwx2QJb2z/1GDHZASwCIVYYMdkAehu6rxQx2QCKD7gAFDXZALfyCVEQNdkD4jcemgw12QOKmm/fCDXZApS0FRwIOdkAqiOiUQQ52QLgYjOGADnZA/xStLMAOdkA+yEZ2/w52QMeNjL4+D3ZAlBdeBX4PdkCKx8NKvQ92QKRHr478D3ZA4PIj0TsQdkDOxS4SexB2QJ3trFG6EHZAdOe3j/kQdkD6WVLMOBF2QC1geAd4EXZACnEOQbcRdkAkFTB59hF2QLYfvq81EnZAbI/v5HQSdkA0LYYYtBJ2QMgurUrzEnZABsY+ezITdkCE5FCqcRN2QNn7vtewE3ZAG+3BA/ATdkDRpTwuLxR2QKLBJlduFHZAERONfq0UdkDASGWk7BR2QOuDk8grFXZA18pV62oVdkDa+30MqhV2QHaWBizpFXZAngoDSigWdkDMu1pmZxZ2QHxBIoGmFnZATFxkmuUWdkBbBQeyJBd2QNwx9MdjF3ZAQFRh3KIXdkC7VDHv4Rd2QKm/cQAhGHZAhxDcD2AYdkAN0sUdnxh2QNBxFyreGHZA3sCoNB0ZdkCI6bI9XBl2QIBC70SbGXZAamOiStoZdkBqPcBOGRp2QNlPCFFYGnZAROG/UZcadkBywcxQ1hp2QILvJk4VG3ZAVNGzSVQbdkA6WLdDkxt2QLJ8/jvSG3ZADGGEMhEcdkB4z2knUBx2QHWVhhqPHHZANpP1C84cdkDsfKL7DB12QP6upelLHXZAIJHU1YoddkCiLF3AyR12QNBgKqkIHnZAhxI4kEcedkAQJ3V1hh52QOiJ7ljFHnZA5xiyOgQfdkAOxa8aQx92QC7E3fiBH3ZAN4NN1cAfdkDaXwSw/x92QPsyy4g+IHZAcbHfX30gdkAbVzQ1vCB2QCKKpAj7IHZArIVJ2jkhdkDDEzSqeCF2QEtSMHi3IXZA8CRnRPYhdkAJlr0ONSJ2QDveU9dzInZAayD5nbIidkDiH+Bi8SJ2QDzX2iUwI3ZAdrn/5m4jdkDcXTymrSN2QCSlwmPsI3ZANnBVHyskdkAUlPnYaSR2QIbzx5CoJHZA0KmpRuckdkCY36z6JSV2QMgb2axkJXZAQUccXaMldkBWt2oL4iV2QDAo0LcgJnZAHPlmYl8mdkBFY+MKniZ2QPYJgrHcJnZAljBAVhsndkAL8Bn5WSd2QGNX3JmYJ3ZADZjDONcndkB8C7PVFSh2QDqUuXBUKHZA4GGzCZModkBiuMqg0Sh2QM0q4zUQKXZAbvn1yE4pdkDExBBajSl2QFyzJ+nLKXZA1nladgoqdkD2T4ABSSp2QLz9oIqHKnZAjkHLEcYqdkAqcNeWBCt2QPONBBpDK3ZA8TAQm4ErdkAyUhUawCt2QOLlGpf+K3ZAKIkHEj0sdkCKuvqKeyx2QCRc0AG6LHZAKFCsdvgsdkAQXW7pNi12QFKnHFp1LXZAaES9yLMtdkC4XUI18i12QEPsuJ8wLnZApCv+B28udkCo9VZurS52QBqyh9LrLnZAEW+dNCovdkAJPaOUaC92QDbYbPKmL3ZA3KA3TuUvdkC3c9KnIzB2QC+gXv9hMHZAwey6VKAwdkB8bwGo3jB2QFhZ//gcMXZAgh74R1sxdkD2asmUmTF2QBSbYN/XMXZAlYjJJxYydkAecjJuVDJ2QEiySLKSMnZADIQx9NAydkBpDPQzDzN2QKU/kXFNM3ZACtTerIszdkBHsvnlyTN2QEwqFh0INHZAVkzQUUY0dkDekWGEhDR2QEjxm7TCNHZACVC14gA1dkBCMY8OPzV2QP6zGjh9NXZAmDuHX7s1dkD2Dq6E+TV2QHY9jqc3NnZAkS4kyHU2dkCmSIDmszZ2QCbBpALyNnZAKpdzHDA3dkAckfUzbjd2QBgHVEmsN3ZAB8UxXOo3dkCfl9hsKDh2QHggRXtmOHZA4hBOh6Q4dkAMrCCR4jh2QAJ2hZggOXZAT32xnV45dkDev4SgnDl2QGg7AqHaOXZAyqoOnxg6dkDE3tiaVjp2QL8XW5SUOnZAg/90i9I6dkB3kSKAEDt2QDd2jXJOO3ZAPBqZYow7dkBobTBQyjt2QAp2djsIPHZAisNXJEY8dkBaadQKhDx2QGk19u7BPHZAmZCq0P88dkB6AvevPT12QAkC3Yx7PXZAauZNZ7k9dkD7sWQ/9z12QFJj9RQ1PnZAqp8z6HI+dkC4fey4sD52QF4TWIfuPnZAhlRAUyw/dkC4O7Mcaj92QOLAn+OnP3ZAvOsYqOU/dkDwYDhqI0B2QEvTyClhQHZASPTp5p5AdkAcCoKh3EB2QE0Es1kaQXZAHmhRD1hBdkAsYXfClUF2QDkWGXPTQXZA3FtMIRFCdkDoPdnMTkJ2QFQ9CHaMQnZAelOQHMpCdkAvGaHAB0N2QJ6VJmJFQ3ZACO8oAYNDdkCyqJydwEN2QEB+jDf+Q3ZAXKnUzjtEdkCWpqJjeUR2QLS41PW2RHZAmAV+hfREdkCK7Y8SMkV2QPbTC51vRXZATrbqJK1FdkAkIkGq6kV2QNwD7ywoRnZAT8kHrWVGdkCuPYgqo0Z2QL5AYqXgRnZAtrG7HR5HdkByMmGTW0d2QLxUYAaZR3ZAlOa9dtZHdkDnLXPkE0h2QCaEkU9RSHZALuERuI5IdkA5btwdzEh2QN4+/4AJSXZACEuA4UZJdkC8JFc/hEl2QEQkaJrBSXZACnnd8v5JdkDwpZhIPEp2QNQVtJt5SnZA5HIN7LZKdkCh4bg59Ep2QJQBs4QxS3ZAXTf7zG5LdkDkG4YSrEt2QIRvTVXpS3ZASFpnlSZMdkDEdLzSY0x2QKBmWg2hTHZAQeg2Rd5MdkCU8lF6G012QGzStaxYTXZACJZQ3JVNdkAkVjMJ0012QMZtOjMQTnZA9tGNWk1OdkAO2RJ/ik52QEAqzKDHTnZAMX+xvwRPdkDKv9LbQU92QMoJLPV+T3ZAoNDDC7xPdkCEuocf+U92QNbzYTA2UHZAYDFxPnNQdkDgX7JJsFB2QCLFJlLtUHZAbpnFVypRdkBNtHdaZ1F2QIvTXlqkUXZAd/ZqV+FRdkDcWZNRHlJ2QCh33EhbUnZAzTlbPZhSdkA28+Au1VJ2QEERjh0SU3ZAKIdfCU9TdkBOGk7yi1N2QJIrTNjIU3ZAn5tduwVUdkDcrp2bQlR2QGPh6Hh/VHZAvDxPU7xUdkCC+LQq+VR2QFAdRP81VXZAvFnI0HJVdkB/wXyfr1V2QOBwNmvsVXZAwQ70MylWdkCMkrn5ZVZ2QHa5nryiVnZAUCF5fN9WdkAoK185HFd2QCyoVvNYV3ZA3Xg9qpVXdkB0xzFe0ld2QONBLQ8PWHZAc+EcvUtYdkAiyBdoiFh2QM4PDBDFWHZAv5YAtQFZdkCo3PtWPll2QK1T2/V6WXZA2s3CkbdZdkBwfI4q9Fl2QO3eYcAwWnZAaMonU21adkA6tuniqVp2QE6Ni2/mWnZAKEEi+SJbdkCJ/pR/X1t2QELpFgOcW3ZABKB2g9hbdkCaOcMAFVx2QOKxBntRXHZAixci8o1cdkAs+i1mylx2QAyzHNcGXXZA/gjrRENddkBIMKGvf112QNKhOxe8XXZAfuOle/hddkBgNO3cNF52QPxlLztxXnZAZs87lq1edkCLQSHu6V52QBR95kImX3ZAoH5/lGJfdkB04fXinl92QPvrOy7bX3ZAyVledhdgdkBYTj+7U2B2QEwJBf2PYHZAUD2QO8xgdkBTneR2CGF2QLWnEK9EYXZAaiwO5IBhdkBCU8wVvWF2QIKuT0T5YXZAd9mrbzVidkCvxsuXcWJ2QEKnpbytYnZAVmxD3ulidkDclpz8JWN2QEqDxhdiY3ZAtFOsL55jdkCqoU9E2mN2QD/9tlUWZHZA7cDaY1JkdkDYNZ1ujmR2QCBRM3bKZHZAfRdzegZldkDEL3l7QmV2QDkvL3l+ZXZAZOeHc7pldkAM/ppq9mV2QLRzcl4yZnZAdgbnTm5mdkAat/07qmZ2QBJw1iXmZnZAappQDCJndkCcC3HvXWd2QGkLNM+ZZ3ZAeSK5q9VndkAytNeEEWh2QIe4l1pNaHZAxAECLYlodkAKsAP8xGh2QNlRpccAaXZAEq/ujzxpdkAZds1UeGl2QLJVTha0aXZA8nNg1O9pdkDH8xePK2p2QJCTYkZnanZANSBN+qJqdkBYmryq3mp2QGQK2Vcaa3ZAApduAVZrdkAWEZinkWt2QCWkS0rNa3ZAxTSg6QhsdkC2+I+FRGx2QMjz4R2AbHZAHKbXsrtsdkC8309E92x2QNZ9UNIybXZAyIDhXG5tdkAM2ODjqW12QAIyfWflbXZACKSd5yBudkB1uitkXG52QGbfPN2XbnZAjDHYUtNudkD50trEDm92QDAXZTNKb3ZAhqFznoVvdkAwDPcFwW92QMYj3Wn8b3ZAOo5JyjdwdkDxGkEnc3B2QIVHh4CucHZALJVN1ulwdkCnbo8oJXF2QOdJJXdgcXZAs8JPwptxdkClissJ13F2QIi/r00ScnZAuiYRjk1ydkD7Qb3KiHJ2QHJO5wPEcnZAOoFxOf9ydkCkxmJrOnN2QOTevZl1c3ZAAORlxLBzdkBHXHzr63N2QHyHAQ8ndHZAoI/OLmJ0dkAtZvZKnXR2QN6/dmPYdHZAJYtYeBN1dkB6En2JTnV2QO6vLZeJdXZALeADocR1dkCAgzmn/3V2QJgf0qk6dnZA7IaXqHV2dkBiDNmjsHZ2QI8BWZvrdnZATwUXjyZ3dkBxbC5/YXd2QH4ciGucd3ZAJpY0VNd3dkAc7x05Enh2QI8/YBpNeHZAdA7K94d4dkBQVIPRwnh2QNuThqf9eHZAZoXJeTh5dkByCEhIc3l2QAahDBOueXZAlJX92eh5dkCKpjidI3p2QFu2nVxeenZAGKJNGJl6dkDTlTbQ03p2QDIgSoQOe3ZAwr6SNEl7dkCOQgXhg3t2QJO/s4m+e3ZA4M6RLvl7dkDoCqzPM3x2QIII7WxufHZAwulJBql8dkA6T9ub43x2QEuRnS0efXZAprOEu1h9dkDCJZBFk312QCTSwMvNfXZAsR8hTgh+dkB43I7MQn52QCELNkd9fnZAB9rdvbd+dkBj4akw8n52QNI+m58sf3ZAcAjACmd/dkA9f9lxoX92QNE3HtXbf3ZA1/1zNBaAdkBjjPCPUIB2QGOYf+eKgHZABc8eO8WAdkCOFsWK/4B2QNNzgdY5gXZAymZLHnSBdkDUSCliroF2QAwuDaLogXZAYoYA3iKCdkDBZggWXYJ2QIbxC0qXgnZA4QwSetGCdkAJNy+mC4N2QNxYPc5Fg3ZAnz1Y8n+DdkBKhWoSuoN2QGPrnS70g3ZA4nusRi6EdkAuiNNaaIR2QGY35GqihHZAh+rtdtyEdkAY5/V+FoV2QNdo/IJQhXZARX/0goqFdkARJOB+xIV2QICcyHb+hXZA0U6majiGdkDliFxacoZ2QKvKJkashnZALPu6LeaGdkAAmGERIId2QBCJzfBZh3ZAK0w4zJOHdkBmgpKjzYd2QPs1yXYHiHZAtlzwRUGIdkBljfoQe4h2QGy2z9e0iHZA1zOQmu6IdkDwXlRZKIl2QCUn1RNiiXZATLQ8ypuJdkCjKox81Yl2QOiIuSoPinZAtomV1EiKdkCTa256gop2QE2BIxy8inZAb7msufWKdkBBvf1SL4t2QGV4Guhoi3ZA0BQSeaKLdkCnPO0F3It2QBCMh44VjHZAANXyEk+MdkDa2xKTiIx2QDDQIQ/CjHZAiMrjhvuMdkDEJG/6NI12QMONzWlujXZAngro1KeNdkA8yso74Y12QH3HYJ4ajnZALcXL/FOOdkDYdflWjY52QGzm1qzGjnZAD+xu/v+OdkBmwdRLOY92QCfX4ZRyj3ZAfu6y2auPdkDMFjsa5Y92QEuGeFYekHZAfVNyjleQdkCzxA/CkJB2QGFacfHJkHZAc2R7HAORdkA0LzJDPJF2QNqPlGV1kXZAo3Wlg66RdkDShGud55F2QAzC17IgknZATtHiw1mSdkCaUqrQkpJ2QPwt9djLknZAFPr43ASTdkD8vqjcPZN2QJc659d2k3ZAB4jGzq+TdkB4qFfB6JN2QNQ6ba8hlHZAbfEtmVqUdkDjEpJ+k5R2QBlufF/MlHZAb0MLPAWVdkC/njAUPpV2QJp15Od2lXZA50pOt6+VdkDgTyyC6JV2QPqojEghlnZApnaIClqWdkDu+BHIkpZ2QO9uL4HLlnZARj/cNQSXdkDZQALmPJd2QCmGyZF1l3ZAQtUVOa6XdkD6itbb5pd2QJxdInofmHZAhI35E1iYdkBQD0SpkJh2QJoVKTrJmHZAs1xxxgGZdkD5wDROOpl2QEWhidFymXZAeQxWUKuZdkBqOKjK45l2QKEdTkAcmnZACuGLsVSadkA7MTYejZp2QDwQTobFmnZAYibS6f2adkDVpdlINpt2QA5xVKNum3ZA/R4q+aabdkBec3JK35t2QF+ILZcXnHZA0IVZ30+cdkCFTOQiiJx2QI3h32HAnHZAW/JHnPicdkCnoPnRMJ12QKv7GQNpnXZAquWsL6GddkBYmZJX2Z12QA448HoRnnZASXF5mUmedkDOf4izgZ52QJSQ3Mi5nnZAzQuh2fGedkDKea3lKZ92QB9RGO1hn3ZAP53X75mfdkCD7/rt0Z92QBCcXucJoHZAvMUD3EGgdkBXChzMeaB2QBDHcrexoHZALmQenumgdkCrUg+AIaF2QJ7CUl1ZoXZAeiPmNZGhdkAcwq4JyaF2QAWly9gAonZAOTMvoziidkDqTrhocKJ2QFaFvymoonZAQ63O5d+idkBULkidF6N2QPyo309Po3ZAg1bX/YajdkBx4O2mvqN2QORwTkv2o3ZAjsHI6i2kdkCPtKKFZaR2QC1FpBudpHZApq/prNSkdkDRZEE5DKV2QB4C3MBDpXZAvH+xQ3uldkDwV6rBsqV2QKdk3jrqpXZAcHU+ryGmdkAUCr8eWaZ2QChUYomQpnZADFNM78emdkBaNUZQ/6Z2QNT4baw2p3ZA016tA26ndkD55RJWpad2QOhLr6Pcp3ZArKVU7BOodkCYjyUwS6h2QJFpFm+CqHZAJFwYqbmodkAcZzne8Kh2QHbPhg4oqXZALebMOV+pdkBsaUhglql2QJVKvIHNqXZAtpJTngSqdkBSk/21O6p2QCVntshyqnZAJP961qmqdkCFAFPf4Kp2QArtNuMXq3ZAM+8t4k6rdkCLZCXchat2QBR0M9G8q3ZACA9HwfOrdkA1c1msKqx2QPv8aZJhrHZAJcGQc5isdkCGMa9Pz6x2QMUW2SYGrXZALZH3+DytdkBPAA/Gc612QE3+JI6qrXZAcSlBUeGtdkAe/EgPGK52QHT8YMhOrnZA+CVbfIWudkAtP1orvK52QCZwN9XyrnZAMeEieimvdkCNU+wZYK92QExaq7SWr3ZAWtRdSs2vdkC/EvnaA7B2QAhgf2Y6sHZAnzf27HCwdkDDTVRup7B2QOlbkurdsHZAmSXHYRSxdkCAku7TSrF2QJZdxkCBsXZAuwWpqLexdkCT4lgL7rF2QJPk/2gksnZAF5tzwVqydkC1O88UkbJ2QKxG/WLHsnZAbvgGrP2ydkDwQv/vM7N2QAqduy5qs3ZABZU+aKCzdkCA9cGc1rN2QBps8MsMtHZAg/P69UK0dkAuq9YaebR2QGQ2ijqvtHZA9ZEWVeW0dkDFfU9qG7V2QEJcbXpRtXZAMINKhYe1dkAOmAOLvbV2QJZbYovztXZA3dKohim2dkAEtYl8X7Z2QOdtS22VtnZAOKDbWMu2dkCwTBw/Abd2QOI6ECA3t3ZAMi3U+2y3dkBoSULSord2QJDQfKPYt3ZAOa1xbw64dkALjvs1RLh2QKJaafd5uHZAsvKMs6+4dkAQpUBq5bh2QFNbyRsbuXZAL7Dsx1C5dkAYOLpuhrl2QFTkVhC8uXZABl6ErPG5dkAXfWdDJ7p2QAMA59RcunZAKrscYZK6dkAdJgjox7p2QHeMk2n9unZAI8m55TK7dkDvY4JcaLt2QBwM9s2du3ZAge/7OdO7dkCgb6OgCLx2QOhC/AE+vHZAn9beXXO8dkA9UWm0qLx2QGWNggXevHZAzjFFURO9dkDAcpaXSL12QHrIfth9vXZAKtzsE7O9dkDHzv5J6L12QAKtnHodvnZAJDDQpVK+dkASfYDLh752QCaw2uu8vnZAzO22BvK+dkA4ZBwcJ792QP41ASxcv3ZASkCCNpG/dkAGZ3k7xr92QEW1+zr7v3ZAh4MCNTDAdkCU0ospZcB2QKTglBiawHZAwJkiAs/AdkDtnijmA8F2QAWRs8Q4wXZAy8OtnW3BdkDSPyJxosF2QJT9PT/XwXZA3OSJBwzCdkD64H3KQMJ2QHoy0Id1wnZAsMGNP6rCdkBe6t/x3sJ2QMMLjJ4Tw3ZA6kaxRUjDdkDsNEnnfMN2QGsaP4Oxw3ZA/hufGebDdkBgy4KqGsR2QDRMsTVPxHZAoSBRu4PEdkAAS2E7uMR2QJR+wrXsxHZAzmOOKiHFdkCKmcaZVcV2QP15VwOKxXZAopVLZ77FdkClJ57F8sV2QPQhRh4nxnZAn7dFcVvGdkBAXaO+j8Z2QMKFXwbExnZAzzptSPjGdkCH0taELMd2QDREnLtgx3ZA4cWW7JTHdkAjPQAYycd2QJaTrj39x3ZAUpTGXTHIdkAuqAl4Zch2QAC5ioyZyHZAGRRnm83IdkAQKJukAcl2QFEnE6g1yXZAoLfLpWnJdkCST8Sdncl2QAbxCJDRyXZAMKmXfAXKdkDWiVNjOcp2QH1NZ0RtynZANWylH6HKdkCi4Sf11Mp2QJTq58QIy3ZAPDHcjjzLdkAcHRRTcMt2QBhMeBGky3ZAxnoaytfLdkAykuN8C8x2QDuL+Ck/zHZA4/ss0XLMdkDqJJdypsx2QKp9OA7azHZAGY/7ow3NdkDIs+YzQc12QDAhEL50zXZAqkVcQqjNdkBO69HA2812QPOZWTkPznZAHogurELOdkAqmQgZds52QG4YFYCpznZAcNA84dzOdkBnxo88EM92QA3y6ZFDz3ZAGQV64XbPdkCPeQsrqs92QGoJ1W7dz3ZAdoChrBDQdkAwZqrkQ9B2QMH+ohZ30HZAAv2/QqrQdkD++fZo3dB2QET4MokQ0XZA8GmBo0PRdkCSQPq3dtF2QJ5oYcap0XZACRPZztzRdkD5YXLRD9J2QENvGc5C0nZAvlKuxHXSdkA8l1G1qNJ2QPwODKDb0nZAQeHDhA7TdkCnJ31jQdN2QOwyLjx003ZAGo3kDqfTdkBv35vb2dN2QO1oZqIM1HZANNUGYz/UdkDa1dAdctR2QGQfgtKk1HZAXWYZgdfUdkCUs8MpCtV2QEb2Scw81XZAX2beaG/VdkBuRFf/odV2QDoKv4/U1XZA8VElGgfWdkDhsnueOdZ2QBlRqxxs1nZAIfXelJ7WdkDJOwEH0dZ2QFK37HID13ZANEzu2DXXdkAxPaQ4aNd2QALZZJKa13ZAFPwC5szXdkDgRnYz/9d2QChp5Xox2HZAgTw0vGPYdkAqqDH3ldh2QPpNOCzI2HZAwv8MW/rYdkCRG86DLNl2QC+9UaZe2XZAnme+wpDZdkCVcgnZwtl2QFp/FOn02XZAIQf08ibadkBcsb/2WNp2QB3+O/SK2nZAZmiY67zadkAqQtLc7tp2QPiVu8cg23ZA1J6GrFLbdkCT3BeLhNt2QL0cgWO223ZAFfymNejbdkAfrYMBGtx2QAUUM8dL3HZAk1yihn3cdkDAeN8/r9x2QFQ7v/Lg3HZAWP+InxLddkBfmvBFRN12QK10GuZ13XZAKmoWgKfddkDRArsT2d12QFYSFqEK3nZAFvsvKDzedkAqm/iobd52QKhVhyOf3nZAqQ3Ol9DedkDyV7IFAt92QLG1XW0z33ZADo2bzmTfdkBUx58plt92QA4sO37H33ZACIakzPjfdkBntH0UKuB2QP7BPVZb4HZANdOQkYzgdkDKBIfGveB2QEk/G/Xu4HZAeONkHSDhdkB9bTs/UeF2QM3WtlqC4XZAnVneb7PhdkAsLqB+5OF2QN4H9IYV4nZAYBLziEbidkAqznWEd+J2QPB/pnmo4nZAXC1daNnidkBg+MVQCuN2QINYpTI743ZARMIqDmzjdkCYrULjnON2QMTK4bHN43ZAAsoKev7jdkC6dck7L+R2QEpyIfdf5HZAsDsArJDkdkD+PGVaweR2QHx0OwLy5HZAyHm4oyLldkD08aM+U+V2QNGmJtOD5XZA6zQgYbTldkCfI6fo5OV2QOR7lGkV5nZAwDUh5EXmdkBRLBxYduZ2QJ+Nn8Wm5nZAfqecLNfmdkBhTwCNB+d2QLIS8OY353ZAwGNJOmjndkDqCiaHmOd2QDRLcs3I53ZAb2cuDfnndkBHxFpGKeh2QPAh+nhZ6HZAzFr1pInodkDPCXvKueh2QHDVZunp6HZA+rO9ARrpdkAvR2wTSul2QJI4nh566XZAkdUZI6rpdkCozxEh2ul2QPu5XhgK6nZAXcgmCTrqdkC6qDrzaep2QJybt9aZ6nZA+AKHs8nqdkA=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"000fff9a-4a94-4746-a2b1-5cbc8b4a4530\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e69a567d-f3b5-40bb-b8d2-3a80964520ec\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0a176af5-407b-4f89-8fa9-394a05b2cb6e\",\"type\":\"Line\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5cde919e-97af-40af-8010-09d7aa769b50\",\"type\":\"PanTool\"},{\"id\":\"cf463af9-434b-47dd-8c6d-a1145a7f7f24\",\"type\":\"WheelZoomTool\"},{\"id\":\"33edcea7-a7fa-4ee3-9f82-dd1fabaeaf99\",\"type\":\"BoxZoomTool\"},{\"id\":\"42a7926d-7059-463d-85ee-8fa4490c4f0c\",\"type\":\"SaveTool\"},{\"id\":\"a6ba7615-ebc3-4d24-a948-3471fe002d8f\",\"type\":\"ResetTool\"},{\"id\":\"9411d544-4c7f-4f06-8b44-61aeb27a1ed4\",\"type\":\"HelpTool\"}]},\"id\":\"eb78cbf5-cbe5-4b90-b151-94e62186c42a\",\"type\":\"Toolbar\"},{\"attributes\":{\"label\":{\"value\":\"Long term trend\"},\"renderers\":[{\"id\":\"67771ba7-0977-4d8b-994a-a75e6336d5d0\",\"type\":\"GlyphRenderer\"}]},\"id\":\"5f4c5a4e-e606-464e-baaa-7946651b47c9\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[468]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[468]}},\"selected\":null,\"selection_policy\":null},\"id\":\"78573bf7-78b6-4a52-8f42-dcf53b331a67\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null},\"id\":\"bc17fa36-73f9-4fc8-9b43-e9b6f9ec7aa2\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"b4747a2e-b21d-4476-96cd-a697771e75d3\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"e4c513d8-0ae7-4c32-8661-148e30d75ce2\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"78573bf7-78b6-4a52-8f42-dcf53b331a67\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3f20e4c9-6ce4-451b-96a9-86a42fed544d\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"d7d2b33c-654c-44c5-8b21-ee38c306b650\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"7da38168-9071-43f0-bfbf-8fc74bc18d5f\",\"type\":\"CDSView\"}},\"id\":\"756a6950-de96-4e60-ab5c-71b6fd6fbb7b\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"6f73679a-6f30-4e77-8a48-eb2c0e8d35d6\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"b2cfda99-0247-4bcb-a0fe-29ff7d8b694d\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"6f73679a-6f30-4e77-8a48-eb2c0e8d35d6\",\"type\":\"LinearAxis\"},{\"id\":\"99e2f74f-0f8d-4d2b-9d9c-a645161405c7\",\"type\":\"Grid\"},{\"id\":\"b2cfda99-0247-4bcb-a0fe-29ff7d8b694d\",\"type\":\"LinearAxis\"},{\"id\":\"d1f342dd-6899-4941-bb71-fc8f45ba36aa\",\"type\":\"Grid\"},{\"id\":\"b0880aa6-aecb-434e-b430-ef760dfb035f\",\"type\":\"BoxAnnotation\"},{\"id\":\"9d279072-c9a5-4d13-a204-e969cc2fb93c\",\"type\":\"Legend\"},{\"id\":\"a8813775-2cfb-4418-8a06-822d6066aaf0\",\"type\":\"GlyphRenderer\"},{\"id\":\"67771ba7-0977-4d8b-994a-a75e6336d5d0\",\"type\":\"GlyphRenderer\"},{\"id\":\"5ad64e35-74fe-4857-8107-bd9c6afa7af1\",\"type\":\"GlyphRenderer\"},{\"id\":\"756a6950-de96-4e60-ab5c-71b6fd6fbb7b\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"0994e388-1176-4807-8928-b5050bf5328f\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"eb78cbf5-cbe5-4b90-b151-94e62186c42a\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"bc17fa36-73f9-4fc8-9b43-e9b6f9ec7aa2\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"e6b746a6-85ed-4258-bd73-2dc5897fdc31\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1907d1c0-6bad-418b-87cc-e6790003b98d\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5499c635-0168-444d-a5b2-5999b39cb66e\",\"type\":\"LinearScale\"}},\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d7d2b33c-654c-44c5-8b21-ee38c306b650\",\"type\":\"Circle\"},{\"attributes\":{\"plot\":null,\"text\":\"Fit to the Mauna Loa Data\"},\"id\":\"0994e388-1176-4807-8928-b5050bf5328f\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"b4747a2e-b21d-4476-96cd-a697771e75d3\",\"type\":\"ColumnDataSource\"}},\"id\":\"70dbf0ca-c304-4432-a8a5-a8addbb2a667\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"nl2Fu+8WdkAto0TgpBx2QMchcnODGXZAMxVC6YMbdkANR4GF3Bx2QOxALeRuIXZATZXdo8QddkCdxZhyrR92QFR+4X2sJnZATPabKEAkdkCmYTNk3il2QE+cPlpMKHZARgf1kTEpdkAYmLcW8Sh2QF+Iz5v4KHZA0x0sSBkudkDv6xBnFDR2QB3NRYfCNXZAXqcBwL02dkAU3jppnzV2QKGmg9gpN3ZAR529ESw6dkDCDXVHLz52QPo111HvQnZASinkZ6lCdkD7/5Ov5EV2QAxRQ+zWSHZAKUhEg8FHdkBY+zc64E52QLmO9SEdS3ZAgGgdZ9ZMdkC97QZ6aE52QFGFxk2GS3ZAUMz9ZFBSdkDxWtGZ0012QKF1mXa5S3ZAaxl8nDtLdkAHwJHaYUl2QAavqXAGTXZAHY0DOo1IdkCD8gV1iUR2QI5COrftQnZAFyUVKVhEdkDMSoAwoD52QKjCUGjfQXZAQhVQDZ44dkADm85QAzh2QIMUaPDLNHZA8t7JPjszdkBOFoZeNCt2QKkxlGfSJ3ZAykd4HKQodkC19ppHSCh2QMYPCAhbIXZAB4SIY3EZdkAWnNPY2RV2QFPdxefpEnZAlhcyhTMPdkDj1Z2yBQp2QEcMakQSCHZA7G9bZ/YGdkBMvllJXQJ2QOz+nG4Y/nVAOXxa73v1dUAzvkCO0PN1QEVNYW4b83VAXbrozCrvdUCsDLrmZu91QOEAGA0E6XVAsuoYPwPtdUBrBh39E+l1QEeNIZ1u6XVAQ7D4xLLodUBYbQ45ye51QIELhsTv7XVA/lZreubxdUBB6ZY/pO11QP/Afvr88XVA8R03kub7dUCfFuRehvh1QCwpnW0sAXZATcT1j5z/dUBMcv8+sAZ2QApKCCV1AnZAWGh1ztkHdkCCBaKY4gx2QN+TNohXD3ZAD0iX7nQTdkA8txu1XBN2QEZGBpUyGHZAfsO8OxobdkB86NDWqxx2QDQma6seHnZAZg6qWUgcdkD03v7sSSR2QNFe3iSgJ3ZAF2Wh88AtdkB8u57Ycyl2QP/V5wC5KXZADb4pFsQvdkA1jW7cIDN2QHpzr5gCMXZAt4gTSoIwdkCl5LGNWDV2QDhIHXaUNXZAzXHFrDg6dkAWYSrwvzx2QFRvpKXZP3ZApQGEoq89dkC0HcdEfT52QGxppJOOQHZAGmeoXGpCdkDvISBLxEN2QDDOnALcSHZALZJKWclLdkC9TK2k8kt2QKHHvXL1S3ZADgGw9vFOdkAWl5grRE92QAbTuXOoVnZAgKUneftZdkBS9352+1d2QLBZpxPLXnZAKMM+NcZedkBO1TwbBWJ2QAnia5+nYXZAU2lN29NpdkAHCTU0/Gd2QGWSBTETbnZAgKbDFmlqdkDnK5U8yGl2QK1U+Wfia3ZA5bnOvqtrdkDZKO+yym12QM/hUapcb3ZAxAoSHDVvdkAfQClFwGZ2QEyZuvi3ZnZA5SWKkFxldkC2w53/VmZ2QBZCGjlcZHZA+VQHEopjdkBkPbvCOl52QOYbkTxRXHZADrHrtxxcdkAW/ACe+ld2QHqxzIKuUnZAwM3BI0NJdkCrNDEam0x2QHLN/30cSnZA9BH3gTNHdkDCq/R/HUJ2QEBEsQlIOHZA0tFxGRc4dkDD6Pex9zN2QKD6sdv9MHZABJhtCrcqdkDt/JQzzyh2QPRDBKn2HHZALCk4APEidkBOqKgG+ht2QGG9LR+YEXZAAPQijxYQdkBdWyK/pAx2QDIDiFzsCHZAsuFgMoUJdkBO6NdIkgV2QFQKqweOAHZAH1isLtH9dUBWaLwTE/91QDlCViFP/HVAkm1tg3D6dUA94xexoP11QPgnExi//XVAxBzt45X/dUDVibrSZAV2QMEuSQLMBnZATu3wX9AIdkDWNrFFqQp2QOk8AVO/B3ZAgCdLKyIJdkAJR2InlBR2QHKaOQUfF3ZAlkP/7joZdkDOyjcV+hl2QIOfnTimGHZAUm1xXhEfdkD21XBI3iN2QB4vpCTII3ZAhI8ILQEodkBdEQKgRSl2QFrL8a3MK3ZAowVOvLksdkDMEefafTJ2QES8lRI0MnZA+snn5+w0dkDyVKNrxDd2QBUzfHSBO3ZA5pxHa245dkDyR7pNcjx2QJsYC9SOQHZAoLcee+dAdkDseDXjHUF2QMjw4F+kQ3ZAncStAypFdkDYiKMwZUd2QJUxnNuCSnZAZ6ck/f5KdkD9CyHoCUp2QORi96OTTHZApnRPuH9QdkDVQ1Q/w1B2QD0b7qjtU3ZA1xD3T9VSdkABARZAbVV2QP5QpYbJWHZAEpIa3nNcdkBdj6pSwll2QJMqw8rWX3ZA33yuyoRidkD425kc7GR2QEYxP598Z3ZApIxceSdqdkBlf1tKiGl2QHwECQRRcnZAeqqQtklwdkCU4/sv53F2QL1ZNixYdnZAOzCQcxh5dkCyvV6NxnV2QHINQ3Abe3ZAJwSKWNZ5dkAVb1yyj3V2QMilH2YmenZAhZc1ovt5dkDroMx6HXp2QBuE7fr1dnZAFi5PF3d0dkABdrgoWnR2QNnyUFu8cHZAgv7JOi1ydkBkGIkbE212QOo5M998bnZAhDCVhJJndkAdbc/+emR2QKLi/zy1ZXZAjr+k54FgdkCiOx1NvWB2QO1Qfie0V3ZAhAQqY/dTdkDEBEZn3FB2QJii/aZ2TnZAnNtrEXNMdkDoZY8U1UF2QIIUIAPTRnZAhWCLTPs6dkCIOxACkzd2QFu1jJlvNnZA/YbNNOovdkA5vkbQwit2QHBrLs0RKHZAe0oKHigmdkCar6HXFB92QG6xs0UAGXZASEDeXZ0UdkA/tfVuIhZ2QBf/2zRoE3ZArohO9csPdkDTPyq+BQ12QE16R140DHZAQfVntwEJdkARYCn5sgh2QBMrLfB/CXZAwlJr7XoMdkDsYVUm9Q52QD7FKrxbD3ZAfsTXt58RdkBR0K5TVBR2QEvwUYRnGXZAADkrvdIXdkDVtiXmgRt2QGdU/zULHXZAKL5gJKcidkDkooa/OyN2QJTYnkHXJXZA9w7SO0YodkArlWjqGCx2QK9k2XpELnZAxfwMgmgudkDw58bR5TN2QPZKRcOfMHZAEKCsvZY3dkAgtKAoazp2QOnE1vKPPHZA6pWyXfo+dkA/l8T8LUV2QCyUL4ZNPnZAqopJy7NCdkDA6WAlt0J2QOnDp5tmS3ZAQyPiZLFIdkBivSWIxkl2QG+xJFkwSXZA6qx3DDNQdkA3zkQ2Ik92QBuiOiKYUHZAScB+nHlTdkBqs6PAI1R2QP3VFpj1UHZAuU3gjkVWdkC4avVHr1p2QAQtK4cAW3ZAOCkyZENYdkDRa6W97Ft2QClvseGZY3ZAt/saJwVhdkAD6zTqQWN2QGW5V1wdZXZA3fIqZERldkCtpGqComl2QBRReB4ab3ZAVV9K5tBudkAMCoZyFHN2QPHdFbC/dnZAWK5bZiF2dkACQGGyLXd2QLya62AZeXZA9TM0SEd/dkAOsWWr/oB2QE3t3YChgHZASULrFPd+dkDdGCkcZn52QHld1r9ph3ZA7YiSFSV/dkA4ZXT8soB2QKT+FgXrf3ZA7tNVwmuAdkCxG9S+BXt2QHIvD6d6eXZA8Rv2By96dkD2kvyKY3p2QFA1oR8Sd3ZA4q1wnxBwdkCp0T/7KHN2QJgA2f/tcHZAQDZdeYFrdkDVHpTvIWh2QDe3zlaTYXZAGJiQJxtidkDbAzTuO2N2QIBET2aFWXZA2luvNG9VdkCcPIbLP1F2QP0YvVvPTnZAFVEkH+dKdkBNt4NsgEZ2QMAleVe0QnZAMLzZFuM/dkBQtTnaUTl2QFq3ZOMKNXZA1RIASUM2dkA2BR9+PC12QCXyySphJnZAtD6WEmModkAglCn+cCF2QDku/FJvH3ZACOX+wxYgdkBAVmxTFht2QBFvioCXGHZAv2pVv2EZdkCx8BDk/Rd2QFJ/4w1QF3ZAfvsT3acZdkDojxlqtR52QFCbgDGBHnZAPYC7mp0bdkCPWR/ppyN2QNEV9oR5I3ZAGi11VuondkDi9B43Cyx2QKKgZNZLLXZA7NM+KtIxdkDIiRrjADd2QLTk0QaLOXZAzcJ8D+00dkAzwvM7dDl2QHSG0bsiQXZAIsDe6VNFdkAzMByXzEp2QBLGfSarSXZAWuclFP9HdkABGd+bfkt2QP9qT7uLT3ZA7VzXu0dTdkAgo9s7kVd2QGE8YkSfWHZA6a8b+qBZdkCGYNtrdVp2QEEZE7/8XXZAfpHKgzdgdkBfAz/PyGF2QHmcGQ2eZ3ZAZIz66WBidkAvguJzAWZ2QAZtNDXlZ3ZA8NJe7vBtdkAowLoMKmp2QPrwXXtna3ZAZnl9QpJwdkDjg7OrTG52QKDFyPaDc3ZAuhHHIJdydkCB4KqP63d2QAHw8t13enZA7kNgkIJ3dkBm2LELC3p2QHeyjbTAfHZA2I+hWs6AdkBi5OWHDoF2QEme7wOgg3ZAfoyiACCLdkCWr3Jy0Yl2QP+TXzOtjXZA61/oNAuQdkCIUQdmCZF2QOWmbM7oknZAsLLyncGWdkA1ih/Zt5d2QJZz3d2omnZAoBNIOl2bdkAGbeoq0Zx2QPCpeqRqnXZAdx9xSEqbdkA+ywc6ZZ12QM3mo5+TmHZAog7pAh6ddkCIs+dV05h2QOWKZLIzmXZAp7P5Td6ZdkCaARsnNJN2QCgkdy+tlnZAXWlMBAWPdkCsjQoPi5B2QDnfwieNinZAMcMx+RqLdkC8diLj2Ix2QMfVwWPAh3ZA7ZTFvd58dkByFJnRCnt2QPA1NRCjenZArs10YCl6dkB/QD6JS3V2QHRECu7Rb3ZAkUFvxLxsdkDyV8XU8GV2QL8SZj1gZXZADPdZ6PlfdkDVMEkgO112QPxXsMZMVXZA3n58Y2ZXdkCGkSvFdlJ2QEKHaiNrSXZA7XfmksBKdkDTNI5cDkh2QJ9S7RQaPnZAR1z+uRM/dkDmldtqNT12QLGDdntSP3ZA+n1MH/M5dkA9qVnOPjl2QMQ2uFotOXZAzG6ntrs5dkDVsR8y4Dp2QG9mTVOLPHZAASvgNqk+dkD4199KI0F2QJjLkzHiQ3ZAgs4bks9GdkAABVak10l2QM193k/qTHZAw723xPtPdkD+/z6JBFN2QOSr+gYBVnZAaEVitvBYdkBU7CIM1Vt2QH6rGlWwXnZAk+Puq4RhdkAbqsMoU2R2QExpNmMbZ3ZAICdSUNtpdkDr6Dp2j2x2QK6e0WUzb3ZAZJnoXsJxdkCKhdoBOHR2QD2ltvCQdnZA3PltR8t4dkC6mSHa5np2QLR4TTXlfHZAnFeNYcl+dkCEvRh7l4B2QP0bji1UgnZAYhYzLQSEdkCy1yLCq4V2QLnW4XVOh3ZAIbat8O6IdkCeDFMIj4p2QGaspvovjHZAYKxZydKNdkANv4CjeI92QC9QNEojkXZAwllxXNWSdkBNys54kpR2QCEAPStflnZACqdpo0CYdkAo2IY2PJp2QPDb+bpWnHZAUUoszZOedkDuPigX9aB2QDfL8rB5o3ZAJ59drx2mdkDKcmb12ah2QELimVCkq3ZApPub42+udkBfav7WLbF2QFO3fkPOs3ZAIPfROkG2dkBEaa/Yd7h2QGim1D1lunZAcERXWv+7dkB0blZ1P712QH154WEivnZAbgGhXqi+dkA1bA+l1L52QHFjwbesvnZAAeZohDe+dkAUm451fL12QEJ7GJCCvHZAw9J4t0+7dkD3+QUu6Ll2QOvci19OuHZAMgH5+YK2dkAg6aFMhbR2QCyKMN5TsnZAYW6sIO2vdkCt23klUK12QKUchzZ9qnZAG4FROHandkCV5vDHPqR2QNWqJQ3coHZAxOeuSVSddkCvy+c4rpl2QPFf1VzwlXZAZbd1WiCSdkBImqyGQo52QNWztr5ZinZAeuotm2eGdkAxW2T/bIJ2QJlV4fNqfnZA5D9msGN6dkBX1DirW3Z2QIGUSYFacnZADtX6i2tudkA+e7EBnmp2QAw+7I4EZ3ZAmCm4ZbRjdkBWbGzXw2B2QP0RZpxIXnZAJ3cl/FVcdkAiXN4N+1p2QPCIoEhBWnZAHpO3kCtadkCYbfbitVp2QLfviafVW3ZAMGZ3o3pddkAlZm9rkF92QC1GyioAYnZAEsTNh7JkdkAR8xFvkWd2QEYXhpGJanZAxpAjcIttdkBeLizfi3B2QPwcMP6Dc3ZAFoTSs3B2dkDeaDDLUXl2QAR2vNoofHZABM7tIfh+dkB1g1KDwYF2QHG/CcGFhHZAAFLNDESHdkBB+GX0+Yl2QK67jqOjjHZAAdkgZzyPdkB4IaBXv5F2QH+lMgwolHZAjcBpOHOWdkBaKmYdn5h2QH0NEMCrmnZAZk2u3pqcdkDmzcGsb552QLY1a2MuoHZA1oxautuhdkDP8PRffKN2QBxSrYcUpXZAR2PInKemdkCNUlMmOKh2QK0xvdzHqXZAE3as6lerdkC4fdZM6ax2QMxJZD19rnZAyp6glxWwdkAmVc0ftbF2QL+fbJ9fs3ZAaNNYyxm1dkCKFOPy6LZ2QPjsznrSuHZA95VuM9u6dkA/xkOcBr12QOuQpitWv3ZAZXzOssjBdkCTnCL0WcR2QBX2Q30Cx3ZAYr3uzLfJdkB5uT3HbMx2QO/hD28Sz3ZA8gg91ZjRdkA7JXYk8NN2QBgROrAJ1nZAyGRB69jXdkCYNe4pVNl2QLiqSiB12nZA0axPCznbdkD1pEeHoNt2QH8fAxav23ZAqXGiZ2rbdkB18l962dp2QDxmKK4D2nZAzn6T5+/YdkBd7Izbo9d2QCws75kj1nZAi25OYnHUdkDjzc7EjdJ2QOCI6Qd40HZAQi+4wC7OdkDC7SGFsMt2QM2c2Jn8yHZAubGYgRPGdkAWhO5T98J2QIozuc6rv3ZAo6RKHja8dkC1RlxlnLh2QGI3eRvltHZAbqN9XRaxdkB7HhtUNa12QPAfVs9FqXZAPi/mL0qldkAGq8OsQ6F2QDYTefEynXZALdoxBBmZdkApahxT+JR2QJFiLcDVkHZA5ILsfbmMdkDthUiSr4h2QNlDk+DHhHZAztkOqhWBdkBODdqGrn12QFFfbe2oenZA3FwecBp4dkDPubXjFXZ2QKz4+qepdHZA0+3PR95zdkA2TPWetXN2QB2QZZ4qdHZA7lR/uzF1dkBQL4T4uXZ2QE4O62mueHZA7nslB/h6dkDyNSmQf312QBftrFAvgHZAtEXdj/SCdkDpyACIwIV2QDtVEtOIiHZAXRfbTUeLdkABiHqB+Y12QGl0GbSfkHZAjIw3yjuTdkDc/2Uk0JV2QBC7NqFemHZAxgLF5OeadkDzhBD2ap12QGioFjvln3ZAWOnBxVKidkA17HXhrqR2QI2IhsH0pnZAG2o9NCCpdkD41Ac8Lqt2QGBma3kdrXZAxaPEVu6udkBu1Kf0orB2QP27+9s+snZA5feBiMazdkAmPPLdPrV2QJ2cX6CstnZAKvwNBRS4dkDr+m1reLl2QMLh70bcunZAWfs0PEG8dkDCx35nqL12QILQccASv3ZAQ21hh4HAdkAoHZqn9sF2QAE+Pvt0w3ZA0o6PYQDFdkCXSaKencZ2QGcATgJSyHZAzsPP3SLKdkB99FrVFMx2QD1hdyIrznZA5yBL3WbQdkAHzqBlxtJ2QEAlQAFF1XZA8tL+vtrXdkB6M6+nfNp2QFivYzwd3XZAc/VtOK3fdkCtLc6FHOJ2QIh6TExb5HZAvW5//lrmdkDuNF5LD+h2QHYXhNlu6XZA3AJbunPqdkCxyXKKG+t2QEqx6Txn63ZACMFXmlrrdkDf/bGE++p2QEBafxVR6nZAj0Ccs2LpdkB31I87N+h2QNdznFTU5nZAVCqeAz7ldkD8XQaKduN2QOFR2Y5+4XZA6Ed6iVXfdkCtiodb+tx2QEU10f9r2nZAGhdyMarXdkAlPjbwtdR2QC8GScuR0XZAaEJr5kHOdkDqDkG3y8p2QFi4sYY1x3ZAzWydzYXDdkDUUTmKwr92QFTPj6/wu3ZAXfHvzxO4dkCb3T0XLrR2QPs7zaBAsHZAADZ/JEysdkDvcIblUah2QIQbKMJUpHZA0qfjOVqgdkDlI2Y8a5x2QL6iB5mUmHZAv9gJ8eaUdkCSG10fdpF2QDgiwxpYjnZADnHnbKOLdkDprl9mbYl2QJ6xQUXIh3ZA1YbKhsGGdkCckJiaYIZ2QJ74dh6mhnZAM3Gev4uHdkDZS/PDBIl2QEPDnSr/inZAlXEiQmWNdkDkHleCH5B2QBVyIXIWk3ZAOISfYjSWdkA78e7OZpl2QAhpAECfnHZAuXpnpNOfdkA603Ae/qJ2QBwp1lwcpnZAJmoWoS6pdkDJUt+cNqx2QItYZVE2r3ZAOf08Gy+ydkA5kCoFIbV2QDN0VHYKuHZA7+R1O+i6dkB1BuPhtb12QCCBd01uwHZAtujKawzDdkD+1WLni8V2QIstvLvpx3ZALJbnlyTKdkANKYIAPcx2QCt8eTI1znZAvgwczRDQdkC8CEtW1NF2QLwcIq2E03ZAl8/MgibVdkDxGOjuvdZ2QLqY3y1O2HZAzYhgktnZdkANPP+nYdt2QEE7UYDn3HZAXqyyGWzedkA58xrN8N92QPMTBK934XZAn6hvzQPjdkDNGdxAmeR2QAiMAwM95nZAQYn6jvTndkBs08JPxel2QHq8Xu2z63ZAal5zjcPtdkDEoj0e9e92QCYEf8RG8nZAc+UHgbP0dkAAkOYcM/d2QDbM0WS6+XZAnuHgrzv8dkBOhOupp/52QNyE50zuAHdAftY08P8Cd0Ccqb5UzgR3QAwCMZBNBndAyGuSv3QHd0CqiftwPgh3QDWkjbioCHdAa/LM8rQId0AyzYc7Zwh3QJkTRK3FB3dAPjWkftcGd0ByD+sapAV3QBhoP1AyBHdAVx5frYcCd0CqXngeqAB3QDKxwdWV/nZAb3cYfFH8dkAX4kOh2vl2QJYe1FYw93ZAQpRj21H0dkCdQow7P/F2QARPVsv57XZANjtMZYTqdkAO8z9k4+Z2QLSNAFcc43ZARBwZfTXfdkDBz/oiNdt2QC7nZ/0g13ZAcA84pP3SdkDO/QZMzs52QDVWV9KUynZAhpYwJFLGdkBALVr5BsJ2QG5Ugcu0vXZAHj6D5165dkCltbZsC7V2QPxYrQ3EsHZAFrKsa5asdkAHxQXxk6h2QI66TCDRpHZAzMlCYWShdkDQdSZoZJ52QFfZrWHmm3ZAsmBWG/yZdkB8b05gsph2QDs8lr4PmHZAQnUo3BOYdkCQ6G9zt5h2QGbPAPbsmXZAkn2hxKGbdkBU2S3Uv512QNOe944voHZABE0CudmidkBK2FogqaV2QDAhveyLqHZACtr2bXSrdkDA0ZxdWa52QFc+GJg1sXZANVmrZQe0dkBzaNN1z7Z2QIa3Y7iPuXZAjPpHQUq8dkCNU7FbAL92QO4nfuqxwXZAqeF+JF3EdkD+WiKs/sZ2QGf9p/WRyXZAiHS75RHMdkCgFcqHec52QO+k/77E0HZA3rLK1fDSdkD0gBnX/NR2QNPJzabp1nZAZUVJ2rnYdkC9VF9acdp2QOBEDeIU3HZA8bcbbqnddkAOsLe3M992QNesZ8y34HZAvIhF0jjidkCwRJ8AueN2QFWVqsk55XZAg+2eLLzmdkBuwHAgQeh2QHFtrQHK6XZAxOMv8VjrdkD2w3wO8ex2QHiFb4CW7nZACPZCRk7wdkD+mOHOHfJ2QAwxMGIK9HZAzv/sahj2dkC3NmK1Svh2QAnI6L2h+nZAACPcIxv9dkAnxK5Xsf92QIlx8JBbAndAN9oFFA4Fd0D2Y+3Cugd3QDwRI+9RCndAsON3V8MMd0DfPdM5/w53QDrWoFv3EHdAHHYg8J8Sd0AgSpFC8BN3QDituBXjFHdAUgHcrnYVd0A0etiOrBV3QAh/euKIFXdAw5grvREVd0BnHgU3ThR3QM2xPYhFE3dAdA7RPf4Rd0BjFZCgfRB3QKKUNlvHDndAtvlcbN0Md0DxdS1fwAp3QAILNL9vCHdAhPshtOoFd0By3hKpMAN3QI6tWOVBAHdAbvGV+x/9dkDtql39zfl2QF/EcmhQ9nZAUIXB0qzydkAS+MFh6e52QMZk0icM63ZAcmlxhRrndkBOkOiwGON2QISDR34J33ZAGqBAfe7adkA+yXZwyNZ2QCHWGBWY0nZAhMxXIV/OdkC5fHBVIcp2QMCzpnLlxXZAmfbb7LXBdkCfwDkwob12QI/fGWS5uXZAgLRBoRO2dkBCjtCqxrJ2QIL95UXpr3ZAW9HfX5CtdkD2Qfg5zat2QIMFv9GrqnZASa1aujGqdkBDc+2LXap2QDRvf/kmq3ZAwFxkj3+sdkDsWvP/U652QAUH+NaNsHZAHbovYRWzdkASfP2M07V2QBQk+4+zuHZADMV6JKS7dkBIkVhDmL52QCYZEk+HwXZAWBw5uWzEdkDqSME7R8d2QOA5EMsXynZAAqYabeDMdkC5xAUho892QO7E9vtg0nZAq52ElxnVdkD5l7Pbytd2QCJp2iVx2nZArLccugfddkCAxuNoid92QLpJZUjx4XZAwjqBYzvkdkCrpDFDZeZ2QCCAGz9u6HZAFf/fi1fqdkAk4MwJJOx2QKlFhN/X7XZAnESv8nfvdkA=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"3c7423e4-b08e-472f-a4a8-8ca05eb084ac\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"items\":[{\"id\":\"a3c8b95c-d11b-47f3-a476-d7d7d413fe17\",\"type\":\"LegendItem\"},{\"id\":\"5f4c5a4e-e606-464e-baaa-7946651b47c9\",\"type\":\"LegendItem\"},{\"id\":\"d529c203-013c-46d8-a1d7-56bba5662707\",\"type\":\"LegendItem\"},{\"id\":\"c6ff818c-556f-4b00-9f53-93b7733ae657\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"9d279072-c9a5-4d13-a204-e969cc2fb93c\",\"type\":\"Legend\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3f20e4c9-6ce4-451b-96a9-86a42fed544d\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"3c7423e4-b08e-472f-a4a8-8ca05eb084ac\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8fcc7669-0b6d-49b9-ae34-8389ca4a9070\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"30214f8e-6a00-4bb7-a105-e18c404effad\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8adf021d-d94a-4d88-a816-52b12b7deba1\",\"type\":\"CDSView\"}},\"id\":\"a8813775-2cfb-4418-8a06-822d6066aaf0\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"a6ba7615-ebc3-4d24-a948-3471fe002d8f\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"9411d544-4c7f-4f06-8b44-61aeb27a1ed4\",\"type\":\"HelpTool\"},{\"attributes\":{\"label\":{\"value\":\"Observed data\"},\"renderers\":[{\"id\":\"756a6950-de96-4e60-ab5c-71b6fd6fbb7b\",\"type\":\"GlyphRenderer\"}]},\"id\":\"c6ff818c-556f-4b00-9f53-93b7733ae657\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"Total fit\"},\"renderers\":[{\"id\":\"a8813775-2cfb-4418-8a06-822d6066aaf0\",\"type\":\"GlyphRenderer\"}]},\"id\":\"a3c8b95c-d11b-47f3-a476-d7d7d413fe17\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"78573bf7-78b6-4a52-8f42-dcf53b331a67\",\"type\":\"ColumnDataSource\"}},\"id\":\"7da38168-9071-43f0-bfbf-8fc74bc18d5f\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"e6b746a6-85ed-4258-bd73-2dc5897fdc31\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"42a7926d-7059-463d-85ee-8fa4490c4f0c\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"5ecf0eee-40ad-4bd9-9eba-b58a358fd858\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"6a223550-2b40-4acb-8dd5-ac44af6ffb7c\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"cf463af9-434b-47dd-8c6d-a1145a7f7f24\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"000fff9a-4a94-4746-a2b1-5cbc8b4a4530\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e69a567d-f3b5-40bb-b8d2-3a80964520ec\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"0a176af5-407b-4f89-8fa9-394a05b2cb6e\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"85c11e50-a1b3-4fc2-ab84-9fd96f69b7a3\",\"type\":\"CDSView\"}},\"id\":\"67771ba7-0977-4d8b-994a-a75e6336d5d0\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"b0880aa6-aecb-434e-b430-ef760dfb035f\",\"type\":\"BoxAnnotation\"}},\"id\":\"33edcea7-a7fa-4ee3-9f82-dd1fabaeaf99\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"1907d1c0-6bad-418b-87cc-e6790003b98d\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5499c635-0168-444d-a5b2-5999b39cb66e\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"93a3b313-b808-4c98-94f1-c396446484c8\",\"type\":\"BasicTicker\"}},\"id\":\"99e2f74f-0f8d-4d2b-9d9c-a645161405c7\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"e4c513d8-0ae7-4c32-8661-148e30d75ce2\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"93a3b313-b808-4c98-94f1-c396446484c8\",\"type\":\"BasicTicker\"}},\"id\":\"6f73679a-6f30-4e77-8a48-eb2c0e8d35d6\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"93a3b313-b808-4c98-94f1-c396446484c8\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a0c83144-4859-4331-a35e-73cca2a82d28\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"CO2 [ppm]\",\"formatter\":{\"id\":\"5ecf0eee-40ad-4bd9-9eba-b58a358fd858\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"1401bb4b-4192-46a6-a673-0b8f7cd911b8\",\"type\":\"BasicTicker\"}},\"id\":\"b2cfda99-0247-4bcb-a0fe-29ff7d8b694d\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"30214f8e-6a00-4bb7-a105-e18c404effad\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1401bb4b-4192-46a6-a673-0b8f7cd911b8\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"000fff9a-4a94-4746-a2b1-5cbc8b4a4530\",\"type\":\"ColumnDataSource\"}},\"id\":\"85c11e50-a1b3-4fc2-ab84-9fd96f69b7a3\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"b0880aa6-aecb-434e-b430-ef760dfb035f\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5cde919e-97af-40af-8010-09d7aa769b50\",\"type\":\"PanTool\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"1401bb4b-4192-46a6-a673-0b8f7cd911b8\",\"type\":\"BasicTicker\"}},\"id\":\"d1f342dd-6899-4941-bb71-fc8f45ba36aa\",\"type\":\"Grid\"},{\"attributes\":{\"label\":{\"value\":\"Long term trend + seasonal variation\"},\"renderers\":[{\"id\":\"5ad64e35-74fe-4857-8107-bd9c6afa7af1\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d529c203-013c-46d8-a1d7-56bba5662707\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"3c7423e4-b08e-472f-a4a8-8ca05eb084ac\",\"type\":\"ColumnDataSource\"}},\"id\":\"8adf021d-d94a-4d88-a816-52b12b7deba1\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"b4747a2e-b21d-4476-96cd-a697771e75d3\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a0c83144-4859-4331-a35e-73cca2a82d28\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"6a223550-2b40-4acb-8dd5-ac44af6ffb7c\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"70dbf0ca-c304-4432-a8a5-a8addbb2a667\",\"type\":\"CDSView\"}},\"id\":\"5ad64e35-74fe-4857-8107-bd9c6afa7af1\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"firebrick\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8fcc7669-0b6d-49b9-ae34-8389ca4a9070\",\"type\":\"Line\"}],\"root_ids\":[\"290f4625-4886-4a49-a5ba-fe63fdfc4262\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"1c47f866-bbe3-4a77-8746-644a8cc510d7\",\"elementid\":\"9596a2d0-c003-4e18-91ab-ff9dbe76a686\",\"modelid\":\"290f4625-4886-4a49-a5ba-fe63fdfc4262\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "290f4625-4886-4a49-a5ba-fe63fdfc4262"
}
},
"output_type": "display_data"
}
],
"source": [
"p = bokeh.plotting.figure(title=\"Fit to the Mauna Loa Data\", #x_axis_type='datetime', \n",
" plot_width=900, plot_height=600)\n",
"p.yaxis.axis_label = 'CO2 [ppm]'\n",
"p.xaxis.axis_label = 'Date'\n",
"\n",
"# total fit\n",
"p.line(xx, y_pred[0], line_width=1, line_color=\"firebrick\", legend=\"Total fit\")\n",
"\n",
"# trend\n",
"p.line(xx, y_pred[1], line_width=1, line_color=\"blue\", legend=\"Long term trend\")\n",
"\n",
"# trend + seasonal variation\n",
"p.line(xx, y_pred[1] + y_pred[2], line_width=1, line_color=\"green\", legend=\"Long term trend + seasonal variation\")\n",
"\n",
"# true value\n",
"p.circle(x, y, color=\"black\", legend=\"Observed data\")\n",
"p.legend.location = \"top_left\"\n",
"bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Please pay attention to the very wiggly red line, which is the full model fit. If you scroll up a bit and have a look at the fit of the full model produced by GPflow itself (in the plot function of this notebook via the GPflow `predict_y()` method) you will not see this wiggly pattern. Let's plot the $m_1+m_2$ (green), the $m$ from the hand created predictions (red) and the $m$ as generated by GPflow (blue) in one graph to see the differences."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"d646d384-8c33-43b8-9753-87521d903bad\":{\"roots\":{\"references\":[{\"attributes\":{\"callback\":null},\"id\":\"ecd4a516-ce7a-4cf7-a220-23353928bfa3\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"8d393c98-749e-4c75-aec2-83094572c5de\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"350f1464-9470-45a0-8881-8c060afb4277\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"87240787-b433-43e7-bed6-165b22113549\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"b1211719-cf73-415e-8b27-ddcff29d6f13\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"5873db3d-7330-431a-91c9-da99d14c0806\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8d393c98-749e-4c75-aec2-83094572c5de\",\"type\":\"BasicTicker\"}},\"id\":\"62b208c0-df75-40bf-a523-f5468673f5c6\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ba2ee78e-b46d-48f2-a97f-24f559721f11\",\"type\":\"BasicTicker\"}},\"id\":\"00418546-5563-46bf-b464-da00807af2e8\",\"type\":\"Grid\"},{\"attributes\":{\"items\":[{\"id\":\"544af33e-74f0-41dd-b7fd-fee1f7acdf68\",\"type\":\"LegendItem\"},{\"id\":\"d92dca81-954d-469d-81b0-6e02a720394c\",\"type\":\"LegendItem\"},{\"id\":\"20d8457c-4b9b-4fc4-93e9-ce4abf6997dc\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"6f676a88-28b1-4fac-a204-71b816cd7a10\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"88e53b48-6fa4-4ff2-a492-426b99e7bf8b\",\"type\":\"SaveTool\"},{\"attributes\":{\"plot\":{\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"8d393c98-749e-4c75-aec2-83094572c5de\",\"type\":\"BasicTicker\"}},\"id\":\"7c885380-bf8f-4adf-a3be-b8b404be8a6e\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"CO2 [ppm]\",\"formatter\":{\"id\":\"65234953-51df-46b6-bf99-87cabe67a73c\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ba2ee78e-b46d-48f2-a97f-24f559721f11\",\"type\":\"BasicTicker\"}},\"id\":\"c53b781f-5f29-41fc-a1b0-88e6d96d21b2\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"ba2ee78e-b46d-48f2-a97f-24f559721f11\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"odLdJN0XdkAKJ4Jufhl2QGbFoMEOG3ZAfBjb+44cdkAIewLFAB52QAMnkKZmH3ZAXoo8EMQgdkDvWeBIHSJ2QGkOEEl3I3ZAXt24g9ckdkA4vgCfQyZ2QBAOUiDBJ3ZAT0NiFFUpdkD13AC1Ayt2QIZuORfQLHZAvr+047sudkCrUI4gxzB2QP+QjhDwMnZAm9+BKDM1dkD+rkMeizd2QFE9dw7xOXZAS52et1w8dkDcGf7HxD52QG/25TcfQXZAShTOrGFDdkAkTR/egUV2QMLvO/d1R3ZAlQjr8DRJdkCsDNPdtkp2QMZZJib1S3ZA2ZW5sOpMdkBcaxj4k012QEqVjQvvTXZA5AGWfPtNdkAiZNY8uk12QIGaOm0tTXZA38WSI1hMdkA9XHkoPkt2QJzzOLTjSXZADPe4K01IdkAFWRjjfkZ2QMiAF+h8RHZAak/61kpCdkAHvnW86z92QL9zmgZiPXZAxjT7gq86dkB6+9Vt1Td2QLFJGY7UNHZA0EyGX60xdkDE0KNGYC52QDvKWM7tKnZADi+L6VYndkClouw2nSN2QKLQ6EHDH3ZATCp1vcwbdkDkw8uzvhd2QA4liKefE3ZAx/8fpHcPdkAUzL04UAt2QGnMQ100B3ZA/sEaQjADdkCBHJQIUf91QGpqsmik+3VANY+yRjj4dUBPW7Q7GvV1QL4HRxpX8nVAblbdcPrvdUBjvjwUDu51QIMyPreZ7HVAoM22laLrdUBhBGg3K+t1QK55ZVEz63VA4OZVxLfrdUDsb828sux1QEGHc/Ab7nVA75vT9+jvdUA+nfK9DfJ1QJ0g0AF99HVAeJ1E4Cj3dUBBwP9fA/p1QIfVHff+/HVAZUTlAw8AdkBZWR4xKAN2QLthMcJABnZAce8jw1AJdkBhJEYbUgx2QDkO6YNAD3ZA/fZgZRkSdkBwCKOd2xR2QPI2bjiHF3ZARyXgHB0adkCuq7i5nhx2QHKZUrUNH3ZALbMIqGshdkCscvXluSN2QEZ911v5JXZA1bX4fyoodkBjWGJYTSp2QHyNVZJhLHZAIOsZrGYudkB1zRwmXDB2QBL+7LtBMnZAKtmymxc0dkA7lHqX3jV2QIX4BkqYN3ZAMgknLUc5dkCuIoua7jp2QI0JaLqSPHZAOmagWzg+dkDwI7i65D92QPU+BzidQXZAi4e9BGdDdkAOZHbJRkV2QH4up05AR3ZA7voRK1ZJdkBuhaN/iUt2QJdfjMTZTXZA4fRUq0RQdkAFrDsZxlJ2QBRvyzhYVXZAotQspPNXdkCvj2ijj1p2QEiiWnwiXXZAqTK6z6FfdkAj3RX9AmJ2QLYnN4g7ZHZAmHfaekFmdkB9eye9C2h2QNBAhmCSaXZA62Ga2c5qdkABQAUnvGt2QNjmBuRWbHZA3A4iR51sdkDUzW4Nj2x2QGPRuFYtbHZAZASWcnprdkAXjO2keWp2QBahlOMuaXZALhBYkp5ndkCDpw9AzWV2QFXnq2m/Y3ZAwGh5RXlhdkDDTyWZ/l52QDICSZ1SXHZAl9TF7ndZdkDcIsqPcFZ2QD7XFvc9U3ZAQhVxLuFPdkCWS179Wkx2QO3KEh6sSHZA2Gh4e9VEdkBNBSNz2EB2QM8ZOBi3PHZAuX7Rc3Q4dkBfqgS+FDR2QN9Te4udL3ZAdvpX7BUrdkDhLll5hiZ2QOxOMUv5IXZA6BLs3HkddkC0LinXFBl2QPSK6MXXFHZAmCwIu9AQdkCiQjHhDQ12QCiRtgOdCXZAECiXEIsGdkBPHRGc4wN2QCYV1GuwAXZAEJE4EPn/dUCr73yRwv51QN48zDYP/nVA45Dfat79dUCHVpC+LP51QDvsXg30/nVAkDkQvisAdkByJI4gyQF2QEXNauC/A3ZAQmEeiAIGdkAva/QLgwh2QL9cnFYzC3ZAcgrnzQUOdkBXHy7K7RB2QCgZ/fffE3ZAXL2+odIWdkBcldncvRl2QOyffJmbHHZA/n97lmcfdkDvfpw7HyJ2QF/b0l/BJHZAGpsz/00ndkDlRnXpxSl2QKztmG4qLHZA0xlaEH0udkAJ4PM+vzB2QByMjSXyMnZAyK+FiRY1dkA1p26+LDd2QBjHr640OXZA4AHa9S07dkA3UC0KGD12QCMbXnDyPnZATKiT87xAdkAfD9Xbd0J2QHOxTh4kRHZAo2R9f8NFdkD/oFamWEd2QO++NRvnSHZACIJfMnNKdkDxNJbhAUx2QBVQlISYTXZAepCDkTxPdkDM/kdE81B2QPvp30TBUnZAgMj3T6pUdkDmE8nmsFZ2QFVZtwzWWHZAk3wXFhlbdkCAfn6Od112QGArlzTtX3ZAI3W9D3RidkDKCQycBGV2QBvQswuWZ3ZAUSNImB5qdkC1kUnhk2x2QExpYU/rbnZAj5DzehpxdkB6H4mLF3N2QBsjhY/ZdHZA3mMyxFh2dkBiyjLNjnd2QFTFltl2eHZADQF4sg15dkDnDf23UXl2QA9sD8pCeXZAtNL+IeJ4dkDaDjwfMnh2QEg0rwk2d3ZAWPdgz/F1dkAmom/AaXR2QMdvxkyicnZADUr0x59wdkAmbBg2Zm52QIGIeSP5a3ZAoJ8IiltpdkDD8D/Fj2Z2QL446pSXY3ZAwF+QL3RgdkBLbk5iJl12QDIRxL2uWXZA285QzQ1WdkAmvNdVRFJ2QP7q7phTTnZA1BE0mD1KdkBYTZVVBUZ2QBNziwuvQXZAh1yyWUA9dkD/YX5hwDh2QJTJTNE3NHZA8EJp2bAvdkCnQnELNyt2QEy/liLXJnZAfF3/tp4idkAe39Hdmx52QE1ZHbrcGnZAzchmA28XdkB7CWKHXxR2QJbqpa25EXZAPqU4BIcPdkCDPBLazg12QEeg1u+VDHZAQEb+Qd4LdkD5aX3wpgt2QMdWN0bsC3ZAyQwz4KcMdkBf9Mvy0A12QA3YkqlcD3ZAf1TxnD4RdkAl2dZVaRN2QAsrJNrOFXZABvWfN2EYdkAgMeYHExt2QIQDyeTXHXZA92Klx6QgdkA+kCxPcCN2QOLQgugyJnZActfn2+YodkCrEL48iCt2QAmyd8EULnZAJiR5hoswdkApEy/E7DJ2QPDDiXs5NXZAvhTZI3M3dkDBM/dcmzl2QJrcwa2zO3ZA6JvGUr09dkD8hP4fuT92QBtVunanQXZANmp0UYhDdkDrOvVeW0V2QC6r1C0gR3ZA6m0fYNZIdkBbxOTjfUp2QOhqECgXTHZAgHvzSqNNdkAsSls7JE92QLc878ecUHZAtfmnmxBSdkDrHgYmhFN2QK4PE278VHZAryRk1H5WdkCvGKfGEFh2QJ35F2q3WXZAZv84QndbdkA0TA7aU112QD3pZnZPX3ZAFh9S1WphdkDRPrEApWN2QHljCDf7ZXZAgzen62hodkCFDI3f52p2QJoCP1BwbXZAVZPDPPlvdkCMP1y4eHJ2QFhabkrkdHZAT16LUzF3dkDTgWByVXl2QP7Hm+NGe3ZAGqmu1/x8dkDbX6C4b352QIiXXmCZf3ZAn4lIOXWAdkBiM1ZMAIF2QFGZtDk5gXZAQ63OICCBdkA17Pt2toB2QM/WS9L+f3ZAGZufq/x+dkACMjIbtH12QICRD5QpfHZAUXdfomF6dkAU5vSvYHh2QGd5ztEqdnZAgXRvocNzdkBNl3kjLnF2QN62dL1sbnZANZeJOoFrdkAUNrPebGh2QPy+PYkwZXZA2PWL4sxhdkCe4SmUQl52QHwkzIiSWnZAev0aL75WdkBNWVO9x1J2QGRUXHCyTnZAfiu5woJKdkDOLh+XPkZ2QCLKLlPtQXZAJx9T55c9dkBdW5HASDl2QEpiPKULNXZAuM+hee0wdkA2tLnw+yx2QHa9QClFKXZAellcPdcldkAnHIrGvyJ2QE22N2ALIHZA8IdDK8UddkDmDcBb9ht2QItU4tWlGnZAlkTL4dcZdkDgkQj5jRl2QI9gLbLGGXZA6+n8zH0adkDmOhVdrBt2QFBRphNJHXZAchKHokgfdkBVaFo0niF2QOzlBvI7JHZA5M5SkBMndkBmoI3aFip2QADKrzU4LXZA0iuUEmswdkDR20FLpDN2QLCwq2XaNnZAbum9uQU6dkDGkmd7ID12QAFajqcmQHZAXzr/2RVDdkDx6vkO7UV2QDefX1isSHZAWO7HilRLdkAB2bnr5k12QPcGJuZkUHZAmyqcys9SdkCDVPCgKFV2QA2HlgxwV3ZAiCYbRqZZdkBynL4ny1t2QDyDTEzeXXZAjy7vOt9fdkDjWheczWF2QBR6lnCpY3ZAH20mR3NldkCq079nLGd2QJiklfLWaHZAnzMZ7XVqdkBa37w7DWx2QIsTy4WhbXZADkwTBzhvdkB8DOlO1nB2QBup7PGBcnZA+jK/M0B0dkBI6litFXZ2QPNJxvYFeHZASKznWhN6dkDWdKiYPnx2QEMXebiGfnZAsu8j9+iAdkBq4YHJYIN2QNTJnffnhXZAlMjbznaIdkBTxqdnBIt2QHEUifqGjXZAsefsQPSPdkCdHRTZQZJ2QCSPTKtllHZAX5rsR1aWdkCHBYs6C5h2QHgWmk59mXZAHGRXwaaadkBCB8Jgg5t2QNHdxZUQnHZA4ebkWk2cdkCfacEgOpx2QOt5RaPYm3ZAX/FCsyubdkAV2Cv2Npp2QPDkoaL+mHZA25JuPIeXdkDOIgNS1ZV2QNe12ELtk3ZAm5PPDdORdkAEHVcsio92QESTJnsVjXZAfEqOMXeKdkATd67osId2QJ+ibrHDhHZAG1bzN7CBdkDZTyj0dn52QFuvUmMYe3ZAIcoHSZV3dkDuEDDz7nN2QNTa1X0ncHZA2uoFEkJsdkCqU8sbQ2h2QPsYHnQwZHZAeIaQeRFgdkA4vIAV71t2QApKhazTV3ZAIebj98pTdkDkTsXH4U92QJPrtLElTHZAYJ8krKRIdkAv84ubbEV2QBhcR9eKQnZAqkslqwtAdkCQeKfb+T12QMgcSjZePHZAh+mcMD87dkC6amKfoDp2QEmSw4eDOnZABOYlD+Y6dkBSmjKLwzt2QFB/W7EUPXZATIY7488+dkB3i26V6UB2QJDupclUQ3ZAX9TclQNGdkDI6qyx50h2QF6voQDzS3ZAEZLIExhPdkCLDQeZSlJ2QNursLV/VXZAsLJXRa5YdkCuv5v8zlt2QBGbiW7cXnZAxM9o99JhdkCFX32OsGR2QD58zIZ0Z3ZANS+rQR9qdkCZ/erbsWx2QLASadwtb3ZAhYrX6JRxdkCAcgKI6HN2QFBWlfUpdnZACKjDB1p4dkCytForeXp2QP3U6XGHfHZAa0PlsYR+dkAwajCzcIB2QEV0dWNLgnZAkaZmDRWEdkAH2dGLzoV2QKMmL3N5h3ZAwzYCLhiJdkApPqEGrop2QG7moh0/jHZAsdvmS9CNdkB1JuvvZo92QJR41asIkXZA4oGXFbuSdkBePLNfg5R2QKJl5v9llnZAlT2EWmaYdkAmn1x3hpp2QFvU2MXGnHZAMNaz9SWfdkAWJRXloKF2QPvVKKgypHZAnr0np9SmdkC8nnDUfql2QKl3EvQnrHZAfc1U9MWudkC0IWNOTrF2QOjKRWy2s3ZAp1IpDfS1dkArj3Oj/bd2QM6+GqbKuXZAcSnA01O7dkD91wpjk7x2QMBnwh6FvXZAZDNCbia+dkDgnYdJdr52QPt0wxx1vnZAeLN7myS+dkD1SfqIh712QFKMB3ihvHZA9OIjh3a7dkC3gjccC7p2QKvx9KNjuHZAPQCgWIS2dkDpFBsScbR2QIuS1yItsnZAiMxrQruvdkC+oTCHHa12QJySTG9VqnZA+epY+GOndkCehO7ESaR2QAgQ304HoXZA9as6IZ2ddkBRQp4aDJp2QMFLK7FVlnZAnOjeNXySdkAJvGkSg452QHZMUv5uinZAWPH8JUaGdkAmt25AEIJ2QK58DpPWfXZAbyhL3aN5dkB7JxMvhHV2QAFxL6iEcXZAnFHrIrNtdkDjd2bNHWp2QN47lrTSZnZAQtlbR99jdkCxu7rXT2F2QI9K0h8vX3ZA9A6y0oVddkBmWyU+Wlx2QH6d6QOwW3ZAdeje7odbdkAJ5FDm31t2QCmImwGzXHZAiQyuu/lddkD0pfdCql92QAyje+K4YXZATy1kfhhkdkAhpkQcu2Z2QPlfqnCSaXZAuovaaJBsdkDtKp2qp292QH/LqQHMcnZA+6OTtvJ1dkDltV/LEnl2QKNnNBolfHZA8UFMWCR/dkCsyXj9DIJ2QA11PhTdhHZAfWds+JOHdkAvDfQJMop2QBKBJFq4jHZA/Z+NWiiPdkBsVNOUg5F2QOjzrW7Lk3ZAyysEAAGWdkAoPA78JJh2QAW2FLA3mnZAmcmVEzmcdkBGkLrqKJ52QBsWr/MGoHZAgTrxG9OhdkAjbvq2jaN2QOQS+a83pXZAkJsrstKmdkChgW5CYah2QJjQDMfmqXZAxrF8emerdkBpqz9L6Kx2QC2146ZurnZAP6/DNQCwdkAPEBiKorF2QM9YRMhas3ZAcOipTS21dkD3qrpcHbd2QMl1K9QsuXZAE4EQ9Vu7dkA7ko4+qb12QJtd+l4RwHZAzNdVPo/CdkDcPaYfHMV2QE2RE9mvx3ZADkVbHkHKdkAeJ6jZxcx2QBYSs40zz3ZATU+Nu3/RdkD16s5FoNN2QC36T82L1XZABe/JADrXdkDemhbdo9h2QFkCttrD2XZApV59B5badkB4QLMLGNt2QJVjOxxJ23ZAFAHk2inbdkCZVnAovNp2QAWv4uoC2nZA9oYLzQHZdkC94wf5vNd2QO2gt9U41nZAdUeixXnUdkActenug9J2QH643gxb0HZAw74ITwLOdkAlcQ5FfMt2QDyzntrKyHZA7KwNY+/FdkDXE4ay6sJ2QCfaK0a9v3ZAf+Bad2e8dkCfzuW36bh2QFza8tREtXZAL+OrO3qxdkBYjZU8jK12QGwGSUl+qXZAS9jUJ1WldkBf6YAYF6F2QBhzherLnHZA2P5k+3yYdkClKpshNZR2QOHWqH8AkHZAxGKSQOyLdkAjVwBBBoh2QOY0KKVchHZAp965Y/2AdkAeKYTH9X12QDCUCPFRe3ZAehhcXBx5dkAiL/RzXXd2QHyqnDQbdnZA/6Z66lh1dkBfDUoJF3V2QLwiPyRTdXZAzq9pBQh2dkDTEdfkLXd2QIuuXry6eHZAVmS+sqJ6dkD+WbGa2Hx2QO/9sHtOf3ZAaZeHH/aBdkCHW1abwYR2QLtPZMyjh3ZAaMwlxJCKdkCHhgsbfo12QAfcFyljkHZAtnLVITmTdkBKhZUS+5V2QGuJOcelmHZAlNrtlzebdkAODmIlsJ12QHr/0AoQoHZAp9XqiliidkA3LIY/i6R2QFLFidKppnZAtm6sw7WodkA6P9lAsKp2QD8Q/BGarHZAPTkDmXOudkAIYfvkPLB2QO9lF9X1sXZAG94CR56zdkC4e31MNrV2QP5Bx2C+tnZAQ51gmTe4dkB6czrMo7l2QJ0Z5qYFu3ZAhA9Ts2C8dkAAjH1Iub12QKxe4GYUv3ZAlUn4gXfAdkA7kg066MF2QLPuSgpsw3ZA/fEV8QfFdkB2tnQXwMZ2QFTi+36XyHZA117Puo/KdkA0MmW5qMx2QHYhp6LgznZASCeqzTPRdkBaxCPOnNN2QF0DfJkU1nZAqaQmwpLYdkDnJ27EDdt2QHEQGGF73XZAIvdVAdHfdkA7gfIbBOJ2QCjzUpkK5HZA4bMMLtvldkAqn2qpbed2QEkopzO76HZARi8Web7pdkAeHRDBc+p2QOGz4fDY6nZAK9cve+3qdkBRo7M+sup2QKEs+VUp6nZAMgG+3FXpdkDmFyWuO+h2QFIImR/f5nZATwdwvUTldkBikG8KceN2QFkaFUlo4XZAlnfBTS7fdkC1Allfxtx2QFUUVCQz2nZAOMwqoXbXdkAXDEZEktR2QI3EHwKH0XZABl9PfVXOdkDCu+U7/sp2QOP0z+OBx3ZAVCQ2fuHDdkCD9eK7HsB2QBj33jc8vHZAbiypsz24dkB0iEZJKLR2QEwe6I0CsHZAgdFbpNSrdkATA3o5qKd2QJe71mqIo3ZAPlznloGfdkAWud8WoZt2QLIfe+P0l3ZAlkFBKouUdkC/HVPVcZF2QGl/tA22jnZAL4rxumOMdkBd/g8MhYp2QOqsZgoiiXZApxdcQUCIdkBCpFh+4od2QARQB60IiHZARLZF06+IdkA7IPQs0ol2QILELWdni3ZAQAOL92SNdkCjQ9yKvo92QK/Z3YVmknZA17qnj06VdkAFGJEfaJh2QIXpuwWlm3ZAyp/P5veedkBgobykVKJ2QHQ2XLCwpXZA/JhiPgOpdkDGQAZgRax2QL+jK/9xr3ZAVBqAwIWydkBMJyHPfrV2QCH0zJhcuHZAk6g9fh+7dkD81feByL12QE832PhYwHZA41vJRNLCdkBT7KydNcV2QAhGteuDx3ZANiektr3JdkA5BLMn48t2QCBFbh/0zXZAWHQHWvDPdkD2meqe19F2QCwb4fWp03ZAhd/422fVdkD1GF1zEtd2QMIVW6ar2HZAsQA4PTbadkDp4Lzetdt2QJrr7/4u3XZA2o9zuKbedkBPruWSIuB2QAlz1Tuo4XZA88OpMj3jdkCbPaNw5uR2QBL1DRGo5nZAOTHH/4TodkC/xP2zfup2QLv32vyU7HZA7j7e4cXudkD13JubDfF2QCxsdKRm83ZA2hFL4Mn1dkDU7u/ZLvh2QENv/xGM+nZAlEsXW9f8dkBAlSw9Bv92QKq3uVsOAXdAmqBp1+UCd0D26jCogwR3QLztJunfBXdAa3waFPQGd0CfV2oquwd3QEHmmMgxCHdARBYcJ1YId0A3esAGKAh3QANab42oB3dANSRpFNoGd0DdfujrvwV3QJlS/BheBHdAR4hWELkCd0BvyE5y1QB3QAz7wsy3/nZACbXtY2T8dkCFYpwH3/l2QBru4PMq93ZAxc9Kwkr0dkBMZp1oQPF2QG2D+UcN7nZAsO9FSrLqdkCTPTINMOd2QHo0JxiH43ZA9CqeGrjfdkC/eOEvxNt2QOUSRCSt13ZAioU1t3XTdkDvYIDWIc92QLCas8+2ynZAd8+dcDvGdkAMHiEXuMF2QL79R6s2vXZA7Bd8g8K4dkDW/yYxaLR2QNQs5Tc1sHZAOD6bsDesdkCMkLXbfah2QGSOo6gVpXZAMnZYNgyidkCYPdBUbZ92QLifNg1DnXZAAHVxOJWbdkBXX4AoaZp2QI3C72vBmXZAmUUtrp2ZdkBnL1a3+pl2QNLNgYvSmnZAgfdgqhycdkCXfCRpzp12QA/h9mPbn3ZACoQSADaidkC/Qhb3z6R2QJeYpOSap3ZAik5UzYiqdkBnJkyYjK12QCMbxHWasHZASh0VLKizdkBWezlKrbZ2QC8fFDyjuXZA6cpzQ4W8dkAJTt1WUL92QLLYpOsCwnZAWq+Er5zEdkDcVyw5Hsd2QBxZQraIyXZAPNrind3LdkBOKA9sHs52QMH0yGxM0HZAbDQbmWjSdkCxS+mHc9R2QAZILHNt1nZAH8JQTlbYdkCl/dDsLdp2QAoqqDH023ZAQtuERKnddkA+91TGTd92QB4UbP7i4HZAo71p/GridkAtOaaq6ON2QGT81cxf5XZAdkoS69TmdkAQP2QpTeh2QP0CkQvO6XZA5Ol6LF3rdkCdeKLp/+x2QF97uQq77nZAU5TaapLwdkCbqbOoiPJ2QL6duuOe9HZAf5s4i9T2dkBoHr1CJ/l2QLCDx92S+3ZAUC8OdBH+dkBcSrSMmwB3QKMSDl4oA3dAHChdH64Fd0AnBgVmIgh3QPpmA4p6CndAUPARDKwMd0BYFAv3rA53QMBv/jd0EHdA1eTP6PkRd0C+NPSJNxN3QP+dpycoFHdA1ERrbMgUd0AQD3aeFhV3QM/He4oSFXdA86P4Xb0Ud0C9I2h0GRR3QKYLyRkqE3dAGd+yR/MRd0AoElVgeRB3QO201erADndAA5i6Vc4Md0Clva3BpQp3QI8pANdKCHdA4ybTqcAFd0DI3VmrCQN3QNzjPKwnAHdAM7Rt7Bv9dkDqAmY75/l2QLJMGiSK9nZAaYaWJAXzdkC8sfnsWO92QBKfcqSG63ZAaDZ1LZDndkBDhQdoeON2QIDZ+2tD33ZAwCeAt/badkB6FZpOmdZ2QCwAy8cz0nZAUoSiQ9DNdkBRoz1Nesl2QLqkcaQ+xXZAsNVv8SrBdkBYC5plTb12QGytB0y0uXZAWSSijm22dkBlZPM2hrN2QHHGnO8JsXZAlQTEjQKvdkBNN/+od612QEvibEhurHZAfWqxqOirdkBrHL8g5qt2QOLD2yRjrHZAYj/+almtdkB4AQstwK52QPV7V4aMsHZAjyfo57GydkCH4qSbIrV2QGN0ylDQt3ZAOUH8qKy6dkBYUdu9qb12QFanv5i6wHZAC2WBltPDdkCDljWx6sZ2QBTmPq/3yXZAeUQfNPTMdkBDrIe22892QEqlPlyr0nZAmMc0wmHVdkBLiAe1/td2QIW7J+GC2nZAmuFgge/cdkDkdgoSRt92QJ8hwg6I4XZAihvZv7bjdkCk33QZ0+V2QPsBIK/d53ZA09PkutbpdkA8YFg2vut2QNo4dwGU7XZAP7whE1jvdkA=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"426f4890-3eb6-49c3-8d72-225a33c92ac4\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"5301725d-fade-4ef4-b47a-2131bd781062\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"ba3734b2-33c5-41bf-8d24-48636982eed9\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_color\":\"firebrick\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1b0a55aa-bf64-49f0-82b5-0a6045e6228e\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"a43ba00d-8520-4311-90eb-0567b8117a11\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1b0a55aa-bf64-49f0-82b5-0a6045e6228e\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"8ac7df11-3acf-42f2-82aa-01bb005d7051\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"137c303f-ecad-4666-aee3-6a9915542add\",\"type\":\"CDSView\"}},\"id\":\"d4ce4aa6-9429-4a05-80e6-52b1cb2b6427\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"Long term trend + seasonal variation\"},\"renderers\":[{\"id\":\"d1a96259-204a-4995-9f29-913999888ce9\",\"type\":\"GlyphRenderer\"}]},\"id\":\"20d8457c-4b9b-4fc4-93e9-ce4abf6997dc\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ef9dbc18-fcfe-4f9e-905d-7ab2a3e01364\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"ba6e221d-eb2e-4646-bc20-544fe21d23ff\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"5873db3d-7330-431a-91c9-da99d14c0806\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"ba6e221d-eb2e-4646-bc20-544fe21d23ff\",\"type\":\"ColumnDataSource\"}},\"id\":\"44e2a204-58ea-4a1e-b862-2efac63ac889\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"ba6e221d-eb2e-4646-bc20-544fe21d23ff\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0b4c8fa6-076b-4a15-8846-5b437e90ab39\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"560c8ba0-311a-42e4-9178-17e22ef640f9\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"44e2a204-58ea-4a1e-b862-2efac63ac889\",\"type\":\"CDSView\"}},\"id\":\"d1a96259-204a-4995-9f29-913999888ce9\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"a43ba00d-8520-4311-90eb-0567b8117a11\",\"type\":\"ColumnDataSource\"}},\"id\":\"137c303f-ecad-4666-aee3-6a9915542add\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"560c8ba0-311a-42e4-9178-17e22ef640f9\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"a43ba00d-8520-4311-90eb-0567b8117a11\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0b4c8fa6-076b-4a15-8846-5b437e90ab39\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"48e3815b-529d-4668-88e7-fefe8f319053\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"62b208c0-df75-40bf-a523-f5468673f5c6\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"c53b781f-5f29-41fc-a1b0-88e6d96d21b2\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"62b208c0-df75-40bf-a523-f5468673f5c6\",\"type\":\"LinearAxis\"},{\"id\":\"7c885380-bf8f-4adf-a3be-b8b404be8a6e\",\"type\":\"Grid\"},{\"id\":\"c53b781f-5f29-41fc-a1b0-88e6d96d21b2\",\"type\":\"LinearAxis\"},{\"id\":\"00418546-5563-46bf-b464-da00807af2e8\",\"type\":\"Grid\"},{\"id\":\"ba3734b2-33c5-41bf-8d24-48636982eed9\",\"type\":\"BoxAnnotation\"},{\"id\":\"6f676a88-28b1-4fac-a204-71b816cd7a10\",\"type\":\"Legend\"},{\"id\":\"d4ce4aa6-9429-4a05-80e6-52b1cb2b6427\",\"type\":\"GlyphRenderer\"},{\"id\":\"5dba9da3-3373-4d60-810c-6a73cc5ed45c\",\"type\":\"GlyphRenderer\"},{\"id\":\"d1a96259-204a-4995-9f29-913999888ce9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"d2af030b-c3ed-4e9c-bf71-59fe2cd38455\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"86c825ce-9dab-4048-8690-b41323ee827e\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5367d9ee-16ea-4e51-8394-dc59550db6cb\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5172e54d-0626-40ce-a465-bd5f674cecad\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"ecd4a516-ce7a-4cf7-a220-23353928bfa3\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5301725d-fade-4ef4-b47a-2131bd781062\",\"type\":\"LinearScale\"}},\"id\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data_source\":{\"id\":\"426f4890-3eb6-49c3-8d72-225a33c92ac4\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ef9dbc18-fcfe-4f9e-905d-7ab2a3e01364\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"48e3815b-529d-4668-88e7-fefe8f319053\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"9be560a6-8013-4b80-aa7b-4310cb5e906b\",\"type\":\"CDSView\"}},\"id\":\"5dba9da3-3373-4d60-810c-6a73cc5ed45c\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"98dbb513-753f-4dc1-b782-b95b29c4e09b\",\"type\":\"PanTool\"},{\"id\":\"350f1464-9470-45a0-8881-8c060afb4277\",\"type\":\"WheelZoomTool\"},{\"id\":\"b7976f72-af8c-41dc-a178-6b9fc24850fb\",\"type\":\"BoxZoomTool\"},{\"id\":\"88e53b48-6fa4-4ff2-a492-426b99e7bf8b\",\"type\":\"SaveTool\"},{\"id\":\"b1211719-cf73-415e-8b27-ddcff29d6f13\",\"type\":\"ResetTool\"},{\"id\":\"87240787-b433-43e7-bed6-165b22113549\",\"type\":\"HelpTool\"}]},\"id\":\"86c825ce-9dab-4048-8690-b41323ee827e\",\"type\":\"Toolbar\"},{\"attributes\":{\"label\":{\"value\":\"Total fit by GPflow\"},\"renderers\":[{\"id\":\"5dba9da3-3373-4d60-810c-6a73cc5ed45c\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d92dca81-954d-469d-81b0-6e02a720394c\",\"type\":\"LegendItem\"},{\"attributes\":{\"plot\":null,\"text\":\"Fit to the Mauna Loa Data\"},\"id\":\"d2af030b-c3ed-4e9c-bf71-59fe2cd38455\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"Total fit by hand\"},\"renderers\":[{\"id\":\"d4ce4aa6-9429-4a05-80e6-52b1cb2b6427\",\"type\":\"GlyphRenderer\"}]},\"id\":\"544af33e-74f0-41dd-b7fd-fee1f7acdf68\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"65234953-51df-46b6-bf99-87cabe67a73c\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"426f4890-3eb6-49c3-8d72-225a33c92ac4\",\"type\":\"ColumnDataSource\"}},\"id\":\"9be560a6-8013-4b80-aa7b-4310cb5e906b\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"ba3734b2-33c5-41bf-8d24-48636982eed9\",\"type\":\"BoxAnnotation\"}},\"id\":\"b7976f72-af8c-41dc-a178-6b9fc24850fb\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"98dbb513-753f-4dc1-b782-b95b29c4e09b\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8ac7df11-3acf-42f2-82aa-01bb005d7051\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"5172e54d-0626-40ce-a465-bd5f674cecad\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"5367d9ee-16ea-4e51-8394-dc59550db6cb\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"d646d384-8c33-43b8-9753-87521d903bad\",\"elementid\":\"84072eb3-495f-4866-a7f1-63d7f9af0e4e\",\"modelid\":\"34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "34e0b5ab-84d9-40f7-a36e-c7a11fbabcf4"
}
},
"output_type": "display_data"
}
],
"source": [
"gpflow_mean, _ = m.predict_y(xx.reshape(-1,1))\n",
"\n",
"p = bokeh.plotting.figure(title=\"Fit to the Mauna Loa Data\", #x_axis_type='datetime', \n",
" plot_width=900, plot_height=600)\n",
"p.yaxis.axis_label = 'CO2 [ppm]'\n",
"p.xaxis.axis_label = 'Date'\n",
"\n",
"# total fit\n",
"p.line(xx, y_pred[0], line_width=1, line_color=\"firebrick\", legend=\"Total fit by hand\")\n",
"\n",
"# total fit as produced by GPflow\n",
"p.line(xx, gpflow_mean[:,0], line_width=1, line_color=\"blue\", legend=\"Total fit by GPflow\")\n",
"\n",
"# trend + seasonal variation\n",
"p.line(xx, y_pred[1] + y_pred[2], line_width=1, line_color=\"green\", legend=\"Long term trend + seasonal variation\")\n",
"\n",
"p.legend.location = \"top_left\"\n",
"bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see the difference is not big, but I am not entirely sure where this is coming from. Perhaps GPflow ignores white noise in its predictions (which actually makes sense)!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we then want to look at the seasonal variation (k2) and the short term variation (k4) we can do that as follows:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"414d9ec6-817d-4fbb-abf3-25a6ec2bb940\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"911e3493-6be8-4de4-84e3-74646a70e515\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"e16749f7-d5b4-45c6-9236-eba42553a184\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"911e3493-6be8-4de4-84e3-74646a70e515\",\"type\":\"LinearAxis\"},{\"id\":\"d7e8b611-e1e6-41ed-a973-7007d713d1f3\",\"type\":\"Grid\"},{\"id\":\"e16749f7-d5b4-45c6-9236-eba42553a184\",\"type\":\"LinearAxis\"},{\"id\":\"5eac67dd-f4f7-4fd1-ada0-0d8c06eaaa90\",\"type\":\"Grid\"},{\"id\":\"73521d6c-7ec9-4645-b388-ae9d250fc302\",\"type\":\"BoxAnnotation\"},{\"id\":\"ce5992b3-49ce-486a-9c52-7823c6698b0a\",\"type\":\"Legend\"},{\"id\":\"b4058cae-1531-4e42-a215-ded8d29bfedd\",\"type\":\"GlyphRenderer\"},{\"id\":\"130ed89e-986b-4f63-bc96-6a6c39de42b9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"d7e1c62f-35f8-42d0-b330-5d2ec91930fb\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"16c3f5de-dbc7-44ac-9966-6a21392f3003\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"82f2be89-7a3a-41aa-b8a4-a2286b9401d6\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"ad3f6c40-b333-4e3f-8f10-60a1fa7ec6fa\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"805bb296-0603-409c-964c-deaa2fd40efe\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"d0becccc-1a6f-4fa2-ba9a-f5495c2987eb\",\"type\":\"LinearScale\"}},\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"67f6d2bc-c54e-4220-b397-c035b569f13f\",\"type\":\"ColumnDataSource\"}},\"id\":\"5a90cf1f-4425-46d1-9c49-cd9c06e787c2\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"Fit to the Mauna Loa Data\"},\"id\":\"d7e1c62f-35f8-42d0-b330-5d2ec91930fb\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"262b61ee-d596-46c6-8054-4bf83580727c\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"82f2be89-7a3a-41aa-b8a4-a2286b9401d6\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"67f6d2bc-c54e-4220-b397-c035b569f13f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"cad0a9e1-cba6-4da4-8168-96a0358e74a4\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"73521d6c-7ec9-4645-b388-ae9d250fc302\",\"type\":\"BoxAnnotation\"}},\"id\":\"55ab6d43-cd3d-4aaf-87d0-01ac5d4f04cb\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"163e0838-78f5-4c47-9621-2d69c8c1ebcd\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"df63099e-7dad-4c46-925e-e56685298b75\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"7697d382-33f2-4d62-82a0-7a1340f87e58\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":{\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"c7e7f7c4-6d8e-440c-a02e-39a0a168c37a\",\"type\":\"BasicTicker\"}},\"id\":\"d7e8b611-e1e6-41ed-a973-7007d713d1f3\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"baebb58f-d732-40f6-90f6-934f605771c0\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"Seasonal variation\"},\"renderers\":[{\"id\":\"b4058cae-1531-4e42-a215-ded8d29bfedd\",\"type\":\"GlyphRenderer\"}]},\"id\":\"28643799-3f0a-4350-959a-dd8d5c757e85\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"68d1e1dd-ffa5-43a4-bf5d-97a667f98d23\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"67f6d2bc-c54e-4220-b397-c035b569f13f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ab127fb7-f17a-4f3a-98f5-e823ca92ad83\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"270d97f7-c2f2-4208-ad24-9fa754231c34\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5a90cf1f-4425-46d1-9c49-cd9c06e787c2\",\"type\":\"CDSView\"}},\"id\":\"b4058cae-1531-4e42-a215-ded8d29bfedd\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"firebrick\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ab127fb7-f17a-4f3a-98f5-e823ca92ad83\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"5e38f396-850b-4136-9559-44cb807d079d\",\"type\":\"ColumnDataSource\"}},\"id\":\"7354b20f-48a9-4099-ba8a-532d76cbc28b\",\"type\":\"CDSView\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"262b61ee-d596-46c6-8054-4bf83580727c\",\"type\":\"BasicTicker\"}},\"id\":\"5eac67dd-f4f7-4fd1-ada0-0d8c06eaaa90\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e90c9848-9cdf-4148-957d-6d2642cdb54f\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"Short term variation\"},\"renderers\":[{\"id\":\"130ed89e-986b-4f63-bc96-6a6c39de42b9\",\"type\":\"GlyphRenderer\"}]},\"id\":\"4d01be4e-3988-4803-b514-455c42fe2500\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"ad3f6c40-b333-4e3f-8f10-60a1fa7ec6fa\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"270d97f7-c2f2-4208-ad24-9fa754231c34\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"73521d6c-7ec9-4645-b388-ae9d250fc302\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"d0becccc-1a6f-4fa2-ba9a-f5495c2987eb\",\"type\":\"LinearScale\"},{\"attributes\":{\"items\":[{\"id\":\"28643799-3f0a-4350-959a-dd8d5c757e85\",\"type\":\"LegendItem\"},{\"id\":\"4d01be4e-3988-4803-b514-455c42fe2500\",\"type\":\"LegendItem\"}],\"location\":\"top_left\",\"plot\":{\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"ce5992b3-49ce-486a-9c52-7823c6698b0a\",\"type\":\"Legend\"},{\"attributes\":{\"callback\":null},\"id\":\"805bb296-0603-409c-964c-deaa2fd40efe\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"CO2 [ppm]\",\"formatter\":{\"id\":\"7697d382-33f2-4d62-82a0-7a1340f87e58\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"262b61ee-d596-46c6-8054-4bf83580727c\",\"type\":\"BasicTicker\"}},\"id\":\"e16749f7-d5b4-45c6-9236-eba42553a184\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"5e38f396-850b-4136-9559-44cb807d079d\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e90c9848-9cdf-4148-957d-6d2642cdb54f\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"baebb58f-d732-40f6-90f6-934f605771c0\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"7354b20f-48a9-4099-ba8a-532d76cbc28b\",\"type\":\"CDSView\"}},\"id\":\"130ed89e-986b-4f63-bc96-6a6c39de42b9\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"e17c0b63-5c71-4236-bb62-babe5cff0c28\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"df63099e-7dad-4c46-925e-e56685298b75\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"c7e7f7c4-6d8e-440c-a02e-39a0a168c37a\",\"type\":\"BasicTicker\"}},\"id\":\"911e3493-6be8-4de4-84e3-74646a70e515\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"c7e7f7c4-6d8e-440c-a02e-39a0a168c37a\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"cad0a9e1-cba6-4da4-8168-96a0358e74a4\",\"type\":\"PanTool\"},{\"id\":\"68d1e1dd-ffa5-43a4-bf5d-97a667f98d23\",\"type\":\"WheelZoomTool\"},{\"id\":\"55ab6d43-cd3d-4aaf-87d0-01ac5d4f04cb\",\"type\":\"BoxZoomTool\"},{\"id\":\"163e0838-78f5-4c47-9621-2d69c8c1ebcd\",\"type\":\"SaveTool\"},{\"id\":\"e17c0b63-5c71-4236-bb62-babe5cff0c28\",\"type\":\"ResetTool\"},{\"id\":\"9c004444-07db-4bcc-9820-3458ef312c6f\",\"type\":\"HelpTool\"}]},\"id\":\"16c3f5de-dbc7-44ac-9966-6a21392f3003\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"9c004444-07db-4bcc-9820-3458ef312c6f\",\"type\":\"HelpTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":null,\"selection_policy\":null},\"id\":\"5e38f396-850b-4136-9559-44cb807d079d\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"414d9ec6-817d-4fbb-abf3-25a6ec2bb940\",\"elementid\":\"6d306179-6119-4c51-8fb4-2c11caea9073\",\"modelid\":\"4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "4fab1e0e-cdcb-4a07-b8b2-38dab3dabc49"
}
},
"output_type": "display_data"
}
],
"source": [
"p = bokeh.plotting.figure(title=\"Fit to the Mauna Loa Data\", #x_axis_type='datetime', \n",
" plot_width=900, plot_height=600)\n",
"p.yaxis.axis_label = 'CO2 [ppm]'\n",
"p.xaxis.axis_label = 'Date'\n",
"\n",
"# total fit\n",
"p.line(xx, y_pred[2], line_width=1, line_color=\"firebrick\", legend=\"Seasonal variation\")\n",
"\n",
"# trend\n",
"p.line(xx, y_pred[3], line_width=1, line_color=\"blue\", legend=\"Short term variation\")\n",
"\n",
"# true value\n",
"p.legend.location = \"top_left\"\n",
"bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we want to see how the seasonal variation changed over the years we can do that as follows:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# plot several years\n",
"\n",
"def dates_to_idx(timelist):\n",
" reference_time = pd.to_datetime('1959-01-01')\n",
" t = (timelist - reference_time) / pd.Timedelta(1, \"Y\")\n",
" return np.asarray(t)+1959\n",
"\n",
"p = bokeh.plotting.figure(title=\"Several years of the seasonal component\",\n",
" plot_width=900, plot_height=600)\n",
"p.yaxis.axis_label = 'Δ CO2 [ppm]'\n",
"p.xaxis.axis_label = 'Month'\n",
"\n",
"colors = bokeh.palettes.brewer['Paired'][5]\n",
"years = [\"1960\", \"1970\", \"1980\", \"1990\", \"2000\"]\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Predicting year 1960\n",
"Predicting year 1970\n",
"Predicting year 1980\n",
"Predicting year 1990\n",
"Predicting year 2000\n"
]
},
{
"data": {
"text/html": [
"\n",
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"9fea85f7-5f8a-4657-80ac-55e987ac7524\":{\"roots\":{\"references\":[{\"attributes\":{\"line_color\":\"#fb9a99\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3ec4f224-4247-42d4-9a60-d69cea338cf3\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#a6cee3\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b93fce72-dfb6-42cf-be63-f6bf4e4983ed\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"098b0ab1-176a-4650-88d1-776d8a7afc44\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"label\":{\"value\":\"1960\"},\"renderers\":[{\"id\":\"c9c3f1bb-a527-42a6-a8f1-9303e3460ce5\",\"type\":\"GlyphRenderer\"}]},\"id\":\"43f7d2bb-64b6-4c17-9b4c-6ad3ac9253e5\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"48ad6dfa-0a3c-4f3a-908d-07f17866af28\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"2009c15f-77a3-4949-8397-84bb6dbcfae5\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"9d1d3eb6-91f5-4371-9fd6-a10cdd77635c\",\"type\":\"LinearAxis\"}],\"plot_width\":900,\"renderers\":[{\"id\":\"2009c15f-77a3-4949-8397-84bb6dbcfae5\",\"type\":\"LinearAxis\"},{\"id\":\"7837410a-6cf1-42d5-940a-2257615746c7\",\"type\":\"Grid\"},{\"id\":\"9d1d3eb6-91f5-4371-9fd6-a10cdd77635c\",\"type\":\"LinearAxis\"},{\"id\":\"9e412721-e945-4618-8c80-548040a80fc2\",\"type\":\"Grid\"},{\"id\":\"83803ad0-044d-4bf1-8682-f0ffb974d1d4\",\"type\":\"BoxAnnotation\"},{\"id\":\"41febf70-eb06-4629-8377-fda52e5ae65a\",\"type\":\"Legend\"},{\"id\":\"c9c3f1bb-a527-42a6-a8f1-9303e3460ce5\",\"type\":\"GlyphRenderer\"},{\"id\":\"91aaaf5c-4bcb-4c66-aada-c66ff2291ce3\",\"type\":\"GlyphRenderer\"},{\"id\":\"b6b7fe15-003c-429a-8b13-7d8ae10becd3\",\"type\":\"GlyphRenderer\"},{\"id\":\"78d456fd-a27f-4836-ba8c-38a6b65762ad\",\"type\":\"GlyphRenderer\"},{\"id\":\"6cc7ec7d-485e-4d66-b207-55273aa187dc\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"14d4ae39-9c73-43ba-b885-cb257b373070\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"b99b9dff-d997-49da-b760-c3193c876cbc\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"4415a62b-d190-4513-ab16-d460b4b5db00\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"74c7a170-b0d3-4ca4-9c63-a9d25ca6b97b\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"fd131979-9d18-4901-a90e-d93e2f69cc7d\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"f64ec160-43ca-4efc-bca7-3495d9356d24\",\"type\":\"LinearScale\"}},\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"#1f78b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b5967e52-ea71-48a2-957a-43aa0a54d96b\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"6d724b49-a853-4782-860d-7efb6aac2edc\",\"type\":\"ColumnDataSource\"}},\"id\":\"ea3f17ec-7030-40ed-91d3-de77f2541b80\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"Several years of the seasonal component\"},\"id\":\"14d4ae39-9c73-43ba-b885-cb257b373070\",\"type\":\"Title\"},{\"attributes\":{\"callback\":null},\"id\":\"4415a62b-d190-4513-ab16-d460b4b5db00\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"ac7e8c40-cc30-4086-9f16-e5b7b26d579a\",\"type\":\"ColumnDataSource\"}},\"id\":\"6bff334c-ac02-4ca6-a32a-dd1fd2c2db0c\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"9e8e4b50-cb0f-4d87-bff9-9e5194ed40eb\",\"type\":\"PanTool\"},{\"id\":\"1c14da6e-646e-45cb-aff9-167edfcf82d9\",\"type\":\"WheelZoomTool\"},{\"id\":\"d221d205-a9b0-4bb4-abb5-cdf277b0196c\",\"type\":\"BoxZoomTool\"},{\"id\":\"072ed7f8-bd74-48b5-a0bf-40885b8c71c3\",\"type\":\"SaveTool\"},{\"id\":\"3c37011c-fbff-43dc-8c8c-04793019af2f\",\"type\":\"ResetTool\"},{\"id\":\"369854f1-c20a-4c18-8f74-b56ba17bbf0a\",\"type\":\"HelpTool\"}]},\"id\":\"b99b9dff-d997-49da-b760-c3193c876cbc\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"fc2b85bb-3dc2-4233-80f2-8137b70ed18e\",\"type\":\"ColumnDataSource\"}},\"id\":\"ac9dd486-4122-4c34-adbd-0c10b319f2a9\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8+puhtvEH1P3tM0dt4g/o/uPK5STXF/z97TNHbeIMCQJqfxRJXJAVAuPK5STXFB0DXRa6AE2YKQPaYorfxBg1AFeyW7s+nD0Can8USVyQRQCrJPy7GdBJAuPK5STXFE0BIHDRlpBUVQNdFroATZhZAZ28onIK2F0D2mKK38QYZQIbCHNNgVxpAFeyW7s+nG0CkFREKP/gcQDQ/iyWuSB5Aw2gFQR2ZH0AqyT8uxnQgQPHd/Lv9HCFAuPK5STXFIUCAB3fXbG0iQEgcNGWkFSNAEDHx8tu9I0DXRa6AE2YkQJ9aaw5LDiVAZ28onIK2JUAvhOUpul4mQPaYorfxBidAvq1fRSmvJ0CGwhzTYFcoQE3X2WCY/yhAFeyW7s+nKUA=\",\"dtype\":\"float64\",\"shape\":[37]},\"y\":{\"__ndarray__\":\"jCWB2mLQwT9QgIjzEvvXPzSAg7U3IuM/WEVNANcv6j8O0UeBZrHwPy071xcNmfQ/X0alsgQs+T+IhhI5AK7+P9yq02fHeAJAuAQy/xGYBUAn0VB+4SIIQCI1YeiYmwlAHVtTFo7TCUB7GIZ0efEIQHd5ku9QPwdAYC5sqdDoBEAQ9TrrWeEBQMRUDOB9C/w/vEK2TIeu8j/oB8PmaVDgPyDPgua+uca/mIhrp7yz678K3pdcGbj4vwKqZkc4lgHAVAJkw6wrBsAvL3PfomYJwAUSukM0pwrAYY2URBDOCcAiAaB7n1kHwFnFY0/HGgTAVtvD5i/AAMCOKqfP2ib7v93RIb/sGvW/SwASqjNn7r++2m0FaA3jv9rOhxmuX9G/QI0cfarMhz8=\",\"dtype\":\"float64\",\"shape\":[37]}},\"selected\":null,\"selection_policy\":null},\"id\":\"fc2b85bb-3dc2-4233-80f2-8137b70ed18e\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"74c7a170-b0d3-4ca4-9c63-a9d25ca6b97b\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"fe416150-394c-4411-bc76-56f096798ad2\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"b93fce72-dfb6-42cf-be63-f6bf4e4983ed\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"48ad6dfa-0a3c-4f3a-908d-07f17866af28\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"82c4447c-3dfd-40d0-94d9-03ee5cab6d02\",\"type\":\"CDSView\"}},\"id\":\"c9c3f1bb-a527-42a6-a8f1-9303e3460ce5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"fd131979-9d18-4901-a90e-d93e2f69cc7d\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"1970\"},\"renderers\":[{\"id\":\"91aaaf5c-4bcb-4c66-aada-c66ff2291ce3\",\"type\":\"GlyphRenderer\"}]},\"id\":\"126ba4e2-8344-4ba4-b6cd-b512db75874d\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"d7f167ec-dc2e-4726-ac7e-825508bcac4f\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"f64ec160-43ca-4efc-bca7-3495d9356d24\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#33a02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c11c11a3-0433-4220-9e2d-03b0d1b90c90\",\"type\":\"Line\"},{\"attributes\":{\"plot\":{\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e82c6ffa-65df-4f16-80e2-287682b75430\",\"type\":\"BasicTicker\"}},\"id\":\"7837410a-6cf1-42d5-940a-2257615746c7\",\"type\":\"Grid\"},{\"attributes\":{\"label\":{\"value\":\"1980\"},\"renderers\":[{\"id\":\"b6b7fe15-003c-429a-8b13-7d8ae10becd3\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d5530766-d994-450e-9a82-075c16dde6bb\",\"type\":\"LegendItem\"},{\"attributes\":{\"axis_label\":\"Month\",\"formatter\":{\"id\":\"d7f167ec-dc2e-4726-ac7e-825508bcac4f\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e82c6ffa-65df-4f16-80e2-287682b75430\",\"type\":\"BasicTicker\"}},\"id\":\"2009c15f-77a3-4949-8397-84bb6dbcfae5\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e82c6ffa-65df-4f16-80e2-287682b75430\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"\\u0394 CO2 [ppm]\",\"formatter\":{\"id\":\"098b0ab1-176a-4650-88d1-776d8a7afc44\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"f978acc5-a27e-4bb0-b77e-771fd3945627\",\"type\":\"BasicTicker\"}},\"id\":\"9d1d3eb6-91f5-4371-9fd6-a10cdd77635c\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a9ac0df5-05ae-4115-ad67-80755cd652cf\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"f978acc5-a27e-4bb0-b77e-771fd3945627\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b951b36e-8a09-4d38-8c44-04a87207bf93\",\"type\":\"Line\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"f978acc5-a27e-4bb0-b77e-771fd3945627\",\"type\":\"BasicTicker\"}},\"id\":\"9e412721-e945-4618-8c80-548040a80fc2\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"fc2b85bb-3dc2-4233-80f2-8137b70ed18e\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"760b0274-ed6d-4745-939c-b19911cab137\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b951b36e-8a09-4d38-8c44-04a87207bf93\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"ac9dd486-4122-4c34-adbd-0c10b319f2a9\",\"type\":\"CDSView\"}},\"id\":\"b6b7fe15-003c-429a-8b13-7d8ae10becd3\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"e22c7ff0-6c04-4800-bb36-b8cfd6403341\",\"type\":\"ColumnDataSource\"}},\"id\":\"43663ad3-11b5-49ef-8b03-156152376d3f\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8+puhtvEH1P3tM0dt4g/o/uPK5STXF/z97TNHbeIMCQJqfxRJXJAVAuPK5STXFB0DXRa6AE2YKQPaYorfxBg1AFeyW7s+nD0Can8USVyQRQCrJPy7GdBJAuPK5STXFE0BIHDRlpBUVQNdFroATZhZAZ28onIK2F0D2mKK38QYZQIbCHNNgVxpAFeyW7s+nG0CkFREKP/gcQDQ/iyWuSB5Aw2gFQR2ZH0AqyT8uxnQgQPHd/Lv9HCFAuPK5STXFIUCAB3fXbG0iQEgcNGWkFSNAEDHx8tu9I0DXRa6AE2YkQJ9aaw5LDiVAZ28onIK2JUAvhOUpul4mQPaYorfxBidAvq1fRSmvJ0CGwhzTYFcoQE3X2WCY/yhAFeyW7s+nKUA=\",\"dtype\":\"float64\",\"shape\":[37]},\"y\":{\"__ndarray__\":\"QMTsdqfurT/0/3G/e23RP9igPKO6wd0/eGZYSICl5D+aVwJE7VnqPz7Ws1OfRfA/YaSqlOYB9D/Mhx5kZrb4PwzzqQ0/V/4/JENQGbciAkBnHwSWlLkEQOuJFYEhbgZAjNn1+kgDB0BSlMx32ZQGQOg6/GfebAVAu1z2aJ66A0BmtSH7ZGgBQFZSkEUXbvw/3gwODjUS9D+0HLBdyGDkP8CqZlmNH5C/Wu8EaNLA5L/2qKeAlNbzvxYQe1jVo/y/0Ll6MHpDAsC3Xbvr8U4FwJFqXyzP3QbAGb0uJA+cBsBuaVsfD8EEwNY8e2059wHAjHc2Jmjv/b8GrPpV1Fv4v2waw7KISvO/uN0vxwTu7L/CsYIGj3Ljvzx5kLv/stS/2KCyTTBTsL8=\",\"dtype\":\"float64\",\"shape\":[37]}},\"selected\":null,\"selection_policy\":null},\"id\":\"fe416150-394c-4411-bc76-56f096798ad2\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#b2df8a\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"760b0274-ed6d-4745-939c-b19911cab137\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"fe416150-394c-4411-bc76-56f096798ad2\",\"type\":\"ColumnDataSource\"}},\"id\":\"82c4447c-3dfd-40d0-94d9-03ee5cab6d02\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"e22c7ff0-6c04-4800-bb36-b8cfd6403341\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c11c11a3-0433-4220-9e2d-03b0d1b90c90\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a7f93a1a-f64a-462a-8e91-a8786d588a6e\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"43663ad3-11b5-49ef-8b03-156152376d3f\",\"type\":\"CDSView\"}},\"id\":\"78d456fd-a27f-4836-ba8c-38a6b65762ad\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a6de950d-abdd-4c61-b24c-1cc4d4288d33\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"1990\"},\"renderers\":[{\"id\":\"78d456fd-a27f-4836-ba8c-38a6b65762ad\",\"type\":\"GlyphRenderer\"}]},\"id\":\"3c5ab2e2-e053-46c4-bd2a-60e5bc8370d8\",\"type\":\"LegendItem\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"83803ad0-044d-4bf1-8682-f0ffb974d1d4\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8+puhtvEH1P3tM0dt4g/o/uPK5STXF/z97TNHbeIMCQJqfxRJXJAVAuPK5STXFB0DXRa6AE2YKQPaYorfxBg1AFeyW7s+nD0Can8USVyQRQCrJPy7GdBJAuPK5STXFE0BIHDRlpBUVQNdFroATZhZAZ28onIK2F0D2mKK38QYZQIbCHNNgVxpAFeyW7s+nG0CkFREKP/gcQDQ/iyWuSB5Aw2gFQR2ZH0AqyT8uxnQgQPHd/Lv9HCFAuPK5STXFIUCAB3fXbG0iQEgcNGWkFSNAEDHx8tu9I0DXRa6AE2YkQJ9aaw5LDiVAZ28onIK2JUAvhOUpul4mQPaYorfxBidAvq1fRSmvJ0CGwhzTYFcoQE3X2WCY/yhAFeyW7s+nKUA=\",\"dtype\":\"float64\",\"shape\":[37]},\"y\":{\"__ndarray__\":\"7FjPaO1TzD9v0jPCWULdP6MFtTEd5+U/1MfrDtMw7T/OECYcwVvyP1ZAddBcffY/6NB/FZVd+z9rhZLKWpsAQFCvULeA4QNAsIoVj3gQB0C3oNHg7Y8JQAAw2Sj/5QpArteE/SbsCkBAwK40/swJQIA9UAx5zwdApuSN7WEcBUAYhDgvFa4BQPgfTMr85vo/+FODTab98D9gvO0CAW7YP+CR1F9E5tS/CI25nyG88L/MZ5mw20f8v+yHs3AprQPAtkDtehpeCMBKmrzsDWkLwGCOIASvPQzABhOj1k7oCsBkSOEv/w4IwGbWFClijQTAFtrjhlkBAcC16pYePz37v7DWSvvJsPS/5tMqteWb7L9WMYVlL5ngv/AN/wYq4ce/IMsb1WyxuD8=\",\"dtype\":\"float64\",\"shape\":[37]}},\"selected\":null,\"selection_policy\":null},\"id\":\"e22c7ff0-6c04-4800-bb36-b8cfd6403341\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"9e8e4b50-cb0f-4d87-bff9-9e5194ed40eb\",\"type\":\"PanTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a7f93a1a-f64a-462a-8e91-a8786d588a6e\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1c14da6e-646e-45cb-aff9-167edfcf82d9\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"6d724b49-a853-4782-860d-7efb6aac2edc\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"b5967e52-ea71-48a2-957a-43aa0a54d96b\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a6de950d-abdd-4c61-b24c-1cc4d4288d33\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"ea3f17ec-7030-40ed-91d3-de77f2541b80\",\"type\":\"CDSView\"}},\"id\":\"91aaaf5c-4bcb-4c66-aada-c66ff2291ce3\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"83803ad0-044d-4bf1-8682-f0ffb974d1d4\",\"type\":\"BoxAnnotation\"}},\"id\":\"d221d205-a9b0-4bb4-abb5-cdf277b0196c\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"072ed7f8-bd74-48b5-a0bf-40885b8c71c3\",\"type\":\"SaveTool\"},{\"attributes\":{\"items\":[{\"id\":\"43f7d2bb-64b6-4c17-9b4c-6ad3ac9253e5\",\"type\":\"LegendItem\"},{\"id\":\"126ba4e2-8344-4ba4-b6cd-b512db75874d\",\"type\":\"LegendItem\"},{\"id\":\"d5530766-d994-450e-9a82-075c16dde6bb\",\"type\":\"LegendItem\"},{\"id\":\"3c5ab2e2-e053-46c4-bd2a-60e5bc8370d8\",\"type\":\"LegendItem\"},{\"id\":\"1e644208-5acd-43af-8467-2b67bcdce42a\",\"type\":\"LegendItem\"}],\"location\":\"bottom_left\",\"plot\":{\"id\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"41febf70-eb06-4629-8377-fda52e5ae65a\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"3c37011c-fbff-43dc-8c8c-04793019af2f\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8+puhtvEH1P3tM0dt4g/o/uPK5STXF/z97TNHbeIMCQJqfxRJXJAVAuPK5STXFB0DXRa6AE2YKQPaYorfxBg1AFeyW7s+nD0Can8USVyQRQCrJPy7GdBJAuPK5STXFE0BIHDRlpBUVQNdFroATZhZAZ28onIK2F0D2mKK38QYZQIbCHNNgVxpAFeyW7s+nG0CkFREKP/gcQDQ/iyWuSB5Aw2gFQR2ZH0AqyT8uxnQgQPHd/Lv9HCFAuPK5STXFIUCAB3fXbG0iQEgcNGWkFSNAEDHx8tu9I0DXRa6AE2YkQJ9aaw5LDiVAZ28onIK2JUAvhOUpul4mQPaYorfxBidAvq1fRSmvJ0CGwhzTYFcoQE3X2WCY/yhAFeyW7s+nKUA=\",\"dtype\":\"float64\",\"shape\":[37]},\"y\":{\"__ndarray__\":\"VJVe86DP0j+DojnHysrgPwg7leax8ec/QNxlX9co7z+AIBvSglXzP7Ydb9j5gPc/Wh7CxEh9/D/t0VfDZ0IBQEUiIthnpARAvlXB6f3sB0AMlcMnBH4KQFTShJLq2QtAaidhqa/WC0BkuDZvGZoKQDyYX7J0ZwhAtKnc2L9qBUBZFz8ubqsBQLjW80VgVPo/aEOoykIH8D+AHX5x/3jTP4Ai52TSHtu/mApPElHF8r84x04wvO3+v1SVy2XYRAXASF9aqzURCsCIkipp5f8MwLQBIspbjQ3AAu82SBbjC8Cx6q4TVb8IwNbDLcH5AgXARn37xqZBAcAtyzXRqkj7vwZEwoLvPfS/iK9T5KPW6r/4JgWug4fcv6DxH59yiLu/8KF7AS4qxj8=\",\"dtype\":\"float64\",\"shape\":[37]}},\"selected\":null,\"selection_policy\":null},\"id\":\"ac7e8c40-cc30-4086-9f16-e5b7b26d579a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"369854f1-c20a-4c18-8f74-b56ba17bbf0a\",\"type\":\"HelpTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8+puhtvEH1P3tM0dt4g/o/uPK5STXF/z97TNHbeIMCQJqfxRJXJAVAuPK5STXFB0DXRa6AE2YKQPaYorfxBg1AFeyW7s+nD0Can8USVyQRQCrJPy7GdBJAuPK5STXFE0BIHDRlpBUVQNdFroATZhZAZ28onIK2F0D2mKK38QYZQIbCHNNgVxpAFeyW7s+nG0CkFREKP/gcQDQ/iyWuSB5Aw2gFQR2ZH0AqyT8uxnQgQPHd/Lv9HCFAuPK5STXFIUCAB3fXbG0iQEgcNGWkFSNAEDHx8tu9I0DXRa6AE2YkQJ9aaw5LDiVAZ28onIK2JUAvhOUpul4mQPaYorfxBidAvq1fRSmvJ0CGwhzTYFcoQE3X2WCY/yhAFeyW7s+nKUA=\",\"dtype\":\"float64\",\"shape\":[37]},\"y\":{\"__ndarray__\":\"KGc7yxukuT+ig8RmhOnUP3xIbnZ6M+E/PbjqBgK85z+Iy0uJplbuP1cSrd1bwvI/fi7TgacC9z+2Chn93DP8Px2sacP/GAFAk1ejLp0hBEA8jFIBW6YGQByIBTheKghAdoz2Jpd9CEDLyBDHesYHQLah9uBKUAZAcvnQ6WtFBEAcngs5YZABQB8QTex7/fs/KYdDl3cL8z9YJtr9+pjhP0C5iGUahb6/lIfzw6Dd6L/9sh3Gv5H2v/yfKKmbGQDAi+iyBRNeBMDzP8oaNH0HwNrSdR982QjA0szhyP48CMAbniKbmwkGwMMlbj2sAQPAx65DmH+w/79KPtZ57cX5vwYX88u1PvS/Zp+TIH3C7b9kviIttk7jv784ohiUEdO/sDKgitP0mb8=\",\"dtype\":\"float64\",\"shape\":[37]}},\"selected\":null,\"selection_policy\":null},\"id\":\"6d724b49-a853-4782-860d-7efb6aac2edc\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"2000\"},\"renderers\":[{\"id\":\"6cc7ec7d-485e-4d66-b207-55273aa187dc\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1e644208-5acd-43af-8467-2b67bcdce42a\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"ac7e8c40-cc30-4086-9f16-e5b7b26d579a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3ec4f224-4247-42d4-9a60-d69cea338cf3\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a9ac0df5-05ae-4115-ad67-80755cd652cf\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"6bff334c-ac02-4ca6-a32a-dd1fd2c2db0c\",\"type\":\"CDSView\"}},\"id\":\"6cc7ec7d-485e-4d66-b207-55273aa187dc\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.15\"}};\n",
" var render_items = [{\"docid\":\"9fea85f7-5f8a-4657-80ac-55e987ac7524\",\"elementid\":\"7af2bedc-8305-4ec6-8ece-0f27edde7bea\",\"modelid\":\"6f70792e-9e7c-4d7b-a474-d29a738cec8b\"}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" clearInterval(timer);\n",
" }\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n",
" clearInterval(timer);\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "6f70792e-9e7c-4d7b-a474-d29a738cec8b"
}
},
"output_type": "display_data"
}
],
"source": [
"# xx = np.linspace(1990, 2000, 1000)\n",
"# \n",
"for i, year in enumerate(years):\n",
" dates = pd.date_range(start=\"1/1/\"+year, end=\"12/31/\"+year, freq=\"10D\")\n",
" tnew = dates_to_idx(dates)\n",
"\n",
" print(\"Predicting year\", year)\n",
" y_pred_, sigmas_ = predict1(tnew, x, y, cov=[k1, k2, k4], sigma_n=np.sqrt(m.likelihood.variance.value))\n",
"\n",
" # plot mean\n",
" t = np.asarray((dates - dates[0])/pd.Timedelta(1, \"M\")) + 1\n",
" p.line(t, y_pred_[2], line_width=1, line_color=colors[i], legend=year)\n",
"\n",
"p.legend.location = \"bottom_left\"\n",
"bokeh.plotting.show(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Alternative implementation 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is an alternative implementation of the decomposition based on a comment in [Example that shows how to separate additive effects, e.g. time series decomposition of birthdays data](https://github.com/GPflow/GPflow/issues/491)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"XX = xx.reshape(-1, 1)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.0000003427'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_x_new = XX\n",
"_x = X\n",
"_y = Y\n",
"_A = k_.compute_K_symm(_x_new)\n",
"_C = k_.compute_K(_x_new, _x)\n",
"_B = k_.compute_K_symm(_x) + m.likelihood.variance.value*np.diag(np.ones(len(_x)))\n",
"\n",
"_mu1 = np.linalg.inv(_B).dot(_C.T).T.dot(_y).squeeze()\n",
"_tmp1 = np.linalg.inv(_B).dot(_C.T)\n",
"_tmp2 = np.linalg.solve(_B, _C.T) \n",
"'{:.10f}'.format(np.abs(_tmp1 - _tmp2).max())"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.0000001639'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_mu2 = np.linalg.solve(_B,_C.T).T.dot(_y).squeeze()\n",
"'{:.10f}'.format(np.abs(_mu1 - _mu2).max())"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.0000001528'"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_mu3 = _C.dot(np.linalg.inv(_B)).dot(_y).squeeze()\n",
"'{:.10f}'.format(np.abs(_mu1 - _mu3).max())"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.0000001638'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_mu4 = _C.dot(np.linalg.solve(_B, _y)).squeeze()\n",
"'{:.10f}'.format(np.abs(_mu1 - _mu4).max())"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def conditional2(x_new, x, y, cov, sigma_n=0):\n",
" if not isinstance(cov, list):\n",
" cov = [cov]\n",
"\n",
" if len(cov) < 2:\n",
" total_covariance_function = cov[0]\n",
" else:\n",
" # total_covariance_function = None\n",
" total_covariance_function = functools.reduce(lambda a, x: a + x, cov)\n",
"\n",
" A = total_covariance_function.compute_K_symm(x_new)\n",
" C = total_covariance_function.compute_K(x_new, x)\n",
" B = total_covariance_function.compute_K_symm(x) + np.power(sigma_n,2)*np.diag(np.ones(len(x)))\n",
"\n",
" mu = [np.linalg.inv(B).dot(C.T).T.dot(y).squeeze()]\n",
" sigma = [(A - C.dot(np.linalg.inv(B).dot(C.T))).squeeze()]\n",
"\n",
" for i in range(0, len(cov)):\n",
" partial_covariance_function = cov[i]\n",
" C_ = partial_covariance_function.compute_K(x_new, x)\n",
" mu_ = np.linalg.inv(B).dot(C_.T).T.dot(y).squeeze()\n",
" mu.append(mu_)\n",
"\n",
" return (mu, sigma)\n",
"\n",
"def predict2(x_new, x, y, cov, sigma_n=0):\n",
" l_y_pred, l_sigmas = conditional2(x_new, x, y, cov=cov, sigma_n=sigma_n)\n",
" if len(l_sigmas[0].shape) > 1:\n",
" return l_y_pred, [np.diagonal(ls) for ls in l_sigmas]\n",
" else:\n",
" return l_y_pred, l_sigmas"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"y_pred2, sigmas2 = predict2(XX, X, Y, cov=[k1_, k2_, k4_], sigma_n=np.sqrt(m.likelihood.variance.value))"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1000"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(y_pred[0])"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.allclose(y_pred[0], y_pred2[0])"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" \n",
" | \n",
" np | \n",
" tf | \n",
" delta | \n",
" % | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 353.433528 | \n",
" 353.491490 | \n",
" 0.057962 | \n",
" 0.016400 | \n",
"
\n",
" \n",
" | 1 | \n",
" 353.790253 | \n",
" 353.593367 | \n",
" 0.196886 | \n",
" 0.055650 | \n",
"
\n",
" \n",
" | 2 | \n",
" 353.594593 | \n",
" 353.691103 | \n",
" 0.096510 | \n",
" 0.027294 | \n",
"
\n",
" \n",
" | 3 | \n",
" 353.719705 | \n",
" 353.784908 | \n",
" 0.065203 | \n",
" 0.018434 | \n",
"
\n",
" \n",
" | 4 | \n",
" 353.803838 | \n",
" 353.875188 | \n",
" 0.071350 | \n",
" 0.020166 | \n",
"
\n",
" \n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df = pd.DataFrame(np.array([y_pred[0],y_pred2[0]]).T, columns=['np','tf'])\n",
"df['delta'] = np.abs(df['np'] - df['tf'])\n",
"df['%'] = df['delta'] / df['np'] * 100.0\n",
"with pd.option_context('display.max_rows', None, 'display.max_columns', 3): \n",
" display_html(df.head().to_html(),raw=True)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"delta 0.413584\n",
"% 0.115987\n",
"dtype: float64"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[['delta','%']].max()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Alternative implementation 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [Detecting periodicities with Gaussian processes](https://www.researchgate.net/publication/301303918_Detecting_periodicities_with_Gaussian_processes)\n",
" * [download](https://peerj.com/articles/cs-50/#supp-3) (see figure3.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"import GPy"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"Model: GP regression
\n",
"Objective: 129.03256335476846
\n",
"Number of Parameters: 11
\n",
"Number of Optimization Parameters: 11
\n",
"Updates: True
\n",
"
\n",
"\n",
"| GP_regression. | value | constraints | priors |
\n",
"| sum.rbf.variance | 4356.219071780713 | +ve | |
\n",
"| sum.rbf.lengthscale | 48.565715481551585 | +ve | |
\n",
"| sum.mul.rbf.variance | 5.64144286809577 | +ve | |
\n",
"| sum.mul.rbf.lengthscale | 91.88714901784704 | +ve | |
\n",
"| sum.mul.std_periodic.variance | 1.026393528093981 | +ve | |
\n",
"| sum.mul.std_periodic.period | 0.9997023123140168 | +ve | |
\n",
"| sum.mul.std_periodic.lengthscale | 0.6709642212683404 | +ve | |
\n",
"| sum.rbf_1.variance | 0.16043370929892875 | +ve | |
\n",
"| sum.rbf_1.lengthscale | 0.32753755974365617 | +ve | |
\n",
"| sum.white.variance | 0.03193821948646309 | +ve | |
\n",
"| Gaussian_noise.variance | 0.010237414042966209 | +ve | |
\n",
"
"
],
"text/plain": [
""
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k1__ = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_1.variance.value) , lengthscale=float(m.kern.rbf_1.lengthscales.value))\n",
"k2__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.product.rbf.variance.value) , lengthscale=float(m.kern.product.rbf.lengthscales.value))\n",
"k2__2 = GPy.kern.StdPeriodic(input_dim=1, variance=float(m.kern.product.periodic.variance.value), lengthscale=float(m.kern.product.periodic.lengthscales.value),period=float(m.kern.product.periodic.period.value))\n",
"k2__ = k2__1 * k2__2\n",
"k4__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_2.variance.value) , lengthscale=float(m.kern.rbf_2.lengthscales.value))\n",
"k4__2 = GPy.kern.White (input_dim=1, variance=float(m.kern.white.variance.value))\n",
"k4__ = k4__1 + k4__2\n",
"k__ = k1__ + k2__ + k4__\n",
"m__ = GPy.models.GPRegression(X,Y,k__)\n",
"m__.Gaussian_noise.variance[0] = float(m.likelihood.variance.value)\n",
"m__"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"def conditional3(x_new, x, y, cov, sigma_n=0):\n",
" if not isinstance(cov, list):\n",
" cov = [cov]\n",
"\n",
" if len(cov) < 2:\n",
" total_covariance_function = cov[0]\n",
" else:\n",
" # total_covariance_function = None\n",
" total_covariance_function = functools.reduce(lambda a, x: a + x, cov)\n",
"\n",
" A = total_covariance_function.K(x_new) # total_covariance_function.K(x_new,x_new)\n",
" C = total_covariance_function.K(x_new, x)\n",
" B = total_covariance_function.K(x) + np.power(sigma_n,2)*np.diag(np.ones(len(x))) # total_covariance_function.K(x,x)\n",
"\n",
" mu = [np.linalg.inv(B).dot(C.T).T.dot(y).squeeze()]\n",
" sigma = [(A - C.dot(np.linalg.inv(B).dot(C.T))).squeeze()]\n",
"\n",
" for i in range(0, len(cov)):\n",
" partial_covariance_function = cov[i]\n",
" C_ = partial_covariance_function.K(x_new, x)\n",
" mu_ = np.linalg.inv(B).dot(C_.T).T.dot(y).squeeze()\n",
" mu.append(mu_)\n",
" \n",
" # kxX = C_\n",
" # K_1 = np.linalg.inv(B)\n",
" # mean = C_.dot(np.linalg.inv(B)).dot(Y)\n",
"\n",
"\n",
" return (mu, sigma)\n",
"\n",
"def predict3(x_new, x, y, cov, sigma_n=0):\n",
" l_y_pred, l_sigmas = conditional3(x_new, x, y, cov=cov, sigma_n=sigma_n)\n",
" if len(l_sigmas[0].shape) > 1:\n",
" return l_y_pred, [np.diagonal(ls) for ls in l_sigmas]\n",
" else:\n",
" return l_y_pred, l_sigmas"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n"
]
}
],
"source": [
"y_pred3, sigmas3 = predict3(XX, X, Y, cov=[k1__, k2__, k4__], sigma_n=np.sqrt(m__.Gaussian_noise.variance[0]))"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.allclose(y_pred[0], y_pred3[0])"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" np | \n",
" gpflow | \n",
" gpy | \n",
" delta_gpflow | \n",
" %_gpflow | \n",
" delta_gpy | \n",
" %_gpy | \n",
" delta_gpflow_gpy | \n",
" %_gpflow_gpy | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 353.433528 | \n",
" 353.491490 | \n",
" 353.491490 | \n",
" 0.057962 | \n",
" 0.016400 | \n",
" 0.057962 | \n",
" 0.016400 | \n",
" 7.407044e-08 | \n",
" 2.095395e-08 | \n",
"
\n",
" \n",
" | 1 | \n",
" 353.790253 | \n",
" 353.593367 | \n",
" 353.593367 | \n",
" 0.196886 | \n",
" 0.055650 | \n",
" 0.196886 | \n",
" 0.055650 | \n",
" 2.133197e-08 | \n",
" 6.032910e-09 | \n",
"
\n",
" \n",
" | 2 | \n",
" 353.594593 | \n",
" 353.691103 | \n",
" 353.691102 | \n",
" 0.096510 | \n",
" 0.027294 | \n",
" 0.096510 | \n",
" 0.027294 | \n",
" 1.523574e-07 | \n",
" 4.307639e-08 | \n",
"
\n",
" \n",
" | 3 | \n",
" 353.719705 | \n",
" 353.784908 | \n",
" 353.784908 | \n",
" 0.065203 | \n",
" 0.018434 | \n",
" 0.065203 | \n",
" 0.018434 | \n",
" 3.971718e-08 | \n",
" 1.122636e-08 | \n",
"
\n",
" \n",
" | 4 | \n",
" 353.803838 | \n",
" 353.875188 | \n",
" 353.875188 | \n",
" 0.071350 | \n",
" 0.020166 | \n",
" 0.071350 | \n",
" 0.020166 | \n",
" 4.792372e-08 | \n",
" 1.354255e-08 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" np gpflow gpy delta_gpflow %_gpflow delta_gpy \\\n",
"0 353.433528 353.491490 353.491490 0.057962 0.016400 0.057962 \n",
"1 353.790253 353.593367 353.593367 0.196886 0.055650 0.196886 \n",
"2 353.594593 353.691103 353.691102 0.096510 0.027294 0.096510 \n",
"3 353.719705 353.784908 353.784908 0.065203 0.018434 0.065203 \n",
"4 353.803838 353.875188 353.875188 0.071350 0.020166 0.071350 \n",
"\n",
" %_gpy delta_gpflow_gpy %_gpflow_gpy \n",
"0 0.016400 7.407044e-08 2.095395e-08 \n",
"1 0.055650 2.133197e-08 6.032910e-09 \n",
"2 0.027294 1.523574e-07 4.307639e-08 \n",
"3 0.018434 3.971718e-08 1.122636e-08 \n",
"4 0.020166 4.792372e-08 1.354255e-08 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(np.array([y_pred[0],y_pred2[0],y_pred3[0]]).T, columns=['np','gpflow','gpy'])\n",
"df['delta_gpflow'] = np.abs(df['np'] - df['gpflow'])\n",
"df['%_gpflow'] = df['delta_gpflow'] / df['np'] * 100.0\n",
"df['delta_gpy'] = np.abs(df['np'] - df['gpy'])\n",
"df['%_gpy'] = df['delta_gpy'] / df['np'] * 100.0\n",
"df['delta_gpflow_gpy'] = np.abs(df['gpflow'] - df['gpy'])\n",
"df['%_gpflow_gpy'] = df['delta_gpflow_gpy'] / df['gpflow'] * 100.0\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"delta_gpflow 4.135843e-01\n",
"%_gpflow 1.159868e-01\n",
"delta_gpy 4.135842e-01\n",
"%_gpy 1.159867e-01\n",
"delta_gpflow_gpy 2.924092e-07\n",
"%_gpflow_gpy 8.092542e-08\n",
"dtype: float64"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[['delta_gpflow','%_gpflow','delta_gpy','%_gpy','delta_gpflow_gpy','%_gpflow_gpy']].max()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Using different GPy optimizers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[GPy delivers \"wrong\" results compared to gpflow](https://github.com/SheffieldML/GPy/issues/614)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"Model: GP regression
\n",
"Objective: 129.03256333921234
\n",
"Number of Parameters: 11
\n",
"Number of Optimization Parameters: 11
\n",
"Updates: True
\n",
"
\n",
"\n",
"| GP_regression. | value | constraints | priors |
\n",
"| sum.rbf.variance | 4356.219071782721 | +ve | |
\n",
"| sum.rbf.lengthscale | 48.5657154836552 | +ve | |
\n",
"| sum.mul.rbf.variance | 5.641442868106639 | +ve | |
\n",
"| sum.mul.rbf.lengthscale | 91.88714903815146 | +ve | |
\n",
"| sum.mul.std_periodic.variance | 1.0263935281187573 | +ve | |
\n",
"| sum.mul.std_periodic.period | 0.9997023902939737 | +ve | |
\n",
"| sum.mul.std_periodic.lengthscale | 0.6709642212192272 | +ve | |
\n",
"| sum.rbf_1.variance | 0.16043370928666736 | +ve | |
\n",
"| sum.rbf_1.lengthscale | 0.32753755952069186 | +ve | |
\n",
"| sum.white.variance | 0.03193821950509535 | +ve | |
\n",
"| Gaussian_noise.variance | 0.010237414044922417 | +ve | |
\n",
"
"
],
"text/plain": [
""
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k1__ = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_1.variance.value) , lengthscale=float(m.kern.rbf_1.lengthscales.value))\n",
"k2__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.product.rbf.variance.value) , lengthscale=float(m.kern.product.rbf.lengthscales.value))\n",
"k2__2 = GPy.kern.StdPeriodic(input_dim=1, variance=float(m.kern.product.periodic.variance.value), lengthscale=float(m.kern.product.periodic.lengthscales.value),period=float(m.kern.product.periodic.period.value))\n",
"k2__ = k2__1 * k2__2\n",
"k4__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_2.variance.value) , lengthscale=float(m.kern.rbf_2.lengthscales.value))\n",
"k4__2 = GPy.kern.White (input_dim=1, variance=float(m.kern.white.variance.value))\n",
"k4__ = k4__1 + k4__2\n",
"k__ = k1__ + k2__ + k4__\n",
"m__ = GPy.models.GPRegression(X,Y,k__)\n",
"m__.Gaussian_noise.variance[0] = float(m.likelihood.variance.value)\n",
"m__.optimize()\n",
"m__"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" /home/user/cs/local/install/Anaconda3-5.1.0-Linux-x86_64/lib/python3.6/site-packages/paramz/transformations.py:111: RuntimeWarning:overflow encountered in expm1\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"Model: GP regression
\n",
"Objective: 129.03256333607948
\n",
"Number of Parameters: 11
\n",
"Number of Optimization Parameters: 11
\n",
"Updates: True
\n",
"
\n",
"\n",
"| GP_regression. | value | constraints | priors |
\n",
"| sum.rbf.variance | 4356.219071782721 | +ve | |
\n",
"| sum.rbf.lengthscale | 48.56571548365474 | +ve | |
\n",
"| sum.mul.rbf.variance | 5.641442868106637 | +ve | |
\n",
"| sum.mul.rbf.lengthscale | 91.88714903814706 | +ve | |
\n",
"| sum.mul.std_periodic.variance | 1.026393528118752 | +ve | |
\n",
"| sum.mul.std_periodic.period | 0.9997023902770954 | +ve | |
\n",
"| sum.mul.std_periodic.lengthscale | 0.6709642212192378 | +ve | |
\n",
"| sum.rbf_1.variance | 0.16043370928667006 | +ve | |
\n",
"| sum.rbf_1.lengthscale | 0.32753755952074015 | +ve | |
\n",
"| sum.white.variance | 0.03193821950509133 | +ve | |
\n",
"| Gaussian_noise.variance | 0.01023741404492199 | +ve | |
\n",
"
"
],
"text/plain": [
""
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k1__ = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_1.variance.value) , lengthscale=float(m.kern.rbf_1.lengthscales.value))\n",
"k2__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.product.rbf.variance.value) , lengthscale=float(m.kern.product.rbf.lengthscales.value))\n",
"k2__2 = GPy.kern.StdPeriodic(input_dim=1, variance=float(m.kern.product.periodic.variance.value), lengthscale=float(m.kern.product.periodic.lengthscales.value),period=float(m.kern.product.periodic.period.value))\n",
"k2__ = k2__1 * k2__2\n",
"k4__1 = GPy.kern.RBF (input_dim=1, variance=float(m.kern.rbf_2.variance.value) , lengthscale=float(m.kern.rbf_2.lengthscales.value))\n",
"k4__2 = GPy.kern.White (input_dim=1, variance=float(m.kern.white.variance.value))\n",
"k4__ = k4__1 + k4__2\n",
"k__ = k1__ + k2__ + k4__\n",
"m__ = GPy.models.GPRegression(X,Y,k__)\n",
"m__.Gaussian_noise.variance[0] = float(m.likelihood.variance.value)\n",
"m__.optimize(optimizer='scg')\n",
"m__"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"def conditional(X_new, X, Y, cov, sigma_n=0, framework='gpy'):\n",
" if not isinstance(cov, list):\n",
" cov = [cov]\n",
"\n",
" if len(cov) < 2:\n",
" total_covariance_function = cov[0]\n",
" else:\n",
" # total_covariance_function = None\n",
" total_covariance_function = functools.reduce(lambda a, x: a + x, cov)\n",
"\n",
" if framework == 'gpflow':\n",
" A = total_covariance_function.compute_K_symm(X_new)\n",
" C = total_covariance_function.compute_K(X_new, X)\n",
" B = total_covariance_function.compute_K_symm(X) + np.power(sigma_n,2)*np.diag(np.ones(len(X)))\n",
" elif framework == 'gpy':\n",
" A = total_covariance_function.K(X_new) # total_covariance_function.K(x_new,x_new)\n",
" C = total_covariance_function.K(X_new, X)\n",
" B = total_covariance_function.K(X) + np.power(sigma_n,2)*np.diag(np.ones(len(X))) # total_covariance_function.K(x,x)\n",
" else:\n",
" raise ValueError('Unknown framework parameter: {}'.format(framework))\n",
"\n",
" # mu = [np.linalg.inv(B).dot(C.T).T.dot(y).squeeze()]\n",
" BY = np.linalg.solve(B, Y)\n",
" mu = [C.dot(BY).squeeze()]\n",
" sigma = [(A - C.dot(np.linalg.inv(B).dot(C.T))).squeeze()]\n",
"\n",
" for i in range(0, len(cov)):\n",
" partial_covariance_function = cov[i]\n",
" C_ = None\n",
" if framework == 'gpflow':\n",
" C_ = partial_covariance_function.compute_K(X_new, X)\n",
" elif framework == 'gpy':\n",
" C_ = partial_covariance_function.K(X_new, X)\n",
" else:\n",
" raise ValueError('Unknown framework parameter: {}'.format(framework))\n",
" # mu_ = np.linalg.inv(B).dot(C_.T).T.dot(y).squeeze()\n",
" mu_ = C_.dot(BY).squeeze()\n",
" mu.append(mu_)\n",
"\n",
" return (mu, sigma)\n",
"\n",
"def predict(X_new, X, Y, cov, sigma_n=0, framework='gpy'):\n",
" l_y_pred, l_sigmas = conditional(X_new, X, Y, cov=cov, sigma_n=sigma_n, framework=framework)\n",
" if len(l_sigmas[0].shape) > 1:\n",
" return l_y_pred, [np.diagonal(ls) for ls in l_sigmas]\n",
" else:\n",
" return l_y_pred, l_sigmas"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"with warnings.catch_warnings():\n",
" warnings.filterwarnings(\"ignore\")\n",
" y_pred2, sigmas2 = predict(XX, X, Y, cov=[k1_ , k2_ , k4_] , sigma_n=np.sqrt(m.likelihood.variance.value) , framework='gpflow')\n",
" y_pred3, sigmas3 = predict(XX, X, Y, cov=[k1__, k2__, k4__], sigma_n=np.sqrt(m__.Gaussian_noise.variance[0]), framework='gpy')"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.0000001568'"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{:.10f}'.format(np.abs(y_pred2[0] - y_pred3[0]).max())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}