Skip to content

Instantly share code, notes, and snippets.

@dhimmel
Last active October 2, 2018 15:38
Show Gist options
  • Save dhimmel/44212bed10ce618da454e4508d91fac4 to your computer and use it in GitHub Desktop.
Save dhimmel/44212bed10ce618da454e4508d91fac4 to your computer and use it in GitHub Desktop.
Analytical derivation of the prior XSwap probability of a hetnet edge
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Analytical derivation of the prior XSwap probability of a hetnet edge\n",
"\n",
"+ Lizee prior proposed [here](https://think-lab.github.io/d/194/#2) with further discussion [here](https://think-lab.github.io/d/201/#2).\n",
"+ Chung-Lu and Kloster priors proposed [here](https://github.com/greenelab/hetmech/issues/134#issuecomment-419133600).\n",
"\n",
"Created an environment for this notebook with:\n",
"\n",
"```\n",
"conda create --name=r --channel=conda-forge \\\n",
" r-base r-dplyr r-ggplot2 r-readr r-irkernel r-boot r-rcurl r-tidyr\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Load magrittr pipe\n",
"`%>%` = dplyr::`%>%`"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"`curl` package not installed, falling back to using `url()`\n",
"Parsed with column specification:\n",
"cols(\n",
" compound_treats = col_integer(),\n",
" disease_treats = col_integer(),\n",
" prior_perm = col_double(),\n",
" prior_perm_stderr = col_double(),\n",
" n_treatments = col_integer(),\n",
" n_possible = col_integer()\n",
")\n"
]
}
],
"source": [
"url = 'https://github.com/dhimmel/learn/raw/0aae784e83cfaa00d1269f17a3bd3a6c6fdc3a0a/prior/data/degree-prior.tsv'\n",
"degree_prior_df = readr::read_tsv(url) %>%\n",
" dplyr::mutate(xswap_prior = prior_perm) %>%\n",
" dplyr::mutate(logit_xswap_prior = boot::logit(xswap_prior)) %>%\n",
" dplyr::mutate(Lizee = compound_treats * disease_treats / sum(n_possible)) %>%\n",
" dplyr::mutate(`Chung-Lu` = compound_treats * disease_treats / sum(n_treatments)) %>%\n",
" dplyr::mutate(Kloster = compound_treats * disease_treats /\n",
" (sum(n_treatments) + (compound_treats - 1) * (disease_treats - 1)))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>compound_treats</th><th scope=col>disease_treats</th><th scope=col>prior_perm</th><th scope=col>prior_perm_stderr</th><th scope=col>n_treatments</th><th scope=col>n_possible</th><th scope=col>xswap_prior</th><th scope=col>logit_xswap_prior</th><th scope=col>Lizee</th><th scope=col>Chung-Lu</th><th scope=col>Kloster</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>1 </td><td>1 </td><td>0.00116183 </td><td>5.44733e-07 </td><td>5 </td><td>3612 </td><td>0.00116183 </td><td>-6.756596 </td><td>3.355817e-05</td><td>0.001324503 </td><td>0.001324503 </td></tr>\n",
"\t<tr><td>1 </td><td>2 </td><td>0.00234128 </td><td>1.29275e-06 </td><td>3 </td><td>1290 </td><td>0.00234128 </td><td>-6.054713 </td><td>6.711635e-05</td><td>0.002649007 </td><td>0.002649007 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllll}\n",
" compound\\_treats & disease\\_treats & prior\\_perm & prior\\_perm\\_stderr & n\\_treatments & n\\_possible & xswap\\_prior & logit\\_xswap\\_prior & Lizee & Chung-Lu & Kloster\\\\\n",
"\\hline\n",
"\t 1 & 1 & 0.00116183 & 5.44733e-07 & 5 & 3612 & 0.00116183 & -6.756596 & 3.355817e-05 & 0.001324503 & 0.001324503 \\\\\n",
"\t 1 & 2 & 0.00234128 & 1.29275e-06 & 3 & 1290 & 0.00234128 & -6.054713 & 6.711635e-05 & 0.002649007 & 0.002649007 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"compound_treats | disease_treats | prior_perm | prior_perm_stderr | n_treatments | n_possible | xswap_prior | logit_xswap_prior | Lizee | Chung-Lu | Kloster | \n",
"|---|---|\n",
"| 1 | 1 | 0.00116183 | 5.44733e-07 | 5 | 3612 | 0.00116183 | -6.756596 | 3.355817e-05 | 0.001324503 | 0.001324503 | \n",
"| 1 | 2 | 0.00234128 | 1.29275e-06 | 3 | 1290 | 0.00234128 | -6.054713 | 6.711635e-05 | 0.002649007 | 0.002649007 | \n",
"\n",
"\n"
],
"text/plain": [
" compound_treats disease_treats prior_perm prior_perm_stderr n_treatments\n",
"1 1 1 0.00116183 5.44733e-07 5 \n",
"2 1 2 0.00234128 1.29275e-06 3 \n",
" n_possible xswap_prior logit_xswap_prior Lizee Chung-Lu Kloster \n",
"1 3612 0.00116183 -6.756596 3.355817e-05 0.001324503 0.001324503\n",
"2 1290 0.00234128 -6.054713 6.711635e-05 0.002649007 0.002649007"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"degree_prior_df %>% head(2)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message in qlogis(p):\n",
"“NaNs produced”"
]
},
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>compound_treats</th><th scope=col>disease_treats</th><th scope=col>prior_perm</th><th scope=col>prior_perm_stderr</th><th scope=col>n_treatments</th><th scope=col>n_possible</th><th scope=col>xswap_prior</th><th scope=col>logit_xswap_prior</th><th scope=col>method</th><th scope=col>prior</th><th scope=col>logit_prior</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>1 </td><td>1 </td><td>0.00116183 </td><td>5.44733e-07 </td><td>5 </td><td>3612 </td><td>0.00116183 </td><td>-6.756596 </td><td>Lizee </td><td>3.355817e-05</td><td>-10.302197 </td></tr>\n",
"\t<tr><td>1 </td><td>2 </td><td>0.00234128 </td><td>1.29275e-06 </td><td>3 </td><td>1290 </td><td>0.00234128 </td><td>-6.054713 </td><td>Lizee </td><td>6.711635e-05</td><td> -9.609016 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllll}\n",
" compound\\_treats & disease\\_treats & prior\\_perm & prior\\_perm\\_stderr & n\\_treatments & n\\_possible & xswap\\_prior & logit\\_xswap\\_prior & method & prior & logit\\_prior\\\\\n",
"\\hline\n",
"\t 1 & 1 & 0.00116183 & 5.44733e-07 & 5 & 3612 & 0.00116183 & -6.756596 & Lizee & 3.355817e-05 & -10.302197 \\\\\n",
"\t 1 & 2 & 0.00234128 & 1.29275e-06 & 3 & 1290 & 0.00234128 & -6.054713 & Lizee & 6.711635e-05 & -9.609016 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"compound_treats | disease_treats | prior_perm | prior_perm_stderr | n_treatments | n_possible | xswap_prior | logit_xswap_prior | method | prior | logit_prior | \n",
"|---|---|\n",
"| 1 | 1 | 0.00116183 | 5.44733e-07 | 5 | 3612 | 0.00116183 | -6.756596 | Lizee | 3.355817e-05 | -10.302197 | \n",
"| 1 | 2 | 0.00234128 | 1.29275e-06 | 3 | 1290 | 0.00234128 | -6.054713 | Lizee | 6.711635e-05 | -9.609016 | \n",
"\n",
"\n"
],
"text/plain": [
" compound_treats disease_treats prior_perm prior_perm_stderr n_treatments\n",
"1 1 1 0.00116183 5.44733e-07 5 \n",
"2 1 2 0.00234128 1.29275e-06 3 \n",
" n_possible xswap_prior logit_xswap_prior method prior logit_prior\n",
"1 3612 0.00116183 -6.756596 Lizee 3.355817e-05 -10.302197 \n",
"2 1290 0.00234128 -6.054713 Lizee 6.711635e-05 -9.609016 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"long_df = degree_prior_df %>%\n",
" tidyr::gather(key = 'method', value = 'prior', Lizee:Kloster) %>%\n",
" dplyr::mutate(logit_prior = boot::logit(prior))\n",
"long_df %>% head(2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>compound_treats</th><th scope=col>disease_treats</th><th scope=col>prior_perm</th><th scope=col>prior_perm_stderr</th><th scope=col>n_treatments</th><th scope=col>n_possible</th><th scope=col>xswap_prior</th><th scope=col>logit_xswap_prior</th><th scope=col>method</th><th scope=col>prior</th><th scope=col>logit_prior</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>12 </td><td>68 </td><td>0.669943 </td><td>0.000544807</td><td>1 </td><td>1 </td><td>0.669943 </td><td>0.7079273 </td><td>Chung-Lu </td><td>1.080795 </td><td>NaN </td></tr>\n",
"\t<tr><td>13 </td><td>68 </td><td>0.693760 </td><td>0.000534029</td><td>1 </td><td>1 </td><td>0.693760 </td><td>0.8177570 </td><td>Chung-Lu </td><td>1.170861 </td><td>NaN </td></tr>\n",
"\t<tr><td>14 </td><td>68 </td><td>0.714649 </td><td>0.000523197</td><td>0 </td><td>1 </td><td>0.714649 </td><td>0.9180715 </td><td>Chung-Lu </td><td>1.260927 </td><td>NaN </td></tr>\n",
"\t<tr><td>15 </td><td>51 </td><td>0.659217 </td><td>0.000549139</td><td>1 </td><td>1 </td><td>0.659217 </td><td>0.6598069 </td><td>Chung-Lu </td><td>1.013245 </td><td>NaN </td></tr>\n",
"\t<tr><td>15 </td><td>68 </td><td>0.734184 </td><td>0.000511826</td><td>1 </td><td>1 </td><td>0.734184 </td><td>1.0159553 </td><td>Chung-Lu </td><td>1.350993 </td><td>NaN </td></tr>\n",
"\t<tr><td>17 </td><td>51 </td><td>0.698313 </td><td>0.000531781</td><td>0 </td><td>1 </td><td>0.698313 </td><td>0.8392774 </td><td>Chung-Lu </td><td>1.148344 </td><td>NaN </td></tr>\n",
"\t<tr><td>17 </td><td>68 </td><td>0.768551 </td><td>0.000488645</td><td>0 </td><td>1 </td><td>0.768551 </td><td>1.2001474 </td><td>Chung-Lu </td><td>1.531126 </td><td>NaN </td></tr>\n",
"\t<tr><td>19 </td><td>51 </td><td>0.733662 </td><td>0.000512146</td><td>0 </td><td>1 </td><td>0.733662 </td><td>1.0132823 </td><td>Chung-Lu </td><td>1.283444 </td><td>NaN </td></tr>\n",
"\t<tr><td>19 </td><td>68 </td><td>0.795997 </td><td>0.000466878</td><td>1 </td><td>1 </td><td>0.795997 </td><td>1.3614607 </td><td>Chung-Lu </td><td>1.711258 </td><td>NaN </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllll}\n",
" compound\\_treats & disease\\_treats & prior\\_perm & prior\\_perm\\_stderr & n\\_treatments & n\\_possible & xswap\\_prior & logit\\_xswap\\_prior & method & prior & logit\\_prior\\\\\n",
"\\hline\n",
"\t 12 & 68 & 0.669943 & 0.000544807 & 1 & 1 & 0.669943 & 0.7079273 & Chung-Lu & 1.080795 & NaN \\\\\n",
"\t 13 & 68 & 0.693760 & 0.000534029 & 1 & 1 & 0.693760 & 0.8177570 & Chung-Lu & 1.170861 & NaN \\\\\n",
"\t 14 & 68 & 0.714649 & 0.000523197 & 0 & 1 & 0.714649 & 0.9180715 & Chung-Lu & 1.260927 & NaN \\\\\n",
"\t 15 & 51 & 0.659217 & 0.000549139 & 1 & 1 & 0.659217 & 0.6598069 & Chung-Lu & 1.013245 & NaN \\\\\n",
"\t 15 & 68 & 0.734184 & 0.000511826 & 1 & 1 & 0.734184 & 1.0159553 & Chung-Lu & 1.350993 & NaN \\\\\n",
"\t 17 & 51 & 0.698313 & 0.000531781 & 0 & 1 & 0.698313 & 0.8392774 & Chung-Lu & 1.148344 & NaN \\\\\n",
"\t 17 & 68 & 0.768551 & 0.000488645 & 0 & 1 & 0.768551 & 1.2001474 & Chung-Lu & 1.531126 & NaN \\\\\n",
"\t 19 & 51 & 0.733662 & 0.000512146 & 0 & 1 & 0.733662 & 1.0132823 & Chung-Lu & 1.283444 & NaN \\\\\n",
"\t 19 & 68 & 0.795997 & 0.000466878 & 1 & 1 & 0.795997 & 1.3614607 & Chung-Lu & 1.711258 & NaN \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"compound_treats | disease_treats | prior_perm | prior_perm_stderr | n_treatments | n_possible | xswap_prior | logit_xswap_prior | method | prior | logit_prior | \n",
"|---|---|---|---|---|---|---|---|---|\n",
"| 12 | 68 | 0.669943 | 0.000544807 | 1 | 1 | 0.669943 | 0.7079273 | Chung-Lu | 1.080795 | NaN | \n",
"| 13 | 68 | 0.693760 | 0.000534029 | 1 | 1 | 0.693760 | 0.8177570 | Chung-Lu | 1.170861 | NaN | \n",
"| 14 | 68 | 0.714649 | 0.000523197 | 0 | 1 | 0.714649 | 0.9180715 | Chung-Lu | 1.260927 | NaN | \n",
"| 15 | 51 | 0.659217 | 0.000549139 | 1 | 1 | 0.659217 | 0.6598069 | Chung-Lu | 1.013245 | NaN | \n",
"| 15 | 68 | 0.734184 | 0.000511826 | 1 | 1 | 0.734184 | 1.0159553 | Chung-Lu | 1.350993 | NaN | \n",
"| 17 | 51 | 0.698313 | 0.000531781 | 0 | 1 | 0.698313 | 0.8392774 | Chung-Lu | 1.148344 | NaN | \n",
"| 17 | 68 | 0.768551 | 0.000488645 | 0 | 1 | 0.768551 | 1.2001474 | Chung-Lu | 1.531126 | NaN | \n",
"| 19 | 51 | 0.733662 | 0.000512146 | 0 | 1 | 0.733662 | 1.0132823 | Chung-Lu | 1.283444 | NaN | \n",
"| 19 | 68 | 0.795997 | 0.000466878 | 1 | 1 | 0.795997 | 1.3614607 | Chung-Lu | 1.711258 | NaN | \n",
"\n",
"\n"
],
"text/plain": [
" compound_treats disease_treats prior_perm prior_perm_stderr n_treatments\n",
"1 12 68 0.669943 0.000544807 1 \n",
"2 13 68 0.693760 0.000534029 1 \n",
"3 14 68 0.714649 0.000523197 0 \n",
"4 15 51 0.659217 0.000549139 1 \n",
"5 15 68 0.734184 0.000511826 1 \n",
"6 17 51 0.698313 0.000531781 0 \n",
"7 17 68 0.768551 0.000488645 0 \n",
"8 19 51 0.733662 0.000512146 0 \n",
"9 19 68 0.795997 0.000466878 1 \n",
" n_possible xswap_prior logit_xswap_prior method prior logit_prior\n",
"1 1 0.669943 0.7079273 Chung-Lu 1.080795 NaN \n",
"2 1 0.693760 0.8177570 Chung-Lu 1.170861 NaN \n",
"3 1 0.714649 0.9180715 Chung-Lu 1.260927 NaN \n",
"4 1 0.659217 0.6598069 Chung-Lu 1.013245 NaN \n",
"5 1 0.734184 1.0159553 Chung-Lu 1.350993 NaN \n",
"6 1 0.698313 0.8392774 Chung-Lu 1.148344 NaN \n",
"7 1 0.768551 1.2001474 Chung-Lu 1.531126 NaN \n",
"8 1 0.733662 1.0132823 Chung-Lu 1.283444 NaN \n",
"9 1 0.795997 1.3614607 Chung-Lu 1.711258 NaN "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# NaNs produced when probabilities greater than 1 for example with Chung-Lu\n",
"long_df %>% dplyr::filter(is.na(logit_prior))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"“Removed 9 rows containing missing values (geom_point).”"
]
},
{
"data": {},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning message:\n",
"“Removed 9 rows containing missing values (geom_point).”"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABDgAAAEsCAIAAACpDZTyAAAACXBIWXMAABJ0AAASdAHeZh94\nAAAgAElEQVR4nOzdeXwTZf448CfJZHJfTdOkaRva0kLL0QIFV1A5lEtcFI9VcAUUVlEUEZRV\nVv2q67UvcbXIegAqXqgv9acu6i7qrhweZZWCFGwLiU1t2qRpmqS5r5nk98ejYyzQhtI0afJ5\n/8ErnSTNp0Nm5vnMc3xYsVgMAQAAAAAAAEA6Yac6AAAAAAAAAADoDRIVAAAAAAAAQNqBRAUA\nAAAAAACQdiBRAQAAAAAAAKQdSFQAAAAAAAAAaQcSFQAAAAAAAEDagUQFAAAAAAAAkHYgUQEA\nAAAAAACkHUhUAAAAAAAAAGkHEhUAAAAAAABA2oFEBQAAAAAAAJB2iMRf2tbWVl9fb7PZ2Gy2\nWq2eMmWKRqNJXmQAAAAAAACArJVQouJ0OpcuXfrJJ5/Eb2Sz2YsXL962bZtIJEpObAAAAAAA\nAIAslVCicvvtt3/yySeLFy+eO3euRqNhsVgWi+Xzzz9/8803xWLx1q1bkx0lAAAAAAAAIKuw\nYrFYvy9SKBTXXXfdli1bem3fsGHDjh07uru7kxMbAAAAAAAAIEslNJk+FApddNFFJ2+fO3du\nIBAY7JAAAAAAAAAA2S6hRKWmpqapqenk7SdOnJg0adJghwQAAAAAAADIdgnNUdm8efOVV15Z\nUVGxcOFCgiAQQjRNf/LJJ7W1tW+//XaSIwQAAAAAAABknb7mqFRUVOAHbDbb6/WaTCYej6fV\nammatlqtoVCosLBQp9N9/fXXQxUtAAAAAAAAICv01aOSm5vLPM7JydHpdMyPRUVF+EEkEklS\nZAAAAAAAAICsldCqXwAAAAAAAAAwlM6gMr3dbq+rq7NYLGw2u7CwcNq0aRKJJHmRAQAAAAAA\nALJWQolKNBq98847n3322fiBXiKR6IEHHtiwYUPSYktIT0/P5ZdfLhAIUhsGAGBwBYNBhNDu\n3btJkjz52dtvv12v17NYrCGPCwCQLBRFhcPhDRs2XHLJJSc/+/nnnz/xxBNcLnfoAwMAJI/f\n758wYUJtbe0pn00oUXnqqadqa2uvuOKKBQsWaLXaWCzW3t7+/vvv//nPf1ar1cuWLRvUgM9M\nLBZTKpWPPfZYCmMAAAy6Rx55pLGx8XRjUwOBwIYNGwoLC4c4KgBA8uzdu3fbtm3hcPiUz0Yi\nkQsuuGDx4sVDHBUAIHkoilq2bJnf7z/dCxJKVHbs2LFq1aoXXnghfuNNN920ePHizZs3pzZR\nAQAAAAAAAGSehAo+/vjjj1deeeXJ26+99tpTFoIEAAAAAAAAgLORUKJCEITH4zl5ezgc5nA4\ngx0SAAAAAAAAINsllKhMnDhx8+bNvYaNBgKB2traSZMmJScwAAAAAAAAQPZKaI7Kxo0bf//7\n35eXl8+fP7+wsDAcDptMpo8//rinp2f37t3JDhEAAAAAAACQbRJKVBYsWPD+++9v3Lhx27Zt\nzMaqqqrXX3999uzZSYsNAAAAAAAAkKUSLfi4aNGiRYsWmc3mjo4OFotVVFSkVquTGhkAAAAA\nAAAga/U/RyUcDk+ZMuXjjz9GCGm12ilTpkyePBmyFJBUNE3PmjWrvr4+1YEAAAbH7Nmzv/rq\nq1RHAQBIPXyJ//bbb1MdCBgG+k9USJI0m80Gg2EIogFZaNWqVZs3b+61kc1m19bWjh49OiUh\nAQAGwGazPfXUU4sXL54zZ86VV1557733NjQ0pCqYU55YAABDptcx2NHRceWVVz733HNn8zsP\nHz58/Pjxsw4NDCcJrfq1devWF1988YMPPqAoKtkBAYAQYrFY1dXVYrE41YEAABLS3t5+0003\n6fX6W2+9dfv27ffff79UKl2/fv2+fftSHRoAIMUsFsu6desuvPDC1atXn83veeeddxJPVGia\nPpvPAmkioTkqmzZt4nA4V1xxBUEQKpWKJMn4Z1tbW5MSGshiNE3Pnj37ySefVKlUy5cvj3/q\n5ptvvuaaaxwOx5YtW7777js2mz169OjVq1eXlJQghE63HQCQVE8//bRYLH7mmWe4XC7eMmHC\nhNzcXKPROGPGDLzF7XbffffdR44ckclkK1eunDt3biAQWLBgQW1tbXV1NUKoo6Pjuuuue+ON\nN7Ra7YUXXvjAAw988sknZrOZpukVK1bMnTsXIaTX659++mmj0ajT6W6++eb169dv27atvLw8\nkSBP93EFBQVJ2SkAAIS6urrWr19/wQUX3HrrrSc/63A4nn322e+//z4SiZSVld12222lpaUI\nod27d7/11ludnZ1isfj888+/9dZb8dmjvr7+k08+2bp16ykv97jx8Oc///m1114bP378X/7y\nlyH/c8EgSyhRoShKoVBcdNFFyY4GgF50Ot1//vMf/PiDDz7YsWPHBRdcgBB69NFHpVLpW2+9\n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\nSZPY14T46olIKBT+v//3//Lz85VKZXJy8pIlSxobG8MPAACgp+hUogIAAF1k3759t9xyCxG9\n++67H3/8cV5e3mOPPbZ69Wp27fr165966qnc3NxPPvlk5cqVy5Yt+/bbbxMSEoLeZPPmzbfd\ndhsRnThxYufOnR3ayx/+8Id169YR0bZt206cOBF4Ov1q7+z1eufNmzd58uRdu3YtW7Zs9+7d\nDz/8MLvq0KFDU6dO9Xg877333ieffDJx4sR77rlnw4YNV/v4W7duFYlEv/nNb8aNGzdmzJg/\n//nPgUfqYrG4qqpq6dKlq1atOnPmTGFh4QcffPDII4+wa/fs2bNw4cL09PT33nvvL3/5i06n\nW7hw4WeffRa0i6VLl5rN5v3793NLLl26dOTIkUWLFr311lshyu3zzz+/5ZZblErl1q1bX3zx\nxVOnTk2ZMoU9+xQm9kSKx+MhIqlUarFYHn/88ccee+z3v/89tffVE5HNZps/f/7NN9/83nvv\n3XHHHTt27Fi8eHH4ewcA6DH8nbB58+ZOvgMAQK/FpgFFRUVtrs3KykpPT29paeGWzJs3TyKR\n1NfX+3w+vV4/evRon8/Hrvrmm2+ISKlUsk9/9atfDR8+nH18zz33hOioQ+zF7/e/8847RHTk\nyJE2tw1652nTphHR3/72N25Jfn5+SkoK+3j8+PGDBw8O3NGcOXM0Go3D4Wj9zs3NzSqVatas\nWezTwsJCIjp48GDQvg4dOsQtmT59Orevl19+ecaMGW63m33a1NQkFovvuOMO9umkSZPYwrHZ\nbImJibNnz+behP1RKy4ubv3pAot0zJgxw4YNYxiGffrtt99KpdLXX3+99Qe52lecn58vEoka\nGhq4z7J3715ubegvhT3r8uGHH3JrFyxYQETnz59vHQAAQI+GMyoAALxjNBrLyspuvvnmwJMk\nt9xyi8fjOXbs2IULF0wmU0FBgUAgYFfl5eWNHDkyunuJIGyZTBZ41/uQIUMaGhqIqL6+vri4\neObMmX6/v+WyWbNmNTU1FRcXt36f3bt3Nzc3L126lH165513SqXSt99+O/A1crl8ypQp3NO0\ntDR2X0S0evXqv//979yFcGq1um/fvhcuXAjai1Kp/N///d8vvviitraWXbJnz57Ro0ePGzcu\nxGesq6srKSmZMWMGN99xTk6Oy+Xizue01tDQcOnSpUuXLtXU1Jw4ceKee+45cuTIvffeq9Vq\n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\nAOCd/w+r6JYMbcreVgAAAABJRU5ErkJggg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data",
"source": "R display func"
}
],
"source": [
"width = 9\n",
"height = 2.5\n",
"options(repr.plot.width=width, repr.plot.height=height)\n",
"gg_scatter = long_df %>%\n",
" dplyr::mutate(method = factor(method, levels=c('Lizee', 'Chung-Lu', 'Kloster'))) %>%\n",
" ggplot2::ggplot(ggplot2::aes(logit_prior, logit_xswap_prior)) +\n",
" ggplot2::geom_abline(slope=1, color='pink', linetype='dashed') +\n",
" ggplot2::geom_point(alpha = 0.1, shape = 16) +\n",
"# ggplot2::geom_linerange(ggplot2::aes(\n",
"# ymin=boot::logit(xswap_prior - 2*prior_perm_stderr),\n",
"# ymax=boot::logit(xswap_prior + 2*prior_perm_stderr)\n",
"# )) +\n",
" ggplot2::theme_bw() +\n",
" ggplot2::coord_fixed() +\n",
" ggplot2::facet_grid(. ~ method) +\n",
" ggplot2::xlab('Logit of the Analytic Prob') +\n",
" ggplot2::ylab('Logit of the Empiric XSwap Prob')\n",
"\n",
"gg_scatter\n",
"ggplot2::ggsave('estimated-xswap-priors.png', gg_scatter, dpi = 300, width = width, height = height)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>compound_treats</th><th scope=col>disease_treats</th><th scope=col>prior_perm</th><th scope=col>prior_perm_stderr</th><th scope=col>n_treatments</th><th scope=col>n_possible</th><th scope=col>xswap_prior</th><th scope=col>logit_xswap_prior</th><th scope=col>Lizee</th><th scope=col>Chung-Lu</th><th scope=col>Kloster</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>19 </td><td>68 </td><td>0.795997 </td><td>0.000466878</td><td>1 </td><td>1 </td><td>0.795997 </td><td>1.3614607 </td><td>0.04335716 </td><td>1.7112583 </td><td>0.6588475 </td></tr>\n",
"\t<tr><td>17 </td><td>68 </td><td>0.768551 </td><td>0.000488645</td><td>0 </td><td>1 </td><td>0.768551 </td><td>1.2001474 </td><td>0.03879325 </td><td>1.5311258 </td><td>0.6327313 </td></tr>\n",
"\t<tr><td>15 </td><td>68 </td><td>0.734184 </td><td>0.000511826</td><td>1 </td><td>1 </td><td>0.734184 </td><td>1.0159553 </td><td>0.03422934 </td><td>1.3509934 </td><td>0.6024808 </td></tr>\n",
"\t<tr><td>19 </td><td>51 </td><td>0.733662 </td><td>0.000512146</td><td>0 </td><td>1 </td><td>0.733662 </td><td>1.0132823 </td><td>0.03251787 </td><td>1.2834437 </td><td>0.5854985 </td></tr>\n",
"\t<tr><td>14 </td><td>68 </td><td>0.714649 </td><td>0.000523197</td><td>0 </td><td>1 </td><td>0.714649 </td><td>0.9180715 </td><td>0.03194738 </td><td>1.2609272 </td><td>0.5854859 </td></tr>\n",
"\t<tr><td>17 </td><td>51 </td><td>0.698313 </td><td>0.000531781</td><td>0 </td><td>1 </td><td>0.698313 </td><td>0.8392774 </td><td>0.02909494 </td><td>1.1483444 </td><td>0.5575563 </td></tr>\n",
"\t<tr><td>13 </td><td>68 </td><td>0.693760 </td><td>0.000534029</td><td>1 </td><td>1 </td><td>0.693760 </td><td>0.8177570 </td><td>0.02966543 </td><td>1.1708609 </td><td>0.5670301 </td></tr>\n",
"\t<tr><td>12 </td><td>68 </td><td>0.669943 </td><td>0.000544807</td><td>1 </td><td>1 </td><td>0.669943 </td><td>0.7079273 </td><td>0.02738347 </td><td>1.0807947 </td><td>0.5469169 </td></tr>\n",
"\t<tr><td>15 </td><td>51 </td><td>0.659217 </td><td>0.000549139</td><td>1 </td><td>1 </td><td>0.659217 </td><td>0.6598069 </td><td>0.02567200 </td><td>1.0132450 </td><td>0.5257732 </td></tr>\n",
"\t<tr><td>19 </td><td>37 </td><td>0.652270 </td><td>0.000551778</td><td>1 </td><td>1 </td><td>0.652270 </td><td>0.6290323 </td><td>0.02359140 </td><td>0.9311258 </td><td>0.5010691 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|lllllllllll}\n",
" compound\\_treats & disease\\_treats & prior\\_perm & prior\\_perm\\_stderr & n\\_treatments & n\\_possible & xswap\\_prior & logit\\_xswap\\_prior & Lizee & Chung-Lu & Kloster\\\\\n",
"\\hline\n",
"\t 19 & 68 & 0.795997 & 0.000466878 & 1 & 1 & 0.795997 & 1.3614607 & 0.04335716 & 1.7112583 & 0.6588475 \\\\\n",
"\t 17 & 68 & 0.768551 & 0.000488645 & 0 & 1 & 0.768551 & 1.2001474 & 0.03879325 & 1.5311258 & 0.6327313 \\\\\n",
"\t 15 & 68 & 0.734184 & 0.000511826 & 1 & 1 & 0.734184 & 1.0159553 & 0.03422934 & 1.3509934 & 0.6024808 \\\\\n",
"\t 19 & 51 & 0.733662 & 0.000512146 & 0 & 1 & 0.733662 & 1.0132823 & 0.03251787 & 1.2834437 & 0.5854985 \\\\\n",
"\t 14 & 68 & 0.714649 & 0.000523197 & 0 & 1 & 0.714649 & 0.9180715 & 0.03194738 & 1.2609272 & 0.5854859 \\\\\n",
"\t 17 & 51 & 0.698313 & 0.000531781 & 0 & 1 & 0.698313 & 0.8392774 & 0.02909494 & 1.1483444 & 0.5575563 \\\\\n",
"\t 13 & 68 & 0.693760 & 0.000534029 & 1 & 1 & 0.693760 & 0.8177570 & 0.02966543 & 1.1708609 & 0.5670301 \\\\\n",
"\t 12 & 68 & 0.669943 & 0.000544807 & 1 & 1 & 0.669943 & 0.7079273 & 0.02738347 & 1.0807947 & 0.5469169 \\\\\n",
"\t 15 & 51 & 0.659217 & 0.000549139 & 1 & 1 & 0.659217 & 0.6598069 & 0.02567200 & 1.0132450 & 0.5257732 \\\\\n",
"\t 19 & 37 & 0.652270 & 0.000551778 & 1 & 1 & 0.652270 & 0.6290323 & 0.02359140 & 0.9311258 & 0.5010691 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"compound_treats | disease_treats | prior_perm | prior_perm_stderr | n_treatments | n_possible | xswap_prior | logit_xswap_prior | Lizee | Chung-Lu | Kloster | \n",
"|---|---|---|---|---|---|---|---|---|---|\n",
"| 19 | 68 | 0.795997 | 0.000466878 | 1 | 1 | 0.795997 | 1.3614607 | 0.04335716 | 1.7112583 | 0.6588475 | \n",
"| 17 | 68 | 0.768551 | 0.000488645 | 0 | 1 | 0.768551 | 1.2001474 | 0.03879325 | 1.5311258 | 0.6327313 | \n",
"| 15 | 68 | 0.734184 | 0.000511826 | 1 | 1 | 0.734184 | 1.0159553 | 0.03422934 | 1.3509934 | 0.6024808 | \n",
"| 19 | 51 | 0.733662 | 0.000512146 | 0 | 1 | 0.733662 | 1.0132823 | 0.03251787 | 1.2834437 | 0.5854985 | \n",
"| 14 | 68 | 0.714649 | 0.000523197 | 0 | 1 | 0.714649 | 0.9180715 | 0.03194738 | 1.2609272 | 0.5854859 | \n",
"| 17 | 51 | 0.698313 | 0.000531781 | 0 | 1 | 0.698313 | 0.8392774 | 0.02909494 | 1.1483444 | 0.5575563 | \n",
"| 13 | 68 | 0.693760 | 0.000534029 | 1 | 1 | 0.693760 | 0.8177570 | 0.02966543 | 1.1708609 | 0.5670301 | \n",
"| 12 | 68 | 0.669943 | 0.000544807 | 1 | 1 | 0.669943 | 0.7079273 | 0.02738347 | 1.0807947 | 0.5469169 | \n",
"| 15 | 51 | 0.659217 | 0.000549139 | 1 | 1 | 0.659217 | 0.6598069 | 0.02567200 | 1.0132450 | 0.5257732 | \n",
"| 19 | 37 | 0.652270 | 0.000551778 | 1 | 1 | 0.652270 | 0.6290323 | 0.02359140 | 0.9311258 | 0.5010691 | \n",
"\n",
"\n"
],
"text/plain": [
" compound_treats disease_treats prior_perm prior_perm_stderr n_treatments\n",
"1 19 68 0.795997 0.000466878 1 \n",
"2 17 68 0.768551 0.000488645 0 \n",
"3 15 68 0.734184 0.000511826 1 \n",
"4 19 51 0.733662 0.000512146 0 \n",
"5 14 68 0.714649 0.000523197 0 \n",
"6 17 51 0.698313 0.000531781 0 \n",
"7 13 68 0.693760 0.000534029 1 \n",
"8 12 68 0.669943 0.000544807 1 \n",
"9 15 51 0.659217 0.000549139 1 \n",
"10 19 37 0.652270 0.000551778 1 \n",
" n_possible xswap_prior logit_xswap_prior Lizee Chung-Lu Kloster \n",
"1 1 0.795997 1.3614607 0.04335716 1.7112583 0.6588475\n",
"2 1 0.768551 1.2001474 0.03879325 1.5311258 0.6327313\n",
"3 1 0.734184 1.0159553 0.03422934 1.3509934 0.6024808\n",
"4 1 0.733662 1.0132823 0.03251787 1.2834437 0.5854985\n",
"5 1 0.714649 0.9180715 0.03194738 1.2609272 0.5854859\n",
"6 1 0.698313 0.8392774 0.02909494 1.1483444 0.5575563\n",
"7 1 0.693760 0.8177570 0.02966543 1.1708609 0.5670301\n",
"8 1 0.669943 0.7079273 0.02738347 1.0807947 0.5469169\n",
"9 1 0.659217 0.6598069 0.02567200 1.0132450 0.5257732\n",
"10 1 0.652270 0.6290323 0.02359140 0.9311258 0.5010691"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Top 10 degree-pairs with the highest XSwap prior\n",
"degree_prior_df %>%\n",
" dplyr::arrange(desc(xswap_prior)) %>%\n",
" head(10)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"R version 3.4.1 (2017-06-30)\n",
"Platform: x86_64-pc-linux-gnu (64-bit)\n",
"Running under: Ubuntu 18.04.1 LTS\n",
"\n",
"Matrix products: default\n",
"BLAS: /home/dhimmel/anaconda3/envs/r35/lib/R/lib/libRblas.so\n",
"LAPACK: /home/dhimmel/anaconda3/envs/r35/lib/R/lib/libRlapack.so\n",
"\n",
"locale:\n",
" [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n",
" [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n",
" [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n",
" [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n",
" [9] LC_ADDRESS=C LC_TELEPHONE=C \n",
"[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n",
"\n",
"attached base packages:\n",
"[1] stats graphics grDevices utils datasets methods base \n",
"\n",
"other attached packages:\n",
"[1] bindrcpp_0.2.2\n",
"\n",
"loaded via a namespace (and not attached):\n",
" [1] Rcpp_0.12.17 plyr_1.8.4 pillar_1.3.0 compiler_3.4.1 \n",
" [5] bindr_0.1.1 base64enc_0.1-3 tools_3.4.1 boot_1.3-19 \n",
" [9] digest_0.6.16 uuid_0.1-2 jsonlite_1.5 evaluate_0.11 \n",
"[13] tibble_1.4.2 gtable_0.2.0 pkgconfig_2.0.2 rlang_0.2.1 \n",
"[17] IRdisplay_0.4.4 IRkernel_0.8.12 repr_0.15.0 dplyr_0.7.6 \n",
"[21] stringr_1.3.1 hms_0.4.2 grid_3.4.1 tidyselect_0.2.4\n",
"[25] glue_1.3.0 R6_2.2.2 pbdZMQ_0.3-2 reshape2_1.4.3 \n",
"[29] purrr_0.2.5 readr_1.1.1 tidyr_0.8.1 ggplot2_3.0.0 \n",
"[33] magrittr_1.5 scales_1.0.0 htmltools_0.3.6 assertthat_0.2.0\n",
"[37] colorspace_1.3-2 labeling_0.3 stringi_1.2.4 lazyeval_0.2.1 \n",
"[41] munsell_0.5.0 crayon_1.3.4 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sessionInfo()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@dhimmel
Copy link
Author

dhimmel commented Sep 21, 2018

Here is the outputted estimated-xswap-priors.png:

estimated-xswap-priors

@dhimmel
Copy link
Author

dhimmel commented Sep 22, 2018

Here's a plot that uses ggplot2::geom_linerange to draw rough confidence intervals:

estimated-xswap-priors

The CIs are very tight.

@dhimmel
Copy link
Author

dhimmel commented Sep 24, 2018

Updated figure from this notebook that includes two metaedges:

xswap-versus-analytic-priors

Includes Disease-associates-Gene data from greenelab/snorkeling#67.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment