├── .gitignore
├── DESCRIPTION
├── LICENSE
├── NAMESPACE
├── NEWS.md
├── R
├── data.r
├── progeny-package.r
├── progeny.r
├── progenyPermutations.r
└── progenySuppFunc.r
├── README.md
├── data
├── model_human_full.rda
├── model_mouse_full.rda
└── vignette_data.RData
├── docs
├── 404.html
├── LICENSE-text.html
├── articles
│ ├── ProgenySingleCell.html
│ ├── ProgenySingleCell_files
│ │ ├── accessible-code-block-0.0.1
│ │ │ └── empty-anchor.js
│ │ └── figure-html
│ │ │ ├── unnamed-chunk-12-1.png
│ │ │ ├── unnamed-chunk-7-1.png
│ │ │ └── unnamed-chunk-9-1.png
│ ├── index.html
│ ├── progeny.html
│ ├── progenyBulk.html
│ ├── progenyBulk_files
│ │ ├── accessible-code-block-0.0.1
│ │ │ └── empty-anchor.js
│ │ └── figure-html
│ │ │ └── unnamed-chunk-7-1.png
│ └── progeny_files
│ │ └── figure-html
│ │ ├── n_genes-1.png
│ │ ├── unnamed-chunk-7-1.png
│ │ └── w_dist-1.png
├── authors.html
├── deps
│ ├── bootstrap-5.1.3
│ │ ├── bootstrap.bundle.min.js
│ │ ├── bootstrap.bundle.min.js.map
│ │ ├── bootstrap.min.css
│ │ ├── font.css
│ │ └── fonts
│ │ │ ├── 1Ptxg8zYS_SKggPN4iEgvnHyvveLxVs9pbCIPrc.woff
│ │ │ ├── 1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrc.woff
│ │ │ ├── 4iCs6KVjbNBYlgo6ew.woff
│ │ │ ├── 4iCs6KVjbNBYlgoKfw7w.woff
│ │ │ ├── 4iCv6KVjbNBYlgoCxCvTtA.woff
│ │ │ ├── 4iCv6KVjbNBYlgoCxCvjsGyL.woff
│ │ │ ├── 6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDQ.woff
│ │ │ ├── 6xK1dSBYKcSV-LCoeQqfX1RYOo3qPa7j.woff
│ │ │ ├── 6xK3dSBYKcSV-LCoeQqfX1RYOo3aPA.woff
│ │ │ ├── 6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7j.woff
│ │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3i54rAkw.woff
│ │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vAkw.woff
│ │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdo.woff
│ │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zAkw.woff
│ │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdo.woff
│ │ │ ├── CSR54z1Qlv-GDxkbKVQ_dFsvWNRevw.woff
│ │ │ ├── CSR54z1Qlv-GDxkbKVQ_dFsvaNA.woff
│ │ │ ├── CSR64z1Qlv-GDxkbKVQ_TOQ.woff
│ │ │ ├── CSR64z1Qlv-GDxkbKVQ_fOAKSw.woff
│ │ │ ├── JTURjIg1_i6t8kCHKm45_ZpC7g0.woff
│ │ │ ├── JTURjIg1_i6t8kCHKm45_dJE7g0.woff
│ │ │ ├── JTUSjIg1_i6t8kCHKm45xW0.woff
│ │ │ ├── KFOlCnqEu92Fr1MmEU9fBBc-.woff
│ │ │ ├── KFOlCnqEu92Fr1MmEU9vAA.woff
│ │ │ ├── KFOlCnqEu92Fr1MmSU5fBBc-.woff
│ │ │ ├── KFOlCnqEu92Fr1MmSU5vAA.woff
│ │ │ ├── KFOlCnqEu92Fr1MmWUlfBBc-.woff
│ │ │ ├── KFOlCnqEu92Fr1MmWUlvAA.woff
│ │ │ ├── KFOmCnqEu92Fr1Me5g.woff
│ │ │ ├── KFOmCnqEu92Fr1Mu4mxM.woff
│ │ │ ├── QGYpz_kZZAGCONcK2A4bGOj8mNhL.woff
│ │ │ ├── S6u8w4BMUTPHjxsAXC-s.woff
│ │ │ ├── S6u8w4BMUTPHjxswWA.woff
│ │ │ ├── S6u9w4BMUTPHh6UVSwiPHw.woff
│ │ │ ├── S6u9w4BMUTPHh6UVeww.woff
│ │ │ ├── S6u9w4BMUTPHh7USSwiPHw.woff
│ │ │ ├── S6u9w4BMUTPHh7USeww.woff
│ │ │ ├── S6uyw4BMUTPHjx4wWA.woff
│ │ │ ├── S6uyw4BMUTPHvxo.woff
│ │ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuFuYMZs.woff
│ │ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuI6fMZs.woff
│ │ │ ├── UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfMZs.woff
│ │ │ ├── XRXV3I6Li01BKof4MQ.woff
│ │ │ ├── XRXW3I6Li01BKofA6sKkZQ.woff
│ │ │ ├── XRXW3I6Li01BKofAjsOkZQ.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk5hkWVAexg.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk5hkaVQ.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkWVAexg.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVQ.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0RkyFjWVAexg.woff
│ │ │ ├── memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0RkyFjaVQ.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsg-1x4gaVQ.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsg-1y4k.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0B4gaVQ.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4k.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0B4gaVQ.woff
│ │ │ ├── memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsjZ0C4k.woff
│ │ │ ├── pe03MImSLYBIv1o4X1M8cc9iB_5p.woff
│ │ │ ├── pe0qMImSLYBIv1o4X1M8cfe5.woff
│ │ │ └── q5uGsou0JOdh94bfvQlr.woff
│ └── jquery-3.6.0
│ │ └── jquery-3.6.0.min.js
├── extra.css
├── index.html
├── news
│ └── index.html
├── pkgdown.js
├── pkgdown.yml
├── reference
│ ├── Rplot001.png
│ ├── figures
│ │ └── tool_logo.png
│ ├── getModel.html
│ ├── index.html
│ ├── model_human_full.html
│ ├── model_mouse_full.html
│ ├── progeny.html
│ ├── progenyPerm.html
│ ├── progenyScatter.html
│ ├── saveProgenyPlots.html
│ └── vignette_data.html
├── search.json
└── sitemap.xml
├── inst
├── CITATION
└── extdata
│ ├── human_def_expected.csv
│ ├── human_input.csv
│ ├── human_perm_expected.csv
│ ├── mouse_def_expected.csv
│ ├── mouse_input.csv
│ └── mouse_perm_expected.csv
├── man
├── figures
│ └── tool_logo.png
├── getModel.Rd
├── model_human_full.Rd
├── model_mouse_full.Rd
├── progeny.Rd
├── progenyPerm.Rd
├── progenyScatter.Rd
├── saveProgenyPlots.Rd
└── vignette_data.Rd
├── pkgdown
├── _pkgdown.yml
└── extra.css
├── tests
├── testthat.R
└── testthat
│ └── test-progeny_pipeline.R
└── vignettes
└── progeny.Rmd
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | progeny.Rproj
3 | .Rproj.user
4 | .Rbuildignore
5 | .Rhistory
6 | vignettes/.Rhistory
7 | vignettes/.Rhistory
8 | vignettes/17ea135933f4_TableS4A.xlsx
9 | vignettes/17ea37d9483_Cell_line_RMA_proc_basalExp.txt.zip
10 | vignettes/BiocFileCache.sqlite
11 | README.html
12 | vignettes/2fe218797e34_Cell_line_RMA_proc_basalExp.txt.zip
13 | vignettes/2fe2590a3b08_TableS4A.xlsx
14 | vignettes/4a2c2af92581_Cell_line_RMA_proc_basalExp.txt.zip
15 | vignettes/4a2c5bb15e4_TableS4A.xlsx
16 |
17 | vignettes/2db419d4ad0_TableS4A.xlsx
18 | vignettes/2db4fd222cb_Cell_line_RMA_proc_basalExp.txt.zip
19 |
20 | .DS_Store
21 | vignettes/.DS_Store
22 |
--------------------------------------------------------------------------------
/DESCRIPTION:
--------------------------------------------------------------------------------
1 | Package: progeny
2 | Title: Pathway RespOnsive GENes for activity inference from gene expression
3 | Version: 1.17.3
4 | Authors@R: c(
5 | person(given = "Michael",
6 | family = "Schubert",
7 | role = "aut"),
8 | person(given = "Alberto",
9 | family = "Valdeolivas",
10 | role = "ctb",
11 | email = "alvaldeolivas@gmail.com",
12 | comment = c(ORCID = "0000-0001-5482-9023")),
13 | person(given = "Christian H.",
14 | family = "Holland",
15 | role = "ctb",
16 | email = "cholland2408@gmail.com",
17 | comment = c(ORCID = "0000-0002-3060-5786")),
18 | person(given = "Igor",
19 | family = "Bulanov",
20 | role = "ctb"),
21 | person(given = "Aurélien",
22 | family = "Dugourd",
23 | role = c("cre","ctb"),
24 | email = "aurelien.dugourd@bioquant.uni-heidelberg.de")
25 | )
26 | Description: PROGENy is resource that leverages a large compendium of publicly available signaling perturbation experiments to yield a common core of pathway responsive genes for human and mouse. These, coupled with any statistical method, can be used to infer pathway activities from bulk or single-cell transcriptomics.
27 | URL: https://github.com/saezlab/progeny
28 | BugReports: https://github.com/saezlab/progeny/issues
29 | Depends:
30 | R (>= 3.6.0)
31 | Imports:
32 | Biobase,
33 | stats,
34 | dplyr,
35 | tidyr,
36 | ggplot2,
37 | ggrepel,
38 | gridExtra,
39 | decoupleR,
40 | reshape2
41 | biocViews: SystemsBiology, GeneExpression, FunctionalPrediction, GeneRegulation
42 | License: Apache License (== 2.0) | file LICENSE
43 | LazyData: true
44 | LazyDataCompression: bzip2
45 | Encoding: UTF-8
46 | Suggests:
47 | airway,
48 | biomaRt,
49 | BiocFileCache,
50 | broom,
51 | Seurat,
52 | SingleCellExperiment,
53 | DESeq2,
54 | BiocStyle,
55 | knitr,
56 | readr,
57 | readxl,
58 | pheatmap,
59 | tibble,
60 | rmarkdown,
61 | testthat (>= 2.1.0)
62 | VignetteBuilder: knitr
63 | RoxygenNote: 7.2.2
64 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/NAMESPACE:
--------------------------------------------------------------------------------
1 | # Generated by roxygen2: do not edit by hand
2 |
3 | S3method(progeny,ExpressionSet)
4 | S3method(progeny,Seurat)
5 | S3method(progeny,SingleCellExperiment)
6 | S3method(progeny,default)
7 | S3method(progeny,matrix)
8 | export(getModel)
9 | export(progeny)
10 | export(progenyPerm)
11 | export(progenyScatter)
12 | export(saveProgenyPlots)
13 | import(ggplot2)
14 | import(ggrepel)
15 | import(gridExtra)
16 | importFrom(dplyr,group_by)
17 | importFrom(dplyr,select)
18 | importFrom(dplyr,top_n)
19 | importFrom(dplyr,ungroup)
20 | importFrom(reshape2,melt)
21 | importFrom(stats,complete.cases)
22 | importFrom(stats,ecdf)
23 | importFrom(stats,sd)
24 | importFrom(tidyr,"%>%")
25 | importFrom(tidyr,spread)
26 |
--------------------------------------------------------------------------------
/NEWS.md:
--------------------------------------------------------------------------------
1 | # Progeny v1.11.3 (Release date: 2020-10-14)
2 |
3 | * Model matrices are not accessed in the local and not in the global enviroment
4 |
5 | # Progeny v1.11.2 (Release date: 2020-09-01)
6 |
7 | * Fixed issue with rownames when using Progeny with Permutations function
8 |
9 | # Progeny v1.11.1 (Release date: 2020-06-09)
10 |
11 | * Website: Google Analytics
12 |
13 | # Progeny v1.9.7 (Release date: 2020-04-27)
14 |
15 | * PROGENy website development
16 |
17 | # Progeny v1.9.6 (Release date: 2020-04-27)
18 |
19 | Major update with the following main points:
20 |
21 | * Added the mouse model matrix containing 14 pathways
22 |
23 | * The human model matrix extended to 14 pathways
24 |
25 | * Added the following functions: progenyPerm, progenyScatter, progenySavePlots,
26 | getModel
27 |
28 | * Added tests and test data
29 |
30 | * Added the vignette for usage the PROGENy on single-cell RNA-seq data
31 |
32 | * Added functionality to work with Seurat objects
33 |
--------------------------------------------------------------------------------
/R/data.r:
--------------------------------------------------------------------------------
1 | #' The full human linear model underlying PROGENy
2 | #'
3 | #' HGNC gene symbols in rows, pathways in columns. Pathway activity inference
4 | #' works by matrix multiplication of gene expression with the model.
5 | #'
6 | #' @format The full human model contains 22479 genes, associated pathways,
7 | #' weight and the p-value.
8 | #' \describe{
9 | #' \item{gene}{gene names in HGNC symbols}
10 | #' \item{pathway}{names of PROGENy pathways}
11 | #' \item{weight}{z-scores for a given gene}
12 | #' \item{p.value}{significance of gene in pathway}
13 | #' }
14 | #' @keywords datasets
15 | #' @name model_human_full
16 | #' @examples get("model_human_full", envir = .GlobalEnv)
17 | #' @source \url{https://www.nature.com/articles/s41467-017-02391-6}
18 | NULL
19 |
20 | #' The full mouse linear model underlying PROGENy
21 | #'
22 | #' MGI gene symbols in rows, pathways in columns. Pathway activity inference
23 | #' works by matrix multiplication of gene expression with the model.
24 | #'
25 | #' @format The full mouse model contains 17426 genes, associated pathways,
26 | #' weight and the p-value.
27 | #' \describe{
28 | #' \item{gene}{gene names in HGNC symbols}
29 | #' \item{pathway}{names of PROGENy pathways}
30 | #' \item{weight}{z-scores for a given gene}
31 | #' \item{p.value}{significance of gene in a pathway}
32 | #' }
33 | #' @keywords datasets
34 | #' @name model_mouse_full
35 | #' @examples get("model_mouse_full", envir = .GlobalEnv)
36 | #' @source \url{https://www.ncbi.nlm.nih.gov/pubmed/31525460}
37 | NULL
38 |
39 | #' The RNA data used in the progeny vignette
40 | #'
41 | #' List with three elements: the gene counts, the experimental design and
42 | #' the result of limma differential analysis
43 | #'
44 | #' @format List with three elements: the gene counts, the experimental design and
45 | #' the result of limma differential analysis
46 | #' \describe{
47 | #' \item{counts}{gene counts}
48 | #' \item{design}{experiemental design}
49 | #' \item{limma_ttop}{differential analysis result using limma}
50 | #' }
51 | #' @keywords datasets
52 | #' @name vignette_data
53 | #' @examples data("vignette_data")
54 | #' @source \url{https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE119931}
55 | NULL
56 |
--------------------------------------------------------------------------------
/R/progeny-package.r:
--------------------------------------------------------------------------------
1 | #' Calculate PROGENy pathway scores from gene expression
2 | #'
3 | #' @name progeny
4 | #' @docType package
5 | NULL
6 |
--------------------------------------------------------------------------------
/R/progeny.r:
--------------------------------------------------------------------------------
1 | #' Calculate PROGENy pathway scores from gene expression
2 | #'
3 | #' This function uses the linear model of pathway-responsive genes underlying
4 | #' the PROGENy method. It transforms a gene expression matrix with HGNC/MGI gene
5 | #' symbols in rows and sample names in columns into a pathway score matrix with
6 | #' samples in rows and pathways in columns.
7 | #'
8 | #' The publication of the method is available at:
9 | #' https://www.nature.com/articles/s41467-017-02391-6
10 | #'
11 | #' The supplied expression object has to contain HGNC/MGI symbols in rows. This
12 | #' will, in most cases (and how we originally used it), be either normalized
13 | #' gene expression of a microarray experiment or log-transformed (and
14 | #' possible variance-stabilized) counts from an RNA-seq experiment.
15 | #'
16 | #' The human and mouse model matrices consists of 14 pathways and large set of
17 | #' genes with an associated p-value (p-value per gene and pathway) that accounts
18 | #' for the importance of each gene on each pathway upon perturbation.
19 | #' Its coefficients are non-zero if the gene-pathway pair corresponds
20 | #' to the top N genes (100 by default) that were up-regulated upon stimulation
21 | #' of the pathway in a wide range of experiments. The value corresponds to the
22 | #' fitted z-score across experiments in our model fit.
23 | #' Only rows with at least one non-zero coefficient were included, as the rest
24 | #' is not used to infer pathway activity.
25 | #'
26 | #' @param expr A gene expression object with HGNC/MGI symbols in rows and
27 | #' samples in columns. In order to run PROGENy in single-cell
28 | #' RNAseq data, it also accepts Seurat and SingleCellExperiment
29 | #' object, taking the normalized counts for the computation.
30 | #' @param scale A logical value indicating whether to scale the scores of each
31 | #' pathway to have a mean of zero and a standard deviation of one.
32 | #' It does not apply if we use permutations.
33 | #' @param organism The model organism - "Human" or "Mouse"
34 |
35 | #' @param top The top n genes for generating the model matrix according to
36 | #' significance (p-value)
37 | #' @param perm An interger detailing the number of permutations. No
38 | #' permutations by default (1). When Permutations larger than 1,
39 | #' we compute progeny pathway scores and assesses their
40 | #' significance using a gene sampling-based permutation strategy,
41 | #' for a series of experimental samples/contrasts.
42 | #' @param verbose A logical value indicating whether to display a message
43 | #' about the number of genes used per pathway to compute
44 | #' progeny scores (i.e. number of genes present in the
45 | #' progeny model and in the expression dataset)
46 | #' @param z_scores Only applies if the number of permutations is greater than 1.
47 | #' A logical value. TRUE: the z-scores will be returned for
48 | #' the pathway activity estimations. FALSE: the function returns
49 | #' a normalized z-score value between -1 and 1.
50 | #' @param get_nulldist Only applies if the number of permutations is greater
51 | #' than 1. A logical value. TRUE: the null distributions
52 | #' generated to assess the signifance of the pathways scores
53 | #' is also returned.
54 | #' @param assay_name Only applies if the input is a Seurat object. It selects the
55 | #' name of the assay on which Progeny will be run. Default to:
56 | #' RNA, i.e. normalized expression values.
57 | #' @param return_assay Only applies if the input is a Seurat object. A logical
58 | #' value indicating whether to return progeny results as a new
59 | #' assay called Progeny in the Seurat object used as input.
60 | #' Default to FALSE.
61 | #' @param ... Additional arguments to be passed to the functions.
62 | #'
63 | #' @return A matrix with samples in rows and pathways in columns. In case
64 | #' we run the method with permutations and the option get_nulldist
65 | #' to TRUE, we will get a list with two elements. The first
66 | #' element is the matrix with the pathway activity as before.
67 | #' The second elements is the null distributions that we generate
68 | #' to assess the signifance of the pathways scores.
69 | #' @export
70 | #' @seealso \code{\link{progenyPerm}}
71 | #' @examples
72 | #' # use example gene expression matrix here, this is just for illustration
73 | #' gene_expression <- as.matrix(read.csv(system.file("extdata",
74 | #' "human_input.csv", package = "progeny"), row.names = 1))
75 | #'
76 | #' # calculate pathway activities
77 | #' pathways <- progeny(gene_expression, scale=TRUE,
78 | #' organism="Human", top = 100, perm = 1)
79 | progeny = function(expr, scale=TRUE, organism="Human", top = 100, perm = 1,
80 | verbose = FALSE, z_scores = FALSE, get_nulldist = FALSE, assay_name = "RNA",
81 | return_assay = FALSE, ...) {
82 | UseMethod("progeny")
83 | }
84 |
85 | #' @export
86 | progeny.ExpressionSet = function(expr, scale=TRUE, organism="Human", top = 100,
87 | perm = 1, verbose = FALSE, z_scores = FALSE, get_nulldist = FALSE, ...) {
88 |
89 | progeny(Biobase::exprs(expr), scale=scale, organism=organism, top=top,
90 | perm = perm, verbose = verbose, z_scores = z_scores,
91 | get_nulldist = get_nulldist)
92 | }
93 |
94 | #' @export
95 | progeny.Seurat = function(expr, scale=TRUE, organism="Human", top = 100,
96 | perm = 1, verbose = FALSE, z_scores = FALSE, get_nulldist = FALSE,
97 | assay_name = "RNA", return_assay = FALSE,...) {
98 |
99 | requireNamespace("Seurat")
100 |
101 | if (!is.logical(return_assay)){
102 | stop("return_assay should be a logical value")
103 | }
104 |
105 | if (scale & return_assay){
106 | warning("Scale and return_assay should not be both true.
107 | Please use the function Seurat::ScaleData(object, assay = \"progeny\")
108 | to scale PROGENy scores. Scale is set to FALSE")
109 | scale = FALSE
110 | }
111 |
112 | results <- progeny(as.matrix(Seurat::GetAssayData(expr, slot = "data",
113 | assay = assay_name)), scale=scale, organism=organism, top=top,
114 | perm = perm, verbose = verbose, z_scores = z_scores,
115 | get_nulldist = get_nulldist, assay_name = assay_name,
116 | return_assay = return_assay)
117 |
118 | if (return_assay){
119 | expr[['progeny']] = Seurat::CreateAssayObject(data = t(results))
120 | Seurat::Key(object = expr[['progeny']]) <- 'progeny_'
121 | return(expr)
122 | } else {
123 | return(results)
124 | }
125 |
126 | }
127 |
128 | #' @export
129 | progeny.SingleCellExperiment = function(expr, scale=FALSE, organism="Human",
130 | top = 100, perm = 1, verbose = FALSE, z_scores = FALSE,
131 | get_nulldist = FALSE, ...) {
132 |
133 | requireNamespace("SingleCellExperiment")
134 |
135 | progeny(as.matrix(SingleCellExperiment::normcounts(expr)), scale=scale,
136 | organism=organism, top=top, perm = perm, verbose = verbose,
137 | z_scores = z_scores, get_nulldist = get_nulldist)
138 | }
139 |
140 | #' @export
141 | progeny.matrix = function(expr, scale=TRUE, organism="Human", top = 100,
142 | perm = 1, verbose = FALSE, z_scores = FALSE, get_nulldist = FALSE,...) {
143 |
144 | if (!is.logical(scale)){
145 | stop("scale should be a logical value")
146 | }
147 |
148 | if (!(is.numeric(perm)) || perm < 1){
149 | stop("perm should be an integer value")
150 | }
151 |
152 | if (!is.logical(verbose)){
153 | stop("verbose should be a logical value")
154 | }
155 |
156 | if (!is.logical(z_scores)){
157 | stop("z_scores should be a logical value")
158 | }
159 |
160 | if (!is.logical(get_nulldist)){
161 | stop("get_nulldist should be a logical value")
162 | }
163 |
164 | if (perm == 1 && (z_scores || get_nulldist)){
165 | if (verbose){
166 | message("z_scores and get_nulldist are only applicable when the
167 | number of permutations is larger than 1.")
168 | }
169 | }
170 |
171 | model <- getModel(organism, top=top)
172 | common_genes <- intersect(rownames(expr), rownames(model))
173 |
174 | if (verbose){
175 | number_genes <- apply(model, 2, function (x) {
176 | sum(rownames(model)[which (x != 0)] %in% unique(rownames(expr)))
177 | })
178 | message("Number of genes used per pathway to compute progeny scores:")
179 | message(paste(names(number_genes),": ", number_genes, " (",
180 | (number_genes/top)*100,"%)",sep = "","\n"))
181 | }
182 |
183 | if (perm==1) {
184 | result <- t(expr[common_genes,,drop=FALSE]) %*%
185 | as.matrix(model[common_genes,,drop=FALSE])
186 |
187 | if (scale && nrow(result) > 1) {
188 | rn <- rownames(result)
189 | result <- apply(result, 2, scale)
190 | rownames(result) <- rn
191 | }
192 |
193 | } else if (perm > 1) {
194 | expr <- data.frame(names = row.names(expr), row.names = NULL, expr)
195 | model <- data.frame(names = row.names(model), row.names = NULL, model)
196 | result <- progenyPerm(expr, model, k = perm, z_scores = z_scores,
197 | get_nulldist = get_nulldist)
198 | }
199 |
200 | return(result)
201 | }
202 |
203 | #' @export
204 | progeny.default = function(expr, scale=TRUE, organism="Human", top = 100,
205 | perm = 1, verbose = FALSE, z_scores = FALSE, get_nulldist = FALSE, ...) {
206 | stop("Do not know how to access the data matrix from class ", class(expr))
207 | }
208 |
--------------------------------------------------------------------------------
/R/progenyPermutations.r:
--------------------------------------------------------------------------------
1 | #'Compute progeny pathway scores and assesses significance based on permutations
2 | #'
3 | #'@param df A data.frame of n*m+1 dimension, where n is the number of omic
4 | #'features to be considered and m is the number of samples/contrasts.
5 | #'The first column should be the identifiers of the omic features.
6 | #'These identifiers must be coherent with the identifiers of the weight matrix.
7 | #'@param weight_matrix A progeny coefficient matrix. the first column should be
8 | #'the identifiers of the omic features and should be coherent with
9 | #'the identifiers provided in df.
10 | #'@param k The number of permutations to be performed to generate
11 | #'the null-distribution used to estimate the significance of progeny scores.
12 | #'The default value is 10000.
13 | #'@param z_scores if true, the z-scores will be returned for
14 | #'the pathway activity estimations. Else, the function returns
15 | #'a normalized z-score value between -1 and 1.
16 | #'@param get_nulldist if true, the null score distribution used for
17 | #'normalization will be returned along with the actual normalized score data
18 | #'frame.
19 | #'@importFrom stats complete.cases sd ecdf
20 | #'@export
21 | #'@return This function returns a list of two elements. The first element is
22 | #'a data frame of p*m+1 dimensions, where p is the number of progeny pathways,
23 | #'and m is the number of samples/contrasts. Each cell represents the
24 | #'significance of a progeny pathway score for one sample/contrast. The
25 | #'significance ranges between -1 and 1. The significance is equal to x*2-1, x
26 | #'being the quantile of the progeny pathway score with respect to the null
27 | #'distribution. Thus, this significance can be interpreted as the equivalent of
28 | #'1-p.value two-sided test over an empirical distribution) with the sign
29 | #'indicating the direction of the regulation. The second element is the null
30 | #'distribution list (a null distribution is generated for each sample/contrast).
31 | #'@examples
32 | #' # use example gene expression matrix
33 | #' gene_expression <- as.matrix(read.csv(system.file("extdata",
34 | #' "human_input.csv", package = "progeny"), row.names = 1))
35 | #'
36 | #' # calculate pathway activities
37 | #' progeny(gene_expression, scale=TRUE, organism="Human", top=100, perm=10000)
38 | #'@export
39 | progenyPerm <-
40 | function(df,weight_matrix,k = 10000, z_scores = TRUE, get_nulldist = FALSE)
41 | {
42 | resList <- list()
43 | if(get_nulldist) {
44 | nullDist_list <- list()
45 | }
46 |
47 | for(i in 2:length(df[1,])) {
48 | current_df <- df[,c(1,i)]
49 | current_df <- current_df[complete.cases(current_df),]
50 | t_values <- current_df[,2]
51 | current_weights <- weight_matrix
52 | names(current_df)[1] <- "ID"
53 | names(current_weights)[1] <- "ID"
54 |
55 | common_ids <- merge(current_df, current_weights, by = "ID")
56 | common_ids <- as.character(common_ids$ID)
57 |
58 | row.names(current_df) <- current_df$ID
59 | current_df <- as.data.frame(current_df[common_ids,-1])
60 | row.names(current_weights) <- current_weights$ID
61 | current_weights <- as.data.frame(current_weights[common_ids,-1])
62 | current_mat <- as.matrix(current_df)
63 | current_weights <- t(current_weights)
64 |
65 | scores <- as.data.frame(current_weights %*% current_mat)
66 | null_dist_t <- replicate(k, sample(t_values,length(current_mat[,1]),
67 | replace = FALSE))
68 | null_dist_scores <- current_weights %*% null_dist_t
69 |
70 | if(get_nulldist) {
71 | nullDist_list[[i-1]] <- null_dist_scores
72 | }
73 |
74 | if(z_scores) {
75 | scores$mean <- apply(null_dist_scores,1,mean)
76 | scores$sd <- apply(null_dist_scores,1,sd)
77 | resListCurrent <- (scores[,1]-scores[,2])/scores[,3]
78 | names(resListCurrent) <- names(weight_matrix[,-1])
79 | resList[[i-1]] <- resListCurrent
80 | } else {
81 | for(j in seq(1, length(weight_matrix[,-1]))) {
82 | ecdf_function <- ecdf(null_dist_scores[j,])
83 | scores[j,1] <- ecdf_function(scores[j,1])
84 | }
85 | score_probas <- scores*2-1
86 | resListCurrent <- score_probas[,1]
87 | names(resListCurrent) <- names(weight_matrix[,-1])
88 | resList[[i-1]] <- resListCurrent
89 | }
90 | }
91 | names(resList) <- colnames(df)[-1]
92 | resDf <- as.data.frame(resList)
93 | if(get_nulldist) {
94 | names(nullDist_list) <- names(df[,-1])
95 | return(list(resDf, nullDist_list))
96 | } else {
97 | return(t(resDf))
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/R/progenySuppFunc.r:
--------------------------------------------------------------------------------
1 | #' Calculate Progeny Scores with Permutations
2 | #'
3 | #'This function generate a series of scatter plot with marginal distribution
4 | #'(in the form of an arrangeGrob object), for each progeny pathway and
5 | #'sample/contrast. Each scatter plot has progeny weights as x-axis and the gene
6 | #'level stat used to compute progeny score as the y-axis. The marginal
7 | #'distribution of the gene level stats is displayed on the right of the plot
8 | #'to give visual support of the significance of each gene contributing to
9 | #'the progeny pathway score. The green and red colors represent the positive
10 | #'and negative contribution of genes to the progeny pathway, respectively.
11 | #'For each gene contribution, 4 cases are possible, as the combinations of
12 | #'the sign of the gene level stat and the sign of the gene level weight.
13 | #'Positive weight will lead to a positive(green)/negative(red) gene contribution
14 | #'if the gene level stat is positive/negative. Negative weight will lead to
15 | #'a negative(red)/positive(green) gene contribution if the gene level stat
16 | #'is positive/negative.
17 | #'
18 | #'@param df an n*m data frame, where n is the number of omic features (genes).
19 | #'m isn't really important, as long as at least one column corresponds to a
20 | #'sample or contrast statistic. One of the columns should correspond to the gene
21 | #'symbols.
22 | #'@param weight_matrix A progeny coefficient matrix. the first column should be
23 | #'the identifiers of the omic features, and should be coherent with
24 | #'the identifiers provided in df.
25 | #'@param dfID an integer corresponding to the column number of
26 | #'the gene identifiers of df.
27 | #'@param weightID an integer corresponding to the column number of the gene
28 | #'identifiers of the weight matrix.
29 | #'@param statName The name of the stat used, to be displayed on the plot
30 | #'@param verbose Logical indicating whether we want to have the messages
31 | #'indicating the different computed weights.
32 | #'@importFrom stats ecdf
33 | #'@import ggplot2
34 | #'@import ggrepel
35 | #'@import gridExtra
36 | #'@importFrom reshape2 melt
37 | #'@return The function returns a list of list of arrangeGrob objects.
38 | #'The first level list elements correspond to samples/contrasts.
39 | #'The second level correspond to pathways.
40 | #'The plots can be saved in a pdf format using the saveProgenyPlots function.
41 | #'@examples
42 | #' # use example gene expression matrix
43 | #'
44 | #' gene_expression <- read.csv(system.file("extdata",
45 | #' "human_input.csv", package = "progeny"))
46 | #'
47 | #' # getting a model matrix with 100 top significant genes and converting to df
48 | #' weight_matrix <- getModel("Human", top=100)
49 | #' weight_matrix <- data.frame(names = row.names(weight_matrix),
50 | #' row.names = NULL, weight_matrix)
51 | #'
52 | #' #use progenyScatter function
53 | #' plots <- progenyScatter(gene_expression, weight_matrix)
54 | #'@export
55 | progenyScatter <- function(df,weight_matrix,dfID = 1, weightID = 1,
56 | statName = "gene stats", verbose = FALSE) {
57 |
58 | weight <- color <- ID <- NULL
59 | plot_list_contrasts <- list(0)
60 | for (i in 2:length(df[1,])) {
61 | plot_list_pathways <- list(0)
62 | for (j in 2:length(weight_matrix[1,])) {
63 | sub_df <- df[,c(dfID,i)]
64 | pathway_weights <- weight_matrix[,c(weightID,j)]
65 | names(sub_df) <- c("ID","stat")
66 | minstat <- min(sub_df$stat)
67 | maxstat <- max(sub_df$stat)
68 |
69 | histo <- ggplot(sub_df, aes(x = stat, fill = "blue")) +
70 | geom_density() + coord_flip() +
71 | scale_fill_manual(values = c("#00c5ff")) +
72 | xlim(minstat, maxstat) + theme_minimal() +
73 | theme(legend.position = "none", axis.text.x = element_blank(),
74 | axis.ticks.x = element_blank(), axis.title.y = element_blank(),
75 | axis.text.y = element_blank(), axis.ticks.y = element_blank(),
76 | panel.grid.major = element_blank(),
77 | panel.grid.minor = element_blank())
78 |
79 | names(pathway_weights) <- c("ID","weight")
80 | pathway_weights <- pathway_weights[pathway_weights$weight != 0,]
81 | percentile <- ecdf(sub_df$stat)
82 | sub_df <- merge(sub_df,pathway_weights,by = "ID")
83 | sub_df$color <- "3"
84 | sub_df[(sub_df$weight > 0 & sub_df$stat > 0),"color"] <- "1"
85 | sub_df[(sub_df$weight > 0 & sub_df$stat < 0),"color"] <- "2"
86 | sub_df[(sub_df$weight < 0 & sub_df$stat > 0),"color"] <- "2"
87 | sub_df[(sub_df$weight < 0 & sub_df$stat < 0),"color"] <- "1"
88 | sub_df[(percentile(sub_df$stat) < .95 &
89 | percentile(sub_df$stat) > .05),1] <- NA
90 |
91 | if (verbose){
92 | message(paste("weights of ",names(weight_matrix)[j], sep = ""))
93 | }
94 |
95 | title <- paste("weights of ",names(weight_matrix)[j], sep = "")
96 |
97 | scatterplot <- ggplot(sub_df, aes(x = weight, y = stat,
98 | color = color)) + geom_point() +
99 | scale_colour_manual(values = c("red","royalblue3","grey")) +
100 | geom_label_repel(aes(label = ID)) +
101 | ylim(minstat, maxstat) + theme_minimal() +
102 | theme(legend.position = "none") +
103 | geom_vline(xintercept = 0, linetype = 'dotted') +
104 | geom_hline(yintercept = 0, linetype = 'dotted') +
105 | labs(x = title, y = statName)
106 |
107 | lay <- t(as.matrix(c(1,1,1,1,2)))
108 | gg <- arrangeGrob(scatterplot, histo, nrow = 1, ncol = 2,
109 | layout_matrix = lay)
110 | plot_list_pathways[[j-1]] <- gg
111 | }
112 | names(plot_list_pathways) <- names(weight_matrix[,-weightID])
113 | plot_list_contrasts[[i-1]] <- plot_list_pathways
114 | }
115 | return(plot_list_contrasts)
116 | }
117 |
118 | #'Function to save Progeny plots
119 | #'
120 | #'This function is designed to save the plots (in pdf format) of a nested
121 | #'(2 level) list of arrangeGrob objects, such as the one returned by
122 | #'the progenyScatter function.
123 | #'
124 | #'@param plots a list of list of arrangeGrob object (such as the one returned
125 | #'by the progenyScatter function.).The first level list elements correspond
126 | #'to samples/contrasts. The second level corresponds to pathways.
127 | #'The plots can be saved in a pdf format using the saveProgenyPlots function.
128 | #'@param contrast_names a vector of the same length as the first level of
129 | #'the plot list corresponding to the names of each sample/contrast
130 | #'@param dirpath the path to the directory where the plots should be saved
131 | #'@import ggplot2
132 | #'@examples
133 | #' #create plots using progneyScatter function
134 | #' gene_expression <- read.csv(system.file("extdata",
135 | #' "human_input.csv", package = "progeny"))
136 | #'
137 | #' # getting a weight_matrix
138 | #' weight_matrix <- getModel("Human", top=100)
139 | #' weight_matrix <- data.frame(names = row.names(weight_matrix),
140 | #' row.names = NULL, weight_matrix)
141 | #' plots <- progenyScatter(gene_expression, weight_matrix)
142 | #'
143 | #' #create a list with contrast names
144 | #' contrast_names <- names(gene_expression[2:ncol(gene_expression)])
145 | #'
146 | #' #assign a path to store your plots
147 | #' dirpath <- "./progeny_plots/"
148 | #'
149 | #' # save it
150 | #' # saveProgenyPlots(plots, contrast_names, dirpath)
151 | #' @return This function produces the pdf files of plots taken from the
152 | #' progenyScatter function
153 | #'@export
154 | saveProgenyPlots <- function(plots, contrast_names, dirpath) {
155 |
156 | i <- 1
157 | for (condition in plots) {
158 | dirname <- paste(dirpath,contrast_names[i], sep = "")
159 | dir.create(dirname, recursive = TRUE, showWarnings = FALSE)
160 | j <- 1
161 | for (pathway in condition) {
162 | filename <- paste(dirname,names(condition)[j],sep = "/")
163 | filename <- paste(filename,".pdf",sep = "")
164 | ggsave(filename, pathway,device = "pdf", dpi = 300)
165 | j <- j+1
166 | }
167 | i <- i+1
168 | }
169 | }
170 |
171 | #'Returns the Progeny Model
172 | #'
173 | #'This function is designed for getting a model matrix with top significant
174 | #'genes for each pathway
175 | #'
176 | #'@param organism "Human" or "Mouse" taken from the main function's argument.
177 | #'Default to "Human"
178 | #'@param top Desired top number of genes for each pathway according to their
179 | #'significance(p.value). Default to 100
180 | #'@param decoupleR if TRUE, the model matrix is goign to be generated with a format
181 | #'makes it directlz compatible with the decoupleR package
182 | #'@examples #getting a model matrix according to the desired top n significant
183 | #'model <- getModel("Human", top=100)
184 | #'@return This function returns model matrix according to the top n significant
185 | #'@importFrom dplyr group_by top_n ungroup select
186 | #'@importFrom tidyr spread %>%
187 | #'@export
188 | getModel <- function(organism = "Human", top= 100, decoupleR = F) {
189 |
190 | pathway <- p.value <- weight <- NULL
191 |
192 | if (organism == "Human") {
193 | full_model <- progeny::model_human_full
194 | } else if (organism == "Mouse") {
195 | full_model <- progeny::model_mouse_full
196 | } else {
197 | stop("Wrong organism name. Please specify 'Human' or 'Mouse'.")
198 | }
199 |
200 | if (!(is.numeric(top)) || top < 1){
201 | stop("perm should be an integer value")
202 | }
203 |
204 | model <- full_model %>%
205 | dplyr::group_by(pathway) %>%
206 | dplyr::top_n(top, wt = -p.value) %>%
207 | dplyr::ungroup(pathway) %>%
208 | dplyr::select(-p.value) %>%
209 | tidyr::spread(pathway, weight, fill=0) %>%
210 | data.frame(row.names = 1, check.names = FALSE, stringsAsFactors = FALSE)
211 |
212 | if(decoupleR)
213 | {
214 | model$gene <- row.names(model)
215 | model <- melt(model)
216 | model <- model[model$value != 0,]
217 | model$mor <- sign(model$value)
218 | model$value <- abs(model$value)
219 | names(model) <- gsub("value","likelihood",names(model))
220 | }
221 |
222 | return(model)
223 | }
224 |
225 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PROGENy: Pathway RespOnsive GENes for activity inference
2 |
3 |
4 | 
5 |
6 |
7 |
8 | ## Overview
9 |
10 | PROGENy is resource that leverages a large compendium of publicly available
11 | signaling perturbation experiments to yield a common core of pathway responsive
12 | genes for human and mouse. These, coupled with any statistical method, can be
13 | used to infer pathway activities from bulk or single-cell transcriptomics.
14 |
15 | This is an R package for storing the pathway signatures. To infer pathway
16 | activities, please check out
17 | [decoupleR](https://doi.org/10.1093/bioadv/vbac016), available in
18 | [R](https://saezlab.github.io/decoupleR/) or
19 | [python](https://github.com/saezlab/decoupler-py).
20 |
21 | ## Installation
22 |
23 | Progeny is available in
24 | [Bioconductor](https://www.bioconductor.org/packages/release/bioc/html/progeny.html).
25 | In addition, one can install the development version from the Github repository:
26 |
27 | ```r
28 | ## To install the package from Bioconductor
29 | if (!requireNamespace("BiocManager", quietly = TRUE))
30 | install.packages("BiocManager")
31 |
32 | BiocManager::install("progeny")
33 |
34 | ## To install the development version from the Github repo:
35 | devtools::install_github("saezlab/progeny")
36 | ```
37 |
38 | ## Updates
39 |
40 | Since the original release, we have implemented some extensions in PROGENy:
41 |
42 | 1. **Extension to mouse**:
43 | Originally PROGENy was developed for the application to human data.
44 | In a benchmark study we showed that PROGENy is also applicable to mouse data,
45 | as described in
46 | [Holland et al., 2019](https://doi.org/10.1016/j.bbagrm.2019.194431).
47 | Accordingly, we included new parameters to run mouse version of PROGENy by
48 | transforming the human genes to their mouse orthologs.
49 | 2. **Expanding Pathway Collection**:
50 | We expanded human and mouse PROGENy with the pathways Androgen, Estrogen and
51 | WNT.
52 | 3. **Extension to single-cell RNA-seq data**:
53 | We showed that PROGENy can be applied to scRNA-seq data, as described in
54 | [Holland et al., 2020](https://doi.org/10.1186/s13059-020-1949-z)
55 |
56 | ## Citation
57 |
58 | > Schubert M, Klinger B, Klünemann M, Sieber A, Uhlitz F, Sauer S, Garnett MJ,
59 | Blüthgen N, Saez-Rodriguez J. 2018. Perturbation-response genes reveal signaling
60 | footprints in cancer gene expression. _Nature Communications_:
61 | [10.1038/s41467-017-02391-6](https://doi.org/10.1038/s41467-017-02391-6)
62 |
--------------------------------------------------------------------------------
/data/model_human_full.rda:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saezlab/progeny/cad6be0514c3248b9465e48f1cfd2f6a4c3dfb6f/data/model_human_full.rda
--------------------------------------------------------------------------------
/data/model_mouse_full.rda:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saezlab/progeny/cad6be0514c3248b9465e48f1cfd2f6a4c3dfb6f/data/model_mouse_full.rda
--------------------------------------------------------------------------------
/data/vignette_data.RData:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saezlab/progeny/cad6be0514c3248b9465e48f1cfd2f6a4c3dfb6f/data/vignette_data.RData
--------------------------------------------------------------------------------
/docs/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
M Schubert, B Klinger, M Klünemann, A Sieber, F Uhlitz, S Sauer, MJ Garnett, N Blüthgen, and J Saez-Rodriguez. 2018. “Perturbation-Response Genes Reveal Signaling Footprints in Cancer Gene Expression.” Nature Communications 9 (1)
97 |
@Article{,
98 | author = {Michael Schubert and Bertram Klinger and Martina Klünemann and Anja Sieber and Florian Uhlitz and Sascha Sauer and Mathew J Garnett and Nils Blüthgen and Julio Saez-Rodriguez},
99 | title = {Perturbation-response genes reveal signaling footprints in cancer gene expression},
100 | journal = {Nature communications},
101 | year = {2018},
102 | volume = {9},
103 | number = {20},
104 | }
PROGENy: Pathway RespOnsive GENes for activity inference
87 |
88 |
89 |
90 |
91 |
Overview
92 |
93 |
PROGENy is resource that leverages a large compendium of publicly available signaling perturbation experiments to yield a common core of pathway responsive genes for human and mouse. These, coupled with any statistical method, can be used to infer pathway activities from bulk or single-cell transcriptomics.
94 |
This is an R package for storing the pathway signatures. To infer pathway activities, please check out decoupleR, available in R or python.
95 |
96 |
97 |
Installation
98 |
99 |
Progeny is available in Bioconductor. In addition, one can install the development version from the Github repository:
100 |
101 | ## To install the package from Bioconductor
102 | if(!requireNamespace("BiocManager", quietly =TRUE))
103 | install.packages("BiocManager")
104 |
105 | BiocManager::install("progeny")
106 |
107 | ## To install the development version from the Github repo:
108 | devtools::install_github("saezlab/progeny")
109 |
110 |
111 |
Updates
112 |
113 |
Since the original release, we have implemented some extensions in PROGENy:
114 |
115 |
116 | Extension to mouse: Originally PROGENy was developed for the application to human data. In a benchmark study we showed that PROGENy is also applicable to mouse data, as described in Holland et al., 2019. Accordingly, we included new parameters to run mouse version of PROGENy by transforming the human genes to their mouse orthologs.
117 |
118 | Expanding Pathway Collection: We expanded human and mouse PROGENy with the pathways Androgen, Estrogen and WNT.
119 |
120 | Extension to single-cell RNA-seq data: We showed that PROGENy can be applied to scRNA-seq data, as described in Holland et al., 2020
121 |
122 |
123 |
124 |
125 |
Citation
126 |
127 |
128 |
Schubert M, Klinger B, Klünemann M, Sieber A, Uhlitz F, Sauer S, Garnett MJ, Blüthgen N, Saez-Rodriguez J. 2018. Perturbation-response genes reveal signaling footprints in cancer gene expression. Nature Communications: 10.1038/s41467-017-02391-6
A data.frame of n*m+1 dimension, where n is the number of omic
88 | features to be considered and m is the number of samples/contrasts.
89 | The first column should be the identifiers of the omic features.
90 | These identifiers must be coherent with the identifiers of the weight matrix.
91 |
92 |
93 |
weight_matrix
94 |
A progeny coefficient matrix. the first column should be
95 | the identifiers of the omic features and should be coherent with
96 | the identifiers provided in df.
97 |
98 |
99 |
k
100 |
The number of permutations to be performed to generate
101 | the null-distribution used to estimate the significance of progeny scores.
102 | The default value is 10000.
103 |
104 |
105 |
z_scores
106 |
if true, the z-scores will be returned for
107 | the pathway activity estimations. Else, the function returns
108 | a normalized z-score value between -1 and 1.
109 |
110 |
111 |
get_nulldist
112 |
if true, the null score distribution used for
113 | normalization will be returned along with the actual normalized score data
114 | frame.
115 |
116 |
117 |
118 |
Value
119 |
120 |
121 |
This function returns a list of two elements. The first element is
122 | a data frame of p*m+1 dimensions, where p is the number of progeny pathways,
123 | and m is the number of samples/contrasts. Each cell represents the
124 | significance of a progeny pathway score for one sample/contrast. The
125 | significance ranges between -1 and 1. The significance is equal to x*2-1, x
126 | being the quantile of the progeny pathway score with respect to the null
127 | distribution. Thus, this significance can be interpreted as the equivalent of
128 | 1-p.value two-sided test over an empirical distribution) with the sign
129 | indicating the direction of the regulation. The second element is the null
130 | distribution list (a null distribution is generated for each sample/contrast).
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/docs/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://saezlab.github.io/progeny/404.html
5 |
6 |
7 | https://saezlab.github.io/progeny/LICENSE-text.html
8 |
9 |
10 | https://saezlab.github.io/progeny/articles/ProgenySingleCell.html
11 |
12 |
13 | https://saezlab.github.io/progeny/articles/index.html
14 |
15 |
16 | https://saezlab.github.io/progeny/articles/progeny.html
17 |
18 |
19 | https://saezlab.github.io/progeny/articles/progenyBulk.html
20 |
21 |
22 | https://saezlab.github.io/progeny/authors.html
23 |
24 |
25 | https://saezlab.github.io/progeny/index.html
26 |
27 |
28 | https://saezlab.github.io/progeny/news/index.html
29 |
30 |
31 | https://saezlab.github.io/progeny/reference/getModel.html
32 |
33 |
34 | https://saezlab.github.io/progeny/reference/index.html
35 |
36 |
37 | https://saezlab.github.io/progeny/reference/model_human_full.html
38 |
39 |
40 | https://saezlab.github.io/progeny/reference/model_mouse_full.html
41 |
42 |
43 | https://saezlab.github.io/progeny/reference/progeny.html
44 |
45 |
46 | https://saezlab.github.io/progeny/reference/progenyPerm.html
47 |
48 |
49 | https://saezlab.github.io/progeny/reference/progenyScatter.html
50 |
51 |
52 | https://saezlab.github.io/progeny/reference/saveProgenyPlots.html
53 |
54 |
55 | https://saezlab.github.io/progeny/reference/vignette_data.html
56 |
57 |
58 |
--------------------------------------------------------------------------------
/inst/CITATION:
--------------------------------------------------------------------------------
1 | citEntry(entry="article",
2 | author = c(person("Michael", "Schubert"),
3 | person("Bertram", "Klinger"),
4 | person("Martina", "Klünemann"),
5 | person("Anja", "Sieber"),
6 | person("Florian", "Uhlitz"),
7 | person("Sascha", "Sauer"),
8 | person(c("Mathew", "J"), "Garnett"),
9 | person("Nils", "Blüthgen"),
10 | person("Julio", "Saez-Rodriguez")),
11 | title = "Perturbation-response genes reveal signaling footprints in cancer gene expression",
12 | journal = "Nature communications",
13 | year = 2018,
14 | volume = 9,
15 | number = 20,
16 |
17 | textVersion = "M Schubert, B Klinger, M Klünemann, A Sieber, F Uhlitz, S Sauer, MJ Garnett, N Blüthgen, and J Saez-Rodriguez. 2018. “Perturbation-Response Genes Reveal Signaling Footprints in Cancer Gene Expression.” Nature Communications 9 (1)"
18 | )
19 |
--------------------------------------------------------------------------------
/inst/extdata/human_def_expected.csv:
--------------------------------------------------------------------------------
1 | "","Androgen","EGFR","Estrogen","Hypoxia","JAK-STAT","MAPK","NFkB","p53","PI3K","TGFb","TNFa","Trail","VEGF","WNT"
2 | "SRR1039508",-1.21118698407309,-0.356514098441603,0.949241252147211,0.497153246717079,1.7099979800067,-0.522981382729966,-0.782787339472581,1.19599080401037,0.360835427598166,-1.53250846888485,-1.23685971402327,-1.10373673393343,-0.147419226371865,1.1237369237932
3 | "SRR1039509",0.519312796955825,-1.10028684449322,-1.07504172533585,-0.0351343017350992,-1.37369840630794,-1.16944698284194,-0.183413317039622,-0.334843063421951,-0.0162998317360919,-0.112179195473259,0.0283052722531447,-0.0290976051945691,-0.0601013091076227,0.466984787516938
4 | "SRR1039512",-0.756244327279028,-0.25124733250103,0.790503638577274,-0.759259261341828,0.782428675552775,-0.510242161575591,0.6421444236316,0.828304076995112,-0.031776763690239,-0.508779270652543,0.731570689504356,-0.29953591508547,-0.125109125747264,0.78946022670871
5 | "SRR1039513",0.928178255094422,-0.440393709473928,-1.0702726146354,-0.909129595496389,0.548206020752735,-0.370629574707583,0.492449607526483,-1.36456671360718,-1.66399257915561,0.535605805257372,1.25953339886837,1.1826038257963,0.0980966992846447,-0.570031495954871
6 | "SRR1039516",-0.765379503422578,0.00475239910191869,1.17082030928919,-0.631584647159868,-0.0228268743369299,-0.611674276802535,1.00243705019278,0.967130215525293,0.493204525861388,-0.525108744294347,0.307705347826529,-0.889026745793592,1.57717561230069,-1.05158488129008
7 | "SRR1039517",0.796421932715624,2.30162367104798,-0.678495481087118,2.17537321318702,-0.710191249057805,1.94149590793296,1.28481674780612,-0.497739405678384,1.60326472093168,1.7291908565902,0.865917636902839,-1.02238266419755,1.15643267275409,-1.30715226341503
8 | "SRR1039520",-0.871417503859068,0.139240450317891,0.77451817778724,-0.452028515906629,-0.0576032379333164,0.472575319581276,-1.34617016683564,0.442753011120074,0.337401474721545,-0.402067364347893,-1.52120471252601,0.833940793459851,-1.28013157140018,1.17039761169705
9 | "SRR1039521",1.36031533386791,-0.297174535557989,-0.861273556742551,0.114609861735742,-0.876312908676203,0.770903151143387,-1.10947700580915,-1.23702892494333,-1.08263697453085,0.815846381805332,-0.434967918805945,1.32723504494845,-1.2189437517125,-0.621810909055954
10 |
--------------------------------------------------------------------------------
/inst/extdata/human_perm_expected.csv:
--------------------------------------------------------------------------------
1 | "","Androgen","EGFR","Estrogen","Hypoxia","JAK.STAT","MAPK","NFkB","p53","PI3K","TGFb","TNFa","Trail","VEGF","WNT"
2 | "SRR1039508",-1.24808344598128,-0.295822382748448,0.869668066126928,0.98815304806096,1.3381684126895,-0.348114330743996,-0.816789918483169,1.27440594272093,0.327255070036872,-1.65587825636028,-1.11473731290233,-1.19616580035614,-0.211619073759714,1.14911593380223
3 | "SRR1039509",0.805810938485268,-1.01886081988871,-0.834193449735798,0.632474036947362,-0.972795880925267,-1.08068845511411,0.0558331164406852,0.0499930523433128,-0.463263661681119,-0.0329793745246265,0.341539869564068,0.985591607696703,-0.180160999460263,0.691100166119218
4 | "SRR1039512",-0.720406304525161,-0.402612721160757,0.634936223978795,-0.343465309766739,0.937817751632202,-0.756646087586224,0.774203731819613,0.584825281212151,-0.246558013134671,-0.68423163444856,0.919352555517884,-0.632289397937267,0.0253967863756778,0.691808891125063
5 | "SRR1039513",0.871882660397203,-0.381951495842146,-1.1110706436189,-0.976851213963722,0.521092052616904,-0.317279009982538,0.531756111435138,-0.880596733710775,-1.47890617019856,0.641305663947186,1.09100890746233,1.27815615051231,0.128295991617903,-0.508113546063443
6 | "SRR1039516",-0.825246669877692,-0.0323542955965098,1.22989154603966,-1.07073194610266,0.290502273065317,-0.773846676012308,1.13384184245546,1.04711514193796,0.475859766343534,-0.514215158998789,0.660940842461238,-1.11142412483123,1.58622269732622,-0.70151401147287
7 | "SRR1039517",0.765533230275912,2.29710858827194,-0.783046307843774,1.39972810697425,-1.38261291598764,1.82527184695599,0.905817399250987,-1.05228917717182,1.8960550967159,1.49551988582308,0.41847191096725,-0.490230230193282,1.11335204133859,-1.71155925308539
8 | "SRR1039520",-0.870041848075551,0.288040893183438,0.941460852869285,-1.10446482080105,0.285023464770211,0.561100712391847,-1.31721958155573,0.362466530798284,0.233958664838621,-0.170162913080628,-1.55197364975659,0.131221634643063,-1.47624228902966,0.890229444435814
9 | "SRR1039521",1.2205514393013,-0.4535477662188,-0.947646287816197,0.475158098651597,-1.01719515786123,0.890202000091339,-1.26744270136299,-1.38592003813004,-0.744400752920575,0.920641787642617,-0.764603123313847,1.03514016046584,-0.985245154408754,-0.501067624860624
10 |
--------------------------------------------------------------------------------
/inst/extdata/mouse_def_expected.csv:
--------------------------------------------------------------------------------
1 | "","Androgen","EGFR","Estrogen","Hypoxia","JAK-STAT","MAPK","NFkB","p53","PI3K","TGFb","TNFa","Trail","VEGF","WNT"
2 | "s1",0.170914018149472,-0.276074298255066,1.87973656564092,0.514511483763223,-1.03095771715213,-0.472927359786748,0.391925042939005,-1.35818419074558,-0.281810355298239,-0.470160263732235,0.477756606568957,0.350493026344365,-0.403951962359968,1.60781918990032
3 | "s2",-0.496207610652794,0.558341212964585,0.215546122066556,-0.797079417529055,-0.222104847535035,0.707831903015348,0.171308517678588,0.829107374101255,0.627465649824309,0.20489335572263,-0.487624838719225,0.349589961703895,0.695822915777476,-0.515572384740168
4 | "s3",-0.547874222384872,0.580259204211914,-1.44380326919223,0.757142368172327,0.593376376322974,0.226869811173522,1.08073267288612,1.20459821730486,1.67614798673553,-2.08553505423372,0.333368283122052,0.769719089763778,-0.262316594275514,0.0622260128686502
5 | "s4",0.249202583074227,1.2658972703349,-0.776450202499493,0.919533075262946,-0.94678011449547,1.37181097896678,-1.22449106233399,-0.104522144306827,0.0900675888131213,0.606956367687325,-0.328795845592506,-1.36294063529815,-0.973744088748485,-0.329419585855739
6 | "wt1",2.2467736580788,0.671494007903785,0.442092918110936,1.0308189271612,-1.22177978541856,0.621857867101921,-1.53120581919176,-0.111612293255537,-1.44917947770973,1.35494620111881,-1.30072126321473,0.045835200383777,1.87506434810395,-1.34664306014757
7 | "wt2",-0.0289857654430306,-0.629197057043842,-0.0676112528151668,-0.829711169384674,0.411374994960904,-0.0313422504738937,-0.235770351173521,-1.39238500025141,-1.20742069268576,0.224971782999546,-0.799761599925676,0.72332814900234,0.566238801161098,-0.854401831179761
8 | "wt3",-0.649719394055777,-0.228028585461585,0.376015088761289,0.112824278366348,1.37680915143495,-0.499254506724955,0.025048607403492,1.02305043616461,0.234059005078726,-0.162154918632882,0.11318639118235,0.865032624362234,-1.18358472665569,1.21077048698735
9 | "wt4",-0.944103266766012,-1.94269175465468,-0.625525970072886,-1.70803954581235,1.04006194188237,-1.92484644327193,1.32245239179207,-0.0900523990112328,0.310670295242074,0.326082529070478,1.9925922665788,-1.74105741626224,-0.313528693002866,0.165221172166907
10 |
--------------------------------------------------------------------------------
/inst/extdata/mouse_input.csv:
--------------------------------------------------------------------------------
1 | "","s1","s2","s3","s4","wt1","wt2","wt3","wt4"
2 | "6030468B19Rik",5.89610679115891,6.15577055029055,5.89610679115891,5.89610679115891,5.89610679115891,6.08172843590002,5.89610679115891,5.89610679115891
3 | "AA986860",7.7563233039373,7.5485209857921,7.36720281385103,7.86822548651308,7.93482785618048,7.69058106999499,7.28778003205257,7.66904030919269
4 | "Abca12",5.89610679115891,6.21391509916433,5.89610679115891,6.07467894218709,6.26907179084342,5.89610679115891,5.89610679115891,5.89610679115891
5 | "Ankrd37",6.81738367952463,6.88373960996995,7.62392968620418,7.05034538266367,6.7211187400778,6.80952253378531,6.95994190274604,6.72824591583731
6 | "Ankzf1",9.98773779323234,9.80841169731452,10.008175732644,9.80922454620446,9.95132302705727,9.9238794181604,9.95883625556897,10.3060425969118
7 | "Atp6v1g2",8.2094571915975,8.33019999868925,8.01047975373454,8.06367030484894,8.4388879675886,8.16186856789453,7.83894148548593,7.81759306343871
8 | "Bmp7",7.03496313966581,6.68756279932853,6.83074800793064,6.85695414831814,6.67981819428775,6.50758163728137,6.70457981512505,6.5500619239233
9 | "Bmpr2",14.090547415808,14.2866601617457,13.7426613165203,14.5397991696004,14.6705942490672,14.2181590276986,13.8699157460681,13.7917782005704
10 | "Bnip3l",12.5180951804575,12.59588140079,12.3395149759487,12.6760796103261,12.7653954013978,12.6432352049955,12.6850862683235,12.4814568019027
11 | "Ccl20",6.29803078855098,6.34465610587994,6.3346768117053,5.89610679115891,5.89610679115891,6.08172843590002,5.89610679115891,5.89610679115891
12 | "Col4a1",15.1387959659449,15.2885486489506,15.0545066853834,15.6018815879739,15.5132594599508,15.2178090243511,14.7128546961861,14.7046542380281
13 | "Comp",6.81738367952463,6.85144119148489,6.70896452025168,6.79273105011188,7.06155596827352,7.04063999748949,7.45703591202097,7.50978589336761
14 | "Cript",10.6925756408746,10.7389861142334,10.751146254673,10.6672259671194,10.8369581832449,10.8069080328158,10.8945526308214,10.5611514920048
15 | "Csf2",6.37106134488973,6.15577055029055,6.46086791217885,6.29439516944984,5.89610679115891,6.15843500541619,6.380443117141,6.38094539732932
16 | "Csf3r",10.0864108669178,10.3008916990151,11.3306414827634,9.94965853312909,9.98316053194339,10.7876783426006,11.1382680423865,10.7879561570957
17 | "Cxcl12",12.5086810887187,12.6339225839586,11.9174370587119,12.1826100326634,13.105695453021,12.1218977175661,12.5344973651507,11.5232873140425
18 | "Dusp4",10.6038055816101,11.1653378264741,10.2731498597486,11.3633803553612,11.081247954956,11.0326016216995,10.1650492795034,10.0004185968452
19 | "Dusp5",10.0347172109775,9.90948396901303,10.3752845984317,10.0750945554567,10.0044692525109,9.59245368750143,9.99773182677719,9.38674784931582
20 | "Dusp6",12.9014996859827,13.1030327151243,13.249300658483,13.3307972624796,13.1347165357611,13.0330239436423,13.1680965687097,12.7089286313446
21 | "Efna1",12.5283574811462,12.1498353893671,12.1188908645183,12.4137326933667,12.469812467222,12.1145280744923,11.9561326577742,12.2043667349449
22 | "Eno2",6.56482869845283,6.21391509916433,6.87778423255409,6.53513221001713,6.51164362039391,6.08172843590002,6.6052233614111,6.09481697102669
23 | "Epha2",10.7262876343069,10.8857435930604,10.6926499593265,11.0578874098507,10.9078644647534,10.498285171385,10.3276387084682,10.3252986930677
24 | "Etv5",9.86451766907505,10.2740350154064,10.5404642400675,10.0578333207151,10.3499131312189,10.4913641897343,10.640377511711,10.6205129321699
25 | "Fgf20",5.89610679115891,5.89610679115891,6.14996379420766,5.89610679115891,5.89610679115891,6.15843500541619,5.89610679115891,5.89610679115891
26 | "Fgf3",5.89610679115891,5.89610679115891,5.89610679115891,6.07467894218709,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891
27 | "Frmpd1",5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.45508542646812
28 | "Gls2",7.70137499071969,7.65929711949089,7.89631602388359,7.53048396904716,6.94696690078239,7.29179257508883,7.43589157171675,7.40486656627875
29 | "Gnl3l",10.4508268430526,10.6513556151449,10.5538537911033,10.7546056736369,10.4525638310139,10.4953231148426,10.2194913763992,10.21122060794
30 | "Gnptg",10.5855497901626,10.5496721024039,10.6189932858764,10.525768489334,10.4962681258698,10.5918360135893,10.7014107721156,10.4833289577806
31 | "Greb1",6.07631732975033,5.89610679115891,5.89610679115891,6.07467894218709,5.89610679115891,6.15843500541619,5.89610679115891,5.89610679115891
32 | "Has3",6.7302512701309,6.66694792249285,6.74575655207287,6.77584404381679,7.02021375903045,6.50758163728137,6.51946249514938,6.29259245738118
33 | "Herc6",10.0372825693358,10.3413362505775,10.2425829109896,10.2316788346558,10.1769721293128,10.1915936420938,10.3861417506151,10.1361170223188
34 | "Hey2",6.48998424143636,6.55331854298694,6.29671962740455,6.20500989797615,6.45363765800286,6.08172843590002,6.33858625096439,6.70540460727028
35 | "Icam1",13.1664889627638,12.9353711746413,12.9720069711888,12.9664356101031,12.8229113516444,12.9188455136195,12.9262428952482,13.1837650123155
36 | "Ifnar2",12.5464232158489,12.5838842530736,12.5012263188814,12.5122372743581,12.5087298749987,12.7620044406432,13.1130753385073,13.182360687413
37 | "Il6",7.24342209975075,7.35976235424011,7.6961141495697,7.09893879170441,7.08816178162899,7.48614768565502,7.52812532811833,7.11708736796011
38 | "Inpp5k",12.5461987849965,12.3365322035179,11.8740322872878,12.4844442384077,12.5870732419943,12.4581865150501,12.4243967674415,12.4673988471071
39 | "Insig2",11.3577264265658,11.2312902881772,11.0451075429937,11.2601689381412,11.2323888277191,11.1501524200333,11.0942049622291,11.0477515628491
40 | "Jchain",9.177730394725,8.5945242865389,9.1127074774312,9.27923586070497,8.2307963818484,8.42946538958488,9.22028469218188,8.82706955087439
41 | "Kcnk10",6.2558296647289,6.15577055029055,6.25465468093995,6.07467894218709,6.35226432199736,5.89610679115891,5.89610679115891,5.89610679115891
42 | "Kdm3a",11.7016511685203,11.7455351433025,11.5453853199053,11.860858950209,11.9036232339243,11.6924865548233,11.5624879694246,11.474188107189
43 | "Klhl14",6.89605794605188,6.47365236283663,6.68985978483499,6.80926744954706,6.08297835438511,6.38520867613217,6.7710672967036,6.48853739743851
44 | "Krt23",7.04777161303728,6.74612846644202,6.87778423255409,6.916608231412,6.97697038085116,6.80952253378531,7.00948239698932,6.72824591583731
45 | "Lmcd1",9.88461740557279,9.75587559001659,8.9664559098088,9.80182760616779,9.87930039850465,9.2849668245806,9.25570178537449,9.77204339467133
46 | "Ltb",9.86740640165795,8.82866151926221,9.78356695545148,9.43901712028129,8.24571778488219,8.66010134526679,9.39645692452946,9.21722556054548
47 | "Lztfl1",9.93090765706501,9.96518991386199,9.77441782914062,9.79885808292269,9.93809184606528,9.94143250756743,9.54221300598962,9.74362494257474
48 | "Mboat2",6.43396956770328,6.38027388117573,6.14996379420766,6.14848526038729,6.51164362039391,6.31003454269232,6.57792011366423,5.89610679115891
49 | "Mccc1",10.050040946122,10.1465459818618,10.0791473519218,10.1595714835993,10.1606259781387,10.1569899464002,9.78618950494663,10.1959529909078
50 | "Mdm2",11.5036143083481,11.5903163790701,11.684818563971,11.5937122981906,11.3746200023824,11.3352783222241,11.5538406195925,11.4251402414189
51 | "Msx1",6.51600071587629,6.41336066127678,6.3346768117053,6.42912849664854,6.61296587092696,6.58456746289527,6.90753054043775,6.79292191600189
52 | "Nfkb1",12.9949045991935,13.0452705663831,13.0470368750024,13.1313665198841,13.0800849849395,13.05277032683,12.9138405265348,12.9804159066767
53 | "Nfkbia",13.9590834255691,13.9493372074138,13.9165013302167,13.7306694129717,14.4224253155162,14.3535189874027,14.2239097651706,14.2821175952066
54 | "Nox4",6.2558296647289,6.44437535977537,6.20681726859709,6.36677586322957,6.16019899625585,6.58456746289527,7.02542523171908,6.68182925695513
55 | "Npy",6.07631732975033,6.07984053694236,5.89610679115891,5.89610679115891,5.89610679115891,6.26658738970275,6.23938448354124,5.89610679115891
56 | "Npy1r",6.07631732975033,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.15843500541619,6.33858625096439,5.89610679115891
57 | "Oas1a",10.8508465163989,11.0363094945667,11.5529531719392,10.954660934729,10.9101188510379,11.3642162306604,11.5710837569639,11.7025370168078
58 | "Oas1b",8.77340370691034,8.87774958179624,8.98258751961966,8.90094315934084,8.615542224277,8.60877608848858,9.02850679143811,9.02456993524358
59 | "Oas1c",8.69628958004994,8.52630139087859,8.54681670542623,8.5776744155428,8.50579348622455,8.70958778529979,8.88555634369367,8.98918999122742
60 | "Oas1d",5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.08172843590002,5.89610679115891,5.89610679115891
61 | "Oas1g",9.21015211715505,9.51054545344916,9.84165056147235,8.99830177728119,9.12936131948013,9.86069128535961,10.1377588186637,10.2812749837928
62 | "Oas3",10.2763558049439,10.6400168137669,11.2441751206437,10.2050612830971,10.0638548715737,11.1657458750916,11.6694233743898,11.5227323517766
63 | "Pdk1",11.4055412338433,11.1930367089169,11.2981593004689,11.3916309386829,11.5040669890738,11.3808767121686,11.2898494429962,11.2206349092727
64 | "Pgr",6.07631732975033,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.29259245738118
65 | "Phlda1",7.92572530198056,8.21788416315512,8.40020095140702,8.10950476207233,8.14292575220666,7.52132499863829,8.27512854484277,7.85589656077912
66 | "Phlda2",5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.08172843590002,5.89610679115891,5.89610679115891
67 | "Pidd1",7.86560254943115,7.95986262724392,8.01047975373454,7.88023382524857,7.94108333885205,8.11424007226057,8.12500632320184,7.77808321469735
68 | "Pmel",6.46270472136045,6.38027388117573,6.48806137898629,6.36677586322957,6.42211067877788,6.67469315187778,6.79201315689304,6.52010503393345
69 | "Rapgefl1",6.7302512701309,6.52794758424598,6.58563830023267,6.6037366352087,6.21932774115948,6.87737503455885,6.51946249514938,6.85273172047054
70 | "Rasl11b",8.15149622655893,8.28454003280747,8.19842691700343,8.45573321379926,9.56374717781129,8.91574826273876,8.47285938483361,8.51684668820054
71 | "Relb",11.1896509017631,11.0704780414145,11.0545503779521,10.9278246519242,11.1679316401941,11.2312352154879,11.155522721102,11.4770556549896
72 | "Ret",6.2558296647289,6.15577055029055,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,6.17690417974734
73 | "Rnf43",7.28452508568442,6.89944202183736,6.60781081079663,6.94497143677624,6.21932774115948,6.47951560409418,6.33858625096439,6.60595104010473
74 | "Sesn1",12.1860352667653,12.1390460093935,12.062944095411,12.2297535354053,12.4947902406224,12.3844435529945,12.4673229317464,12.5918915771988
75 | "Skil",11.9235317000059,12.1599348306273,12.3224303368628,11.9521872501847,11.9572581520041,12.1798442055251,12.5868133649637,12.605054352145
76 | "Slco4a1",7.9374172080315,7.57314058919501,7.80984694822394,7.66565353990557,7.03419504635362,6.80952253378531,7.33550365277588,6.94386162284078
77 | "Smad7",12.1477896850123,12.1455293186481,11.7739822532809,12.2395998934039,12.2811140716784,12.1320888878296,11.698153714209,11.9790198529374
78 | "Spata18",5.89610679115891,5.89610679115891,6.14996379420766,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891,5.89610679115891
79 | "Spred2",10.9273552123249,11.1127103351038,10.8036279264675,11.1964085510873,11.3903081955239,10.8993824785551,10.649546859337,10.1361170223188
80 | "Spsb3",10.4689669819745,10.2975619505522,10.3873062570872,10.4361737895507,10.5230465335055,10.4943344050547,10.4198951029159,10.6705178545527
81 | "Tec",8.52407233125883,8.07904096149174,8.80010885794981,8.04277223979453,7.81663173338412,7.9660338614202,8.31281833378067,7.64243318401507
82 | "Tlr2",11.8735969319424,11.9058020845137,12.1200898299976,11.7825655655659,11.6943019575914,11.8524485647193,12.1261494820976,12.5633130726645
83 | "Tnfaip2",12.3146732656099,12.5440144669385,12.9414775466895,11.9631245342804,11.6679175298869,12.688172073718,13.4572698310912,13.7733580711676
84 | "Tnfaip3",11.2815432261727,11.06070462984,11.2843167957916,11.1783113313028,10.8534536280981,10.7681882747924,10.9753355096456,11.7648678842323
85 | "Tpd52l1",6.15079783654019,5.89610679115891,6.29671962740455,6.14848526038729,6.16019899625585,6.08172843590002,6.17661147452358,5.89610679115891
86 | "Tspan2",12.1451245150029,12.3806421778911,11.6541043537621,12.4759082621303,12.5600746519291,12.2251765126204,11.8404787718898,11.894906835918
87 | "Tyr",6.15079783654019,6.15577055029055,5.89610679115891,6.42912849664854,6.51164362039391,6.53434528232888,5.89610679115891,6.09481697102669
88 | "Wdr31",6.40353107099668,6.15577055029055,6.29671962740455,6.39895830608323,6.56436282932963,6.44994871067812,6.45450810088731,6.5500619239233
89 | "Zbtb16",7.12125426153899,6.74612846644202,7.11745636290791,7.35928201085415,8.87890688229149,7.11898341255799,6.68102732844237,6.65745116341682
90 |
--------------------------------------------------------------------------------
/inst/extdata/mouse_perm_expected.csv:
--------------------------------------------------------------------------------
1 | "","Androgen","EGFR","Estrogen","Hypoxia","JAK.STAT","MAPK","NFkB","p53","PI3K","TGFb","TNFa","Trail","VEGF","WNT"
2 | "s1",0.0917342815664437,-0.169316890988242,-0.90553591152355,-0.135647557779299,-0.95534108999063,-0.416059684752459,0.682394006412291,-1.46870243696192,-0.590445493868866,-0.173846044056659,0.908877485646392,0.475001489790565,-0.414595513960184,1.47788294091344
3 | "s2",-0.0767133602085673,0.541818253734556,0.802420816492854,0.314460584564889,-0.184040574003149,0.683001451103072,0.504714305158662,1.02715205637725,0.162156926223096,0.643840354393592,-0.821756970883612,0.448838624512616,0.70592592097229,0.224501044971439
4 | "s3",-0.704585054141123,0.391614636650917,-1.77334437910697,1.19657258407568,0.581550230801694,0.328708440476674,0.750093512639359,0.886754805640453,1.52276061014396,-2.0327403576552,0.0778426033145382,0.619561002806634,-0.198431977115046,0.218162281327538
5 | "s4",0.0380744647686885,1.21817573152318,-0.665516692694519,1.02759655727315,-0.929183727466488,1.29080140844267,-1.29393984754118,0.110948091062416,-0.0922856129557096,0.430733056703092,0.160997837292042,-1.04957650307144,-0.904353835499589,-0.871033751020087
6 | "wt1",2.25664449895288,0.875428407533726,0.552698267561159,0.69552458040664,-1.26497188662395,0.780256768558694,-1.59773530802455,-1.19995351231811,-1.06611430780864,1.30447720121151,-1.33298813384722,-0.0141560354668049,1.81864850680643,-0.76338960851729
7 | "wt2",0.0543978157072417,-0.774509091647134,1.07800394006069,-1.01751245156889,0.25906494427229,-0.162704625307626,-0.197445078461722,0.49648183778968,-1.42962548953724,0.308666116742056,-0.77855217603081,1.2940304989334,0.460082695145863,-1.07883705246157
8 | "wt3",-0.742171791298592,-0.174331843615977,0.636861711520965,-0.444418720643084,1.44301966035222,-0.613294195607541,-0.0515280851887542,-0.730079845704579,0.778265975699791,-0.643680585847249,0.0297920668920044,0.0722467201191023,-1.39580873550466,1.37060441766169
9 | "wt4",-0.917380855346976,-1.90887920319102,0.274412247689377,-1.63657557632908,1.04990244265802,-1.89070956291349,1.2034464950059,0.877399004114811,0.715287392103608,0.162550258508864,1.75578728761666,-1.84594579762408,-0.0714670608451069,-0.577890272875161
10 |
--------------------------------------------------------------------------------
/man/figures/tool_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/saezlab/progeny/cad6be0514c3248b9465e48f1cfd2f6a4c3dfb6f/man/figures/tool_logo.png
--------------------------------------------------------------------------------
/man/getModel.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/progenySuppFunc.r
3 | \name{getModel}
4 | \alias{getModel}
5 | \title{Returns the Progeny Model}
6 | \usage{
7 | getModel(organism = "Human", top = 100, decoupleR = F)
8 | }
9 | \arguments{
10 | \item{organism}{"Human" or "Mouse" taken from the main function's argument.
11 | Default to "Human"}
12 |
13 | \item{top}{Desired top number of genes for each pathway according to their
14 | significance(p.value). Default to 100}
15 |
16 | \item{decoupleR}{if TRUE, the model matrix is goign to be generated with a format
17 | makes it directlz compatible with the decoupleR package}
18 | }
19 | \value{
20 | This function returns model matrix according to the top n significant
21 | }
22 | \description{
23 | This function is designed for getting a model matrix with top significant
24 | genes for each pathway
25 | }
26 | \examples{
27 | #getting a model matrix according to the desired top n significant
28 | model <- getModel("Human", top=100)
29 | }
30 |
--------------------------------------------------------------------------------
/man/model_human_full.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/data.r
3 | \name{model_human_full}
4 | \alias{model_human_full}
5 | \title{The full human linear model underlying PROGENy}
6 | \format{
7 | The full human model contains 22479 genes, associated pathways,
8 | weight and the p-value.
9 | \describe{
10 | \item{gene}{gene names in HGNC symbols}
11 | \item{pathway}{names of PROGENy pathways}
12 | \item{weight}{z-scores for a given gene}
13 | \item{p.value}{significance of gene in pathway}
14 | }
15 | }
16 | \source{
17 | \url{https://www.nature.com/articles/s41467-017-02391-6}
18 | }
19 | \description{
20 | HGNC gene symbols in rows, pathways in columns. Pathway activity inference
21 | works by matrix multiplication of gene expression with the model.
22 | }
23 | \examples{
24 | get("model_human_full", envir = .GlobalEnv)
25 | }
26 | \keyword{datasets}
27 |
--------------------------------------------------------------------------------
/man/model_mouse_full.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/data.r
3 | \name{model_mouse_full}
4 | \alias{model_mouse_full}
5 | \title{The full mouse linear model underlying PROGENy}
6 | \format{
7 | The full mouse model contains 17426 genes, associated pathways,
8 | weight and the p-value.
9 | \describe{
10 | \item{gene}{gene names in HGNC symbols}
11 | \item{pathway}{names of PROGENy pathways}
12 | \item{weight}{z-scores for a given gene}
13 | \item{p.value}{significance of gene in a pathway}
14 | }
15 | }
16 | \source{
17 | \url{https://www.ncbi.nlm.nih.gov/pubmed/31525460}
18 | }
19 | \description{
20 | MGI gene symbols in rows, pathways in columns. Pathway activity inference
21 | works by matrix multiplication of gene expression with the model.
22 | }
23 | \examples{
24 | get("model_mouse_full", envir = .GlobalEnv)
25 | }
26 | \keyword{datasets}
27 |
--------------------------------------------------------------------------------
/man/progeny.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/progeny-package.r, R/progeny.r
3 | \docType{package}
4 | \name{progeny}
5 | \alias{progeny}
6 | \title{Calculate PROGENy pathway scores from gene expression}
7 | \usage{
8 | progeny(
9 | expr,
10 | scale = TRUE,
11 | organism = "Human",
12 | top = 100,
13 | perm = 1,
14 | verbose = FALSE,
15 | z_scores = FALSE,
16 | get_nulldist = FALSE,
17 | assay_name = "RNA",
18 | return_assay = FALSE,
19 | ...
20 | )
21 | }
22 | \arguments{
23 | \item{expr}{A gene expression object with HGNC/MGI symbols in rows and
24 | samples in columns. In order to run PROGENy in single-cell
25 | RNAseq data, it also accepts Seurat and SingleCellExperiment
26 | object, taking the normalized counts for the computation.}
27 |
28 | \item{scale}{A logical value indicating whether to scale the scores of each
29 | pathway to have a mean of zero and a standard deviation of one.
30 | It does not apply if we use permutations.}
31 |
32 | \item{organism}{The model organism - "Human" or "Mouse"}
33 |
34 | \item{top}{The top n genes for generating the model matrix according to
35 | significance (p-value)}
36 |
37 | \item{perm}{An interger detailing the number of permutations. No
38 | permutations by default (1). When Permutations larger than 1,
39 | we compute progeny pathway scores and assesses their
40 | significance using a gene sampling-based permutation strategy,
41 | for a series of experimental samples/contrasts.}
42 |
43 | \item{verbose}{A logical value indicating whether to display a message
44 | about the number of genes used per pathway to compute
45 | progeny scores (i.e. number of genes present in the
46 | progeny model and in the expression dataset)}
47 |
48 | \item{z_scores}{Only applies if the number of permutations is greater than 1.
49 | A logical value. TRUE: the z-scores will be returned for
50 | the pathway activity estimations. FALSE: the function returns
51 | a normalized z-score value between -1 and 1.}
52 |
53 | \item{get_nulldist}{Only applies if the number of permutations is greater
54 | than 1. A logical value. TRUE: the null distributions
55 | generated to assess the signifance of the pathways scores
56 | is also returned.}
57 |
58 | \item{assay_name}{Only applies if the input is a Seurat object. It selects the
59 | name of the assay on which Progeny will be run. Default to:
60 | RNA, i.e. normalized expression values.}
61 |
62 | \item{return_assay}{Only applies if the input is a Seurat object. A logical
63 | value indicating whether to return progeny results as a new
64 | assay called Progeny in the Seurat object used as input.
65 | Default to FALSE.}
66 |
67 | \item{...}{Additional arguments to be passed to the functions.}
68 | }
69 | \value{
70 | A matrix with samples in rows and pathways in columns. In case
71 | we run the method with permutations and the option get_nulldist
72 | to TRUE, we will get a list with two elements. The first
73 | element is the matrix with the pathway activity as before.
74 | The second elements is the null distributions that we generate
75 | to assess the signifance of the pathways scores.
76 | }
77 | \description{
78 | This function uses the linear model of pathway-responsive genes underlying
79 | the PROGENy method. It transforms a gene expression matrix with HGNC/MGI gene
80 | symbols in rows and sample names in columns into a pathway score matrix with
81 | samples in rows and pathways in columns.
82 | }
83 | \details{
84 | The publication of the method is available at:
85 | https://www.nature.com/articles/s41467-017-02391-6
86 |
87 | The supplied expression object has to contain HGNC/MGI symbols in rows. This
88 | will, in most cases (and how we originally used it), be either normalized
89 | gene expression of a microarray experiment or log-transformed (and
90 | possible variance-stabilized) counts from an RNA-seq experiment.
91 |
92 | The human and mouse model matrices consists of 14 pathways and large set of
93 | genes with an associated p-value (p-value per gene and pathway) that accounts
94 | for the importance of each gene on each pathway upon perturbation.
95 | Its coefficients are non-zero if the gene-pathway pair corresponds
96 | to the top N genes (100 by default) that were up-regulated upon stimulation
97 | of the pathway in a wide range of experiments. The value corresponds to the
98 | fitted z-score across experiments in our model fit.
99 | Only rows with at least one non-zero coefficient were included, as the rest
100 | is not used to infer pathway activity.
101 | }
102 | \examples{
103 | # use example gene expression matrix here, this is just for illustration
104 | gene_expression <- as.matrix(read.csv(system.file("extdata",
105 | "human_input.csv", package = "progeny"), row.names = 1))
106 |
107 | # calculate pathway activities
108 | pathways <- progeny(gene_expression, scale=TRUE,
109 | organism="Human", top = 100, perm = 1)
110 | }
111 | \seealso{
112 | \code{\link{progenyPerm}}
113 | }
114 |
--------------------------------------------------------------------------------
/man/progenyPerm.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/progenyPermutations.r
3 | \name{progenyPerm}
4 | \alias{progenyPerm}
5 | \title{Compute progeny pathway scores and assesses significance based on permutations}
6 | \usage{
7 | progenyPerm(
8 | df,
9 | weight_matrix,
10 | k = 10000,
11 | z_scores = TRUE,
12 | get_nulldist = FALSE
13 | )
14 | }
15 | \arguments{
16 | \item{df}{A data.frame of n*m+1 dimension, where n is the number of omic
17 | features to be considered and m is the number of samples/contrasts.
18 | The first column should be the identifiers of the omic features.
19 | These identifiers must be coherent with the identifiers of the weight matrix.}
20 |
21 | \item{weight_matrix}{A progeny coefficient matrix. the first column should be
22 | the identifiers of the omic features and should be coherent with
23 | the identifiers provided in df.}
24 |
25 | \item{k}{The number of permutations to be performed to generate
26 | the null-distribution used to estimate the significance of progeny scores.
27 | The default value is 10000.}
28 |
29 | \item{z_scores}{if true, the z-scores will be returned for
30 | the pathway activity estimations. Else, the function returns
31 | a normalized z-score value between -1 and 1.}
32 |
33 | \item{get_nulldist}{if true, the null score distribution used for
34 | normalization will be returned along with the actual normalized score data
35 | frame.}
36 | }
37 | \value{
38 | This function returns a list of two elements. The first element is
39 | a data frame of p*m+1 dimensions, where p is the number of progeny pathways,
40 | and m is the number of samples/contrasts. Each cell represents the
41 | significance of a progeny pathway score for one sample/contrast. The
42 | significance ranges between -1 and 1. The significance is equal to x*2-1, x
43 | being the quantile of the progeny pathway score with respect to the null
44 | distribution. Thus, this significance can be interpreted as the equivalent of
45 | 1-p.value two-sided test over an empirical distribution) with the sign
46 | indicating the direction of the regulation. The second element is the null
47 | distribution list (a null distribution is generated for each sample/contrast).
48 | }
49 | \description{
50 | Compute progeny pathway scores and assesses significance based on permutations
51 | }
52 | \examples{
53 | # use example gene expression matrix
54 | gene_expression <- as.matrix(read.csv(system.file("extdata",
55 | "human_input.csv", package = "progeny"), row.names = 1))
56 |
57 | # calculate pathway activities
58 | progeny(gene_expression, scale=TRUE, organism="Human", top=100, perm=10000)
59 | }
60 |
--------------------------------------------------------------------------------
/man/progenyScatter.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/progenySuppFunc.r
3 | \name{progenyScatter}
4 | \alias{progenyScatter}
5 | \title{Calculate Progeny Scores with Permutations}
6 | \usage{
7 | progenyScatter(
8 | df,
9 | weight_matrix,
10 | dfID = 1,
11 | weightID = 1,
12 | statName = "gene stats",
13 | verbose = FALSE
14 | )
15 | }
16 | \arguments{
17 | \item{df}{an n*m data frame, where n is the number of omic features (genes).
18 | m isn't really important, as long as at least one column corresponds to a
19 | sample or contrast statistic. One of the columns should correspond to the gene
20 | symbols.}
21 |
22 | \item{weight_matrix}{A progeny coefficient matrix. the first column should be
23 | the identifiers of the omic features, and should be coherent with
24 | the identifiers provided in df.}
25 |
26 | \item{dfID}{an integer corresponding to the column number of
27 | the gene identifiers of df.}
28 |
29 | \item{weightID}{an integer corresponding to the column number of the gene
30 | identifiers of the weight matrix.}
31 |
32 | \item{statName}{The name of the stat used, to be displayed on the plot}
33 |
34 | \item{verbose}{Logical indicating whether we want to have the messages
35 | indicating the different computed weights.}
36 | }
37 | \value{
38 | The function returns a list of list of arrangeGrob objects.
39 | The first level list elements correspond to samples/contrasts.
40 | The second level correspond to pathways.
41 | The plots can be saved in a pdf format using the saveProgenyPlots function.
42 | }
43 | \description{
44 | This function generate a series of scatter plot with marginal distribution
45 | (in the form of an arrangeGrob object), for each progeny pathway and
46 | sample/contrast. Each scatter plot has progeny weights as x-axis and the gene
47 | level stat used to compute progeny score as the y-axis. The marginal
48 | distribution of the gene level stats is displayed on the right of the plot
49 | to give visual support of the significance of each gene contributing to
50 | the progeny pathway score. The green and red colors represent the positive
51 | and negative contribution of genes to the progeny pathway, respectively.
52 | For each gene contribution, 4 cases are possible, as the combinations of
53 | the sign of the gene level stat and the sign of the gene level weight.
54 | Positive weight will lead to a positive(green)/negative(red) gene contribution
55 | if the gene level stat is positive/negative. Negative weight will lead to
56 | a negative(red)/positive(green) gene contribution if the gene level stat
57 | is positive/negative.
58 | }
59 | \examples{
60 | # use example gene expression matrix
61 |
62 | gene_expression <- read.csv(system.file("extdata",
63 | "human_input.csv", package = "progeny"))
64 |
65 | # getting a model matrix with 100 top significant genes and converting to df
66 | weight_matrix <- getModel("Human", top=100)
67 | weight_matrix <- data.frame(names = row.names(weight_matrix),
68 | row.names = NULL, weight_matrix)
69 |
70 | #use progenyScatter function
71 | plots <- progenyScatter(gene_expression, weight_matrix)
72 | }
73 |
--------------------------------------------------------------------------------
/man/saveProgenyPlots.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/progenySuppFunc.r
3 | \name{saveProgenyPlots}
4 | \alias{saveProgenyPlots}
5 | \title{Function to save Progeny plots}
6 | \usage{
7 | saveProgenyPlots(plots, contrast_names, dirpath)
8 | }
9 | \arguments{
10 | \item{plots}{a list of list of arrangeGrob object (such as the one returned
11 | by the progenyScatter function.).The first level list elements correspond
12 | to samples/contrasts. The second level corresponds to pathways.
13 | The plots can be saved in a pdf format using the saveProgenyPlots function.}
14 |
15 | \item{contrast_names}{a vector of the same length as the first level of
16 | the plot list corresponding to the names of each sample/contrast}
17 |
18 | \item{dirpath}{the path to the directory where the plots should be saved}
19 | }
20 | \value{
21 | This function produces the pdf files of plots taken from the
22 | progenyScatter function
23 | }
24 | \description{
25 | This function is designed to save the plots (in pdf format) of a nested
26 | (2 level) list of arrangeGrob objects, such as the one returned by
27 | the progenyScatter function.
28 | }
29 | \examples{
30 | #create plots using progneyScatter function
31 | gene_expression <- read.csv(system.file("extdata",
32 | "human_input.csv", package = "progeny"))
33 |
34 | # getting a weight_matrix
35 | weight_matrix <- getModel("Human", top=100)
36 | weight_matrix <- data.frame(names = row.names(weight_matrix),
37 | row.names = NULL, weight_matrix)
38 | plots <- progenyScatter(gene_expression, weight_matrix)
39 |
40 | #create a list with contrast names
41 | contrast_names <- names(gene_expression[2:ncol(gene_expression)])
42 |
43 | #assign a path to store your plots
44 | dirpath <- "./progeny_plots/"
45 |
46 | # save it
47 | # saveProgenyPlots(plots, contrast_names, dirpath)
48 | }
49 |
--------------------------------------------------------------------------------
/man/vignette_data.Rd:
--------------------------------------------------------------------------------
1 | % Generated by roxygen2: do not edit by hand
2 | % Please edit documentation in R/data.r
3 | \name{vignette_data}
4 | \alias{vignette_data}
5 | \title{The RNA data used in the progeny vignette}
6 | \format{
7 | List with three elements: the gene counts, the experimental design and
8 | the result of limma differential analysis
9 | \describe{
10 | \item{counts}{gene counts}
11 | \item{design}{experiemental design}
12 | \item{limma_ttop}{differential analysis result using limma}
13 | }
14 | }
15 | \source{
16 | \url{https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE119931}
17 | }
18 | \description{
19 | List with three elements: the gene counts, the experimental design and
20 | the result of limma differential analysis
21 | }
22 | \examples{
23 | data("vignette_data")
24 | }
25 | \keyword{datasets}
26 |
--------------------------------------------------------------------------------
/pkgdown/_pkgdown.yml:
--------------------------------------------------------------------------------
1 | destination: docs
2 | url: https://saezlab.github.io/progeny
3 | navbar:
4 | structure:
5 | left: [home, intro, reference, articles, tutorials, news]
6 | right: [github, twitter, homepage]
7 | components:
8 | twitter:
9 | icon: "fab fa-twitter fa-lg"
10 | href: https://twitter.com/saezlab
11 | homepage:
12 | icon: "fas fa-university"
13 | href: https://saezlab.org/
14 | type: dark
15 | bg: primary
16 |
17 | template:
18 | params:
19 | ganalytics: UA-119440867-8
20 | highlightcss: false
21 | bootstrap: 5
22 | bootswatch: cosmo
23 | bslib:
24 | primary: "#34628F"
25 |
--------------------------------------------------------------------------------
/pkgdown/extra.css:
--------------------------------------------------------------------------------
1 | .contents p:first-of-type img {
2 | background-color: white;
3 | padding: 10px;
4 | margin-top: 15px;
5 | scale: 1.1;
6 | position: relative;
7 | left: 10%;
8 | }
9 |
10 | body {
11 | font-size: 117%!important;
12 | }
13 |
14 | .bg-primary {
15 | background-color: #34628F!important;
16 | }
17 |
18 | .navbar-brand {
19 | font-size: 166%!important;
20 | }
21 |
22 | nav[data-toggle="toc"] .nav > li > a {
23 | border-radius: 0px!important;
24 | padding-left: 1rem!important;
25 | }
26 |
27 | pre {
28 | border-radius: 0px!important;
29 | background-color: white!important;
30 | }
31 |
32 | code span, code a:any-link {
33 | color: #1f1c1b!important;
34 | }/* Normal */
35 | code span.al, code span.al a:any-link {
36 | color: #bf0303!important;
37 | background-color: #f7e6e6!important;
38 | font-weight: bold;
39 | } /* Alert */
40 | code span.an, code span.an a:any-link {
41 | color: #ca60ca!important;
42 | } /* Annotation */
43 | code span.at, code span.at a:any-link {
44 | color: #0057ae!important;
45 | } /* Attribute */
46 | code span.bn, code span.bn a:any-link {
47 | color: #b08000!important;
48 | } /* BaseN */
49 | code span.bu, code span.bu a:any-link {
50 | color: #644a9b!important;
51 | font-weight: bold;
52 | } /* BuiltIn */
53 | code span.cf, code span.cf a:any-link {
54 | color: #1f1c1b!important;
55 | font-weight: bold;
56 | } /* ControlFlow */
57 | code span.ch, code span.ch a:any-link {
58 | color: #924c9d!important;
59 | } /* Char */
60 | code span.cn, code span.cn a:any-link {
61 | color: #aa5500!important;
62 | }/* Constant */
63 | code span.co, code span.co a:any-link {
64 | color: #898887!important;
65 | }/* Comment */
66 | code span.cv, code span.cv a:any-link {
67 | color: #0095ff!important;
68 | }/* CommentVar */
69 | code span.do, code span.do a:any-link {
70 | color: #607880!important;
71 | }/* Documentation */
72 | code span.dt, code span.dt a:any-link {
73 | color: #0057ae!important;
74 | }/* DataType */
75 | code span.dv, code span.dv a:any-link {
76 | color: #b08000!important;
77 | }/* DecVal */
78 | code span.er, code span.er a:any-link {
79 | color: #bf0303!important;
80 | text-decoration: underline;
81 | } /* Error */
82 | code span.ex, code span.ex a:any-link {
83 | color: #0095ff!important;
84 | font-weight: bold;
85 | } /* Extension */
86 | code span.fl, code span.fl a:any-link {
87 | color: #b08000!important;
88 | }/* Float */
89 | code span.fu,
90 | code span.fu a:any-link {
91 | color: #644a9b!important;
92 | } /* Function */
93 | code span.im, code span.im a:any-link {
94 | color: #ff5500!important;
95 | }/* Import */
96 | code span.in, code span.in a:any-link {
97 | color: #b08000!important;
98 | }/* Information */
99 | code span.kw, code span.kw a:any-link {
100 | /*color: #1f1c1b!important;*/
101 | color: #007BA5!important;
102 | font-weight: bold;
103 | } /* Keyword */
104 | code span.op, code span.op a:any-link {
105 | /* color: #1f1c1b!important; */
106 | color: #5E5E5E!important;
107 | }/* Operator */
108 | code span.ot, code span.ot a:any-link {
109 | color: #006e28!important;
110 | }/* Other */
111 | code span.pp, code span.pp a:any-link {
112 | color: #006e28!important;
113 | }/* Preprocessor */
114 | code span.re, code span.re a:any-link {
115 | color: #0057ae!important;
116 | background-color: #e0e9f8!important;
117 | } /* RegionMarker */
118 | code span.sc, code span.sc a:any-link {
119 | color: #3daee9!important;
120 | }/* SpecialChar */
121 | code span.ss, code span.ss a:any-link {
122 | color: #ff5500!important;
123 | }/* SpecialString */
124 | /* code span.st, code span.st a:any-link {
125 | * color: #bf0303!important;
126 | * }/* String */
127 | code span.st, code span.st a:any-link {
128 | color: #20794d!important;
129 | }/* String */
130 | code span.va, code span.va a:any-link {
131 | color: #0057ae!important;
132 | }/* Variable */
133 | code span.vs, code span.vs a:any-link {
134 | color: #bf0303!important;
135 | }/* VerbatimString */
136 | code span.wa, code span.wa a:any-link {
137 | color: #bf0303!important;
138 | }/* Warning */
139 |
140 | .nav-text.text-muted {
141 | color: #ffffff!important;
142 | }
143 |
144 | .nav-item.active > .nav-link {
145 | background-color: #e9ecef!important;
146 | color: #133676!important;
147 | }
148 |
149 | .navbar-dark input[type="search"] {
150 | background-color: #e9ecef!important;
151 | color: #212529!important;
152 | }
153 |
154 | .template-home > .row > #main > p > img {
155 | background-color: #ffffff!important;
156 | padding-top: 20px;
157 | }
158 |
159 | .template-home > .row > #main > .section > .page-header > img {
160 | display: none!important;
161 | }
162 |
163 | .template-home h1, .template-home h2, .template-home h3, .template-home h4,
164 | .template-home h5, .template-home h6, .template-article .page-header h1 {
165 | font-weight: 700!important;
166 | }
167 |
168 | h1 {
169 | font-size: 4.125rem!important;
170 | }
171 |
172 | img.logo {
173 | background-color: #ffffff!important;
174 | }
175 |
176 | p.abstract {
177 | font-size: calc(1.375rem + 1.5vw)!important;
178 | }
179 |
180 | h4.author {
181 | font-size: 1.25rem!important;
182 | margin-top: 1rem!important;
183 | }
184 |
185 | @media (min-width: 1200px){
186 | p.abstract {
187 | font-size: 2.5rem!important;
188 | }
189 | }
190 |
191 | .author_afil {
192 | font-size: small!important;
193 | }
194 |
195 | .nav-item {
196 | margin-left: 10px!important;
197 | }
198 |
--------------------------------------------------------------------------------
/tests/testthat.R:
--------------------------------------------------------------------------------
1 | library(testthat)
2 | library(progeny)
3 |
4 | test_check("progeny")
5 |
--------------------------------------------------------------------------------
/tests/testthat/test-progeny_pipeline.R:
--------------------------------------------------------------------------------
1 | library(progeny)
2 |
3 | #get input data
4 | human_input <- as.matrix(read.csv(system.file("extdata", "human_input.csv",
5 | package = "progeny"),
6 | row.names = 1))
7 | mouse_input <- as.matrix(read.csv(system.file("extdata", "mouse_input.csv",
8 | package = "progeny"),
9 | row.names = 1))
10 |
11 | #get expected data
12 | human_def_expected <- read.csv(system.file("extdata", "human_def_expected.csv",
13 | package = "progeny"),
14 | row.names = 1,
15 | check.names = FALSE)
16 | mouse_def_expected <- read.csv(system.file("extdata", "mouse_def_expected.csv",
17 | package = "progeny"),
18 | row.names = 1,
19 | check.names = FALSE)
20 |
21 | #obtaining actual result
22 | human_def_act <- as.data.frame(progeny(human_input, scale=TRUE,
23 | organism = "Human", top = 10))
24 | mouse_def_act <- as.data.frame(progeny(mouse_input, scale=TRUE,
25 | organism = "Mouse", top = 10))
26 |
27 | #testing
28 | test_that("Comparison of the results", {
29 | expect_equal(human_def_act, human_def_expected)
30 | expect_equal(mouse_def_act, mouse_def_expected)
31 | })
32 |
--------------------------------------------------------------------------------
/vignettes/progeny.Rmd:
--------------------------------------------------------------------------------
1 | ---
2 | title: "PROGENy pathway signatures"
3 | author:
4 | - name: Pau Badia-i-Mompel
5 | affiliation:
6 | - Heidelberg Universiy
7 | output:
8 | BiocStyle::html_document:
9 | self_contained: true
10 | toc: true
11 | toc_float: true
12 | toc_depth: 3
13 | code_folding: show
14 | package: "`r pkg_ver('progeny')`"
15 | vignette: >
16 | %\VignetteIndexEntry{PROGENy pathway signatures}
17 | %\VignetteEngine{knitr::rmarkdown}
18 | %\VignetteEncoding{UTF-8}
19 | ---
20 |
21 | ```{r setup, include=FALSE}
22 | knitr::opts_chunk$set(
23 | collapse = TRUE,
24 | comment = "#>"
25 | )
26 | ```
27 |
28 |
29 | # Introduction
30 |
31 | PROGENy is resource that leverages a large compendium of publicly available
32 | signaling perturbation experiments to yield a common core of pathway responsive
33 | genes. For each pathway, a collection of genes are available along their
34 | contribution and significance to it.
35 |
36 | Inside PROGENy, one can find gene signatures for 14 different pathways:
37 |
38 | - **Androgen**: involved in the growth and development of the male reproductive organs.
39 | - **EGFR**: regulates growth, survival, migration, apoptosis, proliferation, and differentiation in mammalian cells
40 | - **Estrogen**: promotes the growth and development of the female reproductive organs.
41 | - **Hypoxia**: promotes angiogenesis and metabolic reprogramming when O2 levels are low.
42 | - **JAK-STAT**: involved in immunity, cell division, cell death, and tumor formation.
43 | - **MAPK**: integrates external signals and promotes cell growth and proliferation.
44 | - **NFkB**: regulates immune response, cytokine production and cell survival.
45 | - **p53**: regulates cell cycle, apoptosis, DNA repair and tumor suppression.
46 | - **PI3K**: promotes growth and proliferation.
47 | - **TGFb**: involved in development, homeostasis, and repair of most tissues.
48 | - **TNFa**: mediates haematopoiesis, immune surveillance, tumour regression and protection from infection.
49 | - **Trail**: induces apoptosis.
50 | - **VEGF**: mediates angiogenesis, vascular permeability, and cell migration.
51 | - **WNT**: regulates organ morphogenesis during development and tissue repair.
52 |
53 | # Activity estimation
54 | These signatures, coupled with any statistical method,
55 | can be used to infer pathway activities from bulk or single-cell
56 | transcriptomics.
57 | In this vignette we just show how to access these signatures and some of their
58 | properties. To infer pathway activities, please check out
59 | [decoupleR](https://doi.org/10.1093/bioadv/vbac016), available in
60 | [R](https://saezlab.github.io/decoupleR/) or
61 | [python](https://github.com/saezlab/decoupler-py).
62 |
63 | # Load
64 | First we load the necessary packages:
65 | ```{r load, message=FALSE}
66 | library(progeny)
67 | library(ggplot2)
68 | library(dplyr)
69 | ```
70 |
71 | Here is how to retrieve all genes from each pathway in human:
72 | ```{r model}
73 | model <- progeny::model_human_full
74 | head(model)
75 | ```
76 |
77 | Here we can observe how some genes behave for some pathways. For example,
78 | The gene CBX6 has a negative response to EGFR, meaning that when there is EGFR
79 | signaling this gene is down-regulated. On the other hand, the gene RFC2 has a
80 | positive weight for EGFR, meaning that when there is EGFR signaling it becomes
81 | up-regulated. We can also see the significance of each gene to each pathway. To
82 | better estimate pathway activities, we recommend to select the top 100
83 | significant genes for each pathway or filter by significance.
84 |
85 | # Exploration
86 | We can visualize the distribution of weights for the top 100 genes per pathway:
87 |
88 | ```{r w_dist}
89 | # Get top 100 significant genes per pathway
90 | model_100 <- model %>%
91 | group_by(pathway) %>%
92 | slice_min(order_by = p.value, n = 200)
93 |
94 | # Plot
95 | ggplot(data=model_100, aes(x=weight, color=pathway, fill=pathway)) +
96 | geom_density() +
97 | theme(text = element_text(size=12)) +
98 | facet_wrap(~ pathway, scales='free') +
99 | xlab('scores') +
100 | ylab('densities') +
101 | theme_bw() +
102 | theme(legend.position = "none")
103 |
104 | ```
105 |
106 | Each pathway show a different distribution of weights. Some up-regulate more genes
107 | than down-regulate, like NFkB or TNFa, while others do the opposite, like PI3K
108 | or VEGF.
109 |
110 |
111 |
112 |
113 |
--------------------------------------------------------------------------------