{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A multimodal DBM, jointly modelling SNP and gene expression data\n", "\n", "In this example a multimodal DBM is trained on genomic data from patients with acute myeloid leukemia (AML). The examined data set consists of data from 308 patients with SNP measurements, 319 patients with gene expression measurements and 26 patients with both measurements.\n", "\n", "For training the multimodal DBM, the [BoltzmannMachines](https://github.com/stefan-m-lenz/BoltzmannMachines.jl) Julia package is employed. It is shown how the resulting model can be used for dimensionality reduction.\n", "\n", "The data for executing the example code is attached. It has been extracted from the following sources:\n", "\n", "[1] Hieke-Schulz, S. (2016). *SNP data from a clinical cohort of acute myeloid leukemia patients*. Harvard Dataverse.\n", "https://doi.org/10.7910/DVN/JUMDLX\n", "\n", "[2] Hieke, S. et. al. (2016). *Integrating multiple molecular sources into a clinical risk prediction signature by extracting complementary information*. BMC Bioinformatics. https://doi.org/10.1186/s12859-016-1183-6\n", "\n", "## Preparations\n", "The following code requires Julia 1.0 and the packages `BoltzmannMachines` and `BoltzmannMachinesPlots`.\n", "The packages can be installed with the following commands:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "using Pkg\n", "Pkg.add(\"BoltzmannMachines\")\n", "Pkg.add(\"BoltzmannMachinesPlots\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now all the required packages can be loaded:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [], "source": [ "using BoltzmannMachines # requires package version 1.1\n", "using BoltzmannMachinesPlots # requires package version 1.0\n", "\n", "using DelimitedFiles\n", "using Random" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the functions from the standard package `DelimitedFiles`, the data is read from the prepared CSV files. There are three files for three types of patients:\n", "* For some patients there is only SNP data available, \n", "* for some there is only gene expression data,\n", "* and for some there is both." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [], "source": [ "snpdata = readdlm(\"snpdata.csv\", ','; header = true)[1]\n", "gepdata = readdlm(\"gepdata.csv\", ','; header = true)[1]\n", "combsnpsgeps = readdlm(\"combSnpsGeps.csv\", ','; header = true)[1];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training an RBM on SNP data (containing categorical values)\n", "\n", "Encode the 0/1/2-valued SNPs into 00/01/10-valued data as input for the `Softmax0BernoulliRBM`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": false }, "outputs": [], "source": [ "snpdata01 = oneornone_encode(snpdata, 3)\n", "combsnpsgeps = hcat(oneornone_encode(combsnpsgeps[:, 1:size(snpdata, 2)], 3),\n", " intensities(combsnpsgeps[:, (size(snpdata, 2)+1):end]));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then train a `Softmax0BernoulliRBM` with the SNP data.\n", "\n", "The data is split into training and test data and then used for monitoring during the training.\n", "\n", "The `upfactor` and `downfactor` are set for the later use of the RBM as a first layer in the multimodal DBM. They account for the fact that the visible layer is only connected to one other layer, in contrast to the hidden RBM layer, which will be connected to two layers in the DBM, namely the visible layer and the second hidden layer." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " Test data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Mean reconstruction error\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n" ], "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " 110\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -48\n", " \n", " \n", " \n", " \n", " -46\n", " \n", " \n", " \n", " \n", " -44\n", " \n", " \n", " \n", " \n", " -42\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -38\n", " \n", " \n", " \n", " \n", " -36\n", " \n", " \n", " \n", " \n", " -34\n", " \n", " \n", " \n", " \n", " -32\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -28\n", " \n", " \n", " \n", " \n", " -26\n", " \n", " \n", " \n", " \n", " -24\n", " \n", " \n", " \n", " \n", " -22\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -18\n", " \n", " \n", " \n", " \n", " -16\n", " \n", " \n", " \n", " \n", " -14\n", " \n", " \n", " \n", " \n", " -12\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -8\n", " \n", " \n", " \n", " \n", " -6\n", " \n", " \n", " \n", " \n", " -4\n", " \n", " \n", " \n", " \n", " -2\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 2\n", " \n", " \n", " \n", " \n", " 4\n", " \n", " \n", " \n", " \n", " 6\n", " \n", " \n", " \n", " \n", " 8\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 12\n", " \n", " \n", " \n", " \n", " 14\n", " \n", " \n", " \n", " \n", " 16\n", " \n", " \n", " \n", " \n", " 18\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 22\n", " \n", " \n", " \n", " \n", " 24\n", " \n", " \n", " \n", " \n", " 26\n", " \n", " \n", " \n", " \n", " 28\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 32\n", " \n", " \n", " \n", " \n", " 34\n", " \n", " \n", " \n", " \n", " 36\n", " \n", " \n", " \n", " \n", " 38\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 42\n", " \n", " \n", " \n", " \n", " 44\n", " \n", " \n", " \n", " \n", " 46\n", " \n", " \n", " \n", " \n", " 48\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 52\n", " \n", " \n", " \n", " \n", " 54\n", " \n", " \n", " \n", " \n", " 56\n", " \n", " \n", " \n", " \n", " 58\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 62\n", " \n", " \n", " \n", " \n", " 64\n", " \n", " \n", " \n", " \n", " 66\n", " \n", " \n", " \n", " \n", " 68\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 72\n", " \n", " \n", " \n", " \n", " 74\n", " \n", " \n", " \n", " \n", " 76\n", " \n", " \n", " \n", " \n", " 78\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 82\n", " \n", " \n", " \n", " \n", " 84\n", " \n", " \n", " \n", " \n", " 86\n", " \n", " \n", " \n", " \n", " 88\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " 92\n", " \n", " \n", " \n", " \n", " 94\n", " \n", " \n", " \n", " \n", " 96\n", " \n", " \n", " \n", " \n", " 98\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -45\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -35\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -25\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -15\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -5\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 5\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 15\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 25\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 35\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 45\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 55\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 65\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 75\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 85\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " 95\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " Test data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " h,j,k,l,arrows,drag to pan\n", " \n", " \n", " \n", " \n", " i,o,+,-,scroll,shift-drag to zoom\n", " \n", " \n", " \n", " \n", " r,dbl-click to reset\n", " \n", " \n", " \n", " \n", " c for coordinates\n", " \n", " \n", " \n", " \n", " ? for help\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " ?\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -38\n", " \n", " \n", " \n", " \n", " -36\n", " \n", " \n", " \n", " \n", " -34\n", " \n", " \n", " \n", " \n", " -32\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -28\n", " \n", " \n", " \n", " \n", " -26\n", " \n", " \n", " \n", " \n", " -24\n", " \n", " \n", " \n", " \n", " -22\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -18\n", " \n", " \n", " \n", " \n", " -16\n", " \n", " \n", " \n", " \n", " -14\n", " \n", " \n", " \n", " \n", " -12\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -8\n", " \n", " \n", " \n", " \n", " -6\n", " \n", " \n", " \n", " \n", " -4\n", " \n", " \n", " \n", " \n", " -2\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 2\n", " \n", " \n", " \n", " \n", " 4\n", " \n", " \n", " \n", " \n", " 6\n", " \n", " \n", " \n", " \n", " 8\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 12\n", " \n", " \n", " \n", " \n", " 14\n", " \n", " \n", " \n", " \n", " 16\n", " \n", " \n", " \n", " \n", " 18\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 22\n", " \n", " \n", " \n", " \n", " 24\n", " \n", " \n", " \n", " \n", " 26\n", " \n", " \n", " \n", " \n", " 28\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 32\n", " \n", " \n", " \n", " \n", " 34\n", " \n", " \n", " \n", " \n", " 36\n", " \n", " \n", " \n", " \n", " 38\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 42\n", " \n", " \n", " \n", " \n", " 44\n", " \n", " \n", " \n", " \n", " 46\n", " \n", " \n", " \n", " \n", " 48\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 52\n", " \n", " \n", " \n", " \n", " 54\n", " \n", " \n", " \n", " \n", " 56\n", " \n", " \n", " \n", " \n", " 58\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 62\n", " \n", " \n", " \n", " \n", " 64\n", " \n", " \n", " \n", " \n", " 66\n", " \n", " \n", " \n", " \n", " 68\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 72\n", " \n", " \n", " \n", " \n", " 74\n", " \n", " \n", " \n", " \n", " 76\n", " \n", " \n", " \n", " \n", " 78\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -35\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -25\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -15\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -5\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 5\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 15\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 25\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 35\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 45\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 55\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 65\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 75\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Mean reconstruction error\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Plot(...)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Random.seed!(1)\n", "monitor1 = Monitor()\n", "snpdata01train, snpdata01test = splitdata(snpdata01, 0.1)\n", "snpdatadict = DataDict(\"Training data\" => snpdata01train, \"Test data\" => snpdata01test)\n", "snprbm = fitrbm(snpdata01train, rbmtype = Softmax0BernoulliRBM, categories = 3, \n", " upfactor = 2.0, downfactor = 1.0,\n", " learningrate = 0.002,\n", " epochs = 50,\n", " monitoring = (rbm, epoch) ->\n", " monitorreconstructionerror!(monitor1, rbm, epoch, snpdatadict))\n", "plotevaluation(monitor1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training an RBM on gene expression data\n", "\n", "For feeding the data to a `BernoulliRBM`, the gene expression data is transformed into the interval [0,1]. The values are thereby treated as intensities:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [], "source": [ "gepintensities = intensities(gepdata);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train a normal `BernoulliRBM` with the intensities ( = probabilities) as a first layer for the DBM." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " Test data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 5.6\n", " \n", " \n", " \n", " \n", " 5.7\n", " \n", " \n", " \n", " \n", " 5.8\n", " \n", " \n", " \n", " \n", " 5.9\n", " \n", " \n", " \n", " \n", " 6.0\n", " \n", " \n", " \n", " \n", " 6.1\n", " \n", " \n", " \n", " \n", " 6.2\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Mean reconstruction error\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n" ], "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -38\n", " \n", " \n", " \n", " \n", " -36\n", " \n", " \n", " \n", " \n", " -34\n", " \n", " \n", " \n", " \n", " -32\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -28\n", " \n", " \n", " \n", " \n", " -26\n", " \n", " \n", " \n", " \n", " -24\n", " \n", " \n", " \n", " \n", " -22\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -18\n", " \n", " \n", " \n", " \n", " -16\n", " \n", " \n", " \n", " \n", " -14\n", " \n", " \n", " \n", " \n", " -12\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -8\n", " \n", " \n", " \n", " \n", " -6\n", " \n", " \n", " \n", " \n", " -4\n", " \n", " \n", " \n", " \n", " -2\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 2\n", " \n", " \n", " \n", " \n", " 4\n", " \n", " \n", " \n", " \n", " 6\n", " \n", " \n", " \n", " \n", " 8\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 12\n", " \n", " \n", " \n", " \n", " 14\n", " \n", " \n", " \n", " \n", " 16\n", " \n", " \n", " \n", " \n", " 18\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 22\n", " \n", " \n", " \n", " \n", " 24\n", " \n", " \n", " \n", " \n", " 26\n", " \n", " \n", " \n", " \n", " 28\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 32\n", " \n", " \n", " \n", " \n", " 34\n", " \n", " \n", " \n", " \n", " 36\n", " \n", " \n", " \n", " \n", " 38\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 42\n", " \n", " \n", " \n", " \n", " 44\n", " \n", " \n", " \n", " \n", " 46\n", " \n", " \n", " \n", " \n", " 48\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 52\n", " \n", " \n", " \n", " \n", " 54\n", " \n", " \n", " \n", " \n", " 56\n", " \n", " \n", " \n", " \n", " 58\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 62\n", " \n", " \n", " \n", " \n", " 64\n", " \n", " \n", " \n", " \n", " 66\n", " \n", " \n", " \n", " \n", " 68\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 72\n", " \n", " \n", " \n", " \n", " 74\n", " \n", " \n", " \n", " \n", " 76\n", " \n", " \n", " \n", " \n", " 78\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -35\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -25\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -15\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -5\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 5\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 15\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 25\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 35\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 45\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 55\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 65\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 75\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " Test data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " h,j,k,l,arrows,drag to pan\n", " \n", " \n", " \n", " \n", " i,o,+,-,scroll,shift-drag to zoom\n", " \n", " \n", " \n", " \n", " r,dbl-click to reset\n", " \n", " \n", " \n", " \n", " c for coordinates\n", " \n", " \n", " \n", " \n", " ? for help\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " ?\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 4.9\n", " \n", " \n", " \n", " \n", " 5.0\n", " \n", " \n", " \n", " \n", " 5.1\n", " \n", " \n", " \n", " \n", " 5.2\n", " \n", " \n", " \n", " \n", " 5.3\n", " \n", " \n", " \n", " \n", " 5.4\n", " \n", " \n", " \n", " \n", " 5.5\n", " \n", " \n", " \n", " \n", " 5.6\n", " \n", " \n", " \n", " \n", " 5.7\n", " \n", " \n", " \n", " \n", " 5.8\n", " \n", " \n", " \n", " \n", " 5.9\n", " \n", " \n", " \n", " \n", " 6.0\n", " \n", " \n", " \n", " \n", " 6.1\n", " \n", " \n", " \n", " \n", " 6.2\n", " \n", " \n", " \n", " \n", " 6.3\n", " \n", " \n", " \n", " \n", " 6.4\n", " \n", " \n", " \n", " \n", " 6.5\n", " \n", " \n", " \n", " \n", " 6.6\n", " \n", " \n", " \n", " \n", " 6.7\n", " \n", " \n", " \n", " \n", " 6.8\n", " \n", " \n", " \n", " \n", " 6.9\n", " \n", " \n", " \n", " \n", " 5.00\n", " \n", " \n", " \n", " \n", " 5.02\n", " \n", " \n", " \n", " \n", " 5.04\n", " \n", " \n", " \n", " \n", " 5.06\n", " \n", " \n", " \n", " \n", " 5.08\n", " \n", " \n", " \n", " \n", " 5.10\n", " \n", " \n", " \n", " \n", " 5.12\n", " \n", " \n", " \n", " \n", " 5.14\n", " \n", " \n", " \n", " \n", " 5.16\n", " \n", " \n", " \n", " \n", " 5.18\n", " \n", " \n", " \n", " \n", " 5.20\n", " \n", " \n", " \n", " \n", " 5.22\n", " \n", " \n", " \n", " \n", " 5.24\n", " \n", " \n", " \n", " \n", " 5.26\n", " \n", " \n", " \n", " \n", " 5.28\n", " \n", " \n", " \n", " \n", " 5.30\n", " \n", " \n", " \n", " \n", " 5.32\n", " \n", " \n", " \n", " \n", " 5.34\n", " \n", " \n", " \n", " \n", " 5.36\n", " \n", " \n", " \n", " \n", " 5.38\n", " \n", " \n", " \n", " \n", " 5.40\n", " \n", " \n", " \n", " \n", " 5.42\n", " \n", " \n", " \n", " \n", " 5.44\n", " \n", " \n", " \n", " \n", " 5.46\n", " \n", " \n", " \n", " \n", " 5.48\n", " \n", " \n", " \n", " \n", " 5.50\n", " \n", " \n", " \n", " \n", " 5.52\n", " \n", " \n", " \n", " \n", " 5.54\n", " \n", " \n", " \n", " \n", " 5.56\n", " \n", " \n", " \n", " \n", " 5.58\n", " \n", " \n", " \n", " \n", " 5.60\n", " \n", " \n", " \n", " \n", " 5.62\n", " \n", " \n", " \n", " \n", " 5.64\n", " \n", " \n", " \n", " \n", " 5.66\n", " \n", " \n", " \n", " \n", " 5.68\n", " \n", " \n", " \n", " \n", " 5.70\n", " \n", " \n", " \n", " \n", " 5.72\n", " \n", " \n", " \n", " \n", " 5.74\n", " \n", " \n", " \n", " \n", " 5.76\n", " \n", " \n", " \n", " \n", " 5.78\n", " \n", " \n", " \n", " \n", " 5.80\n", " \n", " \n", " \n", " \n", " 5.82\n", " \n", " \n", " \n", " \n", " 5.84\n", " \n", " \n", " \n", " \n", " 5.86\n", " \n", " \n", " \n", " \n", " 5.88\n", " \n", " \n", " \n", " \n", " 5.90\n", " \n", " \n", " \n", " \n", " 5.92\n", " \n", " \n", " \n", " \n", " 5.94\n", " \n", " \n", " \n", " \n", " 5.96\n", " \n", " \n", " \n", " \n", " 5.98\n", " \n", " \n", " \n", " \n", " 6.00\n", " \n", " \n", " \n", " \n", " 6.02\n", " \n", " \n", " \n", " \n", " 6.04\n", " \n", " \n", " \n", " \n", " 6.06\n", " \n", " \n", " \n", " \n", " 6.08\n", " \n", " \n", " \n", " \n", " 6.10\n", " \n", " \n", " \n", " \n", " 6.12\n", " \n", " \n", " \n", " \n", " 6.14\n", " \n", " \n", " \n", " \n", " 6.16\n", " \n", " \n", " \n", " \n", " 6.18\n", " \n", " \n", " \n", " \n", " 6.20\n", " \n", " \n", " \n", " \n", " 6.22\n", " \n", " \n", " \n", " \n", " 6.24\n", " \n", " \n", " \n", " \n", " 6.26\n", " \n", " \n", " \n", " \n", " 6.28\n", " \n", " \n", " \n", " \n", " 6.30\n", " \n", " \n", " \n", " \n", " 6.32\n", " \n", " \n", " \n", " \n", " 6.34\n", " \n", " \n", " \n", " \n", " 6.36\n", " \n", " \n", " \n", " \n", " 6.38\n", " \n", " \n", " \n", " \n", " 6.40\n", " \n", " \n", " \n", " \n", " 6.42\n", " \n", " \n", " \n", " \n", " 6.44\n", " \n", " \n", " \n", " \n", " 6.46\n", " \n", " \n", " \n", " \n", " 6.48\n", " \n", " \n", " \n", " \n", " 6.50\n", " \n", " \n", " \n", " \n", " 6.52\n", " \n", " \n", " \n", " \n", " 6.54\n", " \n", " \n", " \n", " \n", " 6.56\n", " \n", " \n", " \n", " \n", " 6.58\n", " \n", " \n", " \n", " \n", " 6.60\n", " \n", " \n", " \n", " \n", " 6.62\n", " \n", " \n", " \n", " \n", " 6.64\n", " \n", " \n", " \n", " \n", " 6.66\n", " \n", " \n", " \n", " \n", " 6.68\n", " \n", " \n", " \n", " \n", " 6.70\n", " \n", " \n", " \n", " \n", " 6.72\n", " \n", " \n", " \n", " \n", " 6.74\n", " \n", " \n", " \n", " \n", " 6.76\n", " \n", " \n", " \n", " \n", " 6.78\n", " \n", " \n", " \n", " \n", " 6.80\n", " \n", " \n", " \n", " \n", " 5.0\n", " \n", " \n", " \n", " \n", " 5.5\n", " \n", " \n", " \n", " \n", " 6.0\n", " \n", " \n", " \n", " \n", " 6.5\n", " \n", " \n", " \n", " \n", " 7.0\n", " \n", " \n", " \n", " \n", " 5.00\n", " \n", " \n", " \n", " \n", " 5.05\n", " \n", " \n", " \n", " \n", " 5.10\n", " \n", " \n", " \n", " \n", " 5.15\n", " \n", " \n", " \n", " \n", " 5.20\n", " \n", " \n", " \n", " \n", " 5.25\n", " \n", " \n", " \n", " \n", " 5.30\n", " \n", " \n", " \n", " \n", " 5.35\n", " \n", " \n", " \n", " \n", " 5.40\n", " \n", " \n", " \n", " \n", " 5.45\n", " \n", " \n", " \n", " \n", " 5.50\n", " \n", " \n", " \n", " \n", " 5.55\n", " \n", " \n", " \n", " \n", " 5.60\n", " \n", " \n", " \n", " \n", " 5.65\n", " \n", " \n", " \n", " \n", " 5.70\n", " \n", " \n", " \n", " \n", " 5.75\n", " \n", " \n", " \n", " \n", " 5.80\n", " \n", " \n", " \n", " \n", " 5.85\n", " \n", " \n", " \n", " \n", " 5.90\n", " \n", " \n", " \n", " \n", " 5.95\n", " \n", " \n", " \n", " \n", " 6.00\n", " \n", " \n", " \n", " \n", " 6.05\n", " \n", " \n", " \n", " \n", " 6.10\n", " \n", " \n", " \n", " \n", " 6.15\n", " \n", " \n", " \n", " \n", " 6.20\n", " \n", " \n", " \n", " \n", " 6.25\n", " \n", " \n", " \n", " \n", " 6.30\n", " \n", " \n", " \n", " \n", " 6.35\n", " \n", " \n", " \n", " \n", " 6.40\n", " \n", " \n", " \n", " \n", " 6.45\n", " \n", " \n", " \n", " \n", " 6.50\n", " \n", " \n", " \n", " \n", " 6.55\n", " \n", " \n", " \n", " \n", " 6.60\n", " \n", " \n", " \n", " \n", " 6.65\n", " \n", " \n", " \n", " \n", " 6.70\n", " \n", " \n", " \n", " \n", " 6.75\n", " \n", " \n", " \n", " \n", " 6.80\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Mean reconstruction error\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Plot(...)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Random.seed!(1)\n", "monitor2 = Monitor()\n", "gepdatatrain, gepdatatest = splitdata(gepintensities, 0.1)\n", "gepdatadict = DataDict(\"Training data\" => gepdatatrain, \"Test data\" => gepdatatest)\n", "geprbm = fitrbm(gepdatatrain, upfactor = 2.0, downfactor = 1.0,\n", " learningrate = 0.002,\n", " epochs = 40,\n", " monitoring = (rbm, epoch) ->\n", " monitorreconstructionerror!(monitor2, rbm, epoch, gepdatadict))\n", "plotevaluation(monitor2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training a multimodal DBM with both SNP data and gene expression data\n", "\n", "Now train a multimodal DBM using only the patients that have both SNP and gene expression measurements:\n", "\n", "The RBMs that have been trained for the input layer are used as pretrained building blocks in the first partitioned layer.\n", "During the joint training as a DBM, the variational lower bound of the log-likelihood is estimated via annealed importance sampling and used for monitoring." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -90\n", " \n", " \n", " \n", " \n", " -85\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -75\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Average lower bound of log probability\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n" ], "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Epoch\n", " \n", " \n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " 120\n", " \n", " \n", " \n", " \n", " 140\n", " \n", " \n", " \n", " \n", " 160\n", " \n", " \n", " \n", " \n", " 180\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -75\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " -65\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -55\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -45\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -35\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -25\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -15\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -5\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 5\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 15\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 25\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 35\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 45\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 55\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 65\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 75\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 85\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " 95\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " 105\n", " \n", " \n", " \n", " \n", " 110\n", " \n", " \n", " \n", " \n", " 115\n", " \n", " \n", " \n", " \n", " 120\n", " \n", " \n", " \n", " \n", " 125\n", " \n", " \n", " \n", " \n", " 130\n", " \n", " \n", " \n", " \n", " 135\n", " \n", " \n", " \n", " \n", " 140\n", " \n", " \n", " \n", " \n", " 145\n", " \n", " \n", " \n", " \n", " 150\n", " \n", " \n", " \n", " \n", " 155\n", " \n", " \n", " \n", " \n", " 160\n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " 200\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -75\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " -65\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -55\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -45\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -35\n", " \n", " \n", " \n", " \n", " -30\n", " \n", " \n", " \n", " \n", " -25\n", " \n", " \n", " \n", " \n", " -20\n", " \n", " \n", " \n", " \n", " -15\n", " \n", " \n", " \n", " \n", " -10\n", " \n", " \n", " \n", " \n", " -5\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 5\n", " \n", " \n", " \n", " \n", " 10\n", " \n", " \n", " \n", " \n", " 15\n", " \n", " \n", " \n", " \n", " 20\n", " \n", " \n", " \n", " \n", " 25\n", " \n", " \n", " \n", " \n", " 30\n", " \n", " \n", " \n", " \n", " 35\n", " \n", " \n", " \n", " \n", " 40\n", " \n", " \n", " \n", " \n", " 45\n", " \n", " \n", " \n", " \n", " 50\n", " \n", " \n", " \n", " \n", " 55\n", " \n", " \n", " \n", " \n", " 60\n", " \n", " \n", " \n", " \n", " 65\n", " \n", " \n", " \n", " \n", " 70\n", " \n", " \n", " \n", " \n", " 75\n", " \n", " \n", " \n", " \n", " 80\n", " \n", " \n", " \n", " \n", " 85\n", " \n", " \n", " \n", " \n", " 90\n", " \n", " \n", " \n", " \n", " 95\n", " \n", " \n", " \n", " \n", " 100\n", " \n", " \n", " \n", " \n", " 105\n", " \n", " \n", " \n", " \n", " 110\n", " \n", " \n", " \n", " \n", " 115\n", " \n", " \n", " \n", " \n", " 120\n", " \n", " \n", " \n", " \n", " 125\n", " \n", " \n", " \n", " \n", " 130\n", " \n", " \n", " \n", " \n", " 135\n", " \n", " \n", " \n", " \n", " 140\n", " \n", " \n", " \n", " \n", " 145\n", " \n", " \n", " \n", " \n", " 150\n", " \n", " \n", " \n", " \n", " 155\n", " \n", " \n", " \n", " \n", " 160\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Training data\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Data set\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " h,j,k,l,arrows,drag to pan\n", " \n", " \n", " \n", " \n", " i,o,+,-,scroll,shift-drag to zoom\n", " \n", " \n", " \n", " \n", " r,dbl-click to reset\n", " \n", " \n", " \n", " \n", " c for coordinates\n", " \n", " \n", " \n", " \n", " ? for help\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " ?\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -115\n", " \n", " \n", " \n", " \n", " -110\n", " \n", " \n", " \n", " \n", " -105\n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " -95\n", " \n", " \n", " \n", " \n", " -90\n", " \n", " \n", " \n", " \n", " -85\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -75\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " -65\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -55\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -45\n", " \n", " \n", " \n", " \n", " -110\n", " \n", " \n", " \n", " \n", " -109\n", " \n", " \n", " \n", " \n", " -108\n", " \n", " \n", " \n", " \n", " -107\n", " \n", " \n", " \n", " \n", " -106\n", " \n", " \n", " \n", " \n", " -105\n", " \n", " \n", " \n", " \n", " -104\n", " \n", " \n", " \n", " \n", " -103\n", " \n", " \n", " \n", " \n", " -102\n", " \n", " \n", " \n", " \n", " -101\n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " -99\n", " \n", " \n", " \n", " \n", " -98\n", " \n", " \n", " \n", " \n", " -97\n", " \n", " \n", " \n", " \n", " -96\n", " \n", " \n", " \n", " \n", " -95\n", " \n", " \n", " \n", " \n", " -94\n", " \n", " \n", " \n", " \n", " -93\n", " \n", " \n", " \n", " \n", " -92\n", " \n", " \n", " \n", " \n", " -91\n", " \n", " \n", " \n", " \n", " -90\n", " \n", " \n", " \n", " \n", " -89\n", " \n", " \n", " \n", " \n", " -88\n", " \n", " \n", " \n", " \n", " -87\n", " \n", " \n", " \n", " \n", " -86\n", " \n", " \n", " \n", " \n", " -85\n", " \n", " \n", " \n", " \n", " -84\n", " \n", " \n", " \n", " \n", " -83\n", " \n", " \n", " \n", " \n", " -82\n", " \n", " \n", " \n", " \n", " -81\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -79\n", " \n", " \n", " \n", " \n", " -78\n", " \n", " \n", " \n", " \n", " -77\n", " \n", " \n", " \n", " \n", " -76\n", " \n", " \n", " \n", " \n", " -75\n", " \n", " \n", " \n", " \n", " -74\n", " \n", " \n", " \n", " \n", " -73\n", " \n", " \n", " \n", " \n", " -72\n", " \n", " \n", " \n", " \n", " -71\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " -69\n", " \n", " \n", " \n", " \n", " -68\n", " \n", " \n", " \n", " \n", " -67\n", " \n", " \n", " \n", " \n", " -66\n", " \n", " \n", " \n", " \n", " -65\n", " \n", " \n", " \n", " \n", " -64\n", " \n", " \n", " \n", " \n", " -63\n", " \n", " \n", " \n", " \n", " -62\n", " \n", " \n", " \n", " \n", " -61\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -59\n", " \n", " \n", " \n", " \n", " -58\n", " \n", " \n", " \n", " \n", " -57\n", " \n", " \n", " \n", " \n", " -56\n", " \n", " \n", " \n", " \n", " -55\n", " \n", " \n", " \n", " \n", " -54\n", " \n", " \n", " \n", " \n", " -53\n", " \n", " \n", " \n", " \n", " -52\n", " \n", " \n", " \n", " \n", " -51\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " -120\n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -40\n", " \n", " \n", " \n", " \n", " -110\n", " \n", " \n", " \n", " \n", " -108\n", " \n", " \n", " \n", " \n", " -106\n", " \n", " \n", " \n", " \n", " -104\n", " \n", " \n", " \n", " \n", " -102\n", " \n", " \n", " \n", " \n", " -100\n", " \n", " \n", " \n", " \n", " -98\n", " \n", " \n", " \n", " \n", " -96\n", " \n", " \n", " \n", " \n", " -94\n", " \n", " \n", " \n", " \n", " -92\n", " \n", " \n", " \n", " \n", " -90\n", " \n", " \n", " \n", " \n", " -88\n", " \n", " \n", " \n", " \n", " -86\n", " \n", " \n", " \n", " \n", " -84\n", " \n", " \n", " \n", " \n", " -82\n", " \n", " \n", " \n", " \n", " -80\n", " \n", " \n", " \n", " \n", " -78\n", " \n", " \n", " \n", " \n", " -76\n", " \n", " \n", " \n", " \n", " -74\n", " \n", " \n", " \n", " \n", " -72\n", " \n", " \n", " \n", " \n", " -70\n", " \n", " \n", " \n", " \n", " -68\n", " \n", " \n", " \n", " \n", " -66\n", " \n", " \n", " \n", " \n", " -64\n", " \n", " \n", " \n", " \n", " -62\n", " \n", " \n", " \n", " \n", " -60\n", " \n", " \n", " \n", " \n", " -58\n", " \n", " \n", " \n", " \n", " -56\n", " \n", " \n", " \n", " \n", " -54\n", " \n", " \n", " \n", " \n", " -52\n", " \n", " \n", " \n", " \n", " -50\n", " \n", " \n", " \n", " \n", " \n", " \n", " Value\n", " \n", " \n", " \n", " \n", " \n", " \n", " Average lower bound of log probability\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Plot(...)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jointmonitor = Monitor();\n", "jointdatadict = DataDict(\"Training data\" => combsnpsgeps)\n", "Random.seed!(1)\n", "mdbm = fitdbm(combsnpsgeps,\n", " pretraining = [\n", " TrainPartitionedLayer([\n", " # use the pretrained RBMs in the first layer\n", " TrainLayer(startrbm = snprbm, epochs = 0);\n", " TrainLayer(startrbm = geprbm, epochs = 0)]\n", " );\n", " TrainLayer(nhidden = 10);\n", " TrainLayer(nhidden = 2)\n", " ],\n", " learningratepretraining = 0.005,\n", " learningrate = 0.002,\n", " epochs = 70,\n", " monitoring = (dbm, epoch) ->\n", " begin\n", " if epoch % 5 == 0 # monitor only every few epochs to save some time\n", " monitorlogproblowerbound!(jointmonitor, dbm, epoch, jointdatadict)\n", " end\n", " end)\n", "plotevaluation(jointmonitor; sdrange = 1.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use for dimensionality reduction\n", "\n", "Because of the missing values in either SNP or gene expression data, the `meanfield` approach for calculating the activation cannot be used for dimensionality reduction in this particular example. But it is possible to estimate the activation via conditional Gibbs sampling in our case.\n", "\n", "For this we define the following function, which estimates the mean activations in the last hidden layer of a DBM by sampling conditionally on a given range of variables. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "meanhidden (generic function with 2 methods)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function meanhidden(bm::AbstractBM, data::Matrix{Float64},\n", " range = 1:size(data, 2);\n", " ngensamples::Int = 500)\n", "\n", " mapreduce(i ->\n", " begin\n", " particles = initparticles(bm, size(data, 1))\n", " particles[1][:, range] .= data\n", " # Conditional gibbs sampling, return only last hidden layer\n", " gibbssamplecond!(particles, bm, range, 20)[end]\n", " end, +, 1:ngensamples) ./ ngensamples\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use this function to estimate the mean hidden activations that is induced by the different measurement modalities. The activations are then displayed as a scatter plot." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Hidden node 1\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.00\n", " \n", " \n", " \n", " \n", " 0.25\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " \n", " \n", " 0.75\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " SNP data\n", " \n", " \n", " \n", " \n", " GEP data\n", " \n", " \n", " \n", " \n", " Both\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.0\n", " \n", " \n", " \n", " \n", " 0.1\n", " \n", " \n", " \n", " \n", " 0.2\n", " \n", " \n", " \n", " \n", " 0.3\n", " \n", " \n", " \n", " \n", " 0.4\n", " \n", " \n", " \n", " \n", " 0.5\n", " \n", " \n", " \n", " \n", " 0.6\n", " \n", " \n", " \n", " \n", " \n", " \n", " Hidden node 2\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n" ], "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " Hidden node 1\n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.25\n", " \n", " \n", " \n", " \n", " -1.00\n", " \n", " \n", " \n", " \n", " -0.75\n", " \n", " \n", " \n", " \n", " -0.50\n", " \n", " \n", " \n", " \n", " -0.25\n", " \n", " \n", " \n", " \n", " 0.00\n", " \n", " \n", " \n", " \n", " 0.25\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " \n", " \n", " 0.75\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " 1.25\n", " \n", " \n", " \n", " \n", " 1.50\n", " \n", " \n", " \n", " \n", " 1.75\n", " \n", " \n", " \n", " \n", " 2.00\n", " \n", " \n", " \n", " \n", " 2.25\n", " \n", " \n", " \n", " \n", " -1.00\n", " \n", " \n", " \n", " \n", " -0.95\n", " \n", " \n", " \n", " \n", " -0.90\n", " \n", " \n", " \n", " \n", " -0.85\n", " \n", " \n", " \n", " \n", " -0.80\n", " \n", " \n", " \n", " \n", " -0.75\n", " \n", " \n", " \n", " \n", " -0.70\n", " \n", " \n", " \n", " \n", " -0.65\n", " \n", " \n", " \n", " \n", " -0.60\n", " \n", " \n", " \n", " \n", " -0.55\n", " \n", " \n", " \n", " \n", " -0.50\n", " \n", " \n", " \n", " \n", " -0.45\n", " \n", " \n", " \n", " \n", " -0.40\n", " \n", " \n", " \n", " \n", " -0.35\n", " \n", " \n", " \n", " \n", " -0.30\n", " \n", " \n", " \n", " \n", " -0.25\n", " \n", " \n", " \n", " \n", " -0.20\n", " \n", " \n", " \n", " \n", " -0.15\n", " \n", " \n", " \n", " \n", " -0.10\n", " \n", " \n", " \n", " \n", " -0.05\n", " \n", " \n", " \n", " \n", " 0.00\n", " \n", " \n", " \n", " \n", " 0.05\n", " \n", " \n", " \n", " \n", " 0.10\n", " \n", " \n", " \n", " \n", " 0.15\n", " \n", " \n", " \n", " \n", " 0.20\n", " \n", " \n", " \n", " \n", " 0.25\n", " \n", " \n", " \n", " \n", " 0.30\n", " \n", " \n", " \n", " \n", " 0.35\n", " \n", " \n", " \n", " \n", " 0.40\n", " \n", " \n", " \n", " \n", " 0.45\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " \n", " \n", " 0.55\n", " \n", " \n", " \n", " \n", " 0.60\n", " \n", " \n", " \n", " \n", " 0.65\n", " \n", " \n", " \n", " \n", " 0.70\n", " \n", " \n", " \n", " \n", " 0.75\n", " \n", " \n", " \n", " \n", " 0.80\n", " \n", " \n", " \n", " \n", " 0.85\n", " \n", " \n", " \n", " \n", " 0.90\n", " \n", " \n", " \n", " \n", " 0.95\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " 1.05\n", " \n", " \n", " \n", " \n", " 1.10\n", " \n", " \n", " \n", " \n", " 1.15\n", " \n", " \n", " \n", " \n", " 1.20\n", " \n", " \n", " \n", " \n", " 1.25\n", " \n", " \n", " \n", " \n", " 1.30\n", " \n", " \n", " \n", " \n", " 1.35\n", " \n", " \n", " \n", " \n", " 1.40\n", " \n", " \n", " \n", " \n", " 1.45\n", " \n", " \n", " \n", " \n", " 1.50\n", " \n", " \n", " \n", " \n", " 1.55\n", " \n", " \n", " \n", " \n", " 1.60\n", " \n", " \n", " \n", " \n", " 1.65\n", " \n", " \n", " \n", " \n", " 1.70\n", " \n", " \n", " \n", " \n", " 1.75\n", " \n", " \n", " \n", " \n", " 1.80\n", " \n", " \n", " \n", " \n", " 1.85\n", " \n", " \n", " \n", " \n", " 1.90\n", " \n", " \n", " \n", " \n", " 1.95\n", " \n", " \n", " \n", " \n", " 2.00\n", " \n", " \n", " \n", " \n", " -1\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 1\n", " \n", " \n", " \n", " \n", " 2\n", " \n", " \n", " \n", " \n", " -1.0\n", " \n", " \n", " \n", " \n", " -0.9\n", " \n", " \n", " \n", " \n", " -0.8\n", " \n", " \n", " \n", " \n", " -0.7\n", " \n", " \n", " \n", " \n", " -0.6\n", " \n", " \n", " \n", " \n", " -0.5\n", " \n", " \n", " \n", " \n", " -0.4\n", " \n", " \n", " \n", " \n", " -0.3\n", " \n", " \n", " \n", " \n", " -0.2\n", " \n", " \n", " \n", " \n", " -0.1\n", " \n", " \n", " \n", " \n", " 0.0\n", " \n", " \n", " \n", " \n", " 0.1\n", " \n", " \n", " \n", " \n", " 0.2\n", " \n", " \n", " \n", " \n", " 0.3\n", " \n", " \n", " \n", " \n", " 0.4\n", " \n", " \n", " \n", " \n", " 0.5\n", " \n", " \n", " \n", " \n", " 0.6\n", " \n", " \n", " \n", " \n", " 0.7\n", " \n", " \n", " \n", " \n", " 0.8\n", " \n", " \n", " \n", " \n", " 0.9\n", " \n", " \n", " \n", " \n", " 1.0\n", " \n", " \n", " \n", " \n", " 1.1\n", " \n", " \n", " \n", " \n", " 1.2\n", " \n", " \n", " \n", " \n", " 1.3\n", " \n", " \n", " \n", " \n", " 1.4\n", " \n", " \n", " \n", " \n", " 1.5\n", " \n", " \n", " \n", " \n", " 1.6\n", " \n", " \n", " \n", " \n", " 1.7\n", " \n", " \n", " \n", " \n", " 1.8\n", " \n", " \n", " \n", " \n", " 1.9\n", " \n", " \n", " \n", " \n", " 2.0\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " SNP data\n", " \n", " \n", " \n", " \n", " GEP data\n", " \n", " \n", " \n", " \n", " Both\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " h,j,k,l,arrows,drag to pan\n", " \n", " \n", " \n", " \n", " i,o,+,-,scroll,shift-drag to zoom\n", " \n", " \n", " \n", " \n", " r,dbl-click to reset\n", " \n", " \n", " \n", " \n", " c for coordinates\n", " \n", " \n", " \n", " \n", " ? for help\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " ?\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.7\n", " \n", " \n", " \n", " \n", " -0.6\n", " \n", " \n", " \n", " \n", " -0.5\n", " \n", " \n", " \n", " \n", " -0.4\n", " \n", " \n", " \n", " \n", " -0.3\n", " \n", " \n", " \n", " \n", " -0.2\n", " \n", " \n", " \n", " \n", " -0.1\n", " \n", " \n", " \n", " \n", " 0.0\n", " \n", " \n", " \n", " \n", " 0.1\n", " \n", " \n", " \n", " \n", " 0.2\n", " \n", " \n", " \n", " \n", " 0.3\n", " \n", " \n", " \n", " \n", " 0.4\n", " \n", " \n", " \n", " \n", " 0.5\n", " \n", " \n", " \n", " \n", " 0.6\n", " \n", " \n", " \n", " \n", " 0.7\n", " \n", " \n", " \n", " \n", " 0.8\n", " \n", " \n", " \n", " \n", " 0.9\n", " \n", " \n", " \n", " \n", " 1.0\n", " \n", " \n", " \n", " \n", " 1.1\n", " \n", " \n", " \n", " \n", " 1.2\n", " \n", " \n", " \n", " \n", " 1.3\n", " \n", " \n", " \n", " \n", " -0.62\n", " \n", " \n", " \n", " \n", " -0.60\n", " \n", " \n", " \n", " \n", " -0.58\n", " \n", " \n", " \n", " \n", " -0.56\n", " \n", " \n", " \n", " \n", " -0.54\n", " \n", " \n", " \n", " \n", " -0.52\n", " \n", " \n", " \n", " \n", " -0.50\n", " \n", " \n", " \n", " \n", " -0.48\n", " \n", " \n", " \n", " \n", " -0.46\n", " \n", " \n", " \n", " \n", " -0.44\n", " \n", " \n", " \n", " \n", " -0.42\n", " \n", " \n", " \n", " \n", " -0.40\n", " \n", " \n", " \n", " \n", " -0.38\n", " \n", " \n", " \n", " \n", " -0.36\n", " \n", " \n", " \n", " \n", " -0.34\n", " \n", " \n", " \n", " \n", " -0.32\n", " \n", " \n", " \n", " \n", " -0.30\n", " \n", " \n", " \n", " \n", " -0.28\n", " \n", " \n", " \n", " \n", " -0.26\n", " \n", " \n", " \n", " \n", " -0.24\n", " \n", " \n", " \n", " \n", " -0.22\n", " \n", " \n", " \n", " \n", " -0.20\n", " \n", " \n", " \n", " \n", " -0.18\n", " \n", " \n", " \n", " \n", " -0.16\n", " \n", " \n", " \n", " \n", " -0.14\n", " \n", " \n", " \n", " \n", " -0.12\n", " \n", " \n", " \n", " \n", " -0.10\n", " \n", " \n", " \n", " \n", " -0.08\n", " \n", " \n", " \n", " \n", " -0.06\n", " \n", " \n", " \n", " \n", " -0.04\n", " \n", " \n", " \n", " \n", " -0.02\n", " \n", " \n", " \n", " \n", " 0.00\n", " \n", " \n", " \n", " \n", " 0.02\n", " \n", " \n", " \n", " \n", " 0.04\n", " \n", " \n", " \n", " \n", " 0.06\n", " \n", " \n", " \n", " \n", " 0.08\n", " \n", " \n", " \n", " \n", " 0.10\n", " \n", " \n", " \n", " \n", " 0.12\n", " \n", " \n", " \n", " \n", " 0.14\n", " \n", " \n", " \n", " \n", " 0.16\n", " \n", " \n", " \n", " \n", " 0.18\n", " \n", " \n", " \n", " \n", " 0.20\n", " \n", " \n", " \n", " \n", " 0.22\n", " \n", " \n", " \n", " \n", " 0.24\n", " \n", " \n", " \n", " \n", " 0.26\n", " \n", " \n", " \n", " \n", " 0.28\n", " \n", " \n", " \n", " \n", " 0.30\n", " \n", " \n", " \n", " \n", " 0.32\n", " \n", " \n", " \n", " \n", " 0.34\n", " \n", " \n", " \n", " \n", " 0.36\n", " \n", " \n", " \n", " \n", " 0.38\n", " \n", " \n", " \n", " \n", " 0.40\n", " \n", " \n", " \n", " \n", " 0.42\n", " \n", " \n", " \n", " \n", " 0.44\n", " \n", " \n", " \n", " \n", " 0.46\n", " \n", " \n", " \n", " \n", " 0.48\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " \n", " \n", " 0.52\n", " \n", " \n", " \n", " \n", " 0.54\n", " \n", " \n", " \n", " \n", " 0.56\n", " \n", " \n", " \n", " \n", " 0.58\n", " \n", " \n", " \n", " \n", " 0.60\n", " \n", " \n", " \n", " \n", " 0.62\n", " \n", " \n", " \n", " \n", " 0.64\n", " \n", " \n", " \n", " \n", " 0.66\n", " \n", " \n", " \n", " \n", " 0.68\n", " \n", " \n", " \n", " \n", " 0.70\n", " \n", " \n", " \n", " \n", " 0.72\n", " \n", " \n", " \n", " \n", " 0.74\n", " \n", " \n", " \n", " \n", " 0.76\n", " \n", " \n", " \n", " \n", " 0.78\n", " \n", " \n", " \n", " \n", " 0.80\n", " \n", " \n", " \n", " \n", " 0.82\n", " \n", " \n", " \n", " \n", " 0.84\n", " \n", " \n", " \n", " \n", " 0.86\n", " \n", " \n", " \n", " \n", " 0.88\n", " \n", " \n", " \n", " \n", " 0.90\n", " \n", " \n", " \n", " \n", " 0.92\n", " \n", " \n", " \n", " \n", " 0.94\n", " \n", " \n", " \n", " \n", " 0.96\n", " \n", " \n", " \n", " \n", " 0.98\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " 1.02\n", " \n", " \n", " \n", " \n", " 1.04\n", " \n", " \n", " \n", " \n", " 1.06\n", " \n", " \n", " \n", " \n", " 1.08\n", " \n", " \n", " \n", " \n", " 1.10\n", " \n", " \n", " \n", " \n", " 1.12\n", " \n", " \n", " \n", " \n", " 1.14\n", " \n", " \n", " \n", " \n", " 1.16\n", " \n", " \n", " \n", " \n", " 1.18\n", " \n", " \n", " \n", " \n", " 1.20\n", " \n", " \n", " \n", " \n", " 1.22\n", " \n", " \n", " \n", " \n", " -1\n", " \n", " \n", " \n", " \n", " 0\n", " \n", " \n", " \n", " \n", " 1\n", " \n", " \n", " \n", " \n", " 2\n", " \n", " \n", " \n", " \n", " -0.60\n", " \n", " \n", " \n", " \n", " -0.55\n", " \n", " \n", " \n", " \n", " -0.50\n", " \n", " \n", " \n", " \n", " -0.45\n", " \n", " \n", " \n", " \n", " -0.40\n", " \n", " \n", " \n", " \n", " -0.35\n", " \n", " \n", " \n", " \n", " -0.30\n", " \n", " \n", " \n", " \n", " -0.25\n", " \n", " \n", " \n", " \n", " -0.20\n", " \n", " \n", " \n", " \n", " -0.15\n", " \n", " \n", " \n", " \n", " -0.10\n", " \n", " \n", " \n", " \n", " -0.05\n", " \n", " \n", " \n", " \n", " 0.00\n", " \n", " \n", " \n", " \n", " 0.05\n", " \n", " \n", " \n", " \n", " 0.10\n", " \n", " \n", " \n", " \n", " 0.15\n", " \n", " \n", " \n", " \n", " 0.20\n", " \n", " \n", " \n", " \n", " 0.25\n", " \n", " \n", " \n", " \n", " 0.30\n", " \n", " \n", " \n", " \n", " 0.35\n", " \n", " \n", " \n", " \n", " 0.40\n", " \n", " \n", " \n", " \n", " 0.45\n", " \n", " \n", " \n", " \n", " 0.50\n", " \n", " \n", " \n", " \n", " 0.55\n", " \n", " \n", " \n", " \n", " 0.60\n", " \n", " \n", " \n", " \n", " 0.65\n", " \n", " \n", " \n", " \n", " 0.70\n", " \n", " \n", " \n", " \n", " 0.75\n", " \n", " \n", " \n", " \n", " 0.80\n", " \n", " \n", " \n", " \n", " 0.85\n", " \n", " \n", " \n", " \n", " 0.90\n", " \n", " \n", " \n", " \n", " 0.95\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " 1.05\n", " \n", " \n", " \n", " \n", " 1.10\n", " \n", " \n", " \n", " \n", " 1.15\n", " \n", " \n", " \n", " \n", " 1.20\n", " \n", " \n", " \n", " \n", " 1.25\n", " \n", " \n", " \n", " \n", " \n", " \n", " Hidden node 2\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Plot(...)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "snprange = 1:size(snpdata01, 2)\n", "geprange = snprange[end] .+ (1:size(gepdata, 2))\n", "Random.seed!(1);\n", "\n", "hidden = vcat(\n", " meanhidden(mdbm, snpdata01, snprange),\n", " meanhidden(mdbm, gepintensities, geprange),\n", " meanhidden(mdbm, combsnpsgeps))\n", "\n", "scatterhidden(hidden,\n", " opacity = 0.5,\n", " labels = vcat(\n", " repeat([\"SNP data\"], size(snpdata01,1)),\n", " repeat([\"GEP data\"], size(gepdata,1)),\n", " repeat([\"Both\"], size(combsnpsgeps,1))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Interpretation of the scatter plot above: \n", "\n", "The representation of the data with latent features divides the patients with only SNP measurements clearly into two groups.\n", "The patients with only gene expression measurements seem to be similar to one of these subgroups.\n", "The patients with both measurements are divided among those subgroups and each patient can be clearly assigned to one of them.\n", "From this you can conclude that the multimodal DBM has not just separated the patients with SNP and gene expression data \n", "but it has instead extracted more meaningful imformation." ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.0.3", "language": "julia", "name": "julia-1.0" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.0.3" } }, "nbformat": 4, "nbformat_minor": 2 }