{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# More than 2 views\n\nThis will compare MCCA, GCCA, TCCA for linear models with more than 2 views\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import numpy as np\n\nfrom cca_zoo.data import generate_covariance_data\nfrom cca_zoo.models import MCCA, GCCA, TCCA, KCCA, KGCCA, KTCCA, PMD"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "np.random.seed(42)\nn = 30\np = 3\nq = 3\nr = 3\nlatent_dims = 1\ncv = 3\n\n(X, Y, Z), (tx, ty, tz) = generate_covariance_data(\n    n, view_features=[p, q, r], latent_dims=latent_dims, correlation=[0.9]\n)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Eigendecomposition-Based Methods\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "mcca = MCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "gcca = GCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## We can also use kernel versions of these methods\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "kcca = KCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "kgcca = KGCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Higher order correlation methods\n\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Tensor CCA finds higher order correlations so scores are not comparable (but TCCA is equivalent for 2 views)\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "tcca = TCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "ktcca = KTCCA(latent_dims=latent_dims).fit((X, Y, X)).score((X, Y, Z))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Iterative Methods\n\nMost of the iterative methods can also use multiple views e.g.\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "pmd = PMD(latent_dims=latent_dims, c=1).fit((X, Y, X)).score((X, Y, Z))"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}