{ "cells": [ { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import ete3 as ete" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%load_ext rpy2.ipython" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def getarray(locifile, tree, split1=0, split2=0):\n", " \"\"\" parse the loci list and return a presence/absence matrix ordered by \n", " the tips on the tree\"\"\"\n", " ## parse the loci file\n", " loci = open(locifile).read().split(\"\\n//\")[:-1]\n", " ## order (ladderize) the tree\n", " tree.ladderize()\n", " \n", " ## get tip names\n", " names = tree.get_leaf_names()\n", " if split1:\n", " snames = [i.split(\"_\", 1)[0] for i in names]\n", " else:\n", " snames = names\n", " \n", " ## make empty matrix\n", " lxs = np.zeros((len(snames), len(loci)))\n", " \n", " ## fill the matrix\n", " for loc in xrange(len(loci)):\n", " for seq in loci[loc].split(\"\\n\"):\n", " if \">\" in seq:\n", " if split2:\n", " lxs[snames.index(seq.split()[0][1:].rsplit(\"_\", 1)[0]), loc] += 1\n", " else:\n", " lxs[snames.index(seq.split()[0][1:]), loc] += 1\n", "\n", " return lxs" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def countmatrix(lxsabove, lxsbelow, max=0):\n", " \"\"\" fill a matrix with pairwise data sharing\n", " between each pair of samples. You could put\n", " in two different 'share' matrices to have\n", " different results above and below the diagonal.\n", " Can enter a max value to limit fill along diagonal.\n", " \"\"\"\n", " share = np.zeros((lxsabove.shape[0], \n", " lxsbelow.shape[0]))\n", " ## fill above\n", " names = range(lxsabove.shape[0])\n", " for row in lxsabove:\n", " for samp1,samp2 in itertools.combinations(names,2):\n", " shared = lxsabove[samp1, lxsabove[samp2,]>0].sum()\n", " share[samp1,samp2] = shared\n", " ## fill below\n", " for row in lxsbelow:\n", " for samp2,samp1 in itertools.combinations(names,2):\n", " shared = lxsabove[samp1, lxsabove[samp2,]>0].sum()\n", " share[samp1,samp2] = shared\n", " ## fill diagonal\n", " if not max:\n", " for row in range(len(names)):\n", " share[row,row] = lxsabove[row,].sum()\n", " else:\n", " for row in range(len(names)):\n", " share[row,row] = max\n", " return share" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def count_inf4(tree, matrix, node):\n", " \"\"\" count the number of loci with data spanning \n", " a given node in the tree \"\"\"\n", " \n", " ## get children of selected node\n", " a, b = node.get_children()\n", " \n", " ## get tip descendents of a and b\n", " tips_a = set(a.get_leaf_names())\n", " tips_b = set(b.get_leaf_names())\n", " \n", " ## get every other tip (outgroups)\n", " upone = node.up\n", " if upone.is_root():\n", " ch = upone.children\n", " sis = [i for i in ch if i != node][0]\n", " if sis.children:\n", " tips_c = sis.children[0].get_leaf_names()\n", " tips_d = sis.children[1].get_leaf_names()\n", " else:\n", " return 0\n", " else:\n", " upone = set(node.up.get_leaf_names())\n", " tips_c = upone - tips_a - tips_b\n", " tips_all = set(tree.get_leaf_names())\n", " tips_d = tips_all - tips_a - tips_b - tips_c\n", " \n", " ## get indices in matrix for leaf tips\n", " names = tree.get_leaf_names()\n", " index_a = [names.index(i) for i in tips_a]\n", " index_b = [names.index(i) for i in tips_b]\n", " index_c = [names.index(i) for i in tips_c]\n", " index_d = [names.index(i) for i in tips_d]\n", " \n", " ## how man loci are \"informative\"\n", " inf = 0\n", " for col in matrix.T:\n", " hits_a = sum([col[i] for i in index_a])\n", " hits_b = sum([col[i] for i in index_b])\n", " hits_c = sum([col[i] for i in index_c])\n", " hits_d = sum([col[i] for i in index_d])\n", "\n", " if all([hits_a, hits_b, hits_c, hits_d]):\n", " inf += 1 \n", " return inf " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def count_hier(tree, node):\n", " ## get children of selected node\n", " a, b = node.get_children()\n", " \n", " ## get tip descendents of a and b\n", " tips_a = set(a.get_leaf_names())\n", " tips_b = set(b.get_leaf_names())\n", " \n", " ## get every other tip (outgroups)\n", " upone = node.up\n", " if upone.is_root():\n", " ch = upone.children\n", " sis = [i for i in ch if i != node][0]\n", " if sis.children:\n", " tips_c = sis.children[0].get_leaf_names()\n", " tips_d = sis.children[1].get_leaf_names()\n", " else:\n", " return 0\n", " else:\n", " upone = set(node.up.get_leaf_names())\n", " tips_c = upone - tips_a - tips_b\n", " tips_all = set(tree.get_leaf_names())\n", " tips_d = tips_all - tips_a - tips_b - tips_c\n", " \n", " ## get indices in matrix for leaf tips\n", " names = tree.get_leaf_names()\n", " index_a = [names.index(i) for i in tips_a]\n", " index_b = [names.index(i) for i in tips_b]\n", " index_c = [names.index(i) for i in tips_c]\n", " index_d = [names.index(i) for i in tips_d]\n", " \n", " ## avg. tips per quartet edge\n", " meanhier = np.median([len(i) for i in [index_a, index_b, index_c, index_d]])\n", " minhier = min([len(i) for i in [index_a, index_b, index_c, index_d]])\n", " \n", " return medianhier, minhier" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def count_nest(tree, node):\n", " ## get children of selected node\n", " leaves_down = tree.get_leaf_names()\n", " ## get all other tips\n", " leaves_up = list(set(tree.get_leaf_names()) - set(leaves_down))\n", "\n", " ## get distances to leaves below (+1 because we aren't counting closest node)\n", " n1 = [node.get_distance(tree.get_leaves_by_name(name)[0], topology_only=True)+1 for name in leaves_down]\n", " n2 = [node.get_distance(tree.get_leaves_by_name(name)[0], topology_only=True) for name in leaves_up]\n", " \n", " return np.mean(n1+n2), np.min(n1+n2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculation" ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 1.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " ..., \n", " [ 0., 1., 1., ..., 0., 0., 0.],\n", " [ 0., 1., 0., ..., 1., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 182, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Viburnum\n", "loci_vib = \"empirical_1/fullrun/outfiles/empirical_1_full_m4.loci\"\n", "tree_vib = ete.Tree(\"empirical_1/fullrun/RAxML_bestTree.empirical_1_fullrun\")\n", "lxs_vib = getarray(loci_vib, tree_vib)\n", "lxs_vib" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 1., 0., ..., 1., 1., 0.],\n", " [ 0., 0., 1., ..., 1., 1., 1.],\n", " [ 1., 1., 1., ..., 1., 1., 1.],\n", " ..., \n", " [ 1., 0., 0., ..., 1., 1., 1.],\n", " [ 1., 1., 1., ..., 0., 1., 1.],\n", " [ 1., 0., 1., ..., 1., 1., 1.]])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Quercus\n", "loci_que = \"empirical_3/outfiles/empirical_3_m4.loci\"\n", "tree_que = ete.Tree(\"empirical_3/RAxML_bestTree.empirical_3\")\n", "lxs_que = getarray(loci_que, tree_que)\n", "lxs_que" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 1., ..., 1., 1., 0.],\n", " [ 1., 0., 1., ..., 1., 1., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " ..., \n", " [ 0., 0., 0., ..., 0., 1., 1.],\n", " [ 0., 0., 0., ..., 0., 1., 0.],\n", " [ 0., 0., 0., ..., 0., 1., 0.]])" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Orestias\n", "loci_ore = \"empirical_4/outfiles/empirical_4.loci\"\n", "tree_ore = ete.Tree(\"empirical_4/RAxML_bestTree.empirical_4\")\n", "lxs_ore = getarray(loci_ore, tree_ore)\n", "lxs_ore" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "def get_data(tree, lxs):\n", " data = []\n", " for node in tree.traverse():\n", " if not (node.is_leaf() or node.is_root() or node.up.is_root()):\n", " ## get number of quartet loci at this split\n", " a = count_inf4(tree, lxs, node)\n", " ## get closest leaf at this split\n", " bmean, bmin = count_nest(tree, node)\n", " ## get hierarch. (min N descendants) at split\n", " cmedian, cmin = count_hier(tree, node)\n", " ## save\n", " data.append([a, bmean, bmin, cmedian, cmin])\n", " #print \"{:<6} {:<.3f} {:<.1f} {:<.3f} {:<.1f}\".format(a, bmean, bmin, cmedian, cmin)\n", " data = np.array(data)\n", " return data" ] }, { "cell_type": "code", "execution_count": 195, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## get Vib data\n", "data_vib = get_data(tree_vib, lxs_vib)\n", "\n", "## get Quercus data\n", "data_que = get_data(tree_que, lxs_que)\n", "\n", "## get Orestias data\n", "data_ore = get_data(tree_ore, lxs_ore)\n" ] }, { "cell_type": "code", "execution_count": 196, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dat = np.array(data)\n", "%R -i data_vib\n", "%R -i data_que\n", "%R -i data_ore" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\n", "\tSpearman's rank correlation rho\n", "\n", "data: data_vib[, 5] and data_vib[, 1]\n", "S = 14952, p-value = 6.206e-08\n", "alternative hypothesis: true rho is not equal to 0\n", "sample estimates:\n", " rho \n", "0.6234835 \n", "\n", "\n", "\tSpearman's rank correlation rho\n", "\n", "data: data_que[, 5] and data_que[, 1]\n", "S = 1573.7, p-value = 4.976e-06\n", "alternative hypothesis: true rho is not equal to 0\n", "sample estimates:\n", " rho \n", "0.711559 \n", "\n", "\n", "\tSpearman's rank correlation rho\n", "\n", "data: data_ore[, 5] and data_ore[, 1]\n", "S = 5324.3, p-value < 2.2e-16\n", "alternative hypothesis: true rho is not equal to 0\n", "sample estimates:\n", " rho \n", "0.8520608 \n", "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAACVBMVEUAAAC+vr7////xRzILAAAE\n9UlEQVR4nO2cAZKbMAwAXf7/6HZS7pJMAGuxMSLszvSujWWZ7tgSR9KWScKUsy/gSigLoCyAsgDK\nAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCxAHlmlzF/+/Sp5LuuVRFel\nLMAs6ue3CUl0VQ9Z07yzyo+6nz99vDKV4UovJass6Bt6hWOX26T8FvmX0vX89v7Ky6EdeIF5mLeK\nsiLMx0pZIV5kzTXrtVA9i5Wypk9Z04esSVlXQVkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkA\nZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWoEVW+T4OlNUwNyfKAigLoCyAsgCpZJHWcwapZLWveSzK\nAigLkFBWXobLSlq7Q4yWVepp86ocLKtsjPVY81jaZa3eFC28VrYGwZon0Szr95P8kbm3l7UauFdW\nXhLurLxYswB2Q8DYnXXYfdbex+ZwlabhCdasKXIH31dWT1tju2FeQrKH76ykhLbm6JoVIK/kHI9o\nxpScZnLsrPJnje+S1aVm3UbWR+COE3QbWe6s4PAjxJoVG+419zay3FnB4cmaFR+elrphfO4z9HBZ\nXe5677KzuvyMYM0C2A0BXWqWOysy/D+iLAcqaylCWaHh6dEHlRUanmPK5ttekRS3kRWeu357o6y1\nuUsntiYrx2Pny8saaesisnLgHTxAWYAkxzBFSaqiLEASWR7D+OvKssD3S/0Wqqz46/eVVWtkygJz\nlQXmKqttrrKU1SG1xxDMVRaYqywwV1ltc31Es3duKj9v5DiG3dY8loSy8qIsQEJZeWW2y1ptWhb4\nz4jy/Ern7l3zLNplrQZ6DD8j8M7KK6PGCTXrzrLw3BsfQ7thdHiyG8aHnxF2Q7vhO3ZDwJhuiB7u\n5ZU5Zmehx8ZfLCtUs5T1FrF05l5eisnK+/T9Pwl3Vl4S1qy8DOqGyppD3Fmx4cmaFR9+RijLnfWO\nNQtgNwT02Fn1/wRDWb8RZTlQWUsRygoNT3bD+PBmmLL2pVYWSK0skPoiH7CtoSyAxxCgLICyAMoC\nKAugLICyAMoCKAugLMABsvZ/MCQ77iyAsgDKAigLoCyAsgDKAvhYGTBGVrec56IsgLIAJ8i6LsoC\neAwB7bIinymlOZPSLMt/yRodfkYo65iddV1OqFnXxW4IsBsC7IYAuyHAbgiwGwLshgC7IcBuCDig\nG9bei7izLLthcPgRYjeMDe+ae12JdkOA3RDgz4YAuyHAbgiwGwKUBehQs9bOobJAiLJAyHWlrHFC\nzbouFniAsgDKAoyUdd3PdM9Y4AHKAigLoCyAsgBHyvo+jpO1N2d1zfMTdJ3WlFNZIKeyQE5lgZzK\nAjmVBXIq6w4oC6AsgLIAygIoC6AsgLIAygIoCzD+x53688jqW471BJsR9QX2rbsnY+VSStVmXXfl\nCraH6wvsTdw9Z4ksWslQld00fsTMhpzVY1SZ3XaO629MrK/cnzYXtQyRY1xLcJVjGDolm3/XyM74\nElmhbdVUwb9oZ9U3Ro9bh8YF9q0rrygLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDK\nAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigL\noCyAsgDKAigLoCyAsgB/AQQGpq+cANRQAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAACVBMVEUAAAC+vr7////xRzILAAAF\nB0lEQVR4nO2b23ajMAwAWf7/o7tNSCkNxBpssA0zD21PLQt2Vpaa2zBKmKH2DfSEsgDKAigLoCyA\nsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKArQma/im9k1s0diNDUPLthq7\nr4cnZYWYNP3/9v3T49vzh1fBLX59/u1VuOY2q7KGH1mvX9c6q23LmhX9yBtrldXYpKxhS9boMVww\nORqXJfS3sl6Rp9/d+Zf8xK9OPneruczm7mXPGv/aei+z2VmNm6twzW5RFkBZAGUBlAVQFkBZAGUB\nlAVQFkBZAGUBlAVQFkBZAGUBlAVQFkBZAGUBlAUIyGr6jS2nkpZQ7zXN5gjIigZeHysLkNOzhuuR\nLeuQvW2SL2vTubLeIzZ7lrK2IpR1ocra27SXSbKW59vYt/c8do+4RZKs5cP2tsldKqsId+lZRThg\nGu5pnX1gZT0J9X971pPQtHQaAqwsgD0L4GNDgJUFsGcBnIaAApU1fTZrz97OKNHgh/VAZa1FKCu0\nPD7moLJCy88Yp2Fo+bC9bXIRWSWeYQ9cJWv5sL34WqfYuoisc1AWQFkAZQGUBVAWoBNZ5/wdlbyL\nrOXD9r7lasLWAbKq/KefQieV1QbKApwpq15nLkSFyupR0xNlAZQFsMEDmpLV+gRo8Bg2aGlCWYAK\nbwy5sSz+lqN2ZaQo8fL9RiCQ0saTCkkqVNZakn9bXEtWkZ51G1l4751lWVnB5bHQNLxNg98MdBq+\nRzgNg8uPEHtWbHnX3jvLsrKCy6PTML48R/wKzP13NuVnQRvTsMi+42mjZy1StXgAn7QxDTuhqcpq\nnTamYSe08diwExqchu1izwI4DQFlZK2GKes9YvNPSGWth6DK6pcCx3D64O+uvX1RpGetP47zGO5L\n3cnzVSlOktXHM6EplAVQFkBZAGUBlAVQFkBZAGUBlAU4QNbKIxllgdTKAql9IA1SKwuk9hiC1MoC\nqZUFUisLpFYWSK0skFpZILWyXiGBd9Eoa4oY5q+be5W1iFCWlbXEngVwGgKsLIA9C+A0BFhZAHsW\nwGkIsLIA9izAAdNw7RVpXwp7RkQq6yKc07MuwjnTsFjOulSorBvL8jPS0eVxbRqm9t5ZltMwuPwI\ncRrGlnft7VdikcpaD1TWasSgrMDyqKz48jjNwdVPSfcrZYsCDf5hS1lOwyXKAigLoCxABVn9oiyA\nxxCgLICyAMoCHCCry9dPQzgNAR5DgLIAygIoC2CDBygL4DEEKAugLICyADZ4gLIAHkOAsgDKAigL\nYIMHKAvgMQQoC6AswJmy+v2g4US+LD80EFz+jhjmr3Rvb+TLegvs+aB9xsoC2LMAR07D63GcrL05\nk9esn6DotqycygI5lQVyKgvkVBbIqSyQU1l3QFkAZQGUBVAWQFkAZQGUBVAWQFmA8x/upJ+PTL4S\nkk7wKSLwlOi+6+7JmLiTIWkzrTtxB5+XgyHFdmXkHCIXTWRIys7KX3xbXs7kMUrsPvocF96WkzPQ\nMD62nMAxzq+9ovv254z8r2f354vICpVVVge/UGWlC6PEnw452w/YeEeUBVAWQFkAZQGUBVAWQFkA\nZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGU\nBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFmAL9neqos+CVCUAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAACVBMVEUAAAC+vr7////xRzILAAAF\nJElEQVR4nO2d2ZabOhAAFf7/o++N8QIxWF0ItNhVD845VqvBNU2LZcZJk4RJrXdgJJQFUBZAWQBl\nAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBagO1npL7tjVXflffttN/9G\nSju2/r6nrDU3H3uyWtPBLiy5K/n/n/Sssdvr/WVavNVg7xps8wPvsh7O7ofh8q36e1d/k59YyppW\nVl49q1FZTSPIeh55r8ryMJx5Nvj7kfd899WqHvXVYOfqb/Iji7Y+rRrUqtXbs2YeHu4vi3pKHoYj\noSyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAigLoCyAsgDKAgRktXqW0h95Ce0e03VH\nQFY08PuxsgD2LECJhPR9FMvaTfN91VYsa79nKWsvQllW1hp71kyoqZfLumRudUJL4K9U1tHTgXWS\nouFpmJ51+ORplaRoeNpaDY/8zEo5pXDyWykannqprFMKJ7+VouFbyBA96xRcDQGn9CwrKzI8R6Tt\nQGVtRSgrNDzNfzezHaiszZi0Gaes81IPyBnnWa6GoeHJBh8fnpQVH556uTaswzkNfjNMWeelZrnq\n3IPJ7UXR8Mlz9y0oC89rZumx/aLhS+b22+uUBehQVr/0IauP/p2lE1l/9lDWe6iyQKiHIQhVFgj1\nMAShygKhygKhygKhNviCuX2iLECHsvqVrCzABbJKe/NPyTo+t991cKYrWb2jLICyAMoCKAugLICy\nAMoCKAugLICyAMoCKAugLICyADVl9X67KkuDyhpR04yyAOWydg8qZb1HpNcrnTsa5bJ2A5X1HoEr\na1yJ9iyAqyHAygK4GgJcDQF1KmuQ3+zLUadnDfI7oznqrIbKeoRYWbHhKdqzlLWM2Ormi7eUNUdY\nWcHhW4g9KzYcnausV4SVFRmeI9J2oLK2IgKyvNyZIyJfkKisV0z2CxI9DEFqZT1Ckg0+NDw9u7uy\nlLXmnGvDzQ6vrJ0YL6Tzw9G5ygKplQVSewZfmHpAGsgaV6KyAMoCKAtggwcoC+BhCFAWQFmAmrLG\nvc65Y4MHKAugLICyAMoCKAtwgayRTw4+Y2UBlAVQFkBZAGUBlAVQFkBZAGUBlAVQFkBZAGUBlAVQ\nFqC+rIFvdFWXlQqztqS2rFSctiHKApTLivxB+b9v/qos+pVQP92z0m6gq+F7BKyskands4bGM3iA\nlQWwZwHqr4YDY2UB7FkAV0OAlQWwZwEuWA39zb/9CCsrOHwLsWfFhi+b2yen9CwrKzI8R+zc/FTW\nVoSyQsPTFPuCxC/hhAYf+ILEL8HVEKAswAk9a++s1EdhIMSHrCDEx/elqZUF5iqLzP3tnkXn/vRq\neMncPlEW4EpZ38d1so7mzG6zfYJTpxXlVBbIqSyQU1kgp7JATmWBnMr6BZQFUBZAWQBlAZQFUBZA\nWQBlAZQFqH+5k78fmQkIjH+MSJGd2J15LtnPkrWZCcgmmD4FpMf/A3rgk1evrNBjxVxhlO7BwWeb\nLe46ZB+ifP6sgUMo++PK7wROe5AiF9kMgarIHuahnaB5jxHY18z45bKOfewmPSs7/WpZHd38y7ac\n4lODgu3PsiKNDyeWJcoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoCKAugLICy\nAMoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoCKAugLICyAMoC\nKAugLMB/oQysxtrKXtgAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%R -w 300 -h 300\n", "\n", "#pdf(\"hierplots.pdf\", width=4, height=12, pointsize=16)\n", "#par(mfrow=c(3, 1))\n", "\n", "boxplot(data_vib[,1] ~ data_vib[,5], col='gray', main=\"Viburnum\", cex=2)\n", "print(cor.test(data_vib[,5], data_vib[,1], method='s'))\n", "\n", "boxplot(data_que[,1] ~ data_que[,5], col='gray', main=\"Quercus\")\n", "print(cor.test(data_que[,5], data_que[,1], method='s'))\n", "\n", "boxplot(data_ore[,1] ~ data_ore[,5], col='gray', main=\"Orestias\")\n", "cor.test(data_ore[,5], data_ore[,1], method='s')\n", "\n", "#dev.off()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }