{
"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
}