{ "cells": [ { "cell_type": "markdown", "id": "172c8c11-4ff4-4886-84ff-b35f26fbe6c5", "metadata": {}, "source": [ "# Introduction to `lamatrix`: Combining models" ] }, { "attachments": {}, "cell_type": "markdown", "id": "02ec79f8-c528-4ca9-8457-f894f259cf91", "metadata": {}, "source": [ "`lamatrix` enables you to combine `Model` objects to build more powerful models for your data. This tutorial will show how models can be combined." ] }, { "cell_type": "code", "execution_count": 1, "id": "673055ba-0a48-4acc-896f-1ae15c508999", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from astropy.io import fits\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "b5f03c5f-4c04-4875-b144-2b67db3630fb", "metadata": {}, "source": [ "First, we will make some fake data to fit. Here I'm creating data which is a combination of a simple polynomial, a sinusoid, and some noise terms." ] }, { "cell_type": "code", "execution_count": 2, "id": "64df302f-0492-4dc6-9982-c6acebd504db", "metadata": {}, "outputs": [], "source": [ "x = np.arange(-5, 5, 0.01)\n", "y = x * 2.3459 + 1.435 + np.random.normal(0, 0.3, size=len(x))\n", "ye = np.ones(len(x)) * 0.3\n", "\n", "y += 10*np.sin(x) + 10*np.cos(x)" ] }, { "cell_type": "markdown", "id": "596f06ad-bd43-4db5-9870-6eb857ddf3e8", "metadata": {}, "source": [ "If we plot the data we can see this is a simple trend" ] }, { "cell_type": "code", "execution_count": 3, "id": "78067ca8-ee46-46c7-ba18-6234af52ed73", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHHCAYAAABQhTneAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5XklEQVR4nO3dCXxU5b3/8R+yhEUSREgCgkIAQUUWUVncQLksF7XaStXaCkpREbWAFomtIG6pwrW2lgreK0vrgnXDq20RXOFeFq2WWrBQERCUJQiSKNagOP/X73n9z9wzk5nJJJmZszyf9+s1SiaTmTNnJjnf+T2/5zkNIpFIRAAAACxxhNcbAAAAkEuEHwAAYBXCDwAAsArhBwAAWIXwAwAArEL4AQAAViH8AAAAqxB+AACAVQg/AADAKoQfIITGjh0rnTp1su6xkdrChQulQYMGsm3bNq83BfAU4QfIwMHEuTRq1EiOOeYYEwA++eQTrzcvNL799lv53e9+J//2b/8mbdq0kcaNG0thYaEMGzZMHnnkEamqqpKw+PLLL+WOO+6QN954w7Nt0Md3v6+bN28uxx57rFxwwQWyYMGCeu3vP/3pT+b+AS818vTRgZC48847pXPnzvLVV1/JmjVrTCj6n//5H1m/fr00bdrU680LtH/9619y8cUXy8svvyyDBg2SW265RYqKimT//v3y5ptvyvXXXy9r166VRx99VMISfmbOnGn+PXjwYE+35eGHH5YjjzzShB0N8/oaXH311fLggw/KSy+9JB07dqxT+JkzZw4BCJ4i/AAZMHLkSDn11FPNv3/84x+b6sR9990n//3f/y3f//73vd68QJs8ebI56OoB9yc/+UnM926++Wb54IMPZPny5eJX33zzjalcNWnSRILmkksuMe9lx/Tp0+Xxxx+XK6+8UkaPHm2CPhBEDHsBWXDWWWeZ/3/44YfR6w4dOmQOHv369ZOCggJp0aKFud3rr78e87Paj6FDDbNnzzZDOl26dJG8vDw57bTT5O233672WEuWLJGePXuaCpP+//nnn0+4TQcPHjRhQT+t6/11797dPEYkEom5nT72DTfcIE8//bSceOKJ0qxZMxk4cKD8/e9/N9+fN2+edO3a1TyeViZS9Y/ofWv/z3e+851q39Mqme6Ha6+9NunP79ixQ/7rv/5LRowYUS34OLp162aqP24a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5a233vJ6k0KnrKxMTjvtNLNCfmFhoVx00UWyadMmrzcr9H7xi1+Yv8mTJk3yelMCgfCDWps6dapZOhzZsXHjRnOKlXnz5smGDRvkl7/8pcydO1duu+02rzct0J566imZMmWKCZLvvvuu9O7dW4YPHy7l5eVeb1qovPnmmzJx4kRZs2aNLF++XL7++msZNmyYHDx40OtNC623337b/L3o1auX15sSGEx1R638+c9/NgeQZ599Vk466ST561//aqpAyK5Zs2bJww8/LFu2bPF6UwJLKz1akfjNb35jvtaAqedEuvHGG2XatGleb15o7d2711SANBSdffbZXm9O6HzxxRdyyimnyG9/+1u5++67zd/jBx980OvN8j0qP0jbnj17ZPz48fL73/9emjdv7vXmWKWiokJat27t9WYElg4ZvvPOOzJ06NCYc/jp16tXr/Z022x47yrev9mhVbZRo0bFvLdRM05sirRogXDs2LFy3XXXyamnnmr6UpAbmzdvloceekhmz57t9aYE1qeffiqHDx+WoqKimOv1ax1mRHZodU17UM444wzp2bOn15sTOosXLzZDuDrshdqh8mM5Lfdrk1yqix4c9OD7+eefS2lpqdebHPp97fbJJ5/IiBEjZPTo0abqBgStKrF+/XpzkEZm7dixQ37yk5/I448/bhr4UTv0/FhOx+P37duX8jYlJSXy/e9/X1588UVzgHboJ+mGDRvKFVdcIYsWLcrB1tqxr5s0aWL+vXPnThk8eLAMGDBAFi5caIZpUPdhLx2qfeaZZ8zsI8eYMWPkwIED8sILL3i6fWF0ww03mP26YsUKM3MRmbVkyRK5+OKLzd9g999k/Rutfyt0Vq77e4hF+EFatm/fLpWVldGv9cCsM2X0YKKNpB06dPB0+8JGKz5DhgyRfv36yWOPPcYfsQzQ9+npp59uqpjOkMyxxx5rDtI0PGeOHlK0ifz555+XN954Q7p16+b1JoWSVuI/+uijmOuuuuoq6dGjh9x6660MM9aAnh+kRQ8SbkceeaT5v65BQ/DJfPDRis9xxx1n+ny0YuQoLi72dNuCTGcpaqVHe9Y0BOmMGJ1+rQcMZHao64knnjBVH13rZ/fu3eb6goICs24VMkP3bXzAadGihRx99NEEnzQQfgCf0bVRtMlZL/HBkkJt3V166aUmSE6fPt0ckHVK8NKlS6s1QaN+dEkGpQHebcGCBWbSBOAHDHsBAACr0EEJAACsQvgBAABWIfwAAACrEH4AAIBVCD8AAMAqhB8AAGAVwg8AALAK4QcAAFiF8AMAAKxC+AEAAFYh/AAIvSeffNKcVHPXrl3R6/SEpr169ZKKigpPtw1A7nFuLwChp3/m9ESmZ599tjz00EMyY8YMmT9/vqxZs0aOOeYYrzcPQI5xVncAodegQQO555575JJLLpHi4mITgFauXEnwASxF5QeANU455RTZsGGDLFu2TM455xyvNweAR+j5AWCFpUuXysaNG+Xw4cNSVFTk9eYA8BCVHwCh9+6778rgwYNl3rx5snDhQsnPz5enn37a680C4BF6fgCE2rZt22TUqFFy2223yeWXXy4lJSUycOBAE4h0GAyAfaj8AAit/fv3y6BBg0zVZ+7cudHrNQzp8JcOhQGwD+EHAABYhYZnAABgFcIPAACwCuEHAABYhfADAACsQvgBAABWIfwAAACrEH4AAIBVCD8AAMAqhB8AAGAVwg8AALAK4QcAAFiF8AMAAMQm/w/OnSJnr7otXgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.errorbar(x, y, ye, ls='', c='k')\n", "ax.set(xlabel='$x$', ylabel='$y$', title='Randomly Generated Data');" ] }, { "cell_type": "markdown", "id": "7edc0c9e-d294-474b-b36a-2edcfe10880b", "metadata": {}, "source": [ "Now we will use `lamatrix` to fit this data. " ] }, { "cell_type": "code", "execution_count": 4, "id": "dcf6023e-f1a0-4bee-a08a-1ff5859f740f", "metadata": {}, "outputs": [], "source": [ "from lamatrix import Polynomial, Sinusoid, Constant" ] }, { "cell_type": "markdown", "id": "5e6cece6-68a4-490e-b9b6-1e4c0183bd9c", "metadata": {}, "source": [ "In this case, we know our model is a linear combination of these trends, so we simply add them together. Note we know both the polynomial and sinusoid are functions of the same variable, which we name `\"x\"`." ] }, { "cell_type": "code", "execution_count": 5, "id": "1d541233-8266-41b2-b6bc-8d896a1c1fee", "metadata": {}, "outputs": [], "source": [ "model = Polynomial('x', order=1) + Sinusoid('x') + Constant()" ] }, { "cell_type": "code", "execution_count": 6, "id": "6a96dacc-6232-4283-bef5-02526579d931", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JointModel\n", "\tPolynomial(x)[n, 1]\n", "\tSinusoid(x)[n, 2]\n", "\tConstant()[n, 1]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model" ] }, { "cell_type": "markdown", "id": "7628ff21-889a-4a80-81e1-c5a06b4f798c", "metadata": {}, "source": [ "The model is now a `JointModel` where there are multiple components" ] }, { "cell_type": "markdown", "id": "92472487-dbe2-4ab0-806e-888b21e7d5f3", "metadata": {}, "source": [ "We've combined different models, but we are still able to use it in the same way as a simple model. For example, here's the equation for the model" ] }, { "cell_type": "code", "execution_count": 7, "id": "3224e737-0494-4f74-ab5c-f1a6d2f3aee2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\\[f(\\mathbf{x}) = w_{0} \\mathbf{x}^{1} + w_{1} \\sin(\\mathbf{x}) + w_{2} \\cos(\\mathbf{x}) + w_{3} \\]
" ], "text/plain": [ "'\\\\[f(\\\\mathbf{x}) = w_{0} \\\\mathbf{x}^{1} + w_{1} \\\\sin(\\\\mathbf{x}) + w_{2} \\\\cos(\\\\mathbf{x}) + w_{3} \\\\]'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.equation" ] }, { "cell_type": "markdown", "id": "5a41ecaa-0a7c-4d28-8b4e-9fc3ad5d46e9", "metadata": {}, "source": [ "Now we have the model, we can simply use the `fit` class method." ] }, { "cell_type": "code", "execution_count": 8, "id": "a516122f-5c79-4993-89c9-9717434ad458", "metadata": {}, "outputs": [], "source": [ "model.fit(x=x, data=y, errors=ye)" ] }, { "cell_type": "markdown", "id": "a876b329-758d-4702-95b6-ce2d94b2da69", "metadata": {}, "source": [ "The model fit with no errors, let's look at the posterior distributions." ] }, { "cell_type": "code", "execution_count": 9, "id": "4c1850ba-4348-450c-8ffd-19d32ba8bf17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DistributionContainer\n", "\t[(2.3465, 0.0034), (10.008, 0.013), (10.016, 0.014), (1.4568, 0.0099)]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.posteriors" ] }, { "cell_type": "markdown", "id": "0d467697-e97e-4ea0-b1c8-3590bac5d37f", "metadata": {}, "source": [ "We can see we've fit the posteriors with small errors. Let's compare to our inputs. Our input polynomial was\n", "\n", "$2.3459x + 1.435$\n", "\n", "Because `model` is a linear combination of objects, we can split this model back into it's components:" ] }, { "cell_type": "code", "execution_count": 10, "id": "1f4e4ffa-5746-43ac-9c69-4adf1435a5b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JointModel\n", "\tPolynomial(x)[n, 1]\n", "\tSinusoid(x)[n, 2]\n", "\tConstant()[n, 1]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model" ] }, { "cell_type": "code", "execution_count": 11, "id": "2b4c2f53-1193-4473-9ee9-3869ba17fc4c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Polynomial(x)[n, 1]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[0]" ] }, { "cell_type": "code", "execution_count": 12, "id": "cea8e1bc-0c46-47bb-8485-ad3c98c3ceaf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DistributionContainer\n", "\t[(2.3465, 0.0034)]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[0].posteriors" ] }, { "cell_type": "markdown", "id": "3c1de36b-5dfb-4930-811d-f99576e38558", "metadata": {}, "source": [ "We can see that the first order polynomial has posteriors after our fit. This is only a first order polynomial, and so it has only one weight. The weight is very close \n", "to our input weight of 2.346!\n", "\n", "The polynomial we used was\n", "$10.sin(x) + 10.cos(x)$. Let's look at the posteriors." ] }, { "cell_type": "code", "execution_count": 13, "id": "4bbae8f8-abf8-4da7-9104-4c198f705871", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sinusoid(x)[n, 2]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[1]" ] }, { "cell_type": "code", "execution_count": 14, "id": "c650830a-6a62-4122-aa33-7ec26e94abcb", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\\[f(\\mathbf{x}) = w_{0} \\sin(\\mathbf{x}) + w_{1} \\cos(\\mathbf{x})\\]
" ], "text/plain": [ "'\\\\[f(\\\\mathbf{x}) = w_{0} \\\\sin(\\\\mathbf{x}) + w_{1} \\\\cos(\\\\mathbf{x})\\\\]'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[1].equation" ] }, { "cell_type": "code", "execution_count": 15, "id": "c4de9c65-1c5d-4375-a185-22bc254541f9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DistributionContainer\n", "\t[(10.008, 0.013), (10.016, 0.014)]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[1].posteriors" ] }, { "cell_type": "markdown", "id": "b14b7a28-e505-47c9-8916-9f9e6763a79e", "metadata": {}, "source": [ "This has two weights, one for sine and one for cosine. The weights are very close to the input amplitudes!" ] }, { "cell_type": "markdown", "id": "91cd1c42-6bc5-4527-9c5b-deca87cd2b45", "metadata": {}, "source": [ "Finally we have the constant term" ] }, { "cell_type": "code", "execution_count": 16, "id": "60da0310-e733-4afa-aeb7-064a2595c290", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Constant()[n, 1]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[2]" ] }, { "cell_type": "code", "execution_count": 17, "id": "827d3c0c-205a-47ac-8a6f-814c31c21a17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DistributionContainer\n", "\t[(1.4568, 0.0099)]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[2].posteriors" ] }, { "cell_type": "markdown", "id": "20693e1b-0526-4ede-bba8-5066a0054c41", "metadata": {}, "source": [ "This is very close to our input offset term. Let's plot the model to see how this looks" ] }, { "cell_type": "code", "execution_count": 18, "id": "38b676d2-ea67-4eda-a6db-52f5628c989c", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHHCAYAAABQhTneAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABV6klEQVR4nO3dB3xUVfbA8RMQQhmC1AkIChFFRVFkVUCluK7oYt0V6yo2bKiLqAi6YhcVdVVkRXdX0F17w94L+F/BhoiioEhVIKFIgCih5f851/vGmyEJCSTz2u/7+Qzz5mWY3Ex755177r1ZJSUlJQIAABATtfxuAAAAQCYR/AAAgFgh+AEAALFC8AMAAGKF4AcAAMQKwQ8AAIgVgh8AABArBD8AACBWCH4AAECsEPwAEXTGGWdIu3btYve7UbHx48dLVlaWzJs3z++mAL4i+AGq4WDiXbbbbjvZYYcdTADw448/+t28yNi0aZM88sgj8oc//EGaN28uderUkZYtW8phhx0mDz74oBQXF0tU/Pzzz3LdddfJ+++/71sb9Pe77+sGDRrIjjvuKEcddZSMGzdum57vV1991Tw+4KftfP3tQETccMMN0r59e1m7dq1MmTLFBEX/93//J1999ZXUq1fP7+aF2i+//CLHHXecvPHGG9KjRw+5/PLLJZlMyooVK2TixIly4YUXykcffST//ve/JSrBz/XXX2+2e/fu7Wtb7r//fkkkEibY0WBeX4OzzjpL7r77bnn55Zelbdu2WxX8jBkzhgAIviL4AarBEUccIb/73e/M9jnnnGOyE7fddpu8+OKLcsIJJ/jdvFC79NJLzUFXD7h//etfS/3ssssuk++++07eeustCaoNGzaYzFXdunUlbI4//njzXvaMGDFCHn30UTn99NOlf//+JtAHwohuL6AGHHzwweb6+++/T+1bt26dOXh07dpVGjduLA0bNjT3e++990r9X63H0K6GO+64w3Tp7LzzzpKdnS377beffPLJJ5v9rgkTJsiee+5pMkx6/fzzz5fZpqKiIhMs6Nm6Pl7Hjh3N7ygpKSl1P/3dF110kTz99NOyxx57SP369aV79+7y5Zdfmp8/8MAD0qFDB/P7NDNRUf2IPrbW/xxzzDGb/UyzZPo8nHfeeeX+/4ULF8q//vUvOfzwwzcLfDy77LKLyf64NNjQYKlTp06mnZop0t/z008/lbqftu3II480Wbr999/f3DcvL890saVbuXKlDB48OPX86XOgAa7+rrJeO/393mv39ddfV+r11//fokULs63ZH6/byc2SzJw50wQlTZs2Ne3VoFuD7HQzZsyQQw45xLx+bdq0kZtuuqlUW7fWqaeeagJ8zba5QecHH3xgAiLtHtO/WZ8nDVw1c+fR7mDN+ii3W82jz5tm95o1a2barc/VM888s81tBtKR+QFqgBcQNGnSJLVv1apV5kB+8skny8CBA2X16tWmq6Zv377y8ccfyz777FPqMR577DFzHz1o6wHi9ttvlz/96U8yZ84cU/Oi3nzzTfnzn/9sgpSRI0fK8uXL5cwzzzQHu/Qg5OijjzYH2rPPPtv8Ls2mXHHFFaY74+9//3up++uBTA+ogwYNMrf1sTVIGDp0qPzjH/8wwYYGEtom7QZ59913y3wetN1/+ctfzP20m0oP2J6XXnrJPCf68/K89tprsnHjxgrvUxZ9zrTrUZ+LSy65RObOnSv33XeffP755/K///0v9fyp2bNnm2BCn5cBAwbIQw89ZA7SeuDV4MnriurVq5d5rvSx9QD/4YcfyvDhw2Xx4sUm0HFpXYwGd+eee64JBPTvrszrr4GPdjVdcMEFpqtPX2/VuXPnVEBz4IEHmrqyYcOGmQDqqaeekmOPPVaeffZZ83/UkiVLpE+fPibr5N1PA2kNKKrDaaedZh5P339ah6U0WNbnSduuwYv+TaNHj5YffvjB/Mx7XRYtWmSCpv/85z+bPe4999xj3qcaYGmw+MQTT5iASrvY+vXrVy1tB4wSAFtt3LhxmjYpefvtt0uWLl1asnDhwpJnnnmmpEWLFiXZ2dnmtmfDhg0lxcXFpf7/Tz/9VJJMJkvOOuus1L65c+eax2zWrFnJihUrUvtfeOEFs/+ll15K7dtnn31KWrVqVbJy5crUvjfffNPcb6eddkrtmzBhgtl30003lfr9xx9/fElWVlbJ7NmzU/v0ftp2bYfngQceMPtzc3NLVq1aldo/fPhws9+974ABA0r97lmzZpn73H///aV+99FHH13Srl27kk2bNpX7/F566aXm/06bNq3Ufn0e9fn2LsuWLUv97IMPPjD/59FHHy31f15//fXN9ms7dd+kSZNS+woKCszff9lll6X23XjjjSUNGzYs+fbbb0s95rBhw0pq165dsmDBglKvXU5OjnkcV2Vff/179DGuvfbazZ6P3//+9yV77bVXydq1a1P79Pnr0aNHyS677JLaN3jwYPMYH330Uam/q3Hjxpu9XmXR363307aURdutPz/uuONS+37++efN7jdy5Ejz/po/f35q36BBg8z/LUv6Y6xbt65kzz33LDnkkEMqbC9QVXR7AdXg0EMPNWftmurXLIKeaWvmxM3A1K5dO1X3od0PmgnRM3Pttpg6depmj3niiSeWyhx5XWma+VGacZg2bZrJVmg3ikfPxDUTlF5kqr9fsyAu7QbTeEczLK7f//73pYarH3DAAeZas0yNGjXabL/XprLsuuuu5n5aK+LRv11/p57hu90e6TRborToNv3v0efbu+y0006pn2mWQZ8PfR6WLVuWumgmRx8nvZtRnyvvuVX6eNol6P5N+ph6H3093MfU110zU5MmTSr1mPo8ed1XW/v6p9P7a4ZNa8g0a+S1QbN9mj3S2idvhKE+P926dTNdee7fpc93dfBeD22Hx80qaRertk27sPT9pRm3ynAfQzOLhYWF5nmvzPMDVAXdXkA10DoGPcjrl7V2m+jBULs70j388MNy5513mrqN9evXp/brSLF02rXi8gIhr25l/vz5qZqXdHrwdg8Yet/WrVuXClzU7rvvXuqxyvvdXnCVPrrH259eS5NOC2S1jkh/jwYqGkzo36/dJxXx2rtmzZpS+7Xrx6s3GTVqlOnK8mgQoK+DDoUvS0FBQYV/q/dcu3+TPub06dM3C2jKe8yyXs+qvv7ptHtOA4lrrrnGXMprh3aJ6fPsBabp74vq4L0e7vtpwYIFpqZJg/7094O+HpWh3Vtam6RBvTucvqIAGdgaBD9ANdAzbG+0l9ZfHHTQQXLKKafIrFmzUmfJ//3vf00tif5ca2304KzZAK2ncQujPfqzsqQXKNeE8n731rbppJNOMsWvmv256qqrzHOhz9eWDsa77babudYpA/bee+/Ufg1CNOui9LFcmlXR59bNNLnKyshs6W/Sx9RMktY8lUUDX1dZtTVVff3TecXKOtRfMz1l0SLsTNDXw/19mv3S50ezU1deeaV53TT7qZko/ZsrU2itdWZa79OzZ09TV9aqVStTm6X1U1r/BlQngh+gmnkHNC041SJbLThVOmpFRxI999xzpc5kr7322q36PV5Xj2Yl0mnQlX7ft99+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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.errorbar(x, y, ye, ls='', c='k')\n", "ax.plot(x, np.asarray([model.sample(x=x) for count in range(100)]).T, c='r', alpha=0.1);\n", "ax.set(xlabel='$x$', ylabel='$y$', title='Randomly Generated Data');" ] }, { "cell_type": "markdown", "id": "b554f897-26b6-4c2b-92d6-78a96a3ff1fe", "metadata": {}, "source": [ "This is a great fit to the data!\n", "\n", "Here we've combined two types of model, a sinusoid and a polynomial, in order to fit the data we have. In this case, we knew the form of the models we should use. We can combine any number and any type of models in this way.\n", "\n", "In this case we've fit a model where the two components are added, let's try a model where they are multiplied." ] }, { "cell_type": "code", "execution_count": 19, "id": "f3e5bbf3-99ec-477d-bb82-072781d6f373", "metadata": {}, "outputs": [], "source": [ "x = np.arange(-50, 50, 0.01)\n", "y = x * 2.3459 + np.random.normal(0, 2, size=len(x))\n", "ye = np.ones(len(x)) * 2\n", "\n", "y *= 10*np.sin(x) + 10*np.cos(x)\n", "y += 1.435" ] }, { "cell_type": "code", "execution_count": 20, "id": "adbdf969-b6e3-4854-9098-1bf28ce94c7f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAHHCAYAAACfqw0dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABc9ElEQVR4nO2dC7gVVdnHFxfPATaeAwqCIHJREwGBvECQSiofaGRZ6ZeXFAgxEEyERKkU0xQDswxRtC/AyhKptDRDCRAtQQwDBQUzQDC5eIEDbJXrfM+7emY3e87svWfPXvf5/55nw77MmVmzZtaa/3rfd72rged5HgMAAAAAAGXRsLzNAQAAAAAAAREFAAAAAJAAiCgAAAAAgARARAEAAAAAJAAiCgAAAAAgARBRAAAAAAAJgIgCAAAAAEgARBQAAAAAQAIgogAAAAAAEgARBQCIZNiwYaxTp06pOzYozpw5c1iDBg3Yxo0bdRcFAO1ARAFgyEPJfzVu3Ji1b9+eC4l///vfuovnDIcOHWK/+MUv2P/8z/+wVq1ascMOO4wdddRRbNCgQeyhhx5ie/fuZa7w0UcfsVtvvZU999xz2spAxw/e182aNWPHHnssu+CCC9js2bMrqu+nn36a7x8A3TTWXQAAwH+47bbbWOfOndknn3zCli1bxsXVX//6V7Z69WrWpEkT3cWzmo8//ph9+ctfZs888wzr378/+/a3v83atGnDPvzwQ7ZkyRJ2zTXXsJdeeon9/Oc/Z66IqO9///v8/ec+9zmtZXnggQdY8+bNuWiiQQFdg2984xvsJz/5CXvqqadYhw4dEomoGTNmQEgB7UBEAWAI559/PjvttNP4+6uuuopbS374wx+yP/7xj+x///d/dRfPaq6//nr+8KYH93XXXZf324QJE9g///lPtmDBAmYqBw4c4Ja0qqoqZhsXXXQRv5d9brnlFvbII4+wK6+8kl188cV8wACArcCdB4ChnHnmmfz/f/3rX7nv9u3bxx9Cp556KqutrWWZTIZvt3jx4ry/pXgVcqHcfffd3FV13HHHserqanb66aezl19+ud6xnnjiCdajRw9u8aL/H3/88cgyZbNZLjrIekD7O/HEE/kxPM/L246OPXbsWDZv3jzWrVs31rRpU9avXz/22muv8d8ffPBBdvzxx/PjkaWkWHwN7Zvio770pS/V+42sdlQP3/zmNwv+/ebNm9n//d//sfPOO6+egPI54YQTuDUqCIkWEl3du3fn5STLFR1nx44dedtR2b7whS9wq2GfPn34tl26dOGuwzA7d+5k48aNy9Uf1QEJZTpW1LWj4/vX7vXXX491/envW7duzd+TNcp3pwWtNmvXruXi5ogjjuDlJfFOYj3MmjVr2DnnnMOv3zHHHMN+8IMf5JU1KZdffjkfKJD1LyheX3jhBS6syO1H50z1RAKYLIk+5OYmKxQRdBf6UL2RtfHII4/k5aa6+u1vf1txmQGIApYoAAzFFxYtW7bMfbdr1y4uCC699FI2cuRItnv3bu6CGjx4MFu+fDnr3bt33j5+/etf823o4U8PmqlTp7KvfOUrbP369TwmiHj22WfZV7/6VS52pkyZwj744AM2fPhw/tAMi5kvfvGL/IE9YsQIfiyy7txwww3cTfPjH/84b3t6INKDecyYMfwz7ZvExsSJE9n999/PRQsJEioTuXcWLVoUWQ9U7q9//et8O3K/0YPf58knn+R1Qr8X4s9//jM7ePBg0W2ioDojlyrVxbe+9S22YcMGdt9997F//OMf7G9/+1uu/oi33nqLixKql6FDh7JZs2bxhz09wEmE+S62AQMG8LqifZNQePHFF9mkSZPYli1buGAKQnFDJBKvvvpqLijovONcfxJQ5EIbPXo0d2HS9SZ69uyZE0af/exnedzdTTfdxIXYY489xi688EL2u9/9jv8NsXXrVnb22WdzK5i/HQlyEiYiuOKKK/j+6P6jODWCRDfVE5WdRBCd0/Tp09k777zDf/Ovy7vvvsvF1y9/+ct6+7333nv5fUpCjUTno48+yoUZuQ6HDBkipOwA5PAAAFqZPXs2mXG8v/zlL957773nbd682fvtb3/rtW7d2quuruaffQ4cOODt3bs37+937NjhtWnTxvvGN76R+27Dhg18n0ceeaT34Ycf5r7/wx/+wL9/8sknc9/17t3bO/roo72dO3fmvnv22Wf5dh07dsx998QTT/DvfvCDH+Qd/6KLLvIaNGjgvfXWW7nvaDsqO5XD58EHH+Tft23b1tu1a1fu+0mTJvHvg9sOHTo079jr1q3j2zzwwAN5x/7iF7/oderUyTt06FDB+r3++uv5365cuTLve6pHqm//9f777+d+e+GFF/jfPPLII3l/M3/+/HrfUznpu+effz73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RpBXX32Vn0OTJk34NpSm4ec//3lZKQ78F+3jmGOO4ceZNWtWXooFn9dff90bOHCg17x5c143I0eO9FatWsX/nq5d8Fpee+21PA0IpT8IPsqofHRfUv107dqV/51fFgBE04D+iS+5AABALxRcTgkmKRmk77YCAAAdICYKAGANFBtGM9QohxIEFABAN4iJAgAYD8W20Gw5iq+hxJCF1sADAACVQEQBAIyHZuRRegIKBv/pT39ab41AAADQAWKiAAAAAAASgJgoAAAAAIAEQEQBAAAAACQAMVGSoHWe3n33Xb48Bha+BAAAAOyAopxoeStacL1hw+K2JogoSZCACq9WDwAAAAA72Lx5MzvmmGOKbgMRJQl/gVa6CLR8AQAAAADMZ9euXdwIElxovRAQUZLwXXgkoCCiAAAAALuIE4qDwHIAAAAAgARARAEAAAAAJAAiCgAAAAAgARBRAAAAAAAJgIgCAAAAAEgARBQAAAAAQAIgogAAAAAAEgARBQAAAACQAIgoAAAAAIAEQEQBAAAAACQAIgoAAAAAIAEQUQAAAAAACYCIAgAAAABIAEQUAAAAAEACIKIAAAAAABIAEQUAAAAAkACIqJSRzWZZgwYNci/6DAAAAIDygYhKESSYmjdvrrsYAAAAgBNARKWITCbDtm3blvtM7+k7AAAAAKRARD3//PPsggsuYO3atePuqCeeeCLv92HDhuW5q+h13nnn5W3z4Ycfsssvv5zV1NSwFi1asBEjRrA9e/bkbfPqq6+yM888kzVp0oR16NCBTZ06lblA0H0HVx4AAACQIhFFD/5evXqxGTNmFNyGRNOWLVtyr9/85jd5v5OAWrNmDVuwYAF76qmnuDC7+uqrc7/v2rWLDRo0iHXs2JGtWLGCTZs2jd16663soYceYrbTuXNn5nkef9F7AAAAACSjMbOM888/n7+KUV1dzdq2bRv52xtvvMHmz5/PXn75ZXbaaafx76ZPn84+//nPs7vvvptbuB555BG2b98+NmvWLFZVVcW6d+/OVq5cye655548seVCTBS59I466ihtZQIAAOAW2dCzhjw9roaOWGeJisNzzz3HhcGJJ57IRo8ezT744IPcb0uXLuUuPF9AEQMHDmQNGzZkL730Um6bs846iwson8GDB7N169axHTt2RB5z79693IIVfJkM3dRkjYKAAgAAIDP+Nutw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waZNm8ZuvfVW9tBDDzHbKCVcZAibQsHqKhsREsoBAExE5cSXQqlmKBExQeVA/1ghnsVQ8R9//PHc50OHDnlt27b1pk2blvtu586dXnV1tfeb3/yGf3799df537388su5bf785z97DRo08P7973/zz/fff7/XsmVLb+/evbltbrzxRu/EE0+MXba6ujp+HPrfZPbs2cPLSS96b+o+47Bt27bccek9AACYRrCfkt1PquyL92jq92VQzvPbOktUMTZs2MC2bt3KXXg+tbW1rG/fvmzp0qX8M/1PLrzTTjsttw1t37BhQ2658rc566yzWFVVVW4bsmatW7eO7dixI/LYe/fu5Ras4MsESlmaVJtYZbr0wtYnV33wAAB7ob4pbImStVh6of4dfaM4nBJRJKAI31TpQ5/93+j/sPmycePG7IgjjsjbJmofwWOEmTJlChds/oviqNJKsYYra1pvocy8LvrgAQB2D/b9fpBiN31BRc8YVYJGRt+YSWl/65SI0smkSZNYXV1d7rV582ZmAibNwqDjU6dBUCdCnYnM89QRPAkAAMXo3LlznsVcZr6oNCa/VI1TyTbbtm3L/9+2bRufnedDn3v37p3bJvxAPXDgAJ+x5/89/U9/E8T/7G8Tprq6mr9A8YRrhabcysB37wEAgAmEEwL7g0rZxwoLNBlJMbOakizrpqFrCp9EzsKFC3PfUWwSxTr169ePf6b/d+7cyWfd+SxatIgdOnSIx07529CMvf379+e2oZl8J554ImvZsiWzCdNGHCotY6adOwAA+JDQoGeWrIWIVS1y7AN3niXQTbFy5Ur+IsglRO83bdrEH5bjxo1jP/jBD9gf//hH9tprr7Err7yS55S68MIL+fYnnXQSO++889jIkSPZ8uXL2d/+9jc2duxYdskll/DtiMsuu4wHlVP+KEqFMHfuXHbvvfey8ePHM9sodWO7LDTS2qgBAObjB5PLyl5ezDLkcr+vHM8yFi9eXG96KL2GDh2aS3Nw8803e23atOGpDc4991xv3bp1efv44IMPvEsvvdRr3ry5V1NT4w0fPtzbvXt33jarVq3yzjjjDL6P9u3be3fddVdZ5bQlxYHLU11VpTww5XwBAGaDvsIOynl+N6B/1Es39yE3Is3SoyBzyoxuKjL82Kb4xlWUIyrGgUz0AACgs280pR/2IaubP8udYoxNTvJZ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+8c//pH77f777/datmzp7d27N/fdjTfe6J144omaSusGU6dO9Tp37pz7jHoWQ58+fbwxY8bkPh88eNBr166dN2XKFK3lcoXt27fzPmLJkiX8886dO73DDjvMmzdvXm6bN954g2+zdOlSjSW1k927d3snnHCCt2DBAm/AgAHeddddx79HPScDliggHTIHjxw5kv3yl79kzZo1q/f70qVL2VlnncWqqqpy39HInkz6O3bsUFxad6irq2NHHHFE7jPquXLIPUpWvIEDB+atk0mfqX6BmPuW8O9dqm+yTgXrvGvXruzYY49FnSeArH5DhgzJq08C9ZwMiCggFcrlOmzYMDZq1Ch22mmnRW6zdetW1qZNm7zv/M/0Gyift956i02fPp1985vfzH2Heq6c999/nx08eDCyHlGHlUMuaYrR+exnP8t69OjBv6N6JeHfokWLvG1R5+Xz6KOPchc0xaGFQT0nAyIKJOKmm27iQYnFXhSnQw/y3bt3s0mTJukustP1HOTf//43O++889jFF1/MLYAA2GQlWb16NX/YA7Fs3ryZXXfddeyRRx7hEyKAGBoL2g9IGRMmTOAWpmJ06dKFLVq0iJuCw2sykVXq8ssvZw8//DBr27ZtvRkg/mf6Lc3ErWcfCgQ9++yzWf/+/esFjKOeK6dVq1asUaNGkfWIOqyMsWPHsqeeeoo9//zz7Jhjjsl9T/VKbtSdO3fmWUlQ5+VB7jqa/HDKKafkviOrKtX3fffdx5555hnUcxISxlIBEIu3337be+2113KvZ555hgcq/va3v/U2b96cF/C8b9++3N9NmjQJAc9l8s477/CA0UsuucQ7cOBAvd9Rz+ICy8eOHZsXWN6+fXsElifk0KFDPFCfgvPffPPNer/7Ac/UZ/isXbsWAc9lsmvXrry+mF6nnXaa9/Wvf52/Rz0nAyIKKGXDhg31ZudR423Tpo13xRVXeKtXr/YeffRRr1mzZt6DDz6otay2Cajjjz/eO/fcc/n7LVu25F4+qGcxUL1VV1d7c+bM8V5//XXv6quv9lq0aOFt3bpVd9GsZPTo0V5tba333HPP5d23H330UW6bUaNGeccee6y3aNEi7+9//7vXr18//gKVEZydR6CeywciCmgXUcSqVau8M844gz+caFR/1113aSujjcyePZvXa9QrCOpZDNOnT+cPm6qqKm6ZWrZsme4iWUuh+5buaZ+PP/7Yu+aaa7gllYT/l7/85bwBAhAjolDP5dOA/knkBwQAAAAASDGYnQcAAAAAkACIKAAAAACABEBEAQAAAAAkACIKAAAAACABEFEAAAAAAAmAiAIAAAAASABEFAAAAABAAiCiAAAAAAASABEFAAAAAJAAiCgAAAAAgARARAEAQEx+85vfsKZNm7ItW7bkvhs+fDjr2bMnq6ur01o2AIB6sHYeAADEhLrL3r17s7POOotNnz6dTZ48mc2aNYstW7aMtW/fXnfxAACKaaz6gAAAYCsNGjRgd9xxB7voootY27ZtuZB64YUXIKAASCmwRAEAQJmccsopbM2aNezZZ59lAwYM0F0cAIAmEBMFAABlMH/+fLZ27Vp28OBB1qZNG93FAQBoBJYoAACIySuvvMI+97nPsQcffJDNmTOH1dTUsHnz5ukuFgBAE4iJAgCAGGzcuJENGTKEfec732GXXnop69KlC+vXrx8XVuTeAwCkD1iiAACgBB9++CHr378/t0LNnDkz9z2JKnLrkYsPAJA+IKIAAAAAABKAwHIAAAAAgARARAEAAAAAJAAiCgAAAAAgARBRAAAAAAAJgIgCAAAAAEgARBQAAAAAQAIgogAAAAAAEgARBQAAAACQAIgoAAAAAIAEQEQBAAAAACQAIgoAAAAAIAEQUQAAAAAArHz+H2KBfoLqj4avAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.errorbar(x, y, ye, ls='', c='k')\n", "ax.set(xlabel='$x$', ylabel='$y$', title='Randomly Generated Data');" ] }, { "cell_type": "markdown", "id": "eaeabb60-9774-4db7-8880-51f9411c9126", "metadata": {}, "source": [ "Now we need to multiply some components of the model" ] }, { "cell_type": "code", "execution_count": 21, "id": "f7d3086f-38d5-4858-b069-39d76e261419", "metadata": {}, "outputs": [], "source": [ "model = (Polynomial('x', order=3) * Sinusoid('x')) + Constant()" ] }, { "cell_type": "markdown", "id": "a2c3486d-4b4a-4544-b5b2-e9755f6b4f3d", "metadata": {}, "source": [ "The model is now a `JointModel`, but inside the model is a `CrossTermModel`" ] }, { "cell_type": "code", "execution_count": 22, "id": "b980403b-49e4-4542-8e86-bab51fe6a706", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JointModel\n", "\tCrosstermModel(x)[n, 6]\n", "\tConstant()[n, 1]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model" ] }, { "cell_type": "markdown", "id": "d751fd05-e045-464f-8b4a-e79e518e5110", "metadata": {}, "source": [ "This crossterm model is the `Polynomial` multiplied by the `Sinusoid`" ] }, { "cell_type": "code", "execution_count": 23, "id": "0171fbb6-5858-4265-927e-cb540c15e323", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CrosstermModel(x)[n, 6]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[0]" ] }, { "cell_type": "markdown", "id": "59afa15d-99f2-4488-bd92-a4cf0e9bbc7d", "metadata": {}, "source": [ "This model is now a polynomial multiplied by a sinusoid. Let's look at the equation" ] }, { "cell_type": "code", "execution_count": 24, "id": "18c75dbe-f681-42f1-a529-a8ee8e1a63d6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\\[f(\\mathbf{x}) = w_{0} \\mathbf{x}^{1}\\sin(\\mathbf{x}) + w_{1} \\mathbf{x}^{1}\\cos(\\mathbf{x}) + w_{2} \\mathbf{x}^{2}\\sin(\\mathbf{x}) + w_{3} \\mathbf{x}^{2}\\cos(\\mathbf{x}) + w_{4} \\mathbf{x}^{3}\\sin(\\mathbf{x}) + w_{5} \\mathbf{x}^{3}\\cos(\\mathbf{x})\\]
" ], "text/plain": [ "'\\\\[f(\\\\mathbf{x}) = w_{0} \\\\mathbf{x}^{1}\\\\sin(\\\\mathbf{x}) + w_{1} \\\\mathbf{x}^{1}\\\\cos(\\\\mathbf{x}) + w_{2} \\\\mathbf{x}^{2}\\\\sin(\\\\mathbf{x}) + w_{3} \\\\mathbf{x}^{2}\\\\cos(\\\\mathbf{x}) + w_{4} \\\\mathbf{x}^{3}\\\\sin(\\\\mathbf{x}) + w_{5} \\\\mathbf{x}^{3}\\\\cos(\\\\mathbf{x})\\\\]'" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model[0].equation" ] }, { "cell_type": "markdown", "id": "10d920ba-7273-432f-a239-170fe0b4154e", "metadata": {}, "source": [ "We see in this model each term of the sinusoid model is multiplied by each term of the polynomial model. Note that a `CrosstermModel` can not be indexed into, because we can not split apart the various components. \n", "\n", "We can fit this model just like the one above to find the best fitting components" ] }, { "cell_type": "code", "execution_count": 25, "id": "91af75b7-19c9-48da-8b1b-a5e9097e6633", "metadata": {}, "outputs": [], "source": [ "model.fit(x=x, data=y, errors=ye)" ] }, { "cell_type": "code", "execution_count": 26, "id": "ba8100e1-7f9e-40f1-93bb-5907fe19443a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAHHCAYAAACfqw0dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACfrklEQVR4nO2dCZgU1dX3b8/AsNQwwzqDI7soIi64IOIeMZCENwaTYERMlAguAT9QExVN1GgEo4mBqImIismrMUoSjVtU4v4qIC6oIKKGYTHANNtsBQwwU99zLnWrb/X0Usut6u6a/+95Gnp6u9XVVbfOPcv/xAzDMBgAAAAAAHBFkbuXAwAAAAAAAkYUAAAAAIAHYEQBAAAAAHgARhQAAAAAgAdgRAEAAAAAeABGFAAAAACAB2BEAQAAAAB4AEYUAAAAAIAHYEQBAAAAAHgARhQAICUXX3wxGzBgQJsbG2TmkUceYbFYjK1bty7XmwJAzoERBUCeXJTErV27duzggw/mhsR///vfXG9eZGhpaWF//vOf2de//nXWs2dP1r59e1ZRUcHGjBnDHnjgAdbU1MSiwq5du9gtt9zCXn/99ZxtA40vH9edO3dm/fr1Y9/+9rfZwoULfe3vF154gX8+ALmmXa43AABwgFtvvZUNHDiQ7dmzhy1dupQbV//3f//HVq5cyTp27JjrzStodu/ezc4991z20ksvsZNPPpn99Kc/ZZWVlWzHjh3sjTfeYD/5yU/YsmXL2EMPPcSiYkT98pe/5PfPPPPMnG7LH//4R1ZaWsqNJloU0G/w4x//mM2dO5c999xzrG/fvp6MqPvuuw+GFMg5MKIAyBO++c1vshNOOIHfnzJlCveW/PrXv2bPPPMMO++883K9eQXNVVddxS/edOGeMWOG7blrrrmGffHFF2zx4sUsX9m/fz/3pJWUlLBC4/vf/z4/lgU33XQTe+yxx9iPfvQjNmHCBL5gAKBQQTgPgDzltNNO4///5z//sR7bu3cvvwgdf/zxrLy8nGmaxl/32muv2d5L+SoUQvnNb37DQ1WHHHII69ChAxsxYgRbvnx5q7GefvppduSRR3KPF/3/1FNPpdwmXde50UHeA/q8IUOG8DEMw7C9jsaePn06W7RoETviiCNYp06d2KhRo9gnn3zCn58/fz4bPHgwH488JZnya+izKT/qO9/5TqvnyGtH++Gyyy5L+/6NGzeyBx98kH3jG99oZUAJDj30UO6NkiGjhYyuYcOG8e0kzxWNs3PnTtvraNv+53/+h3sNTzzxRP7aQYMG8dBhMrW1tWzmzJnW/qN9QIYyjZXqt6PxxW/36aefOvr96f29evXi98kbJcJpstfms88+48ZN9+7d+faS8U7GejKrVq1iZ511Fv/9+vTpw371q1/ZttUrkyZN4gsF8v7Jxutbb73FDSsK+9F3pv1EBjB5EgUU5iYvFCGHCwW038jb2KNHD77dtK/+9re/+d5mAFIBTxQAeYowLLp162Y9Vl9fzw2CiRMnsqlTp7KGhgYegho7dix799132fDhw22f8Ze//IW/hi7+dKG588472Xe/+122du1anhNEvPzyy+x73/seN3bmzJnDtm/fziZPnswvmsnGzDnnnMMv2Jdccgkfi7w7P/vZz3iY5ne/+53t9XRBpAvztGnT+N/02WRsXHvttewPf/gDN1rIIKFtovDOq6++mnI/0HZfeOGF/HUUfqMLv+DZZ5/l+4SeT8e//vUv1tzcnPE1qaB9RiFV2hf/7//9P1ZdXc3uvfde9uGHH7K3337b2n/El19+yY0S2i8XXXQRe/jhh/nFni7gZISJENsZZ5zB9xV9NhkK77zzDps1axbbvHkzN5hkKG+IjMRLL72UGxT0vZ38/mRAUQjtiiuu4CFM+r2Jo48+2jKMTjnlFJ53d/3113ND7Mknn2Tjx49nf//73/l7iC1btrCvfe1r3AsmXkcGORkmKvjhD3/IP4+OP8pTI8jopv1E205GEH2ne+65h3311Vf8OfG7bNq0iRtf//u//9vqc+fNm8ePUzLUyOj861//yg0zCh2OGzdOybYDYGEAAHLKwoULyY1j/Pvf/za2bt1qbNy40fjb3/5m9OrVy+jQoQP/W7B//36jqanJ9v6dO3calZWVxo9//GPrserqav6ZPXr0MHbs2GE9/s9//pM//uyzz1qPDR8+3DjooIOM2tpa67GXX36Zv65///7WY08//TR/7Fe/+pVt/O9///tGLBYzvvzyS+sxeh1tO22HYP78+fzx3r17G/X19dbjs2bN4o/Lr73oootsY69Zs4a/5o9//KNt7HPOOccYMGCA0dLSknb/XnXVVfy9K1assD1O+5H2t7ht27bNeu6tt97i73nsscds73nxxRdbPU7bSY+9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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.errorbar(x, y, ye, ls='', c='k')\n", "ax.plot(x, np.asarray([model.sample(x=x) for count in range(100)]).T, c='r', alpha=0.1);\n", "ax.set(xlabel='$x$', ylabel='$y$', title='Randomly Generated Data');" ] }, { "cell_type": "markdown", "id": "1fd13033-c2c1-4872-94d7-56add34c80da", "metadata": {}, "source": [ "This let's us find the best fitting weights for our combined model" ] }, { "cell_type": "code", "execution_count": 27, "id": "63a591bc-2f1f-4990-891b-dc4f5fa981da", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DistributionContainer\n", "\t[(23.4143, 0.0024), (23.4681, 0.0025), (0.000125, 2.5e-05), (0.000271, 2.6e-05), (2.64e-05, 1.5e-06), (-5.3e-06, 1.5e-06), (1.547, 0.02)]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.posteriors" ] }, { "cell_type": "markdown", "id": "96a11352-9555-48a2-b231-e232a5a879ca", "metadata": {}, "source": [ "We can save and load joint and crossterm models just like regular models " ] }, { "cell_type": "code", "execution_count": 28, "id": "d3acfde3-8489-4f9a-8fbb-b1c430c76514", "metadata": {}, "outputs": [], "source": [ "model.save(\"output.json\")" ] }, { "cell_type": "code", "execution_count": 29, "id": "670361dd-5c6a-4e6e-8291-50cf6487323e", "metadata": {}, "outputs": [], "source": [ "from lamatrix import load" ] }, { "cell_type": "code", "execution_count": 42, "id": "2f6d503b-f0c3-4c3f-8400-ced48d35cc61", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JointModel\n", "\tCrosstermModel(x)[n, 6]\n", "\tConstant()[n, 1]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "load(\"output.json\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.13" } }, "nbformat": 4, "nbformat_minor": 5 }