jidt/course/Module07-StatisticalSignifi.../StatSignificance_Solution.i...

581 lines
254 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generating surrogate distributions\n",
"\n",
"Authors: Isabelle De Backer, 2020; and Joseph Lizier, 2023-; based on the original Matlab tutorials.\n",
"\n",
"In this activity we will generate surrogate distributions to assess the statistical significance of estimates from several different estimator types, and examine their properties. \n",
"\n",
"1. Start by opening the MI AutoAnalyser. Select a Gaussian estimator, data file `2CoupledRandomCols-1.txt` and click the checkbox next to `Add stat signif.?`. Click `Generate Code and Compute.`\n",
"\n",
"2. Open the Python code tab, read the code from the comment `# 6. Compute the (statistical significance ...` onwards to see how the empirical surrogate distribution is dealt with, and see the results printed in the Status area.\n",
"\n",
"3. Copy the code in the Python code tab into the two code cells below -- the first cell for code up until after the JVM is started, and the other cell for the remainder."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Paste the import lines and the lines to start the JVM in this code cell:\n",
"\n",
"from jpype import *\n",
"import numpy\n",
"import sys\n",
"# Our python data file readers are a bit of a hack, python users will do better on this:\n",
"sys.path.append(\"/home/joseph/JIDT/infodynamics-dist-1.6/demos/python\")\n",
"import readFloatsFile\n",
"\n",
"if (not isJVMStarted()):\n",
" # Add JIDT jar library to the path\n",
" jarLocation = \"/home/joseph/JIDT/infodynamics-dist-1.6/infodynamics.jar\"\n",
" # Start the JVM (add the \"-Xmx\" option with say 1024M if you get crashes due to not enough memory space)\n",
" startJVM(getDefaultJVMPath(), \"-ea\", \"-Djava.class.path=\" + jarLocation)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = 0.0079 nats (null: 0.0052 +/- 0.0071 std dev.; p(surrogate > measured)=0.23100 from 1000 surrogates)\n"
]
}
],
"source": [
"# Paste the remaining code making calculations etc in this code cell:\n",
"\n",
"# 0. Load/prepare the data:\n",
"N = 100; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0; # We'll change this later\n",
"destination = numpy.random.normal(size=N); # assign random normal data to destination\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.gaussian\").MutualInfoCalculatorMultiVariateGaussian\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"4. Replace the loaded data in the `source` and `destination` variables with the following lines:\n",
"```python\n",
"N = 100; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0; # We'll change this later\n",
"destination = numpy.random.normal(size=N); # assign random normal data to destination\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"```\n",
"Notice that we specifically create 1D arrays by calling `numpy.random.normal(size=N)` -- in contrast, calling `numpy.random.normal(size=(N,1))` creates a 2D array with 1 column. We can use 2D arrays with JIDT (see [full details](https://github.com/jlizier/jidt/wiki/UseInPython) if you're intertested), but since we are computing on univariates, go with the 1D array.\n",
"\n",
"5. Replace the number of surrogates generated in the `measDist = calc.computeSignificance(100)` line from 100 to `S`, to use the above variable. Do the same changing the 100 to `S` in the final `print` statement.\n",
"\n",
"6. Run the code cell above now to make sure you haven't broken it.\n",
"\n",
"7. You can access an array of the surrogate measurements in the `distribution` member of the object `measDist`. You can generate data for a histogram of the surrogate distribution by calling `numpy.histogram()` as below (note the conversion from a java array back to a python numpy array), then using the `matplotlib` to plot it as we have done previously. Run the code in the cell below to do this:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Kod0GnaEEAVONzExwcGDBwtdjrGxMUJCQhASElJSTSMiIiI9US5OUCYiIiIqLQw7REREpNcYdoiIiEivMewQERGRXmPYISIiIr3GsENERER6jWGHiIiI9BrDDhEREek1hh0iIiLSaww7REREpNcYdoiIiEivMewQERGRXmPYISIiIr3GsENERER6jWGHiIiI9BrDDhEREek1hh0iIiLSaww7REREpNcYdoiIiEivMewQERGRXmPYISIiIr3GsENERER6jWGHiIiI9BrDDhEREek1hh0iIiLSaww7REREpNcYdoiIiEivMewQERGRXjMs6gzJycnYuXMnTpw4gZiYGDx79gyVK1dGo0aN0LVrV7Ru3bo02klERERULFqP7MTFxWH06NFwcnLCvHnzkJaWhoYNG6JTp06oWrUqjh07hi5duqBu3brYunVrabaZiIiISGtaj+w0aNAAw4YNw7lz5+Dl5aWxTnp6Onbt2oWvvvoKd+/exeTJk0usoURERETFoXXYuXbtGipXrlxgHRMTEwwaNAiDBg3Cw4cPX7txRERERK9L68NYhQWd161PREREVBqKdILy7t27tarXu3fvYjWGiIiIqKQVKez06dOn0DoymQw5OTnFbQ8RERFRiSpS2MnNzS2tdhARERGVCt5UkIiIiPRakUZ2jh8/rlW9du3aFasxRERERCWtSGGnQ4cOkMlkAAAhhMY6PGeHiIiIypMiHcaysbGBi4sLZs2ahZs3b+Lx48dqr0ePHmm9vODgYDRr1gwWFhawt7dHnz59cOPGDZU6QggEBQXB2dkZJiYm6NChA65du6ZSJyMjAxMmTICdnR3MzMzQu3dv3Lt3ryibRkRERHqqSGEnLi4OixYtwunTp+Ht7Y2RI0fi1KlTsLS0hJWVlfTSVkREBMaNG4czZ87g8OHDyM7Ohq+vL9LS0qQ6ixcvxldffYWVK1fi/PnzcHR0RJcuXfD06VOpTkBAAHbu3InQ0FD88ccfSE1NRc+ePTnCREREREULO0ZGRhg4cCAOHjyIGzduoH79+hg/fjxcXFzw2WefITs7u0grP3DgAIYPH4569eqhQYMGWLduHWJjY3Hx4kUAL0Z1li9fjs8++wx+fn7w8vLChg0b8OzZM2zevBnAiweTrl27FkuXLkXnzp3RqFEjbNq0CVeuXMGRI0eK1B4iIiLSP8W+GsvF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QfnWMTY2RkhICEJCQkqhhURERFTRldtzdoiIiIhKAsMOERER6TWGHSIiItJrDDtERESk1xh2iIiISK8x7BAREZFeY9ghIiIivcawQ0RERHqNYYeIiIj0GsMOERER6TWGHSIiItJrDDtERESk1xh2iIiISK8x7BAREZFeY9ghIiIivcawQ0RERHqNYYeIiIj0GsMOERER6TVDXTeAtBcdHV1oHTs7O7i6upZBa4iIiCoGhp0KICf1MSCTYciQIYXWNTYxxY3r0Qw8RERE/8WwUwHkZqQCQkDZcxLkSpd862Ul3UXSnqVITExk2CEiIvovhp0KRK50gcKxpq6bQUREVKHwBGUiIiLSaww7REREpNd4GEsPFXbVFq/YIiKiNwnDjh7R9qotXrFFRERvEoYdPaLNVVu8YouIiN40DDt6iFdtERER/Q9PUCYiIiK9xrBDREREeo1hh4iIiPQaww4RERHpNYYdIiIi0msMO0RERKTXGHaIiIhIrzHsEBERkV5j2CEiIiK9xrBDREREeo1hh4iIiPRauQ47QUFBkMlkKi9HR0dpuhACQUFBcHZ2homJCTp06IBr167psMVERERU3pTrsAMA9erVQ1xcnPS6cuWKNG3x4sX46quvsHLlSpw/fx6Ojo7o0qULnj59qsMWExERUXlS7p96bmhoqDKak0cIgeXLl+Ozzz6Dn58fAGDDhg1wcHDA5s2b8dFHH5V1UyuU6OjoAqfb2dnB1dW1jFpDRERUesp92Ll58yacnZ2hUCjQokULLFy4ENWrV8ft27cRHx8PX19fqa5CoUD79u1x6tSpAsNORkYGMjIypPcpKSmlug3lSU7qY0Amw5AhQwqsZ2xiihvXoxl4iIiowivXYadFixb46aef4OHhgQcPHmD+/Plo3bo1rl27hvj4eACAg4ODyjwODg64c+dOgcsNDg7G3LlzS63d5VluRiogBJQ9J0GudNFYJyvpLpL2LEViYiLDDhERVXjlOux0795d+n9vb2+0atUKNWrUwIYNG9CyZUsAgEwmU5lHCKFW9qrp06cjMDBQep+SkgIXF80//PpKrnSBwrGmrptBRERU6sr9CcovMzMzg7e3N27evCmdx5M3wpMnISFBbbTnVQqFApaWliovIiIi0k8VKuxkZGQgOjoaTk5OcHd3h6OjIw4fPixNz8zMREREBFq3bq3DVhIR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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"import matplotlib.pyplot as plt\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"8. Now let's add a marker to the plot to show where our measured value of MI sits with respect to the surrogate distribution. We'll need some additional data from the histogram for this plot also, so add the following code at the end of the cell above (after the histogram plot):\n",
"```python\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"```\n",
"And then re-run the cell.\n",
"\n",
"9. And add the following lines to put a nice title and axes on the plot: (This is good practice for your assignments!)\n",
"```python\n",
"# Now add a nice title and axes to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');\n",
"```\n",
"And re-run the cell.\n",
"\n",
"A sample plot is in the solutions notebook. (Note the markers of the measured MI in particular, as well as the surrogate distribution to a smaller extent, are stochastic -- so you should not expect your results to match exactly!)\n",
"\n",
"10. Note the scale of the x axis of the surrogate distribution -- now we will change the number of samples `N` to be 10 times larger.\n",
"To compare the distributions for this and the following questions, you can either:\n",
" 1. save the existing plot to compare to later and then change `N` in the code above and re-run, or\n",
" 2. create new cells below to paste the new calculation and plot code to generate new figures. (the solution code does this to keep all of the figures for you)\n",
"\n",
"Whichever you choose, implement this. How do you expect the surrogate distribution to change when it is based on more samples, and why? Run the code and notice how the surrogate distribution changes. Did this match your expectation?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = 0.0005 nats (null: 0.0005 +/- 0.0007 std dev.; p(surrogate > measured)=0.32500 from 1000 surrogates)\n"
]
},
{
"data": {
"image/png": "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SS8HB4cy3ioiIiKqKDQedurUqYOIiAicO3cOn332GQYPHozIyEhp+usPiRNCFPrguMLqTJ8+HcnJydIrNja2dBtBREREFZbGw46enh5q1aqFpk2bIjAwEI0aNcLy5culh369foYmISFBOttja2uLzMxMPHnyJN866igUCukOsLwXERERaSeNh53XCSGQkZGB6tWrw9bWFkeOHJGmZWZmIjw8HB4eHgAAd3d3yOVypTpxcXG4ceOGVIeIiIjebRp9EOiMGTPQqVMnODg44NmzZwgJCUFYWBgOHjwImUyGCRMmYMGCBahduzZq166NBQsWwNDQEP379wcAmJmZYdiwYZg0aRIsLS1hYWGByZMnw83NDe3atdPkphEREVEFodGw8/DhQwwcOBBxcXEwMzNDw4YNcfDgQbRv3x4AMGXKFKSnp2P06NF48uQJmjdvjsOHD8PExERaxtKlS6Grq4s+ffogPT0d3t7e2LBhA5+mS0RERAA0HHbWrVtX4HSZTIaAgAAEBATkW0dfXx8rV67EypUry7h1REREpA0qXJ8dIiIiorLEsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVtNo2AkMDMT7778PExMTWFtbo0ePHrh9+7ZSHX9/f8hkMqVXixYtlOpkZGRg3LhxsLKygpGREbp164b79++X56YQERFRBaXRsBMeHo4xY8bg3LlzOHLkCLKzs+Hj44O0tDSleh07dkRcXJz02r9/v9L0CRMmYNeuXQgJCcGpU6eQmpqKLl26ICcnpzw3h4iIiCogXU2u/ODBg0rv169fD2tra1y+fBmtW7eWyhUKBWxtbdUuIzk5GevWrcOmTZvQrl07AEBwcDAcHBxw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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0. Load/prepare the data:\n",
"N = 1000; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0; # We'll change this later\n",
"destination = numpy.random.normal(size=N); # assign random normal data to destination\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.gaussian\").MutualInfoCalculatorMultiVariateGaussian\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n",
"\n",
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"11. Our work so far has dealt with measuring an MI between independent source and destination. Let's introduce a dependence -- this will not change the surrogate distribution, but may change the statistical significance of the measurement. Change the code where the destination variable is assigned (make sure to leave the final JArray conversion after this though):\n",
"```python\n",
"coupling = 0.01\n",
"destination = coupling * source + (1 - coupling) * numpy.random.normal(size=N) # couple the destination to the source\n",
"```\n",
"12. Do you expect to see a statistically significant MI here because of the coupling? Run the code and find out. Remember that we are sampling, so run the code a few times to get a feeling for the range of results. Reflect on why might you see this outcome regarding the statistical significance?"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = 0.0015 nats (null: 0.0005 +/- 0.0007 std dev.; p(surrogate > measured)=0.08100 from 1000 surrogates)\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0. Load/prepare the data:\n",
"N = 1000; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0.01\n",
"destination = coupling * source + (1 - coupling) * numpy.random.normal(size=N) # couple the destination to the source\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.gaussian\").MutualInfoCalculatorMultiVariateGaussian\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n",
"\n",
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"13. Let's turn up the `coupling` variable to 0.05 make the effect stronger and see if we can detect the dependence. Does that help or is it still too small to detect, given the number of samples that we have? Try turning the `coupling` variable up higher still if required and observe the difference this makes."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = 0.0032 nats (null: 0.0005 +/- 0.0007 std dev.; p(surrogate > measured)=0.01200 from 1000 surrogates)\n"
]
},
{
"data": {
"image/png": "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OTk55bk6REREVAHpanLhBw4cUHq/du1a2Nra4uLFi2jVqpVUrlAoYG9vr7aN5ORkrFmzBhs3bkT79u0BAJs2bYKTkxOOHDmCTp06qcyTkZGBjIwM6f2zZ89KY3WIiIioAqpQ1+wkJycDACwtLZXKw8LCYGtrCzc3N3z66adISEiQpl28eBFZWVno2LGjVObo6Ah3d3ecPn1a7XKCg4NhZmYmvZycnMpgbYiIiKgiqDBhRwiBcePG4YMPPoC7u7tU3qVLF2zevBmhoaFYtGgRzp8/j3bt2klHZuLj46GnpwcLCwul9uzs7BAfH692WVOmTEFycrL0io2NLbsVIyIiIo3S6GmsV40aNQpXrlzByZMnlcr79Okj/b+7uzsaN24MFxcX7N27F/7+/vm2J4SATCZTO02hUEChUJROx4mIiKhCqxBHdkaPHo3du3fj2LFjqFq1aoF1HRwc4OLiglu3bgEA7O3tkZmZiaSkJKV6CQkJsLOzK7M+ExERUeWg0bAjhMCoUaOwY8cOhIaGonr16oXOk5iYiNjYWDg4OAAAPD09IZfLcfjwYalOXFwcrl27Bi8vrzLrOxEREVUOGj2NNXLkSGzZsgV//PEHTExMpGtszMzMYGBggJSUFAQFBaFnz55wcHBAdHQ0pk6dCmtra/To0UOqO2TIEIwfPx5WVlawtLTEhAkT4OHhId2dRURERG8vjYadVatWAQDatGmjVL527VoEBgZCR0cHV69exYYNG/D06VM4ODigbdu22Lp1K0xMTKT6ixcvhq6uLnr37o20tDR4e3tj3bp10NHRKc/VISIiogpIo2FHCFHgdAMDAxw8eLDQdvT19bF8+XIsX768tLpGREREWqJCXKBMREREVFYYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGRVmPYISIiIq3GsENERERajWGHiIiItBrDDhEREWk1hh0iIiLSagw7REREpNUYdoiIiEirMewQERGR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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0. Load/prepare the data:\n",
"N = 1000; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0.05\n",
"destination = coupling * source + (1 - coupling) * numpy.random.normal(size=N) # couple the destination to the source\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.gaussian\").MutualInfoCalculatorMultiVariateGaussian\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n",
"\n",
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Returning the `coupling` variable to 0.05, try using more samples (set `N = 10000;`) -- does this make it easier to discern the dependence effect from background noise? Why?<br/>\n",
"What factors have you now observed to help or hinder us to detect dependence between variables from empirical data?"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = 0.0018 nats (null: 0.0000 +/- 0.0001 std dev.; p(surrogate > measured)=0.00000 from 1000 surrogates)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAHWCAYAAACc+jjdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABya0lEQVR4nO3deXxM1/8/8NdIJpN930mCEltCiTVaicQulNhTJK2lra2Kj70SiqBVa6mqrZZGF7QVtRWh1qDWhKqKRCVCkMi+nd8ffnO/mcxEFiHLvJ6Px30w55577jkz9868c+6558qEEAJERERE1VyNiq4AERER0evAoIeIiIi0AoMeIiIi0goMeoiIiEgrMOghIiIircCgh4iIiLQCgx4iIiLSCgx6iIiISCsw6CEiIiKtwKCHSu3s2bPo27cvnJ2doVAoYGdnh3bt2mHy5MkVXbXXIioqCiEhIYiJiXkt+zt27BhkMhmOHTsmpQUFBaF27dqlKuf+/fsICQnBpUuXSrWdpn3JZDKMGzeuVOUUZ82aNdi8ebNaekxMDGQymcZ1r8OqVatQr1496OnpQSaT4enTp69sX8+ePcPUqVPRpUsX2NjYQCaTISQkpMj8Fy9eRKdOnWBsbAxzc3P4+/vj33//1Zh31apVaNiwIRQKBerUqYO5c+ciJydHLV9iYiKCgoJgbW0NQ0NDtGvXDn/88YfGMg8fPox27drB0NAQ1tbWCAoKQmJiYpnaXhVU9LFIL49BD5VKeHg4PD09kZKSgiVLluDgwYNYsWIF2rdvj507d1Z09V6LqKgozJ0797UFPZp8+umn2L17d6m2uX//PubOnVvqoKcs+yqLooIeBwcHnD59Gj179nzldSjs0qVLmDBhAjp27IgjR47g9OnTMDExeWX7S0pKwjfffIOsrCz06dPnhXlv3LgBb29vZGdn44cffsDGjRvx999/4+2338bDhw9V8i5YsAAff/wx/P39ceDAAYwZMwYLFy7E2LFjVfJlZWXB19cXf/zxB1asWIFffvkFdnZ26NatGyIiIlTyRkREoHv37rCzs8Mvv/yCFStW4PDhw/D19UVWVla5vB9E5U4QlUKHDh3EG2+8IXJyctTW5eXlldt+0tPTRX5+vsZ1aWlp5bafsvjxxx8FAHH06NHXsr+jR4+Wy/4iIyMFALFp06YS5X/R+wxAjB079qXqU1iTJk2El5dXuZb5srZt2yYAiLNnz5ZbmS96X/Pz86Xj/uHDhwKACA4O1ph3wIABwtraWiQnJ0tpMTExQi6Xi6lTp0ppjx49Evr6+mL06NEq2y9YsEDIZDJx/fp1Ke2rr74SAMSpU6ektJycHNG4cWPRunVrle1btWolGjdurPJdcPLkSQFArFmz5gXvQNV1586dUp1DVPmwp4dKJSkpCdbW1tDV1VVbV6OG6uFUVNd87dq1ERQUJL3evHkzZDIZDh48iPfffx82NjYwNDREVlYWvL294ebmhuPHj8PT0xOGhoZ4//33AQCxsbEYOnQobG1toVAo0KhRIyxduhT5+fkq+7t37x769+8PExMTmJub491330VkZKRaN/X58+cxePBg1K5dGwYGBqhduzaGDBmCu3fvqtR1wIABAICOHTtCJpOplaP8a9fU1BSGhoZo3759kZcHCrtx4wa6desmXS748MMP8ezZM7V8mi45/fjjj2jTpg3MzMxgaGiIunXrSu/VsWPH0KpVKwDAe++9J9Vb+fkEBQXB2NgYV69eRZcuXWBiYgJfX98i96W0bt06uLq6QqFQoHHjxggLC1NZHxISAplMprad8jNX9pbVrl0b169fR0REhFQ35T6LuqTw559/wtfXFyYmJjA0NISnpyfCw8M17ufo0aP46KOPYG1tDSsrK/j7++P+/fsa26Tk7e2NoUOHAgDatGkDmUymctxu3LgRzZo1g76+PiwtLdG3b19ER0erlPGi91UTZduLk5ubi71796Jfv34wNTWV0l1cXNCxY0eVnrn9+/cjMzMT7733nkoZ7733HoQQ2LNnj5S2e/duNGjQAO3atZPSdHV1MXToUJw7dw7//fcfAOC///5DZGQkhg0bpvJd4OnpCVdX1xL1DK5duxbNmjWDsbExTExM0LBhQ8ycOVNa//DhQ4wZMwaNGzeGsbExbG1t4ePjgxMnTqiUozw+Pv/8cyxevFg6f729vfH3338jJycH06dPh6OjI8zMzNC3b1+1S3C1a9eGn58fdu/ejaZNm0JfXx9169bFypUri20HANy6dQsBAQEq30VfffWVSp78/HzMnz8fDRo0gIGBAczNzdG0aVOsWLGiRPug8sGgh0qlXbt2OHv2LCZMmICzZ89qHBNQVu+//z7kcjm2bt2Kn376CXK5HAAQHx+PoUOHIiAgAPv2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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0. Load/prepare the data:\n",
"N = 10000; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0.05\n",
"destination = coupling * source + (1 - coupling) * numpy.random.normal(size=N) # couple the destination to the source\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.gaussian\").MutualInfoCalculatorMultiVariateGaussian\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n",
"\n",
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"14. Switch back to `N=1000;` samples and change the calculator type to `KSG (algorithm 1)`. You might want to generate new code to see how to construct this estimator, and then paste the _constructor_ line into your current script. See how this changes the surrogate distribution:\n",
" 1. Compare the means of the surrogate distributions (notice where the KSG surrogate distribution is centred), and relate this to the KSG estimator having bias correction. (The negative values are not incorrect, they simply reflect a value smaller than the expected bias).\n",
" 2. Compare the standard deviations of the surrogate distributions. What factors might contribute to their difference?"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MI_Gaussian(col_0 -> col_1) = -0.0268 nats (null: -0.0005 +/- 0.0193 std dev.; p(surrogate > measured)=0.91500 from 1000 surrogates)\n"
]
},
{
"data": {
"image/png": "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/f2l53K5XIwaNUqtXlhYmAAgtm3blmu8V69eFQDEgQMH8muaJDs7W2RmZorvv/9e6OnpiadPn0rLlJ/9q1evSmUJCQlCT09PGBkZif/++08qDw8PFwDEihUrpDLle++zzz5T2eePP/4oAIitW7eq7Ov199727dsFALF3716VdZWfoTVr1gghhNizZ48AoPaZJe1izwzly9raGufOncOVK1ewYMEC9OjRA3///TemTJkCb29vqQejKHr37q2xvHLlymjXrp1K2enTp1GnTh288847KuVDhgyBEAKnT58G8OoXvJmZGTp37qxSr1+/fmr7efnyJSZNmoSaNWtCX18f+vr6MDU1RXJystrpA03CwsLw9OlTDB48GFlZWdIjJycHnTt3xpUrV5CcnJzr+mfOnEHdunVRv359lfKgoKB89608hdS3b1/s2rUr39MBucntNdCkffv2sLOzk57r6enh/fffx+3bt1VOK5S05ORkXLp0CX369IGpqanK/gcOHIh///0XUVFRKuu8++67Ks+VPQ2vn0IsqAsXLiA1NVXllBMAODk5oV27dhp74ApzXAsjr1NSry8raL3C1n1dzZo1UblyZUyaNAnffPMNIiIiNNb7448/8O6778La2hp6enqQy+UYNGgQsrOz8ffff6vUdXBwQOPGjaXnVlZWsLW1RYMGDeDo6CiVe3p6AtD8evbv31/led++faGvr48zZ87k2pZDhw7B0tIS3bt3V/ksN2jQAPb29tKVhQ0aNICBgQFGjhyJLVu25HolGZUtJjNUYE2aNMGkSZOwe/duPHz4EJ999hmio6OxaNGiIm/TwcGhwOUJCQkay5VfcAkJCdK/r//BVdJUFhQUhFWrVmHEiBE4fvw4Ll++jCtXrqBKlSpSt3JeHj9+DADo06cP5HK5ymPhwoUQQuDp06e5rp+QkAB7e3u1ck1lb2rTpg0OHDiArKwsDBo0CNWqVYOXlxe2b9+e77pKxsbGKuMv8pNXrMrjXxoSExMhhCjQ669kbW2t8lyhUABAgV7XNym3ndv+39x3YY9rQSjbo+k4P336FDKZDJaWllLdtLQ0jWM4nj59CisrK5Xt5rZNACp132RhYYHQ0FA0aNAAU6dORd26deHo6IhZs2ZJp3RiYmLQunVr/Pfff1i+fLn0w2j16tUA1F8PTfszMDBQKzcwMAAA6dTa6958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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0. Load/prepare the data:\n",
"N = 1000; # Number of samples to use\n",
"S = 1000; # Number of surrogates to generate\n",
"source = numpy.random.normal(size=N); # assign random normal data to source\n",
"coupling = 0.05\n",
"destination = coupling * source + (1 - coupling) * numpy.random.normal(size=N) # couple the destination to the source\n",
"# Lastly convert to Java arrays:\n",
"source = JArray(JDouble, 1)(source.tolist())\n",
"destination = JArray(JDouble, 1)(destination.tolist())\n",
"\n",
"# 1. Construct the calculator:\n",
"calcClass = JPackage(\"infodynamics.measures.continuous.kraskov\").MutualInfoCalculatorMultiVariateKraskov1\n",
"calc = calcClass()\n",
"# 2. Set any properties to non-default values:\n",
"# No properties were set to non-default values\n",
"# 3. Initialise the calculator for (re-)use:\n",
"calc.initialise()\n",
"# 4. Supply the sample data:\n",
"calc.setObservations(source, destination)\n",
"# 5. Compute the estimate:\n",
"result = calc.computeAverageLocalOfObservations()\n",
"# 6. Compute the (statistical significance via) null distribution empirically (e.g. with 100 permutations):\n",
"measDist = calc.computeSignificance(S)\n",
"\n",
"print(\"MI_Gaussian(col_0 -> col_1) = %.4f nats (null: %.4f +/- %.4f std dev.; p(surrogate > measured)=%.5f from %d surrogates)\" %\\\n",
" (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue, S))\n",
"\n",
"surrogates_hist, hist_edges = numpy.histogram(numpy.array(measDist.distribution), bins=50)\n",
"\n",
"# hist_edges has the lower and upper edge of each bin, so has length 51. Just pass the first 50 items as the x coordinates,\n",
"# and tell plt.bar to align the bars to the left edge. The bar width is the difference between the edges.\n",
"plt.bar(hist_edges[:-1], surrogates_hist, width=numpy.diff(hist_edges), align='edge', ec='black', label='# Surrogates');\n",
"plt.vlines(x=result, ymin=0, ymax=numpy.max(surrogates_hist), colors='green', label='MI statistic'); # Mark in our measured MI\n",
"plt.legend()\n",
"# Now add a nice title to the plot\n",
"calcName = calcClass.__name__;\n",
"calcName = calcName[calcName.index('continuous.') + len('continuous.'):calcName.index('.MutualInfo')]\n",
"plt.title('Surrogate distribution for %d samples,\\ncoupling=%.2f, %d surrogates, estimator=%s' % (N, coupling, S, calcName));\n",
"plt.xlabel('MI')\n",
"plt.ylabel('count(MI)');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"15. Finally, did the calculation with the KSG estimator find a statistically significant relationship here (for `N=1000` and `coupling=0.05`)? Compare this to the earlier result with the Gaussian estimator, and explain what you observe in terms of the properties of the estimators and how they are suited to the underlying relationship here. Find out how large does the coupling needs to be for 1000 samples in order to observe a statistically significant relationship here? (You can also try to increase the number of samples, but remember the KSG estimator runtime scales as N log N -- it will need around a minute to calculate for 10000 samples here)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"interpreter": {
"hash": "98b0a9b7b4eaaa670588a142fd0a9b87eaafe866f1db4228be72b4211d12040f"
},
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}