Text Generation
PEFT
Safetensors
English
bioinformatics
differential-expression
DESeq2
limma
omics
LoRA
Instructions to use domizzz2025/statLens with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use domizzz2025/statLens with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
sync: src/ now reflects statlens-0.1.7 wheel
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- src/LICENSE +202 -0
- src/README.md +336 -0
- src/pyproject.toml +82 -0
- src/statlens/__init__.py +24 -0
- src/statlens/adapter.py +466 -0
- src/statlens/classifier.py +176 -0
- src/statlens/cli.py +212 -0
- src/statlens/data/examples/01_Count_DESeq2_basic_synthetic.tsv +0 -0
- src/statlens/data/examples/02_Count_DESeq2_with_batch_synthetic.tsv +0 -0
- src/statlens/data/examples/03_Count_DESeq2_paired_or_repeated_synthetic.tsv +0 -0
- src/statlens/data/examples/04_Count_DESeq2_multi_group_synthetic.tsv +0 -0
- src/statlens/data/examples/05_Count_DESeq2_time_course_synthetic.tsv +0 -0
- src/statlens/data/examples/06_Count_DESeq2_group_time_interaction_synthetic.tsv +0 -0
- src/statlens/data/examples/07_Count_DESeq2_ZINB_synthetic.tsv +41 -0
- src/statlens/data/examples/08_Continuous_limma_basic_synthetic.tsv +25 -0
- src/statlens/data/examples/09_Continuous_limma_with_batch_synthetic.tsv +49 -0
- src/statlens/data/examples/10_Continuous_limma_paired_or_repeated_synthetic.tsv +41 -0
- src/statlens/data/examples/11_Continuous_limma_multi_group_synthetic.tsv +41 -0
- src/statlens/data/examples/12_Continuous_limma_time_course_synthetic.tsv +0 -0
- src/statlens/data/examples/13_Continuous_limma_group_time_interaction_synthetic.tsv +0 -0
- src/statlens/data/index.html +846 -0
- src/statlens/pipelines/deseq2_basic_pipeline/01_deseq2_basic_analysis.py +145 -0
- src/statlens/pipelines/deseq2_basic_pipeline/02_volcano_plot.py +72 -0
- src/statlens/pipelines/deseq2_basic_pipeline/03_ma_plot.py +67 -0
- src/statlens/pipelines/deseq2_basic_pipeline/04_pca_plot.py +79 -0
- src/statlens/pipelines/deseq2_basic_pipeline/05_heatmap_top_de_genes.py +105 -0
- src/statlens/pipelines/deseq2_basic_pipeline/06_top_genes_barplot.py +57 -0
- src/statlens/pipelines/deseq2_basic_pipeline/README.md +56 -0
- src/statlens/pipelines/deseq2_basic_pipeline/run_pipeline.sh +56 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/01_deseq2_group_time_interaction_analysis.py +254 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/02_volcano_plot.py +66 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/03_ma_plot.py +57 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/04_pca_plot.py +64 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/05_heatmap_top_de_genes.py +101 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/06_top_genes_barplot.py +57 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/README.md +27 -0
- src/statlens/pipelines/deseq2_group_time_interaction_pipeline/run_pipeline.sh +18 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/01_deseq2_multi_group_analysis.py +185 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/02_volcano_plot.py +66 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/03_ma_plot.py +57 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/04_pca_plot.py +64 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/05_heatmap_top_de_genes.py +101 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/06_top_genes_barplot.py +57 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/README.md +27 -0
- src/statlens/pipelines/deseq2_multi_group_pipeline/run_pipeline.sh +18 -0
- src/statlens/pipelines/deseq2_paired_pipeline/01_deseq2_paired_analysis.py +148 -0
- src/statlens/pipelines/deseq2_paired_pipeline/02_volcano_plot.py +66 -0
- src/statlens/pipelines/deseq2_paired_pipeline/03_ma_plot.py +57 -0
- src/statlens/pipelines/deseq2_paired_pipeline/04_pca_plot.py +64 -0
- src/statlens/pipelines/deseq2_paired_pipeline/05_heatmap_top_de_genes.py +101 -0
src/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
src/README.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# statLens
|
| 2 |
+
|
| 3 |
+
> Self-hosted DEA method selector. Upload a TSV plus a few sentences of study
|
| 4 |
+
> context; statLens extracts a structured study-design summary, lets you
|
| 5 |
+
> review it, then runs the matching DESeq2 / limma pipeline on your own GPU.
|
| 6 |
+
|
| 7 |
+
statLens is a single-binary tool that wraps a fine-tuned **Qwen3-32B + LoRA**
|
| 8 |
+
classifier in front of 13 differential-expression analysis pipelines. It runs
|
| 9 |
+
fully on your machine — no external API calls, no data leaves the box.
|
| 10 |
+
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
## How it works
|
| 14 |
+
|
| 15 |
+
```
|
| 16 |
+
TSV + study context
|
| 17 |
+
│
|
| 18 |
+
▼
|
| 19 |
+
[Stage 1] LLM reads a pandas-built data preview + your study context,
|
| 20 |
+
extracts a 21-field SchemaSummary describing the study design
|
| 21 |
+
(column names, group levels, time/batch presence, reference
|
| 22 |
+
level, etc.).
|
| 23 |
+
│
|
| 24 |
+
▼
|
| 25 |
+
[Stage 2] You see the SchemaSummary in the browser. Edit any field
|
| 26 |
+
you disagree with. (No backend call — purely review.)
|
| 27 |
+
│
|
| 28 |
+
▼
|
| 29 |
+
[Stage 3] LLM looks at the (edited) SchemaSummary and picks one of
|
| 30 |
+
13 DEA pipelines, or declines with `none_of_these`. The
|
| 31 |
+
adapter then uses the column names from your confirmed
|
| 32 |
+
schema to build the pipeline inputs.
|
| 33 |
+
│
|
| 34 |
+
▼
|
| 35 |
+
DESeq2 / limma runs → 5 plots, 2 result tables, a markdown report,
|
| 36 |
+
and a downloadable result.zip.
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
Two LLM calls, one user review in the middle. End-to-end ≈ 35–45 seconds
|
| 40 |
+
per request, with the schema review bracketed by the user's reading time.
|
| 41 |
+
|
| 42 |
+
---
|
| 43 |
+
|
| 44 |
+
## Prerequisite (you do this once)
|
| 45 |
+
|
| 46 |
+
You need **Qwen3-32B** (~64 GB BF16) on local disk. If you don't have it:
|
| 47 |
+
|
| 48 |
+
```bash
|
| 49 |
+
huggingface-cli download Qwen/Qwen3-32B --local-dir ~/models/qwen3-32b
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
> Mainland China: prefix the command with `HF_ENDPOINT=https://hf-mirror.com`,
|
| 53 |
+
> or use ModelScope:
|
| 54 |
+
> `modelscope download --model Qwen/Qwen3-32B --local_dir ~/models/qwen3-32b`
|
| 55 |
+
|
| 56 |
+
statLens auto-discovers the base model in any of these locations:
|
| 57 |
+
|
| 58 |
+
- `~/models/qwen3-32b/`
|
| 59 |
+
- `/root/autodl-tmp/models/qwen3-32b/` (AutoDL)
|
| 60 |
+
- `/workspace/models/qwen3-32b/` (RunPod / Lambda)
|
| 61 |
+
- `/data/models/qwen3-32b/`, `/mnt/models/qwen3-32b/`
|
| 62 |
+
- the HuggingFace Hub cache
|
| 63 |
+
|
| 64 |
+
If yours is elsewhere, pass `--base-model PATH` or set
|
| 65 |
+
`STATLENS_BASE_MODEL=/path/to/qwen3-32b`.
|
| 66 |
+
|
| 67 |
+
---
|
| 68 |
+
|
| 69 |
+
## Quick start
|
| 70 |
+
|
| 71 |
+
```bash
|
| 72 |
+
# (Mainland China only — set once, persists across sessions)
|
| 73 |
+
grep -q HF_ENDPOINT ~/.bashrc \
|
| 74 |
+
|| echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
|
| 75 |
+
source ~/.bashrc
|
| 76 |
+
|
| 77 |
+
# 1. Install statLens (~5 min on first run; pulls ~2 GB of CUDA dependencies)
|
| 78 |
+
pip install ${HF_ENDPOINT:-https://huggingface.co}/domizzz2025/statLens/resolve/main/statlens-0.1.7-py3-none-any.whl
|
| 79 |
+
|
| 80 |
+
# 2. Launch
|
| 81 |
+
statlens serve
|
| 82 |
+
```
|
| 83 |
+
|
| 84 |
+
After ~80 s you should see:
|
| 85 |
+
|
| 86 |
+
```
|
| 87 |
+
══════════════════════════════════════════════════════
|
| 88 |
+
✅ statLens ready
|
| 89 |
+
open in browser: http://localhost:7860/
|
| 90 |
+
Ctrl+C to stop.
|
| 91 |
+
══════════════════════════════════════════════════════
|
| 92 |
+
```
|
| 93 |
+
|
| 94 |
+
Open `http://localhost:7860`, drop a TSV, write a short study-context
|
| 95 |
+
description, click **Classify & run**, review the extracted schema, then
|
| 96 |
+
**Run pipeline →**.
|
| 97 |
+
|
| 98 |
+
---
|
| 99 |
+
|
| 100 |
+
## What happens when you click *Classify & run*
|
| 101 |
+
|
| 102 |
+
```
|
| 103 |
+
[Browser]
|
| 104 |
+
POST /api/extract (TSV + context)
|
| 105 |
+
│
|
| 106 |
+
▼ (~20–30 s)
|
| 107 |
+
Schema card appears in the browser:
|
| 108 |
+
• 21 structured fields the LLM extracted from your data
|
| 109 |
+
• 8 "decision-driving" fields (highlighted) plus 13 context fields
|
| 110 |
+
including column names (group / subject / time / batch) and
|
| 111 |
+
reference (control) level
|
| 112 |
+
• All editable
|
| 113 |
+
|
| 114 |
+
[You]
|
| 115 |
+
Review and edit any field that looks wrong.
|
| 116 |
+
Example: the LLM read your TSV and inferred a `seq_run` column
|
| 117 |
+
is a batch effect; if you know it isn't, flip the toggle.
|
| 118 |
+
|
| 119 |
+
[Browser]
|
| 120 |
+
POST /api/run_pipeline (the edited schema)
|
| 121 |
+
│
|
| 122 |
+
▼ (~5 s LLM + ~15 s pipeline)
|
| 123 |
+
Result card appears:
|
| 124 |
+
• Final pipeline label and the LLM's reasoning
|
| 125 |
+
• 5 plots (volcano, MA, PCA, heatmap, top-DE barplot)
|
| 126 |
+
• 2 CSVs (full results + significant features)
|
| 127 |
+
• Download all → result.zip
|
| 128 |
+
```
|
| 129 |
+
|
| 130 |
+
Crucially, the label is decided by the LLM in stage 3, **after** you've had a
|
| 131 |
+
chance to correct the schema. The middle layer is your audit point, not a
|
| 132 |
+
black-box pass-through.
|
| 133 |
+
|
| 134 |
+
---
|
| 135 |
+
|
| 136 |
+
## What `statlens serve` does for you
|
| 137 |
+
|
| 138 |
+
Auto-handled (you don't think about any of these):
|
| 139 |
+
|
| 140 |
+
1. checks for an NVIDIA GPU with ≥ 22 GB VRAM
|
| 141 |
+
2. auto-detects the Qwen3-32B base model on disk
|
| 142 |
+
3. fetches the 1 GB statLens LoRA from HuggingFace if not already cached
|
| 143 |
+
4. spawns the LLM backend (LLaMA-Factory + bitsandbytes 4-bit + LoRA)
|
| 144 |
+
5. spawns the FastAPI web app on `:7860`
|
| 145 |
+
6. opens your browser if there is one
|
| 146 |
+
|
| 147 |
+
Verbose backend logs go to `~/.cache/statlens/llm.log`; tail it only when
|
| 148 |
+
something fails.
|
| 149 |
+
|
| 150 |
+
---
|
| 151 |
+
|
| 152 |
+
## Hardware
|
| 153 |
+
|
| 154 |
+
| | |
|
| 155 |
+
|---|---|
|
| 156 |
+
| GPU | NVIDIA, **≥ 22 GB VRAM** (RTX 3090 / 4090 / A40 / A100 / 5090 …) |
|
| 157 |
+
| OS | Linux x86_64 |
|
| 158 |
+
| RAM | 32 GB+ |
|
| 159 |
+
| Disk | 75 GB free (64 GB Qwen + 1 GB LoRA + working space) |
|
| 160 |
+
|
| 161 |
+
Mac / Windows / AMD: not supported (vLLM + bitsandbytes are CUDA-only).
|
| 162 |
+
|
| 163 |
+
---
|
| 164 |
+
|
| 165 |
+
## TSV format
|
| 166 |
+
|
| 167 |
+
Wide format, one row per sample. Required columns:
|
| 168 |
+
|
| 169 |
+
| column | meaning |
|
| 170 |
+
|---|---|
|
| 171 |
+
| `sample_id` | unique per row |
|
| 172 |
+
| `subject_id` | repeats for paired or longitudinal samples |
|
| 173 |
+
| a **design column** | `group` / `condition` / `treatment` / `clinical_group` / `tumor_stage` / `subtype` / `arm` / … (fuzzy-matched) |
|
| 174 |
+
| **feature columns** | prefixed **exactly** one of: `gene_`, `asv_`, `prot_`, `metab_`, `otu_`, `feat_`. Other prefixes are not recognised and the adapter will report `No feature columns found`. |
|
| 175 |
+
|
| 176 |
+
Optional: time-like columns (`time_day`, `collection_day`, `time_week`, …)
|
| 177 |
+
and batch-like columns (`batch`, `site`, `run`, `ms_batch`, …).
|
| 178 |
+
|
| 179 |
+
13 demonstration TSVs ship with the package — list them with:
|
| 180 |
+
|
| 181 |
+
```bash
|
| 182 |
+
ls $(python3 -c 'import statlens, os; print(os.path.dirname(statlens.__file__))')/data/examples/
|
| 183 |
+
```
|
| 184 |
+
|
| 185 |
+
---
|
| 186 |
+
|
| 187 |
+
## Output
|
| 188 |
+
|
| 189 |
+
Each run lands under `~/.cache/statlens/runs/<run_id>/`:
|
| 190 |
+
|
| 191 |
+
```
|
| 192 |
+
out/
|
| 193 |
+
├── statlens_report.md # human-readable summary + reasoning
|
| 194 |
+
├── statlens_report.json # machine-readable sidecar
|
| 195 |
+
└── pipeline_output/
|
| 196 |
+
├── volcano_plot.png
|
| 197 |
+
├── PCA_plot.png
|
| 198 |
+
├── MA_plot.png
|
| 199 |
+
├── top_DE_genes_heatmap.png
|
| 200 |
+
├── top20_DE_genes_barplot.png
|
| 201 |
+
├── results.csv
|
| 202 |
+
├── significant_genes.csv
|
| 203 |
+
└── run.log
|
| 204 |
+
result.zip # everything above, packaged
|
| 205 |
+
```
|
| 206 |
+
|
| 207 |
+
The **Download all** button in the web UI returns `result.zip`.
|
| 208 |
+
|
| 209 |
+
---
|
| 210 |
+
|
| 211 |
+
## Pipeline labels
|
| 212 |
+
|
| 213 |
+
statLens classifies a study into one of **13** DEA scenarios, or returns
|
| 214 |
+
`none_of_these` (a 14th "kill-switch" output) when the design falls outside
|
| 215 |
+
its training space.
|
| 216 |
+
|
| 217 |
+
| family | label | when |
|
| 218 |
+
|---|---|---|
|
| 219 |
+
| Count (DESeq2) | `Count_DESeq2_basic` | 2 groups, no batch / time / pairing |
|
| 220 |
+
| | `Count_DESeq2_with_batch` | 2 groups + batch covariate |
|
| 221 |
+
| | `Count_DESeq2_paired_or_repeated` | matched samples within subject |
|
| 222 |
+
| | `Count_DESeq2_multi_group` | ≥ 3 independent groups |
|
| 223 |
+
| | `Count_DESeq2_time_course` | single cohort, ≥ 3 time points |
|
| 224 |
+
| | `Count_DESeq2_group_time_interaction` | ≥ 2 groups × multiple time points |
|
| 225 |
+
| | `Count_DESeq2_ZINB` | counts dominated by zeros (>40 %), e.g. 16S |
|
| 226 |
+
| Continuous (limma) | `Continuous_limma_basic` | 2 groups, no batch / time / pairing |
|
| 227 |
+
| | `Continuous_limma_with_batch` | 2 groups + batch covariate |
|
| 228 |
+
| | `Continuous_limma_paired_or_repeated` | pre/post or matched samples |
|
| 229 |
+
| | `Continuous_limma_multi_group` | ≥ 3 independent groups |
|
| 230 |
+
| | `Continuous_limma_time_course` | single cohort, ≥ 3 time points |
|
| 231 |
+
| | `Continuous_limma_group_time_interaction` | groups × time within subject |
|
| 232 |
+
| (decline) | `none_of_these` | survival / network inference / single-sample / non-omics — no forced fit |
|
| 233 |
+
|
| 234 |
+
---
|
| 235 |
+
|
| 236 |
+
## Schema review is your responsibility
|
| 237 |
+
|
| 238 |
+
Stage 1 extracts a 21-field SchemaSummary from your TSV; you review and
|
| 239 |
+
optionally edit it before stage 3 picks the pipeline. statLens trusts
|
| 240 |
+
the schema you confirm:
|
| 241 |
+
|
| 242 |
+
- If a column-name field (e.g. `subject_id_column`, `time_variable_column`,
|
| 243 |
+
`batch_variables`, `primary_group_variable`) **points to a column that
|
| 244 |
+
doesn't exist in your TSV**, the adapter raises `ValueError` rather
|
| 245 |
+
than silently falling back to a similar-named column. Fix the typo or
|
| 246 |
+
the missing column before re-running.
|
| 247 |
+
- If `reference_level` is set but isn't one of the observed levels, the
|
| 248 |
+
adapter likewise raises.
|
| 249 |
+
- If a column-name field is **left empty**, the adapter falls back to its
|
| 250 |
+
built-in canonical names (`subject_id`, `time_day`, `batch`, …) and a
|
| 251 |
+
regex pattern. So leave fields blank when you want auto-detection;
|
| 252 |
+
only fill them in for strict matching.
|
| 253 |
+
|
| 254 |
+
The `manifest` written under `<run>/_cache/adapt_manifest.json` records
|
| 255 |
+
the exact resolved column names (`resolved_design_col`,
|
| 256 |
+
`resolved_time_col`, `resolved_subject_col`, `resolved_batch_col`,
|
| 257 |
+
`resolved_ref_level`, `feature_prefix_used`) — handy for debugging.
|
| 258 |
+
|
| 259 |
+
---
|
| 260 |
+
|
| 261 |
+
## Headless server: reaching `localhost:7860` from elsewhere
|
| 262 |
+
|
| 263 |
+
If `statlens serve` cannot open a browser (AutoDL, RunPod, Lambda, …), use
|
| 264 |
+
one of these:
|
| 265 |
+
|
| 266 |
+
| | command | works for |
|
| 267 |
+
|---|---|---|
|
| 268 |
+
| **Public URL** | `cloudflared tunnel --url http://localhost:7860` | any device, any network |
|
| 269 |
+
| **SSH tunnel** | `ssh -fNL 7860:localhost:7860 user@server` (run on your laptop) | quick local dev |
|
| 270 |
+
| **curl only** | `curl -X POST http://localhost:7860/api/run -F "context=..." -F "tsv=@data.tsv"` | scripting / no browser |
|
| 271 |
+
|
| 272 |
+
---
|
| 273 |
+
|
| 274 |
+
## Subcommands
|
| 275 |
+
|
| 276 |
+
```
|
| 277 |
+
statlens serve # main entry point
|
| 278 |
+
statlens download # pre-fetch the LoRA only (~1 GB)
|
| 279 |
+
statlens info # show GPU / cache / paths
|
| 280 |
+
statlens classify --tsv DATA --context CTX --out DIR
|
| 281 |
+
# one-shot CLI mode (no browser)
|
| 282 |
+
statlens --version
|
| 283 |
+
```
|
| 284 |
+
|
| 285 |
+
`statlens classify` runs both LLM stages back-to-back without a review pause —
|
| 286 |
+
useful for batch processing.
|
| 287 |
+
|
| 288 |
+
---
|
| 289 |
+
|
| 290 |
+
## API endpoints
|
| 291 |
+
|
| 292 |
+
| route | method | purpose |
|
| 293 |
+
|---|---|---|
|
| 294 |
+
| `/` | GET | serve the web UI |
|
| 295 |
+
| `/api/extract` | POST (multipart: `tsv`, `context`) | stage 1 — return a SchemaSummary |
|
| 296 |
+
| `/api/run_pipeline` | POST (form: `run_id`, `schema` JSON) | stage 3 — pick label + run pipeline |
|
| 297 |
+
| `/api/run` | POST (multipart: `tsv`, `context`) | legacy single-shot path (no review) |
|
| 298 |
+
| `/api/artifact/{run_id}/{filename}` | GET | fetch a single PNG/CSV |
|
| 299 |
+
| `/api/zip/{run_id}` | GET | fetch the packaged result |
|
| 300 |
+
| `/api/csv_preview/{run_id}/{filename}` | GET | first N rows of a result CSV as JSON |
|
| 301 |
+
|
| 302 |
+
---
|
| 303 |
+
|
| 304 |
+
## Models
|
| 305 |
+
|
| 306 |
+
| component | source | size | license |
|
| 307 |
+
|---|---|---|---|
|
| 308 |
+
| base | [`Qwen/Qwen3-32B`](https://huggingface.co/Qwen/Qwen3-32B) (BF16) | 64 GB | Apache-2.0 |
|
| 309 |
+
| LoRA | [`domizzz2025/statLens`](https://huggingface.co/domizzz2025/statLens) | 1 GB | Apache-2.0 |
|
| 310 |
+
|
| 311 |
+
The LoRA is auto-downloaded on first run; the base model is yours to provide.
|
| 312 |
+
|
| 313 |
+
---
|
| 314 |
+
|
| 315 |
+
## Troubleshooting
|
| 316 |
+
|
| 317 |
+
| symptom | fix |
|
| 318 |
+
|---|---|
|
| 319 |
+
| `Network is unreachable` during `pip install` (mainland China) | `export HF_ENDPOINT=https://hf-mirror.com` and retry |
|
| 320 |
+
| `LocalEntryNotFoundError` when LoRA auto-fetches | same as above — set `HF_ENDPOINT` before `statlens serve` |
|
| 321 |
+
| `no base model found` | put Qwen3-32B in one of the auto-search paths, or pass `--base-model PATH` |
|
| 322 |
+
| `CUDA out of memory` on startup | a previous `statlens serve` is still holding GPU memory: `pkill -9 -f statlens; nvidia-smi --query-compute-apps=pid --format=csv,noheader \| xargs -r kill -9` |
|
| 323 |
+
| `address already in use` | a previous instance is bound — kill it first |
|
| 324 |
+
| LLM never becomes ready | tail `~/.cache/statlens/llm.log` to see the LLaMA-Factory error |
|
| 325 |
+
| schema field looks wrong in the browser | edit it directly; the LLM picks the label from your edits, not the original extraction |
|
| 326 |
+
| `Schema specified <field>=…, but no such column in TSV` | a column-name field in the schema doesn't match your TSV. Either fix the field, or clear it to use auto-detection. |
|
| 327 |
+
| `Schema reference_level=… not in observed levels` | `reference_level` doesn't match any actual group level. Set it to one of the values shown in `group_levels`, or clear it. |
|
| 328 |
+
| `No feature columns found. Expected one of these prefixes: …` | rename your feature columns to start with `gene_` / `asv_` / `prot_` / `metab_` / `otu_` / `feat_`. |
|
| 329 |
+
| `upload exceeds N MB limit` | raise the cap with `STATLENS_MAX_UPLOAD_MB=500 statlens serve` (default 100 MB). |
|
| 330 |
+
|
| 331 |
+
---
|
| 332 |
+
|
| 333 |
+
## Source · License
|
| 334 |
+
|
| 335 |
+
- Wheel + LoRA + source : <https://huggingface.co/domizzz2025/statLens>
|
| 336 |
+
- License : Apache-2.0
|
src/pyproject.toml
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[build-system]
|
| 2 |
+
requires = ["hatchling>=1.21"]
|
| 3 |
+
build-backend = "hatchling.build"
|
| 4 |
+
|
| 5 |
+
[project]
|
| 6 |
+
name = "statlens"
|
| 7 |
+
version = "0.1.7"
|
| 8 |
+
description = "Self-hosted DEA method selector — point a TSV at a Qwen3-32B + LoRA classifier and get the right DESeq2/limma pipeline auto-run."
|
| 9 |
+
readme = "README.md"
|
| 10 |
+
requires-python = ">=3.10"
|
| 11 |
+
license = { text = "Apache-2.0" }
|
| 12 |
+
authors = [
|
| 13 |
+
{ name = "statLens contributors" },
|
| 14 |
+
]
|
| 15 |
+
keywords = ["bioinformatics", "differential expression", "DESeq2", "limma", "LLM", "Qwen3", "vLLM"]
|
| 16 |
+
classifiers = [
|
| 17 |
+
"Development Status :: 3 - Alpha",
|
| 18 |
+
"Intended Audience :: Science/Research",
|
| 19 |
+
"License :: OSI Approved :: Apache Software License",
|
| 20 |
+
"Operating System :: POSIX :: Linux",
|
| 21 |
+
"Programming Language :: Python :: 3",
|
| 22 |
+
"Programming Language :: Python :: 3.10",
|
| 23 |
+
"Programming Language :: Python :: 3.11",
|
| 24 |
+
"Programming Language :: Python :: 3.12",
|
| 25 |
+
"Topic :: Scientific/Engineering :: Bio-Informatics",
|
| 26 |
+
]
|
| 27 |
+
|
| 28 |
+
dependencies = [
|
| 29 |
+
# web
|
| 30 |
+
"fastapi>=0.115",
|
| 31 |
+
"uvicorn[standard]>=0.30",
|
| 32 |
+
"python-multipart>=0.0.10",
|
| 33 |
+
"httpx>=0.27",
|
| 34 |
+
|
| 35 |
+
# serving — LLaMA-Factory wraps transformers + bitsandbytes for streamable bnb 4-bit
|
| 36 |
+
"llamafactory>=0.9,<1.0",
|
| 37 |
+
"bitsandbytes>=0.43",
|
| 38 |
+
"torch>=2.1",
|
| 39 |
+
# torchaudio 2.11+ requires CUDA 13; pin <2.11 to keep CUDA 12.x users happy.
|
| 40 |
+
# (llamafactory imports torchaudio unconditionally for multimodal templates.)
|
| 41 |
+
"torchaudio<2.11",
|
| 42 |
+
"transformers>=4.45",
|
| 43 |
+
"peft>=0.12",
|
| 44 |
+
"huggingface_hub>=0.25",
|
| 45 |
+
"pyyaml>=6.0",
|
| 46 |
+
|
| 47 |
+
# data + plots used by V4 pipelines
|
| 48 |
+
"pandas>=2.0",
|
| 49 |
+
"numpy>=1.26",
|
| 50 |
+
"matplotlib>=3.8",
|
| 51 |
+
"seaborn>=0.13",
|
| 52 |
+
"scipy>=1.13",
|
| 53 |
+
"statsmodels>=0.14",
|
| 54 |
+
"scikit-learn>=1.4",
|
| 55 |
+
|
| 56 |
+
# DESeq2 (pure Python; no R)
|
| 57 |
+
"pydeseq2>=0.5",
|
| 58 |
+
|
| 59 |
+
# CLI niceties
|
| 60 |
+
"rich>=13.0",
|
| 61 |
+
"click>=8.0",
|
| 62 |
+
]
|
| 63 |
+
|
| 64 |
+
[project.urls]
|
| 65 |
+
Homepage = "https://github.com/domi-fdz-zz/statLens"
|
| 66 |
+
Repository = "https://github.com/domi-fdz-zz/statLens"
|
| 67 |
+
Issues = "https://github.com/domi-fdz-zz/statLens/issues"
|
| 68 |
+
|
| 69 |
+
[project.scripts]
|
| 70 |
+
statlens = "statlens.cli:main"
|
| 71 |
+
|
| 72 |
+
[tool.hatch.build.targets.wheel]
|
| 73 |
+
packages = ["statlens"]
|
| 74 |
+
# data/ + pipelines/ are inside the package dir and picked up automatically;
|
| 75 |
+
# we only need to make sure they're not excluded.
|
| 76 |
+
include = [
|
| 77 |
+
"statlens/**/*.py",
|
| 78 |
+
"statlens/**/*.html",
|
| 79 |
+
"statlens/**/*.tsv",
|
| 80 |
+
"statlens/**/*.sh",
|
| 81 |
+
"statlens/**/*.md",
|
| 82 |
+
]
|
src/statlens/__init__.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""statLens — DEA method selector backed by Qwen3-32B + LoRA via LLaMA-Factory."""
|
| 2 |
+
|
| 3 |
+
__version__ = "0.1.7"
|
| 4 |
+
|
| 5 |
+
# Resource lookups inside the wheel
|
| 6 |
+
from importlib.resources import files
|
| 7 |
+
|
| 8 |
+
PKG_DATA = files(__name__) / "data"
|
| 9 |
+
PKG_PIPELINES = files(__name__) / "pipelines"
|
| 10 |
+
|
| 11 |
+
# Reference HF coordinates (informational; we DO NOT auto-download the base).
|
| 12 |
+
# Users must supply a local copy via --base-model PATH (or STATLENS_BASE_MODEL).
|
| 13 |
+
DEFAULT_BASE_MODEL_REF = "Qwen/Qwen3-32B" # 64 GB BF16
|
| 14 |
+
DEFAULT_LORA_REPO = "domizzz2025/statLens"
|
| 15 |
+
DEFAULT_LORA_SUBFOLDER = "qwen3_32b_lora_v1"
|
| 16 |
+
DEFAULT_LORA_RANK = 32
|
| 17 |
+
|
| 18 |
+
# Quantization: matches training (bitsandbytes NF4 4-bit).
|
| 19 |
+
# ~16 GB weights + KV cache → fits on a single 24 GB GPU.
|
| 20 |
+
DEFAULT_QUANTIZATION = "bitsandbytes"
|
| 21 |
+
|
| 22 |
+
# Local server defaults
|
| 23 |
+
LOCAL_LLM_PORT = 8000
|
| 24 |
+
LOCAL_WEB_PORT = 7860
|
src/statlens/adapter.py
ADDED
|
@@ -0,0 +1,466 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
adapter.py — Convert one wide-format TSV into the pair of CSVs the
|
| 3 |
+
statLens-V4 pipelines expect, using a SchemaSummary (when given) to
|
| 4 |
+
resolve column names + reference level.
|
| 5 |
+
|
| 6 |
+
For DESeq2-family labels this writes:
|
| 7 |
+
<outdir>/metadata.csv (index=sample_id, cols=design)
|
| 8 |
+
<outdir>/counts.csv (index=gene_id, cols=sample_id) -- transposed
|
| 9 |
+
|
| 10 |
+
For limma-family labels this writes:
|
| 11 |
+
<outdir>/metadata.csv
|
| 12 |
+
<outdir>/expression.csv (same shape as counts but log-scale continuous)
|
| 13 |
+
|
| 14 |
+
Resolution rules (locked, see plan v0.1.7):
|
| 15 |
+
|
| 16 |
+
Rule A Schema field non-empty → strict match in TSV; raise if not found.
|
| 17 |
+
Schema field empty (or no schema given) → fall back to the
|
| 18 |
+
canonical name from LABEL_SPEC, then to the regex pattern.
|
| 19 |
+
|
| 20 |
+
Rule B Reference level is resolved by _resolve_ref_level() with this
|
| 21 |
+
fallback chain:
|
| 22 |
+
1. schema.reference_level (if non-empty AND ∈ group_levels)
|
| 23 |
+
2. _infer_value_map() heuristic (2-group case)
|
| 24 |
+
3. LABEL_SPEC[label].ref_level (multi-group canonical)
|
| 25 |
+
4. sorted(group_levels)[0]
|
| 26 |
+
|
| 27 |
+
Rule C force_label callers should call _synth_schema_for_force_label()
|
| 28 |
+
(in statlens_run.py) — schema is mostly empty, fallback chain
|
| 29 |
+
carries the load.
|
| 30 |
+
"""
|
| 31 |
+
from __future__ import annotations
|
| 32 |
+
|
| 33 |
+
import argparse
|
| 34 |
+
import json
|
| 35 |
+
import re as _re
|
| 36 |
+
from pathlib import Path
|
| 37 |
+
|
| 38 |
+
import pandas as pd
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
# Per-label mapping: TSV columns/values → pipeline expectations.
|
| 42 |
+
# Used as canonical-name + ref_level fallback when schema doesn't supply.
|
| 43 |
+
LABEL_SPEC = {
|
| 44 |
+
"Count_DESeq2_basic": {
|
| 45 |
+
"family": "deseq2", "pipeline": "deseq2_basic",
|
| 46 |
+
"design_col": "group", "value_map": {"Control": "control", "Treated": "case"},
|
| 47 |
+
"ref_level": "control", "test_level": "case",
|
| 48 |
+
},
|
| 49 |
+
"Count_DESeq2_with_batch": {
|
| 50 |
+
"family": "deseq2", "pipeline": "deseq2_with_batch",
|
| 51 |
+
"design_col": "group", "value_map": {"Control": "control", "Treated": "case"},
|
| 52 |
+
"batch_col": "batch",
|
| 53 |
+
"ref_level": "control", "test_level": "case",
|
| 54 |
+
},
|
| 55 |
+
"Count_DESeq2_paired_or_repeated": {
|
| 56 |
+
"family": "deseq2", "pipeline": "deseq2_paired",
|
| 57 |
+
"design_col": "condition", "value_map": {"Normal": "control", "Tumor": "case"},
|
| 58 |
+
"subject_col": "subject_id",
|
| 59 |
+
"ref_level": "control", "test_level": "case",
|
| 60 |
+
},
|
| 61 |
+
"Count_DESeq2_multi_group": {
|
| 62 |
+
"family": "deseq2", "pipeline": "deseq2_multi_group",
|
| 63 |
+
"design_col": "tumor_stage", "value_map": None,
|
| 64 |
+
"ref_level": "Stage_I",
|
| 65 |
+
},
|
| 66 |
+
"Count_DESeq2_time_course": {
|
| 67 |
+
"family": "deseq2", "pipeline": "deseq2_time_course",
|
| 68 |
+
"time_col": "time_day", "baseline_time": "0",
|
| 69 |
+
},
|
| 70 |
+
"Count_DESeq2_group_time_interaction": {
|
| 71 |
+
"family": "deseq2", "pipeline": "deseq2_group_time_interaction",
|
| 72 |
+
"design_col": "group", "value_map": {"NonResponder": "control", "Responder": "case"},
|
| 73 |
+
"time_col": "time_day",
|
| 74 |
+
"ref_level": "control", "test_level": "case",
|
| 75 |
+
},
|
| 76 |
+
"Count_DESeq2_ZINB": {
|
| 77 |
+
"family": "deseq2", "pipeline": "deseq2_zinb",
|
| 78 |
+
"design_col": "condition", "value_map": {"Healthy": "control", "IBD": "case"},
|
| 79 |
+
"ref_level": "control", "test_level": "case",
|
| 80 |
+
},
|
| 81 |
+
"Continuous_limma_basic": {
|
| 82 |
+
"family": "limma", "pipeline": "limma_basic",
|
| 83 |
+
"design_col": "group", "value_map": {"Control": "control", "Case": "case"},
|
| 84 |
+
"ref_level": "control", "test_level": "case",
|
| 85 |
+
},
|
| 86 |
+
"Continuous_limma_with_batch": {
|
| 87 |
+
"family": "limma", "pipeline": "limma_with_batch",
|
| 88 |
+
"design_col": "group", "value_map": {"Control": "control", "Case": "case"},
|
| 89 |
+
"batch_col": "batch",
|
| 90 |
+
"ref_level": "control", "test_level": "case",
|
| 91 |
+
},
|
| 92 |
+
"Continuous_limma_paired_or_repeated": {
|
| 93 |
+
"family": "limma", "pipeline": "limma_paired",
|
| 94 |
+
"design_col": "timepoint", "value_map": {"Pre": "control", "Post": "case"},
|
| 95 |
+
"subject_col": "subject_id",
|
| 96 |
+
"ref_level": "control", "test_level": "case",
|
| 97 |
+
},
|
| 98 |
+
"Continuous_limma_multi_group": {
|
| 99 |
+
"family": "limma", "pipeline": "limma_multi_group",
|
| 100 |
+
"design_col": "subtype", "value_map": None,
|
| 101 |
+
"ref_level": "Subtype_A",
|
| 102 |
+
},
|
| 103 |
+
"Continuous_limma_time_course": {
|
| 104 |
+
"family": "limma", "pipeline": "limma_time_course",
|
| 105 |
+
"time_col": "time_hr", "baseline_time": "0",
|
| 106 |
+
},
|
| 107 |
+
"Continuous_limma_group_time_interaction": {
|
| 108 |
+
"family": "limma", "pipeline": "limma_group_time_interaction",
|
| 109 |
+
"design_col": "group", "value_map": {"Placebo": "control", "Drug": "case"},
|
| 110 |
+
"time_col": "time_week",
|
| 111 |
+
"ref_level": "control", "test_level": "case",
|
| 112 |
+
},
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
# Synced with raw_preview.py FEATURE_PREFIXES — must be 6 entries.
|
| 116 |
+
FEATURE_PREFIXES = ("gene_", "asv_", "prot_", "metab_", "otu_", "feat_")
|
| 117 |
+
|
| 118 |
+
DESIGN_PATTERNS = _re.compile(
|
| 119 |
+
r"(?i)(group|arm|cohort|status|condition|treatment|trtmt|drug|response|stage|"
|
| 120 |
+
r"subtype|class|phenotype|disease|case|outcome|label)"
|
| 121 |
+
)
|
| 122 |
+
TIME_PATTERNS = _re.compile(
|
| 123 |
+
r"(?i)(^time|time$|_time_|day|week|hour|hr|visit|tp_|baseline|collection_day|"
|
| 124 |
+
r"day_post|days_post|month|year|period)"
|
| 125 |
+
)
|
| 126 |
+
BATCH_PATTERNS = _re.compile(
|
| 127 |
+
r"(?i)(batch|site|run|plate|center|lane|lab|ms_batch|seq_run|library)"
|
| 128 |
+
)
|
| 129 |
+
SUBJECT_PATTERNS = _re.compile(
|
| 130 |
+
r"(?i)(subject|patient|participant|donor|individual|case_id)"
|
| 131 |
+
)
|
| 132 |
+
CONTROL_VALUE_KEYWORDS = (
|
| 133 |
+
"control", "ctrl", "healthy", "normal", "wt", "wildtype", "wild_type",
|
| 134 |
+
"placebo", "vehicle", "untreated", "baseline", "pre", "non", "no_",
|
| 135 |
+
"negative", "neg",
|
| 136 |
+
)
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 140 |
+
# Resolution helpers (Rule A / Rule B)
|
| 141 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 142 |
+
def _resolve_with_schema(
|
| 143 |
+
meta_cols: list[str],
|
| 144 |
+
schema_value: str,
|
| 145 |
+
canonical: str | None,
|
| 146 |
+
pattern: _re.Pattern,
|
| 147 |
+
exclude=None,
|
| 148 |
+
field_name: str = "column",
|
| 149 |
+
) -> str | None:
|
| 150 |
+
"""Rule A — schema-first column name resolution.
|
| 151 |
+
|
| 152 |
+
Priority:
|
| 153 |
+
1. schema_value non-empty:
|
| 154 |
+
- if it matches a column in meta_cols (case-insensitive) → return that column
|
| 155 |
+
- else → raise ValueError (don't silently fall back)
|
| 156 |
+
2. schema_value empty:
|
| 157 |
+
- try canonical (case-insensitive equality)
|
| 158 |
+
- try pattern.search()
|
| 159 |
+
- return None on miss (caller decides if that's fatal)
|
| 160 |
+
"""
|
| 161 |
+
exclude = set(exclude or ())
|
| 162 |
+
cols = [c for c in meta_cols if c not in exclude]
|
| 163 |
+
if schema_value:
|
| 164 |
+
# Strict mode: user/LLM said this column should exist.
|
| 165 |
+
for c in cols:
|
| 166 |
+
if c.lower() == schema_value.lower():
|
| 167 |
+
return c
|
| 168 |
+
raise ValueError(
|
| 169 |
+
f"Schema specified {field_name}={schema_value!r}, but no such column in TSV. "
|
| 170 |
+
f"Available metadata columns: {cols}"
|
| 171 |
+
)
|
| 172 |
+
if canonical:
|
| 173 |
+
for c in cols:
|
| 174 |
+
if c.lower() == canonical.lower():
|
| 175 |
+
return c
|
| 176 |
+
for c in cols:
|
| 177 |
+
if pattern.search(c):
|
| 178 |
+
return c
|
| 179 |
+
return None
|
| 180 |
+
|
| 181 |
+
|
| 182 |
+
def _infer_value_map(values, label):
|
| 183 |
+
"""For 2-level design, decide which value is 'control' vs 'case' via keywords."""
|
| 184 |
+
vals = [str(v) for v in pd.unique(pd.Series(values).dropna())]
|
| 185 |
+
if len(vals) != 2:
|
| 186 |
+
return None
|
| 187 |
+
|
| 188 |
+
def is_control(v):
|
| 189 |
+
vl = v.lower()
|
| 190 |
+
return any(kw in vl for kw in CONTROL_VALUE_KEYWORDS)
|
| 191 |
+
|
| 192 |
+
ctrl = next((v for v in vals if is_control(v)), None)
|
| 193 |
+
if ctrl is None:
|
| 194 |
+
ctrl = sorted(vals)[0]
|
| 195 |
+
case = [v for v in vals if v != ctrl][0]
|
| 196 |
+
return {ctrl: "control", case: "case"}
|
| 197 |
+
|
| 198 |
+
|
| 199 |
+
def _resolve_ref_level(
|
| 200 |
+
schema_ref: str,
|
| 201 |
+
group_levels: list[str],
|
| 202 |
+
label: str,
|
| 203 |
+
) -> str:
|
| 204 |
+
"""Rule B — fallback chain for the reference (control) level.
|
| 205 |
+
|
| 206 |
+
Priority:
|
| 207 |
+
1. schema_ref non-empty + in group_levels → use it
|
| 208 |
+
(non-empty + not in levels → raise)
|
| 209 |
+
2. _infer_value_map() heuristic for 2-group
|
| 210 |
+
3. LABEL_SPEC[label].ref_level if present in group_levels
|
| 211 |
+
4. sorted(group_levels)[0]
|
| 212 |
+
5. raise if no levels at all
|
| 213 |
+
"""
|
| 214 |
+
if schema_ref:
|
| 215 |
+
if schema_ref in group_levels:
|
| 216 |
+
return schema_ref
|
| 217 |
+
raise ValueError(
|
| 218 |
+
f"Schema reference_level={schema_ref!r} not in observed levels {group_levels}"
|
| 219 |
+
)
|
| 220 |
+
|
| 221 |
+
if len(group_levels) == 2:
|
| 222 |
+
vm = _infer_value_map(group_levels, label)
|
| 223 |
+
if vm:
|
| 224 |
+
ctrl = next((k for k, v in vm.items() if v == "control"), None)
|
| 225 |
+
if ctrl:
|
| 226 |
+
return ctrl
|
| 227 |
+
|
| 228 |
+
spec_ref = LABEL_SPEC.get(label, {}).get("ref_level")
|
| 229 |
+
if spec_ref and spec_ref in group_levels:
|
| 230 |
+
return spec_ref
|
| 231 |
+
|
| 232 |
+
if group_levels:
|
| 233 |
+
return sorted(group_levels)[0]
|
| 234 |
+
|
| 235 |
+
raise ValueError(f"No group levels found in TSV for label {label}")
|
| 236 |
+
|
| 237 |
+
|
| 238 |
+
def split_meta_feat(df: pd.DataFrame):
|
| 239 |
+
"""Return (meta_df, feat_df). Feat cols detected by FEATURE_PREFIXES."""
|
| 240 |
+
feat_cols = [c for c in df.columns if c.startswith(FEATURE_PREFIXES)]
|
| 241 |
+
meta_cols = [c for c in df.columns if c not in feat_cols]
|
| 242 |
+
return df[meta_cols], df[feat_cols]
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
def _detect_feature_prefix(feat_cols: list[str]) -> str | None:
|
| 246 |
+
"""Return the dominant prefix among feat_cols (or None if empty)."""
|
| 247 |
+
if not feat_cols:
|
| 248 |
+
return None
|
| 249 |
+
counts = {p: sum(c.startswith(p) for c in feat_cols) for p in FEATURE_PREFIXES}
|
| 250 |
+
return max(counts, key=lambda p: counts[p]) if any(counts.values()) else None
|
| 251 |
+
|
| 252 |
+
|
| 253 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 254 |
+
# Main entry point
|
| 255 |
+
# ─────────────────────��───────────────────────────────────────────────
|
| 256 |
+
def adapt(
|
| 257 |
+
tsv_path: Path,
|
| 258 |
+
label: str,
|
| 259 |
+
outdir: Path,
|
| 260 |
+
schema: dict | None = None,
|
| 261 |
+
):
|
| 262 |
+
spec = LABEL_SPEC[label]
|
| 263 |
+
outdir.mkdir(parents=True, exist_ok=True)
|
| 264 |
+
|
| 265 |
+
df = pd.read_csv(tsv_path, sep="\t")
|
| 266 |
+
meta, feat = split_meta_feat(df)
|
| 267 |
+
|
| 268 |
+
if "sample_id" not in meta.columns:
|
| 269 |
+
raise ValueError(f"{tsv_path.name} missing sample_id column")
|
| 270 |
+
|
| 271 |
+
# ───── Early validation: feature columns ─────
|
| 272 |
+
if feat.shape[1] == 0:
|
| 273 |
+
cols_preview = list(df.columns)[:10]
|
| 274 |
+
more = "..." if len(df.columns) > 10 else ""
|
| 275 |
+
raise ValueError(
|
| 276 |
+
f"No feature columns found. Expected one of these prefixes: "
|
| 277 |
+
f"{FEATURE_PREFIXES}. Got columns: {cols_preview}{more}"
|
| 278 |
+
)
|
| 279 |
+
|
| 280 |
+
feature_prefix_used = _detect_feature_prefix(list(feat.columns))
|
| 281 |
+
|
| 282 |
+
# ───── Resolve column names (Rule A) ─────
|
| 283 |
+
meta_out = meta.set_index("sample_id").copy()
|
| 284 |
+
meta_cols_avail = list(meta_out.columns)
|
| 285 |
+
|
| 286 |
+
s = schema or {}
|
| 287 |
+
resolved_design = None
|
| 288 |
+
resolved_time = None
|
| 289 |
+
resolved_subject = None
|
| 290 |
+
resolved_batch = None
|
| 291 |
+
resolved_ref = None
|
| 292 |
+
|
| 293 |
+
if "design_col" in spec:
|
| 294 |
+
resolved_design = _resolve_with_schema(
|
| 295 |
+
meta_cols_avail,
|
| 296 |
+
schema_value=s.get("primary_group_variable", ""),
|
| 297 |
+
canonical=spec.get("design_col"),
|
| 298 |
+
pattern=DESIGN_PATTERNS,
|
| 299 |
+
exclude={"sample_id", "subject_id"},
|
| 300 |
+
field_name="primary_group_variable",
|
| 301 |
+
)
|
| 302 |
+
if resolved_design is None:
|
| 303 |
+
raise ValueError(
|
| 304 |
+
f"Label {label!r} requires a design (group/condition) column "
|
| 305 |
+
f"but none found. Available metadata cols: {meta_cols_avail}"
|
| 306 |
+
)
|
| 307 |
+
if resolved_design != "condition":
|
| 308 |
+
if "condition" in meta_out.columns:
|
| 309 |
+
meta_out = meta_out.drop(columns=["condition"])
|
| 310 |
+
meta_out = meta_out.rename(columns={resolved_design: "condition"})
|
| 311 |
+
|
| 312 |
+
# Resolve ref_level (Rule B) and remap values to control/case as needed.
|
| 313 |
+
# NOTE: _resolve_ref_level raises if schema.reference_level is non-empty
|
| 314 |
+
# but not in observed levels — this raise must propagate so the
|
| 315 |
+
# caller sees the strict-match violation, per plan Rule A.
|
| 316 |
+
if "condition" in meta_out.columns:
|
| 317 |
+
unique_user = [str(v) for v in pd.unique(meta_out["condition"])]
|
| 318 |
+
resolved_ref = _resolve_ref_level(
|
| 319 |
+
s.get("reference_level", ""),
|
| 320 |
+
unique_user,
|
| 321 |
+
label,
|
| 322 |
+
)
|
| 323 |
+
# Build value_map: pin resolved_ref → "control"
|
| 324 |
+
vm = None
|
| 325 |
+
if len(unique_user) == 2 and resolved_ref:
|
| 326 |
+
case_val = next((v for v in unique_user if v != resolved_ref), None)
|
| 327 |
+
if case_val:
|
| 328 |
+
vm = {resolved_ref: "control", case_val: "case"}
|
| 329 |
+
if vm:
|
| 330 |
+
meta_out["condition"] = (
|
| 331 |
+
meta_out["condition"].map(vm).fillna(meta_out["condition"])
|
| 332 |
+
)
|
| 333 |
+
|
| 334 |
+
if "time_col" in spec:
|
| 335 |
+
resolved_time = _resolve_with_schema(
|
| 336 |
+
meta_cols_avail,
|
| 337 |
+
schema_value=s.get("time_variable_column", ""),
|
| 338 |
+
canonical=spec.get("time_col"),
|
| 339 |
+
pattern=TIME_PATTERNS,
|
| 340 |
+
exclude={"sample_id", "subject_id", resolved_design},
|
| 341 |
+
field_name="time_variable_column",
|
| 342 |
+
)
|
| 343 |
+
if resolved_time is None:
|
| 344 |
+
raise ValueError(
|
| 345 |
+
f"Label {label!r} requires a time column but none found. "
|
| 346 |
+
f"Available metadata cols: {meta_cols_avail}"
|
| 347 |
+
)
|
| 348 |
+
if resolved_time != "time":
|
| 349 |
+
meta_out = meta_out.rename(columns={resolved_time: "time"})
|
| 350 |
+
|
| 351 |
+
if "subject_col" in spec:
|
| 352 |
+
resolved_subject = _resolve_with_schema(
|
| 353 |
+
meta_cols_avail,
|
| 354 |
+
schema_value=s.get("subject_id_column", ""),
|
| 355 |
+
canonical=spec.get("subject_col"),
|
| 356 |
+
pattern=SUBJECT_PATTERNS,
|
| 357 |
+
exclude={"sample_id"},
|
| 358 |
+
field_name="subject_id_column",
|
| 359 |
+
)
|
| 360 |
+
if resolved_subject is None:
|
| 361 |
+
raise ValueError(
|
| 362 |
+
f"Label {label!r} requires a subject id column but none found. "
|
| 363 |
+
f"Available metadata cols: {meta_cols_avail}"
|
| 364 |
+
)
|
| 365 |
+
if resolved_subject != "subject":
|
| 366 |
+
meta_out = meta_out.rename(columns={resolved_subject: "subject"})
|
| 367 |
+
|
| 368 |
+
if "batch_col" in spec:
|
| 369 |
+
# batch_variables is a list — take the first non-empty
|
| 370 |
+
bv_list = s.get("batch_variables") or []
|
| 371 |
+
bv_first = bv_list[0] if bv_list else ""
|
| 372 |
+
resolved_batch = _resolve_with_schema(
|
| 373 |
+
meta_cols_avail,
|
| 374 |
+
schema_value=bv_first,
|
| 375 |
+
canonical=spec.get("batch_col"),
|
| 376 |
+
pattern=BATCH_PATTERNS,
|
| 377 |
+
exclude={"sample_id", "subject_id", resolved_design, resolved_time},
|
| 378 |
+
field_name="batch_variables[0]",
|
| 379 |
+
)
|
| 380 |
+
if resolved_batch is None:
|
| 381 |
+
raise ValueError(
|
| 382 |
+
f"Label {label!r} requires a batch column but none found. "
|
| 383 |
+
f"Available metadata cols: {meta_cols_avail}"
|
| 384 |
+
)
|
| 385 |
+
if resolved_batch != "batch":
|
| 386 |
+
meta_out = meta_out.rename(columns={resolved_batch: "batch"})
|
| 387 |
+
|
| 388 |
+
# Pattern A fix: time-course pipelines' PCA script demands a 'condition'
|
| 389 |
+
# column for coloring, but time-course data is single-cohort. Inject a
|
| 390 |
+
# dummy condition so PCA can render (single-color scatter).
|
| 391 |
+
if "condition" not in meta_out.columns and "time_col" in spec:
|
| 392 |
+
meta_out["condition"] = "cohort"
|
| 393 |
+
|
| 394 |
+
meta_out.to_csv(outdir / "metadata.csv")
|
| 395 |
+
|
| 396 |
+
# ───── 2. counts.csv / expression.csv ─────
|
| 397 |
+
feat_t = feat.copy()
|
| 398 |
+
feat_t.index = pd.Index(meta["sample_id"].tolist())
|
| 399 |
+
feat_t = feat_t.T
|
| 400 |
+
feat_t.index.name = "feature_id"
|
| 401 |
+
|
| 402 |
+
if spec["family"] == "deseq2":
|
| 403 |
+
feat_t = feat_t.astype(int).clip(lower=0)
|
| 404 |
+
feat_t.to_csv(outdir / "counts.csv")
|
| 405 |
+
data_filename = "counts.csv"
|
| 406 |
+
else:
|
| 407 |
+
feat_t.to_csv(outdir / "expression.csv")
|
| 408 |
+
data_filename = "expression.csv"
|
| 409 |
+
|
| 410 |
+
# ───── 3. extras for run_pipeline.sh ─────
|
| 411 |
+
extras = []
|
| 412 |
+
if "batch_col" in spec:
|
| 413 |
+
extras.append("batch")
|
| 414 |
+
if "subject_col" in spec:
|
| 415 |
+
extras.append("subject")
|
| 416 |
+
if "time_col" in spec:
|
| 417 |
+
extras.append("time")
|
| 418 |
+
if "baseline_time" in spec:
|
| 419 |
+
extras.append(str(spec["baseline_time"]))
|
| 420 |
+
if spec.get("ref_level") and spec["pipeline"] in (
|
| 421 |
+
"deseq2_multi_group", "limma_multi_group"
|
| 422 |
+
):
|
| 423 |
+
# multi_group takes ref_level as positional. Use resolved_ref if available.
|
| 424 |
+
ref_for_pipeline = resolved_ref or spec["ref_level"]
|
| 425 |
+
extras.append(ref_for_pipeline)
|
| 426 |
+
|
| 427 |
+
manifest = {
|
| 428 |
+
"label": label,
|
| 429 |
+
"pipeline": spec["pipeline"],
|
| 430 |
+
"family": spec["family"],
|
| 431 |
+
"data_file": data_filename,
|
| 432 |
+
"extras_positional": extras,
|
| 433 |
+
"n_samples": len(meta),
|
| 434 |
+
"n_features": feat.shape[1],
|
| 435 |
+
# Debug fields (Codex review v0.1.7):
|
| 436 |
+
"resolved_design_col": resolved_design,
|
| 437 |
+
"resolved_time_col": resolved_time,
|
| 438 |
+
"resolved_subject_col": resolved_subject,
|
| 439 |
+
"resolved_batch_col": resolved_batch,
|
| 440 |
+
"resolved_ref_level": resolved_ref,
|
| 441 |
+
"feature_prefix_used": feature_prefix_used,
|
| 442 |
+
"schema_used": schema is not None,
|
| 443 |
+
}
|
| 444 |
+
(outdir / "adapt_manifest.json").write_text(json.dumps(manifest, indent=2))
|
| 445 |
+
return manifest
|
| 446 |
+
|
| 447 |
+
|
| 448 |
+
def main():
|
| 449 |
+
ap = argparse.ArgumentParser()
|
| 450 |
+
ap.add_argument("--tsv", required=True)
|
| 451 |
+
ap.add_argument("--label", required=True)
|
| 452 |
+
ap.add_argument("--outdir", required=True)
|
| 453 |
+
ap.add_argument("--schema", default=None,
|
| 454 |
+
help="optional JSON file with SchemaSummary")
|
| 455 |
+
args = ap.parse_args()
|
| 456 |
+
|
| 457 |
+
schema = None
|
| 458 |
+
if args.schema:
|
| 459 |
+
schema = json.loads(Path(args.schema).read_text())
|
| 460 |
+
|
| 461 |
+
manifest = adapt(Path(args.tsv), args.label, Path(args.outdir), schema=schema)
|
| 462 |
+
print(json.dumps(manifest, indent=2))
|
| 463 |
+
|
| 464 |
+
|
| 465 |
+
if __name__ == "__main__":
|
| 466 |
+
main()
|
src/statlens/classifier.py
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
classifier.py — two LLM calls for the 0.1.6 two-stage flow.
|
| 3 |
+
|
| 4 |
+
extract_schema(study_context, preview) → SchemaSummary (no label)
|
| 5 |
+
pick_label (schema, study_context) → (label, reasoning)
|
| 6 |
+
|
| 7 |
+
The orchestrator (statlens_run.py) drives both. Each call is independent —
|
| 8 |
+
the user can edit the schema between them, and the label decision uses the
|
| 9 |
+
edited schema.
|
| 10 |
+
"""
|
| 11 |
+
from __future__ import annotations
|
| 12 |
+
|
| 13 |
+
import json
|
| 14 |
+
import re
|
| 15 |
+
from dataclasses import dataclass, field
|
| 16 |
+
|
| 17 |
+
import httpx
|
| 18 |
+
|
| 19 |
+
from .prompts import (
|
| 20 |
+
LABELS,
|
| 21 |
+
build_extract_messages,
|
| 22 |
+
build_label_messages,
|
| 23 |
+
)
|
| 24 |
+
from .schema_spec import coerce_and_validate, default_schema
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
@dataclass
|
| 28 |
+
class ExtractResult:
|
| 29 |
+
"""Output of stage 1: just the schema, no label."""
|
| 30 |
+
schema: dict
|
| 31 |
+
raw: str
|
| 32 |
+
schema_warnings: list[str] = field(default_factory=list)
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
@dataclass
|
| 36 |
+
class LabelResult:
|
| 37 |
+
"""Output of stage 3: a label picked from a (confirmed) schema."""
|
| 38 |
+
label: str
|
| 39 |
+
reasoning: str
|
| 40 |
+
raw: str
|
| 41 |
+
valid: bool # whether label is in LABELS
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
def _extract_json_object(text: str) -> dict | None:
|
| 45 |
+
"""Find the largest balanced JSON object in a blob of text."""
|
| 46 |
+
try:
|
| 47 |
+
return json.loads(text.strip())
|
| 48 |
+
except Exception:
|
| 49 |
+
pass
|
| 50 |
+
starts = [i for i, c in enumerate(text) if c == "{"]
|
| 51 |
+
for s in starts:
|
| 52 |
+
depth = 0
|
| 53 |
+
for i in range(s, len(text)):
|
| 54 |
+
if text[i] == "{":
|
| 55 |
+
depth += 1
|
| 56 |
+
elif text[i] == "}":
|
| 57 |
+
depth -= 1
|
| 58 |
+
if depth == 0:
|
| 59 |
+
cand = text[s:i+1]
|
| 60 |
+
try:
|
| 61 |
+
return json.loads(cand)
|
| 62 |
+
except Exception:
|
| 63 |
+
break
|
| 64 |
+
matches = re.findall(r"\{[^{}]*\}", text, re.DOTALL)
|
| 65 |
+
for m in sorted(matches, key=len, reverse=True):
|
| 66 |
+
try:
|
| 67 |
+
return json.loads(m)
|
| 68 |
+
except Exception:
|
| 69 |
+
continue
|
| 70 |
+
return None
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
def _post_chat(endpoint: str, messages: list[dict], model: str,
|
| 74 |
+
api_key: str, timeout: float, max_tokens: int) -> str:
|
| 75 |
+
url = endpoint.rstrip("/") + "/chat/completions"
|
| 76 |
+
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
|
| 77 |
+
body = {"model": model, "messages": messages,
|
| 78 |
+
"temperature": 0.0, "max_tokens": max_tokens}
|
| 79 |
+
with httpx.Client(timeout=timeout) as client:
|
| 80 |
+
r = client.post(url, json=body, headers=headers)
|
| 81 |
+
r.raise_for_status()
|
| 82 |
+
data = r.json()
|
| 83 |
+
return data["choices"][0]["message"]["content"]
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 87 |
+
# Stage 1 — extract schema only
|
| 88 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 89 |
+
def extract_schema(
|
| 90 |
+
study_context: str,
|
| 91 |
+
preview: str,
|
| 92 |
+
endpoint: str,
|
| 93 |
+
model: str = "statlens",
|
| 94 |
+
api_key: str = "dummy",
|
| 95 |
+
timeout: float = 120.0,
|
| 96 |
+
) -> ExtractResult:
|
| 97 |
+
"""Call LLM, parse the structured SchemaSummary. No label here."""
|
| 98 |
+
messages = build_extract_messages(study_context, preview)
|
| 99 |
+
raw = _post_chat(endpoint, messages, model, api_key, timeout, max_tokens=1200)
|
| 100 |
+
|
| 101 |
+
obj = _extract_json_object(raw)
|
| 102 |
+
if obj is None:
|
| 103 |
+
return ExtractResult(
|
| 104 |
+
schema=default_schema(), raw=raw,
|
| 105 |
+
schema_warnings=["LLM output was not valid JSON; using defaults"],
|
| 106 |
+
)
|
| 107 |
+
|
| 108 |
+
# Some models nest the schema under a "schema" key — accept either.
|
| 109 |
+
if isinstance(obj.get("schema"), dict):
|
| 110 |
+
obj = obj["schema"]
|
| 111 |
+
|
| 112 |
+
schema, warns = coerce_and_validate(obj)
|
| 113 |
+
return ExtractResult(schema=schema, raw=raw, schema_warnings=warns)
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 117 |
+
# Stage 3 — pick label given a (confirmed) schema
|
| 118 |
+
# ─────────────────────────────────────────────────────────────────────
|
| 119 |
+
def pick_label(
|
| 120 |
+
schema: dict,
|
| 121 |
+
study_context: str,
|
| 122 |
+
endpoint: str,
|
| 123 |
+
model: str = "statlens",
|
| 124 |
+
api_key: str = "dummy",
|
| 125 |
+
timeout: float = 60.0,
|
| 126 |
+
) -> LabelResult:
|
| 127 |
+
"""Call LLM with the schema rendered as natural-language bullets."""
|
| 128 |
+
messages = build_label_messages(study_context, schema)
|
| 129 |
+
raw = _post_chat(endpoint, messages, model, api_key, timeout, max_tokens=400)
|
| 130 |
+
|
| 131 |
+
obj = _extract_json_object(raw)
|
| 132 |
+
if obj is None:
|
| 133 |
+
return LabelResult(
|
| 134 |
+
label="none_of_these",
|
| 135 |
+
reasoning="(failed to parse JSON from model)",
|
| 136 |
+
raw=raw, valid=False,
|
| 137 |
+
)
|
| 138 |
+
|
| 139 |
+
label = str(obj.get("label", "")).strip()
|
| 140 |
+
reasoning = str(obj.get("reasoning", "")).strip()
|
| 141 |
+
valid = label in LABELS
|
| 142 |
+
if not valid:
|
| 143 |
+
# Normalize case-insensitive matches before giving up.
|
| 144 |
+
for cand in LABELS:
|
| 145 |
+
if cand.lower() == label.lower():
|
| 146 |
+
label = cand
|
| 147 |
+
valid = True
|
| 148 |
+
break
|
| 149 |
+
return LabelResult(label=label, reasoning=reasoning, raw=raw, valid=valid)
|
| 150 |
+
|
| 151 |
+
|
| 152 |
+
if __name__ == "__main__":
|
| 153 |
+
import argparse
|
| 154 |
+
from pathlib import Path
|
| 155 |
+
from .raw_preview import build_raw_preview
|
| 156 |
+
|
| 157 |
+
ap = argparse.ArgumentParser()
|
| 158 |
+
ap.add_argument("--context", required=True)
|
| 159 |
+
ap.add_argument("--tsv", required=True)
|
| 160 |
+
ap.add_argument("--endpoint", required=True)
|
| 161 |
+
ap.add_argument("--model", default="statlens")
|
| 162 |
+
ap.add_argument("--api-key", default="dummy")
|
| 163 |
+
args = ap.parse_args()
|
| 164 |
+
|
| 165 |
+
ctx = Path(args.context).read_text()
|
| 166 |
+
preview = build_raw_preview(Path(args.tsv))
|
| 167 |
+
|
| 168 |
+
print("=== Stage 1: extract schema ===")
|
| 169 |
+
er = extract_schema(ctx, preview, args.endpoint, args.model, args.api_key)
|
| 170 |
+
print(f" warnings : {er.schema_warnings}")
|
| 171 |
+
print(json.dumps(er.schema, indent=2))
|
| 172 |
+
|
| 173 |
+
print("\n=== Stage 3: pick label (using LLM-extracted schema verbatim) ===")
|
| 174 |
+
lr = pick_label(er.schema, ctx, args.endpoint, args.model, args.api_key)
|
| 175 |
+
print(f" label : {lr.label} (valid={lr.valid})")
|
| 176 |
+
print(f" reasoning: {lr.reasoning}")
|
src/statlens/cli.py
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
statlens — command-line entry point.
|
| 3 |
+
|
| 4 |
+
Subcommands:
|
| 5 |
+
statlens serve spin up local LLM backend + FastAPI; open browser
|
| 6 |
+
statlens download fetch the LoRA adapter into the HF cache
|
| 7 |
+
(NOT the 64 GB base — that's the user's job)
|
| 8 |
+
statlens info show GPU / cache state / paths
|
| 9 |
+
statlens classify one-shot CLI run (TSV + context.txt → result folder)
|
| 10 |
+
"""
|
| 11 |
+
from __future__ import annotations
|
| 12 |
+
|
| 13 |
+
import os
|
| 14 |
+
import signal
|
| 15 |
+
import sys
|
| 16 |
+
import webbrowser
|
| 17 |
+
|
| 18 |
+
import click
|
| 19 |
+
|
| 20 |
+
from . import (
|
| 21 |
+
__version__,
|
| 22 |
+
DEFAULT_BASE_MODEL_REF,
|
| 23 |
+
DEFAULT_LORA_REPO,
|
| 24 |
+
DEFAULT_LORA_SUBFOLDER,
|
| 25 |
+
DEFAULT_QUANTIZATION,
|
| 26 |
+
LOCAL_LLM_PORT,
|
| 27 |
+
LOCAL_WEB_PORT,
|
| 28 |
+
)
|
| 29 |
+
from . import runtime
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def _common_serve_opts(f):
|
| 33 |
+
"""Decorator that attaches the model/LoRA/quantization options shared by
|
| 34 |
+
`serve` and `classify`.
|
| 35 |
+
|
| 36 |
+
The LLM backend is LLaMA-Factory (`llamafactory-cli api`); options here
|
| 37 |
+
map directly to its YAML config.
|
| 38 |
+
"""
|
| 39 |
+
f = click.option("--quantization", default=DEFAULT_QUANTIZATION,
|
| 40 |
+
type=click.Choice(["bitsandbytes", "awq", "gptq", "none"]),
|
| 41 |
+
show_default=True,
|
| 42 |
+
help="LLM weight-quantization mode (passed to LLaMA-Factory)")(f)
|
| 43 |
+
f = click.option("--lora-path", default=None, type=click.Path(),
|
| 44 |
+
help="local path to the LoRA folder; "
|
| 45 |
+
"if omitted, downloaded from HF")(f)
|
| 46 |
+
f = click.option("--base-model", default=None, type=click.Path(),
|
| 47 |
+
help="local path to the BF16 base model directory; "
|
| 48 |
+
"if omitted, auto-detect from common paths "
|
| 49 |
+
"(~/models/qwen3-32b, /root/autodl-tmp/..., HF cache)")(f)
|
| 50 |
+
return f
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
@click.group(context_settings={"help_option_names": ["-h", "--help"]})
|
| 54 |
+
@click.version_option(__version__, prog_name="statlens")
|
| 55 |
+
def main():
|
| 56 |
+
"""statLens — DEA method selector. See `statlens serve --help`."""
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
# ─────────────────────────────── serve ───────────────────────────────
|
| 60 |
+
@main.command()
|
| 61 |
+
@_common_serve_opts
|
| 62 |
+
@click.option("--web-port", default=LOCAL_WEB_PORT, show_default=True, type=int)
|
| 63 |
+
@click.option("--llm-port", default=LOCAL_LLM_PORT, show_default=True, type=int)
|
| 64 |
+
@click.option("--no-browser", is_flag=True, help="don't auto-open browser")
|
| 65 |
+
@click.option("--no-gpu-check", is_flag=True, help="skip GPU sanity check")
|
| 66 |
+
def serve(base_model, lora_path, quantization,
|
| 67 |
+
web_port, llm_port, no_browser, no_gpu_check):
|
| 68 |
+
"""Start the LLM backend (LLaMA-Factory) + the web app on http://localhost:7860 ."""
|
| 69 |
+
if not no_gpu_check:
|
| 70 |
+
runtime.check_gpu()
|
| 71 |
+
|
| 72 |
+
base_path = runtime.resolve_base_model(base_model)
|
| 73 |
+
lora_path = runtime.ensure_lora_cached(lora_path)
|
| 74 |
+
|
| 75 |
+
llm_proc = runtime.start_server(
|
| 76 |
+
base_path, lora_path,
|
| 77 |
+
port=llm_port,
|
| 78 |
+
quantization=quantization,
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
def shutdown(signum=None, frame=None):
|
| 82 |
+
runtime.stop_server(llm_proc)
|
| 83 |
+
sys.exit(0)
|
| 84 |
+
signal.signal(signal.SIGINT, shutdown)
|
| 85 |
+
signal.signal(signal.SIGTERM, shutdown)
|
| 86 |
+
|
| 87 |
+
try:
|
| 88 |
+
# show animated progress; abort if subprocess dies
|
| 89 |
+
runtime.wait_for_server(port=llm_port, proc=llm_proc)
|
| 90 |
+
except (TimeoutError, RuntimeError) as e:
|
| 91 |
+
click.secho(f"\n[statlens] {e}", fg="red")
|
| 92 |
+
runtime.stop_server(llm_proc)
|
| 93 |
+
sys.exit(2)
|
| 94 |
+
|
| 95 |
+
os.environ["STATLENS_LLM_ENDPOINT"] = f"http://127.0.0.1:{llm_port}/v1"
|
| 96 |
+
# LLaMA-Factory's API exposes the model under the name "gpt-3.5-turbo".
|
| 97 |
+
os.environ["STATLENS_LLM_MODEL"] = "gpt-3.5-turbo"
|
| 98 |
+
|
| 99 |
+
web_url = f"http://localhost:{web_port}/"
|
| 100 |
+
|
| 101 |
+
# Prominent ready banner — only what end users care about.
|
| 102 |
+
click.echo("")
|
| 103 |
+
click.secho("══════════════════════════════════════════════════════", fg="green")
|
| 104 |
+
click.secho(f" ✅ statLens ready", fg="green", bold=True)
|
| 105 |
+
click.secho(f" open in browser: {web_url}", fg="green")
|
| 106 |
+
click.secho(f" Ctrl+C to stop.", fg="green")
|
| 107 |
+
click.secho("══════════════════════════════════════════════════════", fg="green")
|
| 108 |
+
click.echo("")
|
| 109 |
+
|
| 110 |
+
if not no_browser:
|
| 111 |
+
import threading
|
| 112 |
+
threading.Timer(1.0, lambda: webbrowser.open(web_url)).start()
|
| 113 |
+
|
| 114 |
+
import uvicorn
|
| 115 |
+
from . import server as server_mod
|
| 116 |
+
try:
|
| 117 |
+
# Quiet uvicorn so it doesn't drown the ready banner; users see HTTP
|
| 118 |
+
# requests via the LLM log if they want.
|
| 119 |
+
uvicorn.run(server_mod.app, host="127.0.0.1", port=web_port, log_level="warning")
|
| 120 |
+
finally:
|
| 121 |
+
runtime.stop_server(llm_proc)
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
# ─────────────────────────── download ────────���──────────────────
|
| 125 |
+
@main.command()
|
| 126 |
+
@click.option("--lora-repo", default=DEFAULT_LORA_REPO, show_default=True)
|
| 127 |
+
@click.option("--lora-subfolder", default=DEFAULT_LORA_SUBFOLDER, show_default=True)
|
| 128 |
+
def download(lora_repo, lora_subfolder):
|
| 129 |
+
"""Pre-fetch the LoRA adapter (~1 GB) into the HF cache.
|
| 130 |
+
|
| 131 |
+
statLens does NOT auto-download the 64 GB base model. Get it yourself with:
|
| 132 |
+
|
| 133 |
+
huggingface-cli download Qwen/Qwen3-32B --local-dir ~/models/qwen3-32b
|
| 134 |
+
"""
|
| 135 |
+
p = runtime.ensure_lora_cached(None, lora_repo, lora_subfolder)
|
| 136 |
+
click.secho(f"\n✅ LoRA cached at {p}", fg="green")
|
| 137 |
+
click.echo(
|
| 138 |
+
"\nReminder: download the BF16 base model separately, e.g.\n"
|
| 139 |
+
" huggingface-cli download Qwen/Qwen3-32B --local-dir ~/models/qwen3-32b"
|
| 140 |
+
)
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
# ─────────────────────────── info ───────────────────────────
|
| 144 |
+
@main.command()
|
| 145 |
+
def info():
|
| 146 |
+
"""Show GPU, cache, and default endpoint information."""
|
| 147 |
+
click.echo(f"statlens version: {__version__}\n")
|
| 148 |
+
|
| 149 |
+
try:
|
| 150 |
+
import torch
|
| 151 |
+
if torch.cuda.is_available():
|
| 152 |
+
for i in range(torch.cuda.device_count()):
|
| 153 |
+
p = torch.cuda.get_device_properties(i)
|
| 154 |
+
click.echo(f" GPU {i}: {p.name} · {p.total_memory/1024**3:.1f} GB")
|
| 155 |
+
else:
|
| 156 |
+
click.echo(" GPU: (none)")
|
| 157 |
+
except Exception as e:
|
| 158 |
+
click.echo(f" GPU: (torch not importable: {e})")
|
| 159 |
+
|
| 160 |
+
click.echo("")
|
| 161 |
+
click.echo(f" base model (reference) : {DEFAULT_BASE_MODEL_REF} (NOT auto-downloaded)")
|
| 162 |
+
click.echo(f" base model (resolved) : "
|
| 163 |
+
f"{os.environ.get('STATLENS_BASE_MODEL', '(unset — pass --base-model)')}")
|
| 164 |
+
click.echo(f" default quantization : {DEFAULT_QUANTIZATION}")
|
| 165 |
+
click.echo(f" lora repo : {DEFAULT_LORA_REPO} (subfolder {DEFAULT_LORA_SUBFOLDER})")
|
| 166 |
+
click.echo("")
|
| 167 |
+
|
| 168 |
+
from huggingface_hub.constants import HF_HUB_CACHE
|
| 169 |
+
click.echo(f" HF cache root : {HF_HUB_CACHE}")
|
| 170 |
+
d = runtime.cache_dir_for(DEFAULT_LORA_REPO)
|
| 171 |
+
if d.exists():
|
| 172 |
+
sz = sum(p.stat().st_size for p in d.rglob("*") if p.is_file())
|
| 173 |
+
click.echo(f" · {DEFAULT_LORA_REPO} ✓ ({sz/1024**3:.2f} GB at {d})")
|
| 174 |
+
else:
|
| 175 |
+
click.echo(f" · {DEFAULT_LORA_REPO} ✗ (run `statlens download` to fetch)")
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
# ─────────────────────────── classify ───────────────────────────
|
| 179 |
+
@main.command()
|
| 180 |
+
@_common_serve_opts
|
| 181 |
+
@click.option("--tsv", required=True, type=click.Path(exists=True, dir_okay=False))
|
| 182 |
+
@click.option("--context", required=True, type=click.Path(exists=True, dir_okay=False))
|
| 183 |
+
@click.option("--out", required=True, type=click.Path(file_okay=False))
|
| 184 |
+
@click.option("--endpoint", default=None,
|
| 185 |
+
help="OpenAI-compatible endpoint (default: spin up a temporary local LLM backend)")
|
| 186 |
+
@click.option("--model", default="gpt-3.5-turbo", show_default=True)
|
| 187 |
+
@click.option("--keep-llm", is_flag=True, help="don't shut down the LLM backend after classifying")
|
| 188 |
+
def classify(base_model, lora_path, quantization,
|
| 189 |
+
tsv, context, out, endpoint, model, keep_llm):
|
| 190 |
+
"""One-shot CLI: classify a single TSV+context, run pipeline, exit."""
|
| 191 |
+
from pathlib import Path
|
| 192 |
+
from .statlens_run import run_one
|
| 193 |
+
if endpoint is None:
|
| 194 |
+
runtime.check_gpu()
|
| 195 |
+
base_path = runtime.resolve_base_model(base_model)
|
| 196 |
+
lora_resolved = runtime.ensure_lora_cached(lora_path)
|
| 197 |
+
proc = runtime.start_server(base_path, lora_resolved,
|
| 198 |
+
quantization=quantization)
|
| 199 |
+
try:
|
| 200 |
+
runtime.wait_for_server()
|
| 201 |
+
endpoint = f"http://127.0.0.1:{LOCAL_LLM_PORT}/v1"
|
| 202 |
+
run_one(Path(tsv), Path(context), Path(out), endpoint, model)
|
| 203 |
+
finally:
|
| 204 |
+
if not keep_llm:
|
| 205 |
+
runtime.stop_server(proc)
|
| 206 |
+
else:
|
| 207 |
+
from pathlib import Path
|
| 208 |
+
run_one(Path(tsv), Path(context), Path(out), endpoint, model)
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
if __name__ == "__main__":
|
| 212 |
+
main()
|
src/statlens/data/examples/01_Count_DESeq2_basic_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/02_Count_DESeq2_with_batch_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/03_Count_DESeq2_paired_or_repeated_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/04_Count_DESeq2_multi_group_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/05_Count_DESeq2_time_course_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/06_Count_DESeq2_group_time_interaction_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/07_Count_DESeq2_ZINB_synthetic.tsv
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"subject_id" "sample_id" "condition" "age" "sex" "race" "ethnicity" "asv_1" "asv_2" "asv_3" "asv_4" "asv_5" "asv_6" "asv_7" "asv_8" "asv_9" "asv_10" "asv_11" "asv_12" "asv_13" "asv_14" "asv_15" "asv_16" "asv_17" "asv_18" "asv_19" "asv_20" "asv_21" "asv_22" "asv_23" "asv_24" "asv_25" "asv_26" "asv_27" "asv_28" "asv_29" "asv_30" "asv_31" "asv_32" "asv_33" "asv_34" "asv_35" "asv_36" "asv_37" "asv_38" "asv_39" "asv_40" "asv_41" "asv_42" "asv_43" "asv_44" "asv_45" "asv_46" "asv_47" "asv_48" "asv_49" "asv_50" "asv_51" "asv_52" "asv_53" "asv_54" "asv_55" "asv_56" "asv_57" "asv_58" "asv_59" "asv_60" "asv_61" "asv_62" "asv_63" "asv_64" "asv_65" "asv_66" "asv_67" "asv_68" "asv_69" "asv_70" "asv_71" "asv_72" "asv_73" "asv_74" "asv_75" "asv_76" "asv_77" "asv_78" "asv_79" "asv_80" "asv_81" "asv_82" "asv_83" "asv_84" "asv_85" "asv_86" "asv_87" "asv_88" "asv_89" "asv_90" "asv_91" "asv_92" "asv_93" "asv_94" "asv_95" "asv_96" "asv_97" "asv_98" "asv_99" "asv_100" "asv_101" "asv_102" "asv_103" "asv_104" "asv_105" "asv_106" "asv_107" "asv_108" "asv_109" "asv_110" "asv_111" "asv_112" "asv_113" "asv_114" "asv_115" "asv_116" "asv_117" "asv_118" "asv_119" "asv_120" "asv_121" "asv_122" "asv_123" "asv_124" "asv_125" "asv_126" "asv_127" "asv_128" "asv_129" "asv_130" "asv_131" "asv_132" "asv_133" "asv_134" "asv_135" "asv_136" "asv_137" "asv_138" "asv_139" "asv_140" "asv_141" "asv_142" "asv_143" "asv_144" "asv_145" "asv_146" "asv_147" "asv_148" "asv_149" "asv_150" "asv_151" "asv_152" "asv_153" "asv_154" "asv_155" "asv_156" "asv_157" "asv_158" "asv_159" "asv_160" "asv_161" "asv_162" "asv_163" "asv_164" "asv_165" "asv_166" "asv_167" "asv_168" "asv_169" "asv_170" "asv_171" "asv_172" "asv_173" "asv_174" "asv_175" "asv_176" "asv_177" "asv_178" "asv_179" "asv_180" "asv_181" "asv_182" "asv_183" "asv_184" "asv_185" "asv_186" "asv_187" "asv_188" "asv_189" "asv_190" "asv_191" "asv_192" "asv_193" "asv_194" "asv_195" "asv_196" "asv_197" "asv_198" "asv_199" "asv_200" "asv_201" "asv_202" "asv_203" "asv_204" "asv_205" "asv_206" "asv_207" "asv_208" "asv_209" "asv_210" "asv_211" "asv_212" "asv_213" "asv_214" "asv_215" "asv_216" "asv_217" "asv_218" "asv_219" "asv_220" "asv_221" "asv_222" "asv_223" "asv_224" "asv_225" "asv_226" "asv_227" "asv_228" "asv_229" "asv_230" "asv_231" "asv_232" "asv_233" "asv_234" "asv_235" "asv_236" "asv_237" "asv_238" "asv_239" "asv_240" "asv_241" "asv_242" "asv_243" "asv_244" "asv_245" "asv_246" "asv_247" "asv_248" "asv_249" "asv_250" "asv_251" "asv_252" "asv_253" "asv_254" "asv_255" "asv_256" "asv_257" "asv_258" "asv_259" "asv_260" "asv_261" "asv_262" "asv_263" "asv_264" "asv_265" "asv_266" "asv_267" "asv_268" "asv_269" "asv_270" "asv_271" "asv_272" "asv_273" "asv_274" "asv_275" "asv_276" "asv_277" "asv_278" "asv_279" "asv_280" "asv_281" "asv_282" "asv_283" "asv_284" "asv_285" "asv_286" "asv_287" "asv_288" "asv_289" "asv_290" "asv_291" "asv_292" "asv_293" "asv_294" "asv_295" "asv_296" "asv_297" "asv_298" "asv_299" "asv_300"
|
| 2 |
+
"M001" "Study_16S07_1" "IBD" "69" "Male" "White" "Non-Hispanic" "0" "6" "0" "0" "20" "68" "0" "0" "10" "0" "0" "98" "0" "0" "0" "0" "24" "73" "1" "0" "0" "97" "72" "0" "77" "4" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "1" "0" "71" "0" "0" "0" "0" "35" "457" "0" "0" "3" "3" "0" "0" "2" "0" "18" "0" "0" "0" "8" "0" "0" "0" "0" "0" "41" "6" "0" "0" "6" "9" "0" "0" "0" "21" "9" "0" "16" "0" "0" "26" "0" "282" "0" "4" "25" "0" "42" "85" "0" "98" "0" "0" "0" "0" "2" "11" "7" "4" "5" "114" "0" "45" "30" "6" "218" "0" "0" "0" "23" "0" "0" "0" "0" "0" "7" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "65" "0" "0" "0" "38" "0" "36" "15" "1907" "0" "31" "14" "0" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "4" "0" "38" "0" "7" "1" "0" "0" "33" "82" "0" "0" "15" "0" "0" "0" "0" "10" "1" "1" "2" "10" "0" "0" "0" "13" "0" "0" "285" "0" "42" "0" "0" "2" "0" "3" "149" "193" "0" "314" "0" "35" "0" "0" "0" "29" "0" "75" "0" "134" "0" "0" "0" "0" "35" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "132" "16" "223" "0" "0" "0" "199" "0" "0" "0" "0" "0" "0" "4" "30" "0" "183" "0" "0" "1" "141" "0" "16" "0" "209" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "8" "0" "419" "0" "13" "0" "0" "106" "0" "0" "0" "0" "21" "2" "0" "0" "87" "0" "16" "0" "0" "123" "0" "0" "0" "0" "60" "0" "0" "0" "4" "0" "0" "73" "0" "44" "1" "0" "10" "0" "0"
|
| 3 |
+
"M002" "Study_16S07_2" "Healthy" "71" "Male" "Other" "Hispanic" "0" "0" "0" "33" "48" "2" "0" "0" "5" "0" "27" "412" "8" "0" "0" "0" "0" "22" "0" "0" "0" "37" "50" "0" "11" "18" "0" "115" "0" "0" "0" "0" "4" "0" "7" "0" "19" "0" "40" "0" "37" "3" "0" "0" "18" "0" "0" "84" "14" "34" "0" "0" "0" "0" "0" "0" "0" "0" "141" "0" "1" "0" "0" "0" "0" "0" "0" "0" "17" "18" "0" "0" "0" "0" "0" "1" "8" "20" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "82" "82" "5" "0" "318" "17" "0" "0" "11" "15" "2" "0" "0" "20" "0" "81" "3" "73" "0" "0" "0" "0" "0" "0" "0" "0" "0" "20" "25" "16" "0" "17" "0" "25" "0" "19" "0" "0" "44" "0" "0" "0" "0" "0" "5" "0" "0" "24" "0" "0" "8" "10" "0" "1" "0" "0" "27" "83" "5" "38" "0" "21" "0" "0" "14" "0" "5" "0" "538" "6" "30" "0" "0" "0" "0" "29" "0" "0" "0" "311" "13" "38" "10" "0" "110" "76" "0" "0" "0" "4" "0" "0" "0" "0" "6" "0" "0" "9" "0" "0" "0" "3" "151" "4" "3" "0" "0" "0" "389" "0" "16" "63" "0" "0" "0" "0" "16" "1" "0" "10" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "53" "0" "0" "92" "16" "4" "0" "0" "0" "273" "509" "534" "0" "76" "15" "6" "0" "0" "0" "0" "1" "0" "0" "52" "77" "0" "436" "23" "15" "0" "0" "0" "0" "12" "0" "40" "0" "0" "0" "0" "31" "0" "36" "0" "85" "74" "56" "0" "0" "0" "32" "4" "0" "0" "35" "0" "6" "0" "4" "3" "14" "0" "0" "0" "0" "0" "34" "0" "0" "184" "10" "44" "0" "2" "0" "9" "24" "4" "0"
|
| 4 |
+
"M003" "Study_16S07_3" "Healthy" "38" "Female" "White" "Non-Hispanic" "0" "0" "0" "16" "0" "0" "0" "0" "0" "4" "0" "0" "2" "0" "0" "66" "1" "0" "2" "7" "0" "212" "450" "29" "1" "0" "0" "0" "0" "0" "0" "2" "16" "15" "0" "0" "2" "36" "12" "0" "0" "83" "7" "0" "0" "35" "0" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "0" "119" "4" "1" "0" "83" "0" "3" "0" "8" "0" "0" "0" "0" "92" "41" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "10" "0" "57" "14" "2044" "0" "0" "0" "0" "0" "0" "0" "4" "0" "170" "0" "0" "94" "0" "231" "0" "0" "13" "0" "61" "0" "16" "0" "0" "4" "0" "0" "60" "0" "0" "4" "23" "0" "2" "1" "1" "0" "0" "0" "0" "0" "0" "0" "32" "0" "0" "0" "79" "0" "0" "0" "13" "0" "1" "127" "248" "111" "0" "3" "55" "10" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "198" "394" "0" "0" "61" "115" "0" "65" "0" "0" "5" "0" "38" "0" "0" "0" "0" "0" "0" "24" "76" "23" "0" "0" "0" "0" "6" "0" "181" "3" "12" "0" "0" "102" "0" "0" "0" "0" "0" "0" "0" "0" "2" "0" "0" "154" "0" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "9" "0" "42" "0" "0" "135" "0" "0" "13" "1" "16" "0" "0" "62" "0" "0" "0" "0" "23" "267" "145" "0" "0" "0" "5" "0" "0" "0" "46" "0" "0" "0" "90" "14" "0" "0" "0" "0" "0" "0" "0" "6" "0" "8" "168" "0" "1" "0" "0" "0" "0" "0" "0" "9" "77" "0" "0" "2" "5" "0" "37" "12" "17" "0" "0" "0" "0" "1" "0" "0" "104" "42" "8" "45" "8"
|
| 5 |
+
"M004" "Study_16S07_4" "IBD" "75" "Male" "White" "Non-Hispanic" "0" "0" "0" "0" "3" "0" "0" "0" "0" "60" "0" "0" "0" "0" "0" "22" "0" "224" "0" "23" "0" "0" "0" "68" "0" "0" "0" "0" "0" "0" "0" "0" "0" "15" "0" "0" "0" "30" "7" "0" "27" "0" "0" "71" "0" "9" "1" "0" "0" "22" "0" "0" "0" "33" "0" "0" "0" "0" "28" "14" "0" "0" "0" "0" "14" "12" "0" "0" "0" "2" "0" "30" "0" "0" "0" "0" "24" "0" "140" "0" "0" "9" "96" "25" "0" "0" "0" "0" "0" "0" "65" "0" "0" "0" "38" "0" "0" "16" "0" "0" "0" "0" "0" "33" "0" "16" "0" "0" "0" "7" "0" "1" "0" "4" "24" "0" "0" "57" "4" "0" "2" "0" "0" "14" "0" "0" "0" "0" "9" "0" "0" "0" "11" "0" "0" "0" "35" "0" "109" "5" "8" "0" "103" "0" "4" "0" "0" "3" "0" "0" "9" "2" "118" "5" "0" "0" "76" "478" "0" "165" "7" "0" "0" "0" "9" "0" "33" "15" "0" "0" "11" "29" "0" "0" "0" "0" "51" "10" "0" "0" "0" "0" "0" "148" "0" "205" "0" "0" "0" "0" "0" "0" "2" "171" "0" "0" "0" "0" "35" "0" "0" "0" "0" "0" "5" "0" "0" "0" "0" "3" "0" "3" "0" "0" "0" "4" "3" "85" "0" "0" "0" "10" "0" "0" "43" "0" "371" "0" "0" "0" "0" "0" "0" "0" "4" "0" "0" "22" "15" "0" "0" "0" "0" "0" "126" "89" "0" "0" "0" "0" "0" "0" "0" "0" "14" "0" "68" "1" "0" "0" "0" "0" "0" "7" "14" "0" "0" "2" "0" "0" "0" "33" "0" "0" "0" "10" "166" "0" "0" "13" "0" "1" "0" "0" "37" "0" "0" "0" "0" "0" "0" "10" "29" "0" "0" "0" "56" "23" "165" "9"
|
| 6 |
+
"M005" "Study_16S07_5" "IBD" "65" "Female" "Other" "Non-Hispanic" "3" "24" "0" "0" "0" "0" "0" "31" "0" "40" "0" "453" "21" "0" "0" "15" "0" "63" "2" "0" "0" "0" "462" "0" "0" "13" "0" "34" "0" "0" "0" "75" "40" "0" "0" "0" "0" "0" "14" "3" "0" "0" "3" "25" "0" "35" "68" "105" "26" "0" "0" "10" "0" "0" "0" "0" "0" "0" "8" "3" "166" "2" "89" "0" "55" "124" "0" "0" "0" "0" "0" "0" "0" "16" "26" "0" "0" "122" "0" "2" "0" "0" "0" "57" "14" "0" "0" "0" "0" "0" "0" "13" "189" "0" "0" "5" "0" "0" "2" "0" "9" "0" "0" "0" "0" "0" "12" "76" "0" "14" "0" "0" "0" "0" "45" "0" "0" "0" "0" "0" "0" "40" "0" "0" "0" "0" "23" "9" "0" "3" "14" "0" "0" "0" "7" "0" "23" "0" "0" "10" "0" "254" "0" "11" "0" "0" "0" "30" "0" "0" "9" "1" "0" "9" "0" "0" "128" "160" "0" "0" "0" "0" "0" "286" "0" "0" "0" "0" "0" "0" "14" "0" "0" "0" "73" "3" "406" "37" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "0" "0" "1" "1" "1043" "0" "0" "9" "17" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "52" "0" "0" "32" "0" "252" "0" "0" "0" "2" "0" "204" "0" "0" "51" "0" "24" "0" "0" "27" "344" "0" "462" "0" "50" "47" "0" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "54" "0" "0" "0" "0" "21" "0" "0" "6" "0" "0" "0" "0" "0" "257" "0" "0" "0" "0" "0" "0" "0" "0" "8" "0" "122" "9" "0" "0" "0" "102" "3" "0" "0" "0" "0" "0" "0" "0" "8" "40" "0" "0" "0" "0"
|
| 7 |
+
"M006" "Study_16S07_6" "Healthy" "54" "Female" "Other" "Non-Hispanic" "2" "0" "7" "0" "0" "0" "27" "64" "0" "5" "0" "0" "0" "0" "0" "21" "0" "2" "8" "0" "0" "0" "0" "36" "0" "0" "5" "57" "47" "9" "0" "0" "0" "36" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "30" "0" "3" "0" "0" "0" "2" "0" "6" "0" "0" "94" "5" "0" "422" "0" "0" "0" "0" "0" "1" "2" "51" "0" "0" "0" "0" "0" "0" "0" "0" "2" "0" "0" "381" "1" "0" "0" "427" "7" "3" "2" "30" "15" "0" "40" "15" "13" "40" "0" "0" "0" "127" "33" "0" "0" "0" "0" "0" "41" "0" "0" "0" "24" "0" "0" "0" "0" "3" "17" "0" "0" "2" "0" "18" "0" "0" "44" "0" "0" "0" "0" "6" "0" "0" "14" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "114" "2" "0" "268" "0" "0" "0" "0" "37" "0" "8" "0" "3" "8" "0" "0" "0" "0" "120" "0" "65" "128" "6" "0" "5" "0" "0" "0" "1" "0" "1" "0" "17" "0" "0" "3" "0" "0" "21" "0" "0" "0" "0" "3" "216" "0" "0" "0" "229" "0" "0" "0" "0" "0" "0" "0" "0" "4" "12" "27" "0" "0" "0" "0" "0" "35" "0" "0" "0" "0" "0" "18" "161" "0" "0" "1" "0" "0" "0" "7" "5" "0" "41" "0" "0" "431" "120" "0" "7" "47" "0" "0" "0" "157" "62" "0" "21" "0" "14" "0" "0" "48" "4" "0" "31" "18" "0" "0" "0" "24" "0" "0" "0" "0" "0" "0" "39" "0" "3" "5" "105" "3" "0" "0" "0" "0" "0" "5" "0" "27" "0" "0" "0" "0" "0" "207" "0" "60" "0" "0" "0" "0" "57" "1" "0" "244" "0" "0" "1" "5" "0" "0" "0" "0" "16"
|
| 8 |
+
"M007" "Study_16S07_7" "IBD" "48" "Female" "White" "Hispanic" "0" "0" "0" "4" "86" "34" "0" "0" "302" "43" "0" "72" "0" "0" "161" "1" "2" "6" "0" "0" "0" "12" "17" "54" "0" "0" "0" "0" "0" "4" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "114" "0" "0" "0" "57" "60" "0" "0" "0" "4" "0" "0" "24" "0" "0" "0" "0" "233" "19" "61" "0" "170" "0" "0" "0" "10" "0" "0" "30" "0" "0" "0" "0" "0" "8" "0" "0" "609" "0" "0" "8" "195" "72" "0" "0" "0" "17" "12" "150" "141" "0" "0" "0" "0" "0" "58" "0" "0" "0" "0" "0" "27" "0" "6" "0" "0" "201" "0" "0" "0" "0" "3" "0" "0" "18" "0" "0" "0" "10" "400" "11" "0" "0" "0" "23" "0" "0" "8" "0" "0" "3" "0" "0" "0" "8" "1" "0" "0" "0" "9" "0" "175" "0" "0" "0" "0" "16" "0" "0" "0" "0" "0" "0" "0" "0" "100" "0" "0" "0" "0" "34" "0" "0" "0" "0" "0" "126" "0" "0" "0" "34" "12" "0" "1" "0" "0" "69" "0" "0" "0" "0" "0" "0" "2" "0" "5" "114" "0" "0" "0" "0" "0" "0" "0" "0" "43" "0" "0" "0" "0" "37" "0" "0" "24" "62" "0" "0" "0" "0" "2" "7" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "3" "0" "0" "13" "74" "0" "0" "15" "9" "0" "97" "94" "0" "0" "23" "0" "0" "0" "0" "15" "0" "2" "0" "310" "0" "0" "0" "3" "0" "0" "0" "0" "0" "2" "0" "0" "0" "384" "0" "0" "59" "15" "0" "0" "0" "163" "0" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "12" "0" "0" "229" "0" "0" "0" "0" "0" "0" "0" "8" "0" "51" "0" "0" "12" "198" "115"
|
| 9 |
+
"M008" "Study_16S07_8" "IBD" "34" "Male" "White" "Non-Hispanic" "8" "9" "8" "18" "0" "0" "0" "0" "0" "36" "0" "31" "24" "0" "0" "0" "0" "0" "0" "30" "0" "0" "0" "0" "0" "51" "0" "0" "0" "2" "0" "0" "0" "0" "0" "164" "0" "0" "0" "0" "0" "0" "11" "0" "0" "0" "0" "3" "0" "0" "27" "0" "0" "0" "0" "0" "0" "0" "0" "70" "0" "1" "0" "2" "0" "0" "0" "14" "0" "30" "0" "0" "0" "0" "1" "12" "0" "10" "0" "0" "0" "0" "17" "12" "0" "0" "9" "0" "0" "0" "0" "182" "0" "0" "0" "0" "0" "19" "0" "0" "0" "0" "53" "19" "0" "327" "0" "1139" "0" "0" "39" "1" "0" "0" "0" "8" "0" "13" "0" "0" "0" "10" "1" "0" "0" "264" "0" "6" "0" "0" "0" "0" "0" "57" "0" "0" "9" "0" "15" "24" "0" "192" "0" "0" "20" "0" "0" "22" "234" "147" "470" "0" "0" "43" "0" "11" "0" "0" "0" "16" "102" "6" "0" "4" "0" "58" "0" "0" "22" "126" "0" "0" "0" "0" "1" "0" "0" "9" "0" "0" "3" "0" "0" "5" "0" "0" "167" "81" "0" "0" "34" "11" "0" "0" "0" "5" "0" "0" "0" "0" "1" "0" "4" "10" "0" "0" "2" "0" "328" "0" "61" "40" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "146" "4" "0" "62" "81" "4" "84" "0" "0" "387" "17" "12" "0" "0" "27" "183" "0" "0" "0" "0" "3" "37" "0" "5" "15" "0" "0" "0" "1" "0" "0" "0" "0" "0" "3" "0" "63" "0" "18" "85" "0" "0" "22" "0" "0" "0" "0" "1" "0" "2" "0" "2" "0" "0" "0" "3" "0" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "18" "0" "1" "0" "235"
|
| 10 |
+
"M009" "Study_16S07_9" "Healthy" "49" "Female" "Other" "Non-Hispanic" "2" "0" "7" "0" "0" "0" "0" "50" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "17" "3" "20" "22" "108" "0" "0" "0" "0" "18" "2" "0" "0" "0" "0" "0" "0" "0" "0" "3" "81" "0" "0" "0" "0" "3" "15" "0" "0" "0" "30" "0" "0" "0" "0" "33" "0" "8" "0" "0" "0" "5" "0" "0" "22" "0" "0" "0" "173" "0" "3" "23" "1" "0" "0" "0" "0" "3" "35" "0" "0" "0" "13" "43" "0" "0" "0" "0" "0" "85" "390" "0" "0" "0" "283" "21" "0" "1" "0" "0" "0" "33" "4" "57" "52" "0" "9" "3" "4" "0" "0" "0" "56" "0" "0" "10" "0" "30" "0" "0" "0" "33" "184" "0" "0" "0" "0" "0" "0" "0" "12" "3" "0" "5" "5" "0" "83" "0" "0" "41" "15" "0" "3" "0" "0" "2" "30" "105" "0" "11" "0" "0" "0" "8" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "130" "0" "0" "44" "0" "14" "0" "0" "0" "0" "3" "0" "0" "0" "0" "37" "6" "0" "0" "0" "28" "0" "14" "12" "101" "0" "0" "48" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "94" "17" "28" "0" "30" "0" "0" "0" "60" "13" "9" "0" "0" "0" "0" "362" "46" "0" "0" "0" "2" "45" "111" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "2" "23" "0" "42" "1058" "17" "0" "0" "0" "0" "183" "19" "0" "0" "0" "10" "204" "0" "1" "0" "0" "0" "0" "2" "0" "58" "0" "9" "0" "0" "6" "0" "0" "0" "0" "114" "0" "30" "9" "0" "3" "0" "20" "41" "4" "21" "0" "0" "0" "40" "0" "16" "0" "0" "93" "0" "0" "0" "71" "0" "18" "0" "20" "5"
|
| 11 |
+
"M010" "Study_16S07_10" "Healthy" "38" "Female" "Black" "Non-Hispanic" "0" "0" "26" "0" "0" "164" "0" "0" "39" "0" "0" "0" "0" "0" "17" "4" "19" "0" "0" "16" "0" "169" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "8" "0" "0" "0" "0" "0" "0" "0" "1" "21" "0" "0" "0" "0" "23" "12" "0" "15" "0" "0" "6" "0" "16" "12" "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" "4" "6" "0" "0" "92" "16" "0" "30" "0" "0" "3" "58" "4" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "0" "174" "0" "0" "0" "0" "0" "0" "0" "0" "0" "2" "0" "10" "75" "16" "214" "0" "0" "0" "0" "0" "0" "9" "0" "0" "0" "72" "0" "35" "28" "0" "0" "2" "69" "15" "0" "5" "0" "0" "0" "0" "3" "0" "111" "0" "0" "0" "0" "0" "0" "77" "0" "0" "34" "0" "0" "19" "49" "0" "56" "14" "0" "13" "1" "0" "0" "0" "9" "0" "0" "0" "0" "0" "32" "15" "0" "0" "7" "11" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "46" "0" "0" "0" "9" "0" "48" "0" "10" "5" "0" "0" "0" "7" "0" "0" "0" "0" "3" "0" "0" "0" "92" "70" "0" "297" "2" "7" "0" "0" "0" "3" "0" "22" "0" "0" "0" "8" "37" "0" "33" "0" "19" "0" "0" "0" "0" "0" "237" "85" "0" "0" "23" "6" "30" "0" "152" "0" "0" "0" "0" "209" "0" "0" "288" "8" "0" "0" "4" "0" "0" "0" "112" "0" "0" "0" "0" "0" "35" "0" "0" "2" "5" "0" "0" "25" "0" "32" "54" "0" "7" "30" "0" "0" "0" "0" "0" "0" "4" "0" "7" "31" "6" "2" "6" "9" "0" "291" "0" "0" "0" "29" "0" "0" "0" "0" "0"
|
| 12 |
+
"M011" "Study_16S07_11" "IBD" "49" "Female" "White" "Hispanic" "0" "2" "0" "0" "141" "0" "0" "5" "0" "0" "0" "0" "13" "3" "0" "23" "0" "0" "13" "0" "4" "3" "0" "0" "0" "141" "0" "0" "33" "0" "0" "7" "11" "0" "0" "28" "25" "0" "0" "79" "0" "37" "0" "0" "0" "0" "45" "0" "0" "1" "10" "0" "3" "0" "0" "0" "0" "0" "56" "0" "27" "0" "0" "8" "35" "25" "0" "0" "0" "0" "28" "0" "9" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "7" "0" "0" "39" "52" "29" "0" "0" "210" "0" "0" "1" "0" "50" "0" "1" "0" "0" "0" "0" "293" "12" "0" "0" "89" "0" "20" "0" "0" "0" "0" "0" "0" "0" "0" "2" "0" "11" "0" "0" "10" "6" "28" "0" "6" "3" "0" "4" "0" "0" "0" "14" "0" "0" "109" "0" "0" "0" "74" "67" "0" "446" "18" "0" "50" "200" "0" "0" "0" "0" "0" "0" "218" "35" "9" "0" "9" "0" "0" "0" "0" "0" "48" "0" "0" "0" "0" "2" "0" "0" "2" "0" "28" "0" "0" "0" "0" "23" "29" "25" "15" "25" "0" "0" "0" "109" "3" "7" "0" "0" "62" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "6" "53" "0" "0" "0" "0" "3" "1" "0" "0" "0" "0" "5" "0" "11" "10" "73" "0" "10" "0" "0" "0" "0" "261" "0" "0" "5" "15" "60" "6" "0" "39" "1" "0" "13" "0" "0" "0" "0" "0" "0" "0" "1" "22" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "0" "104" "8" "3" "17" "0" "0" "36" "0" "7" "154" "0" "0" "0" "0" "0" "53" "10" "0" "9" "17" "0" "9" "7" "89" "7"
|
| 13 |
+
"M012" "Study_16S07_12" "Healthy" "33" "Female" "Other" "Non-Hispanic" "4" "12" "6" "56" "0" "60" "0" "20" "0" "0" "0" "0" "83" "2" "4" "25" "0" "209" "0" "0" "0" "12" "0" "0" "0" "1" "0" "0" "0" "17" "3" "68" "4" "0" "0" "0" "12" "0" "0" "0" "0" "0" "0" "40" "11" "0" "211" "91" "0" "26" "13" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "14" "0" "3" "0" "0" "30" "1" "0" "9" "0" "0" "0" "4" "22" "45" "0" "120" "0" "1" "0" "0" "24" "0" "55" "758" "12" "139" "0" "0" "23" "0" "25" "0" "0" "13" "0" "1" "15" "0" "0" "65" "0" "0" "0" "7" "0" "15" "0" "0" "2" "54" "0" "0" "0" "0" "0" "7" "0" "0" "0" "0" "0" "0" "1" "0" "0" "4" "1" "0" "7" "0" "0" "0" "0" "35" "0" "0" "0" "0" "0" "0" "4" "28" "0" "0" "0" "0" "22" "174" "0" "0" "80" "0" "0" "22" "4" "0" "8" "23" "4" "4" "9" "17" "88" "129" "37" "166" "0" "0" "0" "0" "0" "0" "9" "0" "0" "0" "7" "0" "73" "3" "72" "0" "97" "0" "0" "0" "26" "0" "0" "0" "158" "242" "0" "0" "10" "0" "0" "0" "7" "51" "0" "12" "43" "0" "2" "0" "0" "0" "19" "160" "4" "0" "0" "0" "176" "0" "0" "2" "23" "0" "0" "0" "0" "0" "0" "0" "222" "0" "43" "0" "12" "0" "4" "10" "3" "0" "82" "17" "52" "0" "5" "12" "8" "205" "96" "11" "3" "53" "24" "48" "0" "2" "0" "0" "2" "0" "1" "0" "25" "20" "0" "0" "10" "0" "0" "1" "88" "0" "1" "14" "37" "1" "2" "0" "0" "0" "0" "9" "0" "0" "0" "0" "7" "0" "28" "0" "0" "0" "2" "0" "0" "0" "0" "7" "22" "0" "2"
|
| 14 |
+
"M013" "Study_16S07_13" "IBD" "68" "Male" "White" "Non-Hispanic" "0" "0" "0" "0" "0" "29" "0" "4" "118" "18" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "11" "13" "0" "0" "0" "21" "0" "29" "26" "0" "212" "0" "0" "0" "0" "14" "0" "11" "0" "0" "0" "0" "1" "106" "18" "92" "0" "0" "0" "11" "73" "0" "0" "0" "0" "10" "0" "5" "0" "0" "48" "0" "0" "0" "0" "82" "0" "0" "0" "2" "0" "100" "0" "8" "17" "0" "0" "0" "0" "0" "0" "0" "345" "0" "1" "12" "0" "0" "0" "0" "25" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "27" "0" "207" "0" "0" "0" "0" "0" "0" "0" "0" "0" "30" "0" "21" "1" "0" "0" "230" "0" "0" "0" "32" "0" "0" "0" "0" "0" "38" "0" "161" "0" "1" "0" "26" "0" "0" "0" "0" "15" "0" "5" "0" "0" "29" "3" "92" "0" "1" "0" "20" "10" "0" "131" "30" "0" "0" "0" "0" "0" "0" "0" "0" "13" "52" "11" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "15" "0" "20" "0" "15" "0" "0" "0" "0" "0" "0" "0" "0" "0" "196" "3" "0" "75" "0" "0" "0" "0" "60" "0" "0" "0" "0" "62" "0" "0" "0" "60" "6" "0" "6" "0" "0" "39" "0" "0" "0" "0" "27" "0" "25" "0" "32" "0" "26" "2" "139" "159" "0" "0" "91" "17" "0" "368" "0" "0" "19" "401" "0" "0" "0" "87" "597" "4" "0" "0" "0" "2" "0" "5" "0" "0" "29" "9" "78" "33" "42" "0" "0" "0" "2" "568" "0" "0" "199" "135" "26" "0" "0" "0" "28" "0" "0" "11" "236" "138" "24" "0" "2" "0" "0" "0" "0" "0" "1" "0" "0" "0" "14" "0" "0" "0" "0" "0" "5"
|
| 15 |
+
"M014" "Study_16S07_14" "IBD" "38" "Male" "White" "Non-Hispanic" "1" "0" "0" "0" "47" "0" "0" "0" "43" "0" "0" "0" "0" "0" "0" "48" "0" "40" "0" "0" "0" "28" "0" "119" "14" "0" "0" "46" "0" "0" "0" "0" "0" "0" "0" "0" "0" "19" "0" "0" "0" "0" "4" "0" "19" "0" "0" "0" "12" "16" "0" "0" "0" "3" "0" "0" "0" "0" "0" "33" "0" "0" "4" "0" "12" "161" "10" "0" "44" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "6" "0" "0" "104" "0" "10" "0" "0" "0" "69" "0" "141" "0" "0" "0" "3" "0" "2" "0" "0" "0" "27" "66" "0" "0" "24" "5" "0" "308" "0" "0" "0" "3" "3" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "111" "11" "0" "7" "0" "0" "0" "0" "24" "0" "21" "4" "0" "0" "0" "0" "0" "0" "0" "35" "15" "173" "0" "43" "0" "0" "5" "0" "2" "0" "0" "0" "0" "0" "0" "37" "0" "0" "0" "11" "0" "0" "0" "0" "0" "0" "23" "0" "0" "52" "0" "0" "17" "0" "0" "0" "0" "3" "9" "0" "0" "0" "0" "0" "0" "0" "17" "0" "3" "0" "15" "0" "0" "0" "4" "287" "0" "0" "0" "1" "0" "0" "0" "4" "351" "4" "1" "1" "0" "5" "0" "0" "0" "0" "0" "20" "0" "0" "0" "0" "0" "0" "0" "0" "26" "104" "53" "0" "0" "0" "34" "0" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "3" "11" "2" "0" "0" "0" "0" "0" "0" "93" "0" "0" "0" "0" "67" "0" "0" "1" "0" "1" "0" "0" "0" "0" "0" "5" "71" "0" "0" "0" "0" "0" "0" "0" "0" "118" "0" "1" "0" "0" "8" "0" "0" "0" "0" "43" "0" "4" "0" "0" "49" "0" "38"
|
| 16 |
+
"M015" "Study_16S07_15" "Healthy" "77" "Female" "White" "Hispanic" "0" "0" "0" "40" "0" "0" "4" "62" "0" "0" "0" "0" "0" "0" "0" "12" "2" "0" "0" "0" "16" "0" "29" "38" "2" "0" "0" "101" "0" "0" "0" "0" "0" "20" "0" "0" "0" "154" "0" "0" "90" "47" "0" "0" "0" "0" "0" "0" "14" "0" "8" "0" "0" "16" "0" "0" "0" "19" "0" "0" "0" "1" "0" "5" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "145" "3" "30" "0" "1" "0" "366" "0" "0" "3" "46" "0" "0" "0" "21" "47" "0" "0" "0" "0" "27" "33" "194" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "51" "0" "0" "0" "31" "23" "2" "0" "10" "1" "0" "3" "0" "0" "180" "5" "11" "0" "247" "0" "27" "18" "0" "0" "0" "20" "0" "35" "0" "0" "73" "0" "0" "89" "0" "0" "0" "0" "7" "0" "6" "0" "0" "0" "0" "0" "0" "0" "208" "0" "0" "53" "0" "27" "133" "0" "1" "0" "35" "0" "0" "0" "0" "35" "86" "0" "0" "71" "9" "0" "59" "0" "0" "0" "1" "0" "0" "0" "0" "0" "488" "40" "13" "0" "18" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "0" "0" "9" "0" "0" "20" "0" "0" "0" "20" "0" "7" "0" "0" "0" "106" "8" "0" "127" "40" "0" "23" "0" "1" "0" "0" "0" "0" "0" "0" "81" "0" "118" "0" "8" "0" "30" "0" "0" "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "102" "0" "0" "145" "10" "0" "270" "0" "23" "178" "0" "0" "0" "0" "0" "10" "20" "165" "0" "0" "0" "3" "0" "0" "18" "30" "0" "0" "0" "7" "17" "0" "0"
|
| 17 |
+
"M016" "Study_16S07_16" "IBD" "49" "Female" "White" "Non-Hispanic" "0" "0" "7" "20" "48" "0" "0" "0" "0" "0" "0" "53" "20" "0" "0" "0" "4" "0" "0" "0" "38" "0" "37" "0" "0" "0" "0" "1" "0" "1" "2" "0" "28" "0" "69" "0" "0" "0" "0" "0" "0" "73" "0" "0" "0" "0" "0" "0" "0" "6" "0" "11" "2" "0" "2" "0" "1" "0" "24" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "3" "7" "0" "0" "295" "20" "0" "0" "0" "0" "0" "0" "0" "31" "0" "43" "0" "0" "6" "0" "61" "0" "0" "2" "0" "0" "0" "121" "0" "0" "1" "0" "0" "66" "0" "0" "0" "51" "79" "0" "28" "0" "0" "17" "78" "101" "1" "0" "0" "0" "0" "0" "8" "0" "2" "8" "0" "0" "0" "0" "6" "0" "0" "12" "0" "0" "0" "32" "9" "589" "0" "0" "3" "402" "1" "0" "0" "114" "0" "0" "0" "0" "23" "0" "0" "0" "0" "0" "2" "0" "3" "0" "0" "0" "58" "44" "29" "30" "0" "0" "0" "3" "0" "1" "0" "21" "0" "4" "0" "0" "7" "50" "0" "0" "15" "0" "0" "0" "0" "0" "0" "0" "113" "0" "22" "0" "86" "160" "0" "0" "0" "0" "2" "117" "9" "0" "34" "0" "1" "0" "0" "0" "0" "0" "0" "19" "13" "5" "0" "0" "43" "73" "120" "6" "0" "0" "3" "0" "0" "205" "10" "0" "0" "0" "0" "0" "0" "10" "0" "1" "25" "4" "0" "0" "51" "0" "0" "12" "0" "14" "0" "2" "11" "0" "0" "0" "0" "0" "53" "210" "17" "0" "0" "3" "0" "0" "0" "0" "20" "0" "0" "0" "0" "0" "0" "0" "5" "0" "0" "25" "0" "0" "24" "10" "0" "13" "0" "0" "0" "20" "41" "0" "0" "0" "3" "0" "0" "19"
|
| 18 |
+
"M017" "Study_16S07_17" "Healthy" "42" "Male" "Black" "Non-Hispanic" "0" "0" "0" "9" "0" "0" "35" "0" "0" "0" "0" "135" "0" "7" "62" "0" "0" "32" "0" "0" "0" "59" "0" "0" "5" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "0" "0" "53" "10" "22" "204" "81" "3" "0" "24" "0" "0" "0" "6" "0" "0" "4" "13" "9" "0" "0" "0" "34" "38" "0" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "0" "1" "1" "0" "0" "0" "209" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "13" "0" "0" "0" "0" "0" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "0" "7" "0" "0" "0" "0" "0" "8" "0" "232" "188" "0" "4" "0" "0" "0" "1" "1" "0" "0" "0" "0" "0" "15" "1" "0" "0" "0" "0" "0" "0" "328" "0" "0" "0" "0" "0" "0" "0" "43" "6" "0" "0" "4" "0" "45" "62" "0" "0" "0" "0" "0" "91" "0" "0" "21" "0" "26" "28" "0" "0" "59" "67" "0" "0" "2" "2" "0" "10" "10" "0" "12" "147" "0" "0" "12" "128" "0" "0" "0" "0" "4" "73" "379" "0" "0" "0" "0" "147" "17" "0" "0" "23" "0" "0" "7" "0" "0" "0" "0" "0" "0" "22" "8" "0" "0" "0" "55" "0" "4" "0" "0" "0" "0" "8" "0" "80" "0" "0" "123" "0" "89" "5" "104" "0" "0" "0" "0" "0" "0" "0" "0" "0" "154" "162" "0" "0" "0" "10" "58" "0" "0" "0" "0" "28" "9" "0" "0" "0" "0" "11" "0" "0" "0" "44" "0" "0" "2" "0" "0" "0" "0" "64" "15" "0" "17" "0" "0" "148" "31" "0" "1" "13" "0" "24" "23" "2" "0" "0" "0" "0" "0" "5" "0" "0" "8" "0" "145" "0"
|
| 19 |
+
"M018" "Study_16S07_18" "IBD" "69" "Male" "White" "Non-Hispanic" "0" "0" "2" "0" "0" "0" "0" "51" "5" "0" "7" "0" "0" "14" "0" "0" "0" "0" "0" "0" "27" "0" "61" "307" "283" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "58" "11" "0" "10" "33" "38" "0" "0" "0" "12" "123" "45" "0" "0" "0" "9" "0" "5" "26" "0" "0" "2" "0" "4" "0" "0" "0" "0" "45" "12" "85" "0" "0" "0" "31" "0" "0" "32" "0" "0" "257" "0" "0" "4" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "41" "0" "0" "0" "40" "0" "0" "17" "0" "0" "0" "0" "174" "16" "16" "0" "0" "0" "0" "22" "429" "0" "0" "0" "0" "0" "0" "86" "1" "19" "0" "158" "16" "0" "0" "0" "1" "11" "0" "0" "11" "0" "14" "0" "0" "0" "0" "0" "0" "0" "1" "0" "59" "0" "38" "0" "0" "23" "0" "0" "460" "0" "8" "31" "0" "0" "0" "16" "0" "0" "0" "24" "17" "0" "0" "0" "6" "62" "65" "0" "40" "169" "0" "17" "0" "12" "0" "0" "0" "0" "0" "0" "67" "132" "0" "0" "0" "0" "0" "0" "0" "0" "0" "7" "0" "0" "0" "0" "165" "342" "4" "24" "8" "0" "0" "23" "13" "0" "84" "0" "26" "0" "0" "7" "0" "2" "0" "0" "0" "0" "1" "0" "0" "47" "0" "72" "0" "0" "0" "0" "0" "0" "17" "0" "0" "441" "0" "0" "0" "32" "0" "0" "112" "0" "0" "0" "0" "0" "31" "2" "46" "3" "0" "0" "0" "11" "0" "0" "0" "12" "0" "0" "0" "4" "0" "12" "0" "10" "8" "620" "0" "0" "11" "0" "0" "0" "101" "0" "0" "0" "0" "0" "40" "0" "0" "49" "0" "1" "1" "0" "0" "0" "33" "0" "1" "0" "0" "0" "258" "0"
|
| 20 |
+
"M019" "Study_16S07_19" "IBD" "65" "Female" "White" "Non-Hispanic" "0" "0" "0" "48" "0" "0" "0" "33" "21" "7" "0" "160" "0" "0" "0" "0" "0" "92" "7" "0" "21" "0" "0" "0" "0" "0" "0" "173" "26" "0" "68" "0" "0" "23" "0" "30" "0" "251" "0" "0" "0" "0" "6" "13" "0" "31" "0" "0" "0" "0" "11" "0" "0" "0" "0" "0" "2" "3" "44" "0" "39" "0" "0" "0" "55" "14" "21" "0" "0" "7" "111" "0" "0" "16" "0" "1" "0" "0" "0" "0" "0" "7" "0" "0" "0" "5" "0" "0" "39" "0" "15" "0" "489" "9" "0" "1" "0" "75" "0" "0" "0" "11" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "302" "0" "0" "0" "0" "166" "3" "82" "0" "0" "0" "0" "12" "0" "0" "3" "0" "65" "6" "0" "0" "0" "9" "0" "0" "0" "0" "0" "14" "0" "37" "1" "0" "0" "0" "0" "1" "0" "16" "0" "0" "31" "0" "0" "0" "71" "1" "0" "2" "57" "18" "0" "284" "17" "0" "123" "0" "46" "0" "0" "0" "29" "0" "0" "0" "0" "2" "0" "0" "27" "0" "0" "0" "0" "0" "3" "0" "0" "6" "0" "25" "1" "11" "0" "134" "6" "17" "0" "0" "0" "7" "0" "0" "0" "0" "0" "0" "17" "0" "0" "1" "0" "0" "0" "0" "0" "105" "0" "66" "0" "415" "90" "12" "60" "124" "6" "0" "0" "101" "0" "0" "18" "6" "0" "0" "0" "29" "0" "2" "0" "0" "399" "0" "4" "0" "0" "5" "0" "0" "28" "0" "0" "0" "26" "0" "0" "48" "0" "0" "0" "0" "115" "1" "0" "90" "9" "0" "90" "0" "0" "507" "13" "0" "17" "57" "0" "12" "0" "0" "1" "0" "0" "0" "35" "298" "2" "0" "0" "0" "0" "0" "0" "23" "0"
|
| 21 |
+
"M020" "Study_16S07_20" "IBD" "48" "Female" "White" "Non-Hispanic" "3" "0" "0" "0" "4" "0" "0" "45" "0" "15" "0" "0" "6" "0" "0" "5" "0" "0" "4" "0" "0" "21" "1" "0" "136" "0" "0" "91" "0" "0" "0" "0" "0" "18" "0" "0" "0" "0" "0" "28" "0" "0" "3" "0" "12" "5" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "17" "0" "0" "6" "15" "0" "56" "0" "0" "371" "0" "0" "0" "0" "0" "0" "6" "0" "22" "0" "92" "105" "33" "0" "0" "0" "0" "0" "1" "39" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "52" "0" "0" "0" "25" "43" "0" "5" "0" "6" "0" "9" "16" "21" "0" "0" "0" "0" "12" "0" "4" "0" "0" "0" "0" "1" "34" "0" "149" "0" "3" "0" "0" "1" "0" "9" "0" "0" "5" "0" "1316" "0" "81" "22" "135" "0" "0" "0" "83" "0" "0" "3" "41" "0" "0" "0" "31" "0" "0" "15" "20" "0" "0" "35" "0" "0" "0" "0" "0" "12" "0" "0" "10" "0" "36" "0" "63" "36" "0" "143" "0" "28" "0" "0" "8" "0" "0" "0" "1" "0" "0" "0" "21" "2" "0" "4" "0" "0" "0" "0" "2" "0" "592" "0" "17" "69" "38" "0" "38" "0" "0" "0" "0" "0" "0" "0" "0" "0" "23" "0" "0" "0" "0" "0" "0" "0" "62" "70" "12" "104" "0" "0" "10" "0" "131" "0" "0" "0" "25" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "15" "5" "0" "0" "1" "0" "0" "0" "0" "10" "0" "0" "0" "43" "0" "23" "36" "0" "0" "257" "2" "0" "0" "0" "33" "0" "0" "0" "0" "8" "0" "0" "0" "0" "99" "13" "0" "0" "24" "0" "1" "0" "14" "0" "1" "0" "0" "54" "0" "17" "0" "0" "17"
|
| 22 |
+
"M021" "Study_16S07_21" "IBD" "47" "Female" "White" "Hispanic" "0" "0" "0" "2" "42" "0" "0" "6" "199" "0" "0" "0" "0" "0" "54" "67" "0" "89" "4" "0" "7" "0" "0" "0" "0" "0" "0" "214" "0" "0" "309" "33" "0" "102" "119" "0" "11" "27" "11" "0" "0" "0" "0" "63" "0" "15" "0" "15" "0" "0" "1" "0" "0" "2" "10" "0" "0" "0" "41" "21" "26" "0" "0" "0" "0" "0" "9" "2" "9" "27" "0" "213" "0" "81" "0" "6" "0" "0" "0" "0" "0" "1" "0" "0" "2" "14" "0" "0" "0" "44" "348" "0" "0" "9" "13" "0" "0" "0" "0" "0" "9" "0" "0" "4" "45" "51" "17" "0" "0" "0" "22" "0" "0" "5" "0" "3" "33" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "0" "31" "0" "0" "15" "0" "0" "0" "0" "917" "0" "13" "0" "29" "87" "0" "37" "0" "10" "0" "10" "6" "0" "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "7" "0" "26" "54" "0" "27" "0" "0" "70" "30" "36" "0" "0" "0" "0" "0" "0" "5" "0" "88" "0" "0" "3" "11" "0" "0" "0" "8" "120" "0" "0" "0" "24" "0" "0" "0" "21" "9" "36" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "15" "0" "34" "0" "0" "14" "0" "130" "0" "0" "0" "1" "0" "0" "3" "223" "0" "19" "0" "0" "0" "0" "0" "169" "0" "0" "0" "7" "0" "0" "0" "2" "0" "0" "16" "0" "0" "0" "0" "0" "0" "0" "0" "129" "0" "0" "449" "0" "0" "4" "0" "0" "0" "141" "1" "0" "0" "129" "3" "0" "0" "0" "0" "0" "0" "0" "11" "0" "0" "0" "20" "0" "0" "0" "0" "0" "0"
|
| 23 |
+
"M022" "Study_16S07_22" "Healthy" "30" "Male" "Black" "Non-Hispanic" "0" "7" "0" "63" "110" "0" "0" "0" "0" "0" "0" "304" "0" "0" "0" "9" "13" "67" "0" "0" "0" "0" "0" "0" "10" "0" "0" "0" "25" "0" "53" "0" "1" "15" "58" "0" "10" "11" "60" "0" "0" "0" "0" "0" "11" "0" "0" "182" "9" "0" "0" "59" "0" "0" "3" "0" "7" "0" "413" "0" "0" "0" "0" "0" "9" "0" "7" "0" "2" "0" "0" "0" "0" "0" "60" "6" "5" "0" "0" "1" "0" "0" "0" "0" "0" "85" "0" "6" "0" "123" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "27" "43" "0" "0" "44" "10" "5" "0" "0" "0" "0" "0" "0" "0" "15" "0" "0" "0" "0" "0" "13" "0" "117" "0" "0" "0" "0" "0" "2" "0" "1" "0" "200" "0" "9" "23" "0" "51" "0" "11" "0" "42" "5" "0" "0" "1" "7" "0" "1" "0" "1" "60" "7" "14" "5" "0" "0" "0" "16" "4" "0" "0" "1" "1" "0" "0" "0" "3" "0" "51" "0" "0" "0" "0" "2" "0" "3" "10" "100" "0" "0" "7" "0" "0" "0" "0" "259" "50" "0" "1" "3" "1" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "3" "0" "0" "153" "4" "89" "2" "0" "20" "0" "0" "1" "0" "0" "42" "0" "0" "0" "1" "8" "133" "22" "0" "0" "0" "27" "74" "1" "0" "0" "0" "289" "0" "0" "7" "0" "16" "55" "0" "0" "1" "134" "0" "0" "292" "0" "0" "0" "0" "46" "38" "0" "0" "0" "8" "15" "0" "0" "0" "40" "0" "0" "0" "0" "0" "4" "0" "387" "0" "0" "0" "1" "0" "0" "0" "0" "33" "47" "0" "0" "0" "0" "0" "10" "1" "0" "0" "66" "34" "3" "0" "0" "0" "0" "0" "79" "24"
|
| 24 |
+
"M023" "Study_16S07_23" "Healthy" "37" "Female" "White" "Non-Hispanic" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "3" "0" "99" "4" "7" "0" "0" "94" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "28" "0" "22" "0" "0" "49" "0" "11" "0" "0" "18" "0" "0" "66" "0" "0" "0" "8" "13" "5" "75" "84" "18" "0" "0" "56" "104" "0" "0" "0" "0" "0" "150" "0" "0" "17" "0" "0" "0" "0" "36" "0" "34" "0" "0" "94" "326" "0" "34" "0" "0" "0" "0" "1" "30" "0" "0" "17" "0" "0" "53" "3" "0" "0" "3" "0" "1" "0" "4" "11" "3" "1" "0" "10" "0" "0" "0" "0" "0" "104" "117" "0" "0" "0" "0" "7" "0" "3" "2" "0" "1" "0" "0" "70" "2" "0" "0" "9" "0" "0" "0" "0" "0" "0" "5" "166" "6" "127" "0" "0" "0" "0" "93" "0" "201" "0" "3" "0" "0" "5" "0" "0" "26" "10" "56" "0" "0" "0" "2" "0" "7" "18" "0" "0" "0" "0" "12" "0" "38" "0" "19" "9" "0" "0" "0" "0" "78" "4" "0" "40" "0" "83" "1" "62" "83" "0" "0" "0" "0" "0" "0" "3" "0" "80" "3" "0" "0" "5" "6" "1" "3" "0" "40" "0" "0" "0" "0" "11" "0" "0" "0" "0" "13" "43" "72" "0" "0" "0" "0" "78" "3" "8" "42" "407" "0" "37" "3" "0" "0" "0" "17" "0" "2" "0" "17" "0" "0" "0" "0" "0" "0" "0" "516" "0" "0" "0" "44" "1" "3" "19" "0" "0" "0" "0" "0" "0" "16" "0" "0" "0" "0" "0" "0" "0" "362" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "32" "8" "33" "4" "0" "0" "5" "0"
|
| 25 |
+
"M024" "Study_16S07_24" "Healthy" "59" "Female" "White" "Non-Hispanic" "0" "0" "1" "0" "0" "29" "0" "23" "0" "0" "3" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "23" "0" "0" "0" "183" "0" "0" "0" "0" "1" "0" "0" "0" "1" "0" "0" "118" "0" "27" "30" "0" "0" "24" "0" "23" "0" "103" "0" "0" "10" "0" "0" "0" "0" "6" "0" "0" "0" "0" "137" "0" "0" "0" "1" "13" "0" "6" "11" "32" "0" "0" "0" "2" "0" "0" "168" "0" "177" "0" "0" "0" "38" "29" "0" "0" "0" "0" "4" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "19" "0" "0" "3" "41" "0" "0" "7" "0" "0" "0" "5" "52" "0" "30" "0" "0" "45" "240" "0" "5" "0" "0" "0" "0" "0" "0" "0" "3" "8" "0" "0" "15" "0" "0" "36" "0" "0" "109" "67" "15" "0" "0" "0" "0" "0" "0" "105" "0" "0" "3" "0" "0" "175" "59" "24" "4" "47" "0" "0" "9" "0" "0" "0" "43" "820" "0" "0" "0" "0" "0" "0" "6" "0" "0" "0" "11" "0" "0" "0" "36" "0" "37" "0" "0" "0" "0" "0" "58" "0" "0" "0" "0" "51" "0" "0" "0" "0" "1" "3" "0" "53" "0" "334" "0" "0" "0" "0" "0" "21" "16" "0" "0" "0" "0" "0" "6" "0" "0" "16" "0" "0" "0" "0" "0" "0" "3" "6" "192" "44" "0" "159" "0" "28" "0" "0" "0" "0" "0" "29" "10" "98" "0" "6" "0" "0" "2" "0" "5" "155" "0" "0" "1" "29" "0" "24" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "23" "0" "0" "48" "163" "18" "0" "0" "9" "0" "2" "33" "0" "137" "0" "0" "0" "18" "0" "14" "26" "0" "0" "23" "48" "34" "0" "0"
|
| 26 |
+
"M025" "Study_16S07_25" "IBD" "43" "Female" "Other" "Non-Hispanic" "0" "0" "0" "53" "0" "0" "0" "35" "0" "9" "0" "418" "0" "56" "0" "13" "0" "115" "0" "17" "17" "40" "616" "0" "55" "0" "2" "46" "0" "0" "6" "0" "0" "0" "0" "17" "1" "0" "0" "0" "28" "0" "0" "0" "0" "37" "67" "13" "0" "0" "3" "9" "0" "0" "0" "41" "7" "0" "669" "47" "0" "0" "0" "0" "0" "5" "0" "0" "26" "0" "0" "85" "0" "6" "21" "0" "0" "0" "0" "0" "20" "46" "0" "0" "2" "0" "0" "0" "0" "0" "0" "105" "84" "0" "0" "0" "0" "14" "0" "0" "0" "0" "0" "0" "48" "269" "0" "20" "18" "0" "0" "0" "10" "1" "39" "0" "0" "62" "1" "90" "79" "0" "0" "0" "38" "17" "0" "0" "3" "0" "2" "0" "6" "63" "62" "29" "0" "156" "10" "1" "0" "210" "0" "0" "0" "0" "52" "0" "0" "38" "0" "1" "0" "0" "0" "0" "0" "0" "9" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "205" "9" "0" "16" "49" "0" "0" "65" "42" "0" "14" "1" "7" "0" "434" "0" "0" "30" "0" "39" "90" "0" "14" "7" "0" "0" "0" "0" "0" "0" "0" "13" "0" "2" "0" "0" "0" "26" "0" "1" "5" "0" "0" "146" "2" "1" "0" "0" "43" "71" "0" "3" "3" "0" "0" "0" "0" "95" "0" "0" "0" "0" "152" "0" "41" "0" "0" "0" "0" "0" "17" "163" "0" "72" "0" "0" "40" "0" "0" "0" "0" "23" "0" "48" "0" "30" "0" "2" "0" "0" "0" "0" "0" "0" "0" "10" "0" "162" "0" "15" "0" "0" "0" "0" "0" "0" "0" "0" "0" "9" "136" "0" "0" "24" "0" "0" "0" "0" "0" "11" "29" "118" "0" "0" "0" "0" "0" "0" "36" "12" "52"
|
| 27 |
+
"M026" "Study_16S07_26" "Healthy" "77" "Male" "Black" "Non-Hispanic" "1" "0" "0" "0" "167" "5" "15" "0" "0" "0" "0" "267" "0" "18" "0" "41" "0" "240" "0" "0" "36" "0" "0" "16" "15" "215" "0" "0" "17" "0" "350" "0" "0" "0" "0" "0" "5" "0" "0" "25" "0" "47" "0" "0" "0" "93" "0" "10" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "10" "1" "2" "171" "26" "0" "58" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "10" "0" "174" "0" "0" "0" "4" "0" "5" "0" "0" "0" "0" "15" "0" "0" "972" "0" "3" "0" "129" "0" "0" "30" "6" "0" "0" "0" "0" "0" "12" "506" "33" "10" "0" "0" "32" "10" "0" "0" "0" "35" "0" "1" "314" "132" "1" "0" "0" "0" "6" "8" "0" "0" "0" "0" "0" "13" "0" "0" "4" "1" "213" "19" "0" "26" "347" "0" "0" "51" "0" "0" "0" "0" "0" "0" "0" "76" "26" "0" "0" "23" "0" "0" "1" "0" "0" "0" "11" "0" "30" "0" "0" "0" "0" "0" "0" "0" "13" "0" "0" "0" "0" "0" "0" "0" "50" "68" "0" "90" "0" "0" "16" "0" "8" "0" "29" "27" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "0" "0" "4" "0" "79" "0" "0" "0" "101" "8" "0" "0" "0" "18" "56" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "241" "0" "0" "0" "8" "0" "0" "0" "0" "0" "0" "0" "0" "0" "50" "4" "0" "0" "169" "0" "0" "0" "0" "1" "1" "0" "0" "95" "27" "0" "0" "0" "11" "0" "2" "0" "131" "0" "0" "0" "0" "0" "26" "0" "0" "0" "24" "0" "7" "0" "0" "30" "0" "0" "0" "0" "0" "14" "0" "2" "23" "0" "0" "43" "0" "0" "23" "0" "142" "0"
|
| 28 |
+
"M027" "Study_16S07_27" "Healthy" "67" "Male" "White" "Non-Hispanic" "9" "3" "3" "0" "0" "0" "0" "80" "208" "0" "0" "0" "0" "75" "0" "0" "12" "0" "0" "0" "0" "59" "161" "0" "31" "0" "2" "0" "2" "0" "0" "0" "0" "0" "4" "29" "0" "0" "12" "0" "0" "30" "0" "25" "0" "0" "0" "194" "0" "0" "2" "5" "0" "0" "0" "0" "0" "42" "4" "0" "0" "0" "54" "0" "0" "0" "11" "0" "26" "0" "0" "2" "1" "0" "38" "1" "0" "0" "0" "3" "0" "0" "0" "0" "0" "23" "1" "132" "0" "0" "0" "0" "61" "10" "0" "0" "36" "0" "0" "252" "0" "60" "0" "0" "0" "15" "0" "0" "23" "13" "0" "1" "0" "0" "5" "33" "0" "0" "0" "0" "0" "21" "3" "0" "4" "0" "0" "0" "0" "1" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "25" "1" "0" "234" "0" "98" "0" "0" "0" "0" "20" "0" "16" "2" "0" "58" "0" "0" "17" "10" "0" "30" "1" "0" "0" "0" "0" "0" "0" "52" "0" "83" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "3" "22" "21" "0" "3" "0" "13" "0" "0" "0" "0" "0" "0" "62" "461" "44" "0" "0" "3" "0" "0" "83" "0" "8" "0" "0" "6" "0" "0" "0" "1" "0" "0" "0" "0" "0" "13" "1" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "46" "68" "0" "0" "0" "77" "0" "73" "0" "14" "0" "114" "2" "0" "0" "0" "0" "0" "173" "1" "729" "0" "0" "219" "0" "0" "22" "7" "27" "0" "9" "2" "0" "238" "0" "0" "0" "0" "107" "0" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "9" "0" "0" "0" "0" "12" "0" "87" "0"
|
| 29 |
+
"M028" "Study_16S07_28" "Healthy" "50" "Male" "Other" "Non-Hispanic" "0" "0" "0" "0" "170" "0" "3" "0" "0" "26" "0" "46" "0" "0" "0" "11" "5" "0" "0" "14" "27" "0" "86" "0" "2" "0" "0" "0" "0" "0" "56" "4" "0" "0" "0" "0" "0" "217" "0" "0" "10" "0" "0" "6" "0" "0" "201" "6" "0" "0" "20" "0" "6" "0" "10" "25" "0" "0" "0" "0" "0" "0" "47" "0" "0" "0" "0" "0" "67" "0" "0" "0" "0" "0" "173" "39" "0" "0" "0" "10" "0" "38" "239" "0" "0" "13" "147" "91" "7" "401" "0" "0" "21" "0" "0" "0" "84" "0" "0" "0" "6" "18" "0" "15" "10" "0" "0" "0" "0" "0" "0" "3" "0" "2" "23" "10" "0" "0" "0" "0" "49" "0" "0" "0" "105" "0" "0" "0" "2" "3" "0" "0" "0" "0" "102" "16" "0" "0" "69" "0" "44" "0" "0" "0" "0" "8" "0" "34" "0" "0" "0" "0" "87" "0" "0" "0" "278" "0" "0" "85" "0" "21" "0" "53" "0" "6" "3" "16" "0" "0" "23" "0" "16" "0" "86" "0" "0" "61" "0" "0" "0" "4" "0" "209" "0" "0" "7" "39" "0" "0" "0" "0" "0" "0" "0" "0" "482" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "11" "10" "11" "46" "20" "0" "36" "3" "79" "0" "0" "161" "86" "0" "22" "60" "0" "23" "0" "283" "22" "0" "9" "0" "0" "14" "3" "0" "0" "0" "0" "0" "20" "0" "0" "0" "44" "0" "0" "0" "0" "0" "139" "0" "0" "0" "0" "0" "0" "0" "79" "20" "0" "0" "0" "3" "0" "0" "127" "0" "0" "0" "0" "5" "0" "560" "56" "0" "0" "0" "0" "0" "15" "5" "0" "0" "0" "11" "5" "0" "0"
|
| 30 |
+
"M029" "Study_16S07_29" "IBD" "58" "Female" "Other" "Non-Hispanic" "13" "0" "7" "0" "0" "0" "0" "0" "0" "0" "4" "19" "0" "0" "13" "0" "0" "48" "0" "0" "0" "0" "124" "501" "0" "0" "0" "18" "0" "0" "0" "0" "0" "16" "0" "48" "1" "151" "0" "0" "12" "81" "0" "0" "7" "0" "0" "114" "0" "0" "0" "16" "0" "0" "0" "0" "1" "0" "0" "41" "0" "0" "0" "0" "0" "0" "7" "0" "0" "10" "3" "251" "0" "0" "0" "0" "140" "0" "20" "0" "0" "22" "7" "24" "15" "48" "251" "0" "0" "0" "0" "98" "0" "0" "0" "0" "0" "0" "0" "3" "54" "0" "0" "0" "0" "0" "0" "16" "0" "0" "176" "0" "54" "11" "0" "0" "27" "0" "38" "4" "191" "0" "0" "21" "0" "0" "12" "2" "0" "0" "0" "0" "0" "0" "3" "0" "0" "90" "0" "0" "0" "301" "196" "0" "0" "463" "0" "0" "30" "0" "104" "0" "0" "0" "20" "23" "303" "24" "0" "0" "0" "0" "0" "2" "0" "23" "29" "62" "0" "120" "0" "0" "0" "0" "0" "1" "0" "151" "0" "40" "1" "0" "0" "0" "0" "4" "10" "8" "0" "240" "0" "0" "1" "0" "10" "272" "8" "0" "0" "0" "0" "0" "23" "0" "3" "0" "5" "0" "0" "0" "0" "0" "0" "0" "1" "11" "5" "1" "0" "5" "0" "0" "0" "116" "0" "43" "33" "10" "14" "0" "8" "0" "0" "0" "0" "0" "0" "0" "0" "15" "75" "2" "0" "0" "6" "0" "0" "215" "235" "0" "11" "6" "0" "2" "0" "0" "0" "0" "0" "0" "0" "666" "12" "10" "75" "0" "0" "117" "0" "359" "23" "0" "12" "0" "2" "0" "0" "0" "0" "10" "0" "54" "0" "0" "42" "0" "0" "74" "0" "0" "1" "0" "0" "0" "4" "0" "0" "29" "0" "0"
|
| 31 |
+
"M030" "Study_16S07_30" "Healthy" "72" "Male" "Asian" "Non-Hispanic" "6" "1" "0" "161" "6" "0" "0" "0" "107" "147" "0" "0" "13" "0" "0" "22" "11" "38" "20" "33" "24" "0" "0" "0" "0" "0" "0" "0" "0" "29" "0" "3" "0" "37" "0" "0" "32" "60" "0" "0" "66" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "3" "0" "0" "0" "0" "0" "0" "5" "6" "0" "0" "0" "10" "0" "0" "25" "0" "0" "73" "3" "0" "0" "0" "32" "160" "31" "56" "0" "0" "0" "0" "6" "0" "0" "23" "0" "0" "0" "184" "0" "0" "1" "248" "0" "0" "0" "1" "0" "4" "80" "2" "13" "0" "0" "0" "8" "2" "0" "0" "83" "11" "3" "0" "0" "5" "19" "0" "10" "33" "0" "0" "0" "0" "38" "20" "0" "53" "5" "0" "2" "0" "0" "0" "0" "0" "0" "0" "62" "112" "0" "9" "0" "0" "59" "151" "14" "0" "1" "0" "6" "215" "0" "53" "0" "0" "0" "0" "0" "9" "4" "0" "27" "0" "4" "8" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "83" "0" "0" "58" "5" "182" "0" "0" "46" "0" "0" "0" "30" "25" "2" "1" "0" "0" "15" "2" "6" "0" "0" "2" "0" "5" "1" "0" "0" "0" "0" "3" "0" "0" "0" "18" "0" "0" "0" "0" "9" "331" "0" "0" "37" "0" "2" "0" "0" "25" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "38" "0" "4" "8" "0" "0" "0" "11" "0" "4" "0" "0" "0" "4" "28" "11" "0" "18" "0" "75" "0" "0" "55" "0" "0" "0" "34" "0" "11" "0" "0" "7" "0" "1" "0" "0" "0" "8" "4" "2" "0" "0" "63" "0" "21" "0" "0" "0"
|
| 32 |
+
"M031" "Study_16S07_31" "Healthy" "64" "Female" "Other" "Non-Hispanic" "2" "7" "0" "0" "0" "0" "0" "32" "0" "0" "2" "128" "85" "0" "0" "52" "0" "80" "0" "4" "1" "18" "0" "0" "0" "0" "0" "46" "0" "0" "139" "0" "3" "32" "0" "73" "4" "171" "0" "0" "0" "134" "0" "1" "0" "34" "0" "44" "5" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "2" "0" "0" "0" "0" "6" "0" "0" "2" "0" "6" "0" "136" "237" "6" "0" "0" "36" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" "1" "16" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "142" "0" "0" "0" "0" "0" "0" "30" "0" "0" "1" "3" "1" "0" "4" "1" "0" "6" "0" "0" "32" "3" "118" "32" "0" "0" "0" "9" "0" "214" "34" "0" "0" "2" "6" "0" "86" "0" "15" "0" "43" "29" "6" "0" "0" "0" "80" "8" "0" "36" "0" "0" "0" "0" "0" "0" "0" "11" "0" "0" "0" "22" "38" "0" "0" "0" "25" "0" "0" "0" "2" "0" "0" "70" "47" "0" "18" "0" "0" "617" "0" "0" "0" "11" "0" "0" "106" "0" "0" "0" "0" "0" "9" "0" "0" "0" "0" "0" "0" "1" "1" "32" "159" "55" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "90" "0" "0" "0" "0" "17" "0" "0" "0" "0" "0" "0" "0" "50" "11" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "0" "20" "0" "10" "0" "0" "59" "0" "0" "20" "35" "0" "0" "0" "62" "296" "0" "2" "0" "478" "0" "0" "0" "0" "0" "0" "0" "5" "0" "0" "17" "0" "0" "0" "0" "0" "0" "0" "0"
|
| 33 |
+
"M032" "Study_16S07_32" "Healthy" "73" "Male" "Black" "Non-Hispanic" "0" "0" "0" "0" "0" "0" "15" "131" "0" "63" "0" "0" "35" "28" "233" "0" "0" "0" "5" "0" "0" "0" "572" "0" "0" "0" "12" "0" "5" "7" "0" "2" "0" "2" "32" "109" "0" "79" "12" "0" "297" "0" "0" "31" "0" "18" "0" "38" "0" "2" "0" "0" "0" "39" "18" "0" "0" "58" "0" "0" "0" "0" "0" "2" "0" "0" "13" "4" "0" "16" "12" "0" "2" "22" "0" "0" "0" "19" "0" "0" "12" "0" "744" "0" "0" "19" "0" "76" "70" "0" "18" "200" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "5" "10" "0" "13" "2" "0" "0" "0" "0" "8" "0" "0" "3" "0" "0" "0" "6" "0" "0" "27" "7" "6" "12" "0" "0" "40" "1" "199" "19" "1" "429" "11" "28" "0" "0" "6" "0" "36" "0" "47" "0" "303" "0" "0" "0" "0" "11" "1" "0" "0" "0" "0" "0" "57" "0" "42" "0" "0" "0" "0" "3" "2" "0" "14" "21" "6" "0" "12" "0" "0" "73" "0" "64" "1" "24" "54" "0" "0" "0" "0" "0" "119" "0" "0" "42" "0" "0" "83" "0" "2" "0" "0" "0" "0" "0" "2" "0" "0" "6" "0" "0" "0" "57" "0" "24" "0" "15" "0" "31" "0" "0" "0" "28" "0" "0" "0" "0" "0" "6" "0" "0" "0" "0" "51" "0" "0" "0" "0" "0" "0" "33" "0" "0" "0" "0" "40" "0" "54" "0" "7" "0" "0" "0" "0" "0" "117" "0" "51" "0" "0" "0" "0" "4" "0" "423" "0" "0" "1" "0" "4" "167" "74" "0" "0" "175" "0" "0" "0" "25" "0" "0" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "29" "0" "0"
|
| 34 |
+
"M033" "Study_16S07_33" "IBD" "70" "Male" "Black" "Non-Hispanic" "9" "5" "1" "66" "0" "0" "1" "0" "0" "14" "0" "0" "0" "29" "57" "60" "0" "5" "0" "3" "0" "0" "5" "0" "0" "0" "0" "0" "0" "7" "0" "0" "0" "0" "0" "8" "21" "0" "20" "10" "0" "133" "0" "0" "3" "21" "0" "0" "0" "0" "0" "27" "0" "0" "15" "0" "0" "0" "0" "0" "136" "0" "0" "0" "0" "8" "121" "5" "0" "5" "2" "0" "0" "0" "0" "0" "0" "105" "0" "0" "44" "36" "0" "92" "0" "0" "0" "0" "186" "0" "380" "223" "0" "83" "106" "0" "13" "2" "0" "0" "11" "0" "0" "2" "158" "0" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "0" "0" "18" "0" "0" "0" "0" "28" "84" "2" "0" "2" "0" "0" "0" "0" "0" "0" "0" "0" "0" "964" "20" "0" "9" "0" "0" "0" "31" "46" "17" "0" "0" "0" "0" "5" "16" "72" "1" "27" "0" "0" "80" "13" "0" "0" "1" "0" "7" "0" "14" "0" "0" "59" "0" "0" "45" "0" "0" "0" "0" "0" "0" "1" "0" "27" "0" "0" "6" "0" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "63" "0" "20" "0" "0" "11" "0" "0" "7" "0" "0" "0" "0" "0" "0" "0" "21" "23" "0" "0" "0" "0" "2" "0" "3" "0" "54" "0" "0" "0" "138" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "9" "14" "0" "0" "0" "5" "0" "5" "0" "7" "0" "7" "0" "17" "0" "0" "7" "0" "0" "1" "0" "18" "0" "264" "0" "14" "10" "0" "0" "0" "0" "0" "17" "108" "0" "267" "0" "0" "1" "0" "22" "4" "63" "1" "0" "0" "58" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "23" "0" "26" "0" "144"
|
| 35 |
+
"M034" "Study_16S07_34" "IBD" "56" "Female" "Other" "Hispanic" "0" "3" "1" "0" "0" "220" "0" "0" "0" "0" "0" "0" "126" "0" "0" "0" "6" "378" "2" "0" "25" "0" "0" "0" "22" "0" "0" "19" "3" "1" "0" "0" "0" "14" "0" "0" "0" "0" "24" "0" "0" "0" "0" "0" "16" "0" "0" "0" "4" "0" "0" "42" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "91" "0" "0" "0" "7" "6" "0" "0" "0" "0" "68" "0" "9" "208" "63" "0" "4" "3" "9" "0" "0" "0" "255" "98" "52" "0" "39" "183" "0" "24" "9" "0" "0" "0" "0" "12" "0" "0" "0" "3" "0" "299" "7" "63" "0" "0" "21" "0" "0" "25" "0" "0" "0" "22" "0" "3" "349" "0" "0" "0" "36" "131" "0" "0" "0" "0" "0" "0" "4" "0" "4" "9" "0" "0" "0" "0" "0" "317" "0" "0" "0" "0" "0" "0" "0" "0" "109" "0" "0" "41" "1" "36" "16" "0" "0" "79" "0" "10" "0" "0" "3" "33" "0" "247" "224" "0" "8" "0" "0" "0" "19" "1" "0" "0" "18" "0" "15" "8" "0" "0" "1" "0" "0" "18" "0" "224" "7" "13" "0" "0" "0" "5" "0" "0" "0" "0" "139" "32" "0" "0" "30" "77" "0" "5" "0" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "14" "0" "105" "174" "51" "58" "0" "205" "331" "0" "232" "0" "25" "61" "0" "0" "0" "16" "0" "148" "0" "0" "0" "0" "50" "163" "465" "0" "5" "22" "0" "92" "0" "0" "0" "0" "4" "0" "0" "0" "0" "0" "0" "0" "44" "75" "0" "0" "0" "0" "0" "0" "0" "8" "0" "0" "13" "2" "0" "2" "0" "0" "0" "11" "0" "0" "0" "5" "4" "0" "0" "0" "2" "0" "0" "0" "0" "6" "0"
|
| 36 |
+
"M035" "Study_16S07_35" "IBD" "47" "Female" "Other" "Non-Hispanic" "0" "0" "0" "0" "137" "0" "0" "0" "0" "0" "0" "54" "90" "12" "29" "21" "0" "0" "17" "0" "0" "0" "4" "0" "158" "0" "0" "0" "0" "2" "214" "0" "0" "0" "36" "0" "0" "0" "9" "9" "0" "0" "0" "24" "0" "0" "4" "170" "0" "0" "13" "0" "0" "17" "0" "5" "18" "0" "175" "53" "0" "0" "0" "31" "0" "22" "0" "19" "0" "0" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "0" "0" "0" "0" "7" "22" "91" "0" "0" "406" "0" "7" "48" "17" "66" "0" "27" "42" "0" "27" "0" "7" "17" "5" "40" "129" "0" "0" "0" "0" "1" "0" "0" "13" "0" "0" "0" "17" "0" "0" "0" "0" "8" "0" "13" "0" "0" "0" "5" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "5" "0" "0" "0" "3" "22" "49" "243" "0" "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "86" "0" "27" "1" "0" "1" "0" "0" "0" "0" "0" "0" "22" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "36" "0" "0" "1" "5" "56" "43" "12" "0" "1" "0" "6" "160" "237" "0" "0" "0" "0" "0" "4" "15" "0" "19" "30" "0" "0" "0" "0" "0" "289" "3" "7" "4" "0" "173" "0" "0" "3" "0" "0" "0" "13" "0" "38" "0" "0" "0" "0" "50" "0" "2" "0" "0" "2" "0" "0" "20" "105" "0" "64" "4" "0" "2" "4" "0" "0" "0" "0" "5" "27" "0" "85" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "73" "0" "0" "0" "4" "0" "0" "0" "0" "1" "0" "0" "0" "2" "0" "0" "0" "0" "0" "0" "1" "0" "25" "0" "0" "84" "0" "0" "0" "0" "0"
|
| 37 |
+
"M036" "Study_16S07_36" "Healthy" "47" "Female" "White" "Hispanic" "0" "0" "0" "18" "0" "16" "0" "0" "160" "0" "1" "177" "0" "0" "0" "0" "0" "3" "0" "0" "18" "0" "0" "0" "36" "10" "2" "0" "0" "28" "17" "71" "0" "0" "0" "33" "0" "2" "22" "0" "0" "0" "0" "0" "6" "104" "444" "45" "8" "34" "0" "1" "0" "0" "0" "0" "0" "9" "0" "0" "0" "14" "0" "6" "0" "0" "0" "0" "13" "0" "0" "0" "0" "0" "0" "1" "23" "0" "104" "0" "0" "0" "0" "0" "15" "0" "6" "20" "0" "146" "0" "36" "106" "0" "0" "0" "0" "0" "6" "23" "0" "0" "41" "0" "0" "0" "0" "0" "0" "0" "42" "1" "0" "4" "0" "0" "0" "20" "3" "0" "0" "0" "0" "0" "0" "3" "0" "0" "0" "16" "0" "0" "1" "0" "0" "12" "5" "0" "71" "29" "0" "81" "0" "7" "66" "0" "46" "0" "0" "0" "198" "0" "0" "11" "0" "54" "67" "17" "0" "0" "18" "0" "1" "139" "0" "0" "0" "37" "0" "0" "0" "25" "0" "48" "0" "0" "9" "0" "12" "44" "2" "0" "0" "0" "0" "0" "0" "0" "40" "70" "0" "1" "0" "297" "0" "216" "0" "0" "0" "0" "30" "0" "0" "0" "9" "0" "0" "0" "39" "0" "0" "0" "60" "0" "0" "0" "0" "0" "0" "0" "0" "0" "14" "201" "0" "26" "0" "0" "0" "0" "0" "204" "0" "5" "109" "0" "4" "0" "149" "0" "0" "0" "0" "0" "0" "3" "36" "30" "0" "0" "0" "0" "16" "0" "0" "0" "0" "0" "9" "0" "0" "0" "0" "0" "2" "0" "49" "0" "0" "155" "35" "0" "0" "20" "0" "0" "0" "0" "0" "0" "0" "0" "1" "0" "57" "13" "0" "0" "0" "0" "256" "0" "0" "0" "0" "0" "21" "0" "0" "40"
|
| 38 |
+
"M037" "Study_16S07_37" "IBD" "61" "Male" "White" "Non-Hispanic" "0" "7" "0" "0" "0" "0" "0" "0" "0" "46" "0" "0" "58" "0" "21" "0" "1" "0" "0" "0" "25" "4" "0" "32" "0" "0" "0" "0" "0" "0" "94" "0" "0" "0" "20" "0" "3" "0" "63" "2" "0" "0" "3" "0" "0" "0" "0" "7" "0" "0" "0" "0" "24" "0" "37" "7" "2" "0" "63" "0" "0" "0" "0" "0" "0" "10" "9" "0" "24" "0" "0" "0" "0" "0" "0" "9" "46" "8" "0" "0" "0" "23" "45" "0" "5" "0" "0" "0" "0" "795" "0" "0" "643" "0" "229" "0" "0" "0" "0" "0" "218" "0" "22" "0" "0" "17" "0" "155" "0" "0" "0" "0" "6" "0" "15" "5" "0" "0" "0" "0" "0" "0" "5" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "8" "4243" "0" "0" "1" "0" "0" "0" "11" "0" "0" "3" "0" "1" "10" "0" "4" "0" "0" "15" "0" "6" "0" "21" "0" "34" "0" "0" "0" "0" "259" "0" "3" "117" "0" "14" "93" "0" "31" "29" "0" "41" "0" "0" "8" "0" "0" "0" "0" "16" "2" "0" "0" "48" "0" "23" "0" "0" "52" "0" "0" "0" "403" "0" "0" "53" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "187" "62" "35" "0" "0" "0" "0" "20" "0" "29" "10" "0" "0" "0" "0" "398" "0" "0" "19" "0" "0" "335" "2" "0" "0" "10" "0" "46" "2" "1" "0" "96" "16" "19" "131" "0" "37" "0" "0" "26" "36" "0" "0" "0" "0" "0" "21" "16" "48" "0" "129" "0" "374" "20" "0" "0" "0" "0" "0" "0" "144" "74" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "16" "23" "79" "211"
|
| 39 |
+
"M038" "Study_16S07_38" "Healthy" "75" "Female" "White" "Non-Hispanic" "0" "0" "0" "0" "6" "7" "0" "36" "0" "0" "0" "0" "145" "0" "0" "0" "0" "0" "5" "0" "11" "0" "0" "25" "66" "0" "0" "0" "35" "0" "0" "0" "0" "0" "23" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "25" "14" "0" "112" "0" "0" "0" "58" "4" "0" "19" "10" "41" "0" "28" "4" "0" "0" "0" "0" "0" "0" "0" "0" "0" "9" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "28" "0" "0" "0" "0" "0" "0" "37" "0" "204" "0" "0" "0" "0" "0" "1" "0" "14" "0" "14" "0" "0" "0" "0" "72" "0" "4" "0" "89" "1" "5" "0" "0" "0" "0" "7" "0" "0" "0" "0" "4" "261" "0" "0" "60" "1" "0" "0" "0" "37" "125" "0" "0" "0" "49" "0" "0" "0" "19" "0" "318" "0" "0" "0" "0" "0" "0" "0" "2" "0" "0" "48" "0" "0" "0" "71" "27" "4" "0" "1" "0" "0" "0" "0" "4" "0" "3" "0" "0" "0" "44" "0" "0" "0" "0" "59" "0" "532" "0" "196" "0" "0" "0" "0" "14" "0" "1" "0" "0" "67" "0" "0" "53" "0" "0" "3" "192" "0" "3" "18" "0" "0" "0" "0" "0" "0" "0" "0" "290" "0" "0" "3" "112" "31" "0" "0" "0" "0" "60" "0" "0" "0" "0" "0" "19" "0" "0" "9" "0" "30" "0" "0" "0" "0" "0" "0" "0" "12" "0" "0" "11" "221" "0" "0" "4" "0" "0" "0" "0" "0" "0" "34" "5" "1" "0" "0" "11" "6" "0" "12" "0" "0" "3" "0" "78" "9" "6" "0" "0" "0" "3" "7" "0" "2" "3" "6" "0" "0" "19" "0" "0" "1" "0" "0"
|
| 40 |
+
"M039" "Study_16S07_39" "IBD" "48" "Female" "Black" "Non-Hispanic" "0" "0" "2" "111" "0" "1" "2" "0" "0" "0" "0" "0" "0" "0" "5" "0" "0" "44" "0" "0" "10" "22" "42" "0" "0" "0" "0" "230" "113" "0" "90" "0" "0" "20" "0" "0" "0" "0" "17" "2" "0" "0" "0" "33" "10" "0" "589" "67" "7" "0" "0" "0" "0" "0" "0" "0" "16" "11" "0" "0" "0" "0" "10" "5" "0" "69" "8" "0" "1" "0" "10" "0" "0" "0" "0" "33" "0" "82" "21" "0" "2" "0" "6" "0" "0" "11" "0" "0" "42" "94" "0" "0" "0" "4" "24" "0" "9" "33" "0" "133" "348" "0" "5" "82" "0" "0" "26" "11" "0" "7" "0" "0" "0" "0" "73" "0" "0" "0" "8" "24" "6" "58" "4" "0" "8" "66" "0" "6" "0" "0" "9" "1" "10" "154" "0" "0" "0" "0" "0" "0" "0" "0" "579" "3" "0" "0" "0" "0" "0" "0" "0" "0" "50" "0" "0" "0" "0" "0" "2" "15" "0" "0" "0" "0" "6" "0" "0" "0" "0" "0" "34" "37" "0" "0" "0" "0" "0" "0" "0" "36" "0" "3" "0" "0" "0" "8" "80" "1" "0" "0" "0" "0" "2" "0" "70" "0" "0" "0" "0" "0" "0" "0" "26" "0" "2" "0" "0" "3" "0" "0" "49" "0" "18" "0" "0" "0" "3" "0" "0" "0" "4" "0" "0" "0" "0" "134" "0" "32" "0" "0" "0" "0" "0" "0" "5" "34" "3" "0" "81" "0" "71" "0" "0" "1" "141" "35" "0" "0" "0" "0" "0" "0" "0" "0" "0" "281" "47" "8" "0" "18" "246" "0" "0" "10" "22" "15" "0" "0" "0" "190" "19" "39" "0" "22" "0" "0" "201" "36" "0" "67" "0" "0" "0" "52" "8" "0" "0" "0" "0" "0" "305" "0" "2" "14" "0" "24" "4" "0" "0" "0"
|
| 41 |
+
"M040" "Study_16S07_40" "Healthy" "36" "Male" "Asian" "Non-Hispanic" "2" "0" "0" "0" "0" "0" "0" "66" "109" "0" "0" "0" "0" "0" "7" "0" "0" "33" "0" "0" "0" "0" "2" "0" "34" "0" "2" "0" "1" "0" "0" "0" "0" "37" "0" "0" "1" "0" "20" "0" "178" "0" "1" "0" "0" "0" "167" "0" "1" "0" "0" "15" "0" "17" "10" "7" "0" "10" "0" "0" "0" "0" "0" "0" "0" "54" "0" "13" "0" "0" "0" "14" "0" "3" "0" "52" "0" "0" "91" "2" "36" "0" "0" "0" "0" "0" "0" "24" "68" "0" "0" "64" "645" "0" "0" "0" "0" "0" "0" "100" "0" "0" "0" "10" "0" "439" "0" "0" "0" "27" "0" "2" "0" "1" "0" "127" "12" "8" "0" "1" "185" "155" "3" "0" "94" "0" "0" "14" "0" "11" "4" "0" "0" "34" "69" "1" "9" "0" "118" "4" "0" "7" "0" "0" "0" "0" "0" "0" "12" "0" "0" "4" "10" "0" "14" "0" "90" "0" "27" "0" "0" "0" "2" "0" "0" "67" "0" "75" "0" "0" "10" "0" "46" "0" "0" "5" "0" "0" "0" "0" "0" "0" "6" "0" "0" "57" "40" "0" "0" "55" "68" "0" "2" "230" "2" "0" "0" "0" "0" "765" "0" "0" "8" "3" "0" "0" "0" "0" "239" "0" "23" "4" "0" "0" "0" "0" "0" "0" "55" "0" "0" "1" "16" "0" "21" "0" "0" "0" "16" "67" "22" "0" "27" "17" "0" "0" "0" "0" "0" "0" "27" "0" "0" "0" "0" "0" "143" "0" "61" "0" "0" "7" "0" "0" "5" "12" "0" "0" "1" "0" "16" "0" "104" "6" "0" "0" "0" "40" "3" "0" "0" "162" "15" "6" "39" "19" "215" "0" "3" "206" "0" "0" "32" "0" "0" "0" "2" "55" "3" "14" "0" "5" "0" "0" "0" "0" "0" "0" "0" "0"
|
src/statlens/data/examples/08_Continuous_limma_basic_synthetic.tsv
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"subject_id" "sample_id" "group" "age" "sex" "race" "ethnicity" "prot_1" "prot_2" "prot_3" "prot_4" "prot_5" "prot_6" "prot_7" "prot_8" "prot_9" "prot_10" "prot_11" "prot_12" "prot_13" "prot_14" "prot_15" "prot_16" "prot_17" "prot_18" "prot_19" "prot_20" "prot_21" "prot_22" "prot_23" "prot_24" "prot_25" "prot_26" "prot_27" "prot_28" "prot_29" "prot_30" "prot_31" "prot_32" "prot_33" "prot_34" "prot_35" "prot_36" "prot_37" "prot_38" "prot_39" "prot_40" "prot_41" "prot_42" "prot_43" "prot_44" "prot_45" "prot_46" "prot_47" "prot_48" "prot_49" "prot_50" "prot_51" "prot_52" "prot_53" "prot_54" "prot_55" "prot_56" "prot_57" "prot_58" "prot_59" "prot_60" "prot_61" "prot_62" "prot_63" "prot_64" "prot_65" "prot_66" "prot_67" "prot_68" "prot_69" "prot_70" "prot_71" "prot_72" "prot_73" "prot_74" "prot_75" "prot_76" "prot_77" "prot_78" "prot_79" "prot_80" "prot_81" "prot_82" "prot_83" "prot_84" "prot_85" "prot_86" "prot_87" "prot_88" "prot_89" "prot_90" "prot_91" "prot_92" "prot_93" "prot_94" "prot_95" "prot_96" "prot_97" "prot_98" "prot_99" "prot_100" "prot_101" "prot_102" "prot_103" "prot_104" "prot_105" "prot_106" "prot_107" "prot_108" "prot_109" "prot_110" "prot_111" "prot_112" "prot_113" "prot_114" "prot_115" "prot_116" "prot_117" "prot_118" "prot_119" "prot_120" "prot_121" "prot_122" "prot_123" "prot_124" "prot_125" "prot_126" "prot_127" "prot_128" "prot_129" "prot_130" "prot_131" "prot_132" "prot_133" "prot_134" "prot_135" "prot_136" "prot_137" "prot_138" "prot_139" "prot_140" "prot_141" "prot_142" "prot_143" "prot_144" "prot_145" "prot_146" "prot_147" "prot_148" "prot_149" "prot_150" "prot_151" "prot_152" "prot_153" "prot_154" "prot_155" "prot_156" "prot_157" "prot_158" "prot_159" "prot_160" "prot_161" "prot_162" "prot_163" "prot_164" "prot_165" "prot_166" "prot_167" "prot_168" "prot_169" "prot_170" "prot_171" "prot_172" "prot_173" "prot_174" "prot_175" "prot_176" "prot_177" "prot_178" "prot_179" "prot_180" "prot_181" "prot_182" "prot_183" "prot_184" "prot_185" "prot_186" "prot_187" "prot_188" "prot_189" "prot_190" "prot_191" "prot_192" "prot_193" "prot_194" "prot_195" "prot_196" "prot_197" "prot_198" "prot_199" "prot_200" "prot_201" "prot_202" "prot_203" "prot_204" "prot_205" "prot_206" "prot_207" "prot_208" "prot_209" "prot_210" "prot_211" "prot_212" "prot_213" "prot_214" "prot_215" "prot_216" "prot_217" "prot_218" "prot_219" "prot_220" "prot_221" "prot_222" "prot_223" "prot_224" "prot_225" "prot_226" "prot_227" "prot_228" "prot_229" "prot_230" "prot_231" "prot_232" "prot_233" "prot_234" "prot_235" "prot_236" "prot_237" "prot_238" "prot_239" "prot_240" "prot_241" "prot_242" "prot_243" "prot_244" "prot_245" "prot_246" "prot_247" "prot_248" "prot_249" "prot_250"
|
| 2 |
+
"S001" "Study_PROT08_1" "Control" "46" "Male" "White" "Hispanic" "17.8359" "20.8518" "18.7713" "17.2608" "18.4717" "19.4461" "19.3928" "19.5408" "17.5902" "16.2123" "17.7695" "19.0218" "18.6654" "18.1044" "19.1612" "17.7924" "17.0778" "18.0431" "16.4396" "16.1693" "19.1820" "18.0276" "16.7688" "16.2903" "19.0665" "17.9057" "18.6287" "18.7340" "17.4538" "18.5164" "17.5421" "18.3259" "19.8520" "18.3447" "17.9051" "18.4741" "17.3155" "18.6902" "17.3091" "21.1499" "18.1328" "18.5477" "19.8159" "20.0275" "17.5295" "17.1967" "18.5820" "19.2402" "17.1050" "20.3687" "16.8873" "18.5581" "18.7812" "17.3765" "18.2579" "17.3197" "17.5366" "18.2390" "17.2791" "18.5846" "17.5251" "18.4458" "15.7412" "19.2020" "19.3663" "17.9227" "17.7052" "20.0301" "19.1010" "17.7910" "18.3106" "17.5886" "17.8084" "19.8833" "17.0321" "19.4505" "18.4525" "18.2300" "18.3049" "15.2224" "17.4235" "17.7696" "17.0805" "15.8122" "19.6012" "18.2349" "17.5775" "18.8487" "16.8481" "19.3466" "17.4554" "16.4821" "16.3871" "21.0607" "17.6840" "17.1114" "16.7080" "16.4798" "17.6666" "16.0789" "18.5157" "18.7592" "17.7039" "17.3044" "19.6671" "19.5825" "17.4033" "16.5545" "18.9686" "18.0264" "19.1290" "16.7118" "18.9942" "18.4030" "18.9187" "18.7773" "18.8135" "19.2739" "16.4796" "17.7750" "17.7919" "16.4026" "19.4517" "18.1124" "17.5693" "19.9000" "15.4780" "17.8059" "17.4591" "17.6394" "17.8001" "17.5434" "17.5200" "18.0930" "20.1308" "17.4849" "18.0352" "18.9142" "17.2092" "19.0320" "19.2806" "20.5498" "16.7016" "15.8813" "17.3257" "16.4647" "18.2020" "17.8187" "16.3224" "17.0091" "17.6007" "18.2674" "19.1354" "18.7282" "19.1713" "19.1802" "19.1472" "20.0258" "17.2241" "19.8191" "16.5293" "19.5616" "16.2429" "19.9712" "18.2886" "19.8065" "18.0072" "18.7672" "16.3309" "16.9962" "18.9351" "17.6152" "19.4754" "17.9611" "19.0547" "18.1934" "17.2177" "18.7660" "19.1800" "19.3694" "17.5951" "18.7673" "20.1820" "20.5198" "18.6376" "18.9228" "17.5668" "18.8308" "17.6017" "16.7450" "20.9759" "17.2688" "18.4242" "18.1003" "18.5156" "18.0682" "18.6313" "18.7117" "17.6335" "16.1773" "19.0390" "17.8522" "17.2486" "17.7637" "18.6098" "18.2452" "17.2960" "17.6286" "18.7754" "18.7896" "18.7313" "17.8021" "17.2181" "17.9211" "16.6055" "17.2455" "18.4381" "17.6488" "17.3968" "18.3378" "17.3567" "17.7126" "19.0205" "17.9456" "18.1940" "17.1680" "17.9903" "17.3001" "15.4668" "16.5106" "17.3513" "18.0784" "18.2839" "20.9948" "17.8761" "17.9015" "15.9383" "17.0224" "17.4682" "19.2056" "17.2675" "16.3799" "18.9080" "18.1776" "18.9844" "16.9172" "17.7221" "18.5204" "18.3435" "17.1660"
|
| 3 |
+
"S002" "Study_PROT08_2" "Control" "77" "Male" "Asian" "Non-Hispanic" "16.9283" "18.2650" "15.7272" "16.9758" "18.0625" "17.0459" "18.0056" "18.7469" "20.2659" "15.4217" "16.4780" "18.3959" "18.6667" "16.9011" "18.2201" "17.7476" "19.1465" "18.9237" "17.6592" "17.8226" "19.3175" "16.4648" "16.5931" "16.1198" "18.4385" "17.5094" "18.0276" "17.7741" "15.7044" "16.2754" "16.3445" "19.6657" "16.8893" "17.9425" "18.8934" "18.4735" "17.2713" "19.3628" "17.4856" "17.6315" "18.9607" "16.7233" "16.7752" "19.4076" "17.6568" "17.1976" "20.5025" "17.6093" "18.7534" "21.8438" "18.6985" "17.7840" "16.9040" "17.8054" "17.9349" "16.4935" "17.9795" "17.9330" "18.6711" "19.0489" "18.1776" "19.0292" "17.9875" "16.2881" "20.1121" "17.6253" "16.5652" "17.8886" "18.5911" "18.4243" "17.4460" "18.7648" "18.1964" "17.0852" "17.1466" "18.6772" "19.9498" "17.1237" "17.6331" "16.1711" "16.0951" "16.5889" "19.5346" "19.5156" "18.4338" "19.4562" "20.7319" "18.7853" "17.1844" "17.9678" "18.7457" "19.2596" "17.8049" "18.3648" "15.5329" "18.5344" "16.2899" "18.3375" "17.3677" "18.6751" "18.2806" "16.9538" "18.0065" "17.4721" "17.7778" "18.4119" "19.6516" "19.0676" "18.3906" "18.7589" "18.8205" "18.3645" "17.4127" "17.5869" "17.6320" "17.1510" "18.8694" "17.9568" "18.5051" "18.5871" "17.3352" "18.6259" "18.1637" "18.6504" "17.2859" "19.2545" "18.2483" "17.4511" "17.6866" "18.8857" "16.6975" "18.7606" "19.1525" "18.9454" "19.0630" "17.9331" "18.8338" "17.5873" "16.8760" "18.4046" "18.6660" "20.0114" "16.9868" "17.1993" "18.0346" "17.0448" "16.7152" "18.1400" "17.1908" "17.6935" "17.9868" "16.6733" "18.6151" "17.2217" "18.8070" "16.2625" "18.6372" "18.7609" "17.0430" "20.9718" "16.0924" "16.8533" "17.6298" "18.2301" "20.4660" "18.0849" "16.4737" "19.5211" "16.8059" "17.2670" "18.8642" "17.0998" "17.1435" "17.9104" "16.9766" "16.3507" "18.7299" "17.4781" "19.2974" "20.3049" "19.4817" "19.0890" "19.3427" "18.4684" "17.7616" "17.0849" "19.1512" "18.5608" "17.1220" "17.3656" "19.3598" "19.2206" "17.8351" "16.6049" "19.3275" "17.5123" "19.4730" "15.6268" "16.4410" "17.7346" "18.7842" "18.0046" "19.8170" "18.7765" "18.2095" "18.0261" "16.8685" "17.7455" "18.6421" "17.2617" "18.3550" "17.4749" "17.9105" "18.6674" "16.8012" "16.0519" "18.6716" "17.2042" "16.9423" "16.4446" "18.2144" "16.4753" "17.9742" "18.2154" "17.2998" "19.9429" "17.7964" "16.5021" "17.3045" "19.5078" "17.5204" "17.7501" "19.2772" "18.1544" "19.2326" "17.9422" "16.1054" "18.7512" "17.9877" "17.4556" "17.3742" "17.1748" "16.7641" "18.8340" "18.2890" "16.4868" "18.3449" "18.7048" "16.3592" "16.2341"
|
| 4 |
+
"S003" "Study_PROT08_3" "Control" "40" "Male" "White" "Hispanic" "18.9052" "17.3665" "16.9097" "17.8026" "16.2747" "16.7927" "17.4348" "19.0370" "20.1194" "17.0315" "17.8211" "18.1858" "18.1890" "17.6275" "18.8522" "17.0264" "16.1360" "18.5277" "17.8008" "16.8744" "18.8642" "19.7338" "19.2057" "15.0983" "16.4056" "18.8300" "17.0521" "19.4576" "18.6454" "16.0694" "18.5403" "19.2079" "17.6844" "16.6523" "18.9210" "17.7455" "18.0514" "20.4485" "16.4050" "17.3033" "16.7926" "18.1307" "18.9321" "18.5967" "16.9068" "17.7324" "18.5934" "18.6868" "19.1567" "20.1162" "18.5272" "17.5432" "18.3955" "17.0664" "18.0115" "16.9464" "16.4777" "17.5760" "18.1714" "20.9891" "17.4907" "18.5291" "18.8598" "19.0246" "18.2998" "17.1620" "16.2613" "19.4904" "17.1276" "17.1532" "18.0063" "19.6391" "17.4276" "18.0684" "17.6407" "17.3025" "17.7909" "18.8134" "16.9501" "15.6210" "17.1770" "17.0256" "17.2288" "17.4963" "16.7843" "18.6846" "16.1799" "17.9066" "18.1501" "18.5549" "15.9754" "18.7665" "18.9262" "16.8922" "18.0517" "19.6353" "16.6559" "17.1902" "19.5427" "16.8744" "18.0481" "18.7624" "19.0092" "16.8413" "19.3238" "18.2034" "17.1532" "17.8701" "16.6502" "18.3488" "18.2026" "18.0073" "17.7190" "17.7800" "16.6992" "18.0000" "19.3642" "17.6065" "18.5386" "18.7659" "19.0916" "16.3701" "18.2953" "17.9376" "18.6227" "19.0305" "19.0015" "17.2405" "18.9373" "18.0769" "16.4483" "19.2703" "17.9140" "17.8433" "16.8038" "18.7640" "19.2657" "18.9084" "20.6349" "19.0460" "20.8419" "20.5381" "16.3487" "18.3833" "17.3669" "15.9982" "18.4640" "17.6594" "16.4091" "17.6012" "19.7081" "16.4213" "18.2930" "19.6308" "17.7729" "19.7387" "18.5065" "19.1358" "16.3292" "18.6711" "15.7665" "18.5548" "16.8260" "18.7302" "17.3538" "17.4154" "19.1952" "16.1122" "18.8473" "18.1532" "18.0945" "16.4428" "18.4090" "17.5621" "18.3870" "18.3556" "17.4592" "17.5579" "19.0411" "20.4161" "18.4086" "19.5616" "18.9673" "20.2234" "16.2992" "17.6758" "16.7341" "17.5949" "19.0308" "16.7227" "18.1751" "18.2553" "17.8369" "17.6235" "18.0163" "17.9379" "15.7683" "17.6684" "16.1061" "16.6540" "17.6714" "17.2838" "19.3393" "21.2321" "19.9041" "18.7324" "18.0145" "17.3882" "19.0799" "18.2116" "17.0436" "18.1004" "18.2230" "18.8901" "18.6227" "17.0965" "18.3177" "18.1778" "17.8688" "18.3331" "17.6225" "19.2348" "18.3080" "16.7529" "19.2863" "18.3572" "17.3230" "15.8859" "16.7365" "18.9831" "18.1467" "18.9562" "17.7651" "18.9709" "18.0508" "19.4042" "17.4174" "17.8132" "19.9782" "17.7333" "18.3013" "17.8658" "16.9375" "20.6996" "18.6104" "16.3471" "18.2824" "19.2700" "18.2771" "17.2387"
|
| 5 |
+
"S004" "Study_PROT08_4" "Case" "31" "Female" "Black" "Hispanic" "19.4503" "16.4831" "18.5613" "17.2953" "17.9601" "14.1265" "19.9529" "18.6935" "16.8251" "18.4131" "14.6301" "18.4377" "18.6555" "18.5007" "16.8613" "17.1290" "15.6410" "18.4993" "18.8042" "16.4902" "17.8252" "20.8700" "17.2046" "18.9908" "17.8427" "21.0006" "15.2259" "17.1569" "19.8281" "18.0853" "19.2656" "20.9840" "18.3947" "18.2302" "17.4835" "16.9398" "19.4310" "17.1144" "16.6528" "17.2301" "15.3026" "15.2651" "19.4499" "19.1630" "19.5432" "18.8815" "18.0709" "17.0709" "18.3875" "19.3834" "19.5476" "19.7300" "18.3168" "16.9996" "19.5835" "16.1842" "18.9524" "16.7824" "17.5352" "17.3871" "17.4939" "17.3968" "18.1067" "15.4518" "18.4239" "17.5931" "16.4019" "20.1453" "17.7982" "18.3798" "18.3442" "15.8295" "18.4095" "17.4457" "17.7992" "18.2320" "19.1178" "17.2786" "18.2609" "16.0468" "20.6287" "17.1923" "16.9215" "17.0131" "17.3050" "18.2805" "16.0915" "17.9696" "17.7495" "17.7408" "18.9135" "18.5029" "18.0205" "19.2118" "18.6418" "17.1037" "17.1374" "17.2392" "17.0158" "15.6472" "19.1570" "19.1015" "16.6216" "18.1388" "18.3388" "18.8962" "16.3796" "17.1774" "18.1902" "19.8423" "19.7735" "17.9138" "18.3410" "17.9073" "18.7600" "17.5720" "17.4751" "18.9304" "17.1201" "18.1863" "17.7432" "18.9915" "19.1587" "18.3963" "18.1669" "19.0323" "18.4823" "16.7295" "19.1529" "18.0810" "18.5812" "18.6641" "19.0088" "18.1701" "18.0361" "18.0544" "15.1274" "19.8661" "19.6111" "18.9356" "19.2921" "18.6904" "16.4144" "15.8997" "17.3612" "18.6557" "18.3312" "17.3332" "19.2899" "17.9081" "18.7689" "14.9121" "20.0437" "17.5827" "17.5867" "16.9571" "17.7931" "17.5475" "17.9590" "19.7314" "17.6871" "16.4495" "18.1386" "18.8634" "18.4142" "17.8247" "17.7806" "17.4315" "18.7748" "19.3690" "16.9715" "18.8331" "18.0074" "18.6463" "19.6149" "17.4589" "16.3708" "17.7559" "18.1037" "18.3325" "17.5212" "19.7337" "20.7598" "17.4108" "18.2882" "18.6798" "19.0755" "17.7887" "18.6238" "18.0381" "20.0647" "16.6228" "18.1196" "15.4446" "18.4887" "18.0835" "18.5139" "17.7716" "17.6864" "17.5632" "16.8354" "18.8844" "18.0772" "19.0279" "18.8294" "17.5213" "20.3328" "18.2532" "17.7410" "17.4264" "19.1052" "17.1059" "18.6890" "17.4162" "17.5848" "17.7193" "17.6548" "17.2536" "18.5574" "19.6779" "19.2956" "19.2916" "18.1722" "20.7203" "16.3656" "19.0030" "16.3112" "19.4511" "17.9352" "17.2460" "18.5885" "19.2179" "18.8348" "17.5591" "18.2969" "19.5265" "17.7205" "19.7853" "18.8620" "18.6510" "17.4750" "17.5980" "17.3640" "17.7653" "16.9524" "16.4797" "21.2040" "18.3647" "16.5617" "17.8857"
|
| 6 |
+
"S005" "Study_PROT08_5" "Control" "50" "Male" "Black" "Hispanic" "18.1369" "15.7292" "18.9539" "17.4388" "16.3484" "15.6894" "19.2891" "16.2686" "17.1417" "17.4679" "17.7075" "18.4682" "15.6922" "17.2795" "18.7580" "16.0927" "18.2446" "17.7994" "16.2451" "15.2727" "17.8300" "17.2407" "17.8888" "17.7675" "17.8574" "18.5433" "17.3407" "19.0312" "18.7079" "17.0026" "17.7771" "18.9173" "18.4063" "18.3931" "18.4133" "18.5664" "18.5548" "17.4057" "17.2449" "18.4823" "17.4255" "17.0819" "18.6239" "19.1443" "19.2596" "16.3332" "16.9354" "17.8892" "17.4979" "18.5505" "17.0438" "18.9701" "15.9980" "17.4549" "17.0045" "16.0554" "16.8283" "16.2120" "19.4721" "19.4281" "17.4848" "17.3549" "16.2176" "17.7716" "19.4186" "16.3308" "16.1193" "17.5437" "17.9324" "18.6111" "16.9025" "17.9343" "16.9469" "17.9552" "18.6473" "17.0703" "20.0063" "17.6997" "18.2854" "16.6094" "17.8744" "14.0423" "17.2765" "17.0018" "18.3236" "18.5923" "16.9099" "16.9161" "18.4167" "18.6560" "19.4466" "18.7464" "17.1205" "18.0748" "19.2112" "20.1105" "17.9229" "20.1747" "16.9934" "17.5491" "16.6048" "18.1392" "15.5704" "18.8062" "17.6984" "16.6612" "18.2070" "16.9613" "19.9700" "18.6931" "17.1984" "18.8006" "17.4557" "18.7429" "19.4735" "18.7579" "18.1087" "19.4667" "18.6213" "19.4071" "16.0441" "16.9729" "20.7882" "19.4418" "15.4356" "19.3612" "17.5877" "18.7070" "20.4173" "18.8507" "17.0198" "18.3758" "17.0428" "17.2947" "19.0904" "18.2131" "18.3766" "18.6296" "18.9501" "17.5380" "21.0372" "17.1118" "18.5508" "16.3390" "15.5930" "16.5790" "18.9397" "17.1734" "16.7556" "17.0335" "18.0634" "17.2389" "20.2785" "18.3782" "17.5734" "17.2604" "16.2901" "19.4698" "17.6416" "17.2468" "16.7114" "19.1526" "17.3563" "18.9900" "17.9191" "18.9830" "19.5595" "17.6786" "19.1424" "17.8210" "19.9035" "21.0017" "16.5218" "18.7754" "17.9352" "17.7941" "18.1903" "19.1670" "17.8675" "18.8039" "16.9411" "17.1474" "20.0119" "19.8095" "17.2391" "19.0695" "19.6970" "17.4331" "17.9932" "17.7589" "21.0660" "17.7491" "16.9889" "15.0474" "18.9911" "17.2366" "18.5258" "18.4014" "17.0191" "16.2821" "18.1269" "17.6297" "18.5449" "17.6127" "17.9991" "19.0277" "16.8008" "18.7794" "18.1192" "16.2089" "19.4847" "17.0807" "18.5280" "18.7472" "19.7175" "15.8053" "16.6297" "19.4176" "18.4246" "17.9497" "16.2120" "17.4180" "18.7643" "19.0758" "18.2867" "18.1689" "18.0604" "17.2370" "18.6275" "17.9042" "18.1186" "17.4259" "17.1213" "20.0206" "18.5803" "16.7674" "16.2287" "18.2514" "19.7697" "19.6217" "19.2288" "17.3500" "21.2553" "19.4580" "19.4789" "17.9706" "16.9427" "18.3152" "19.5568" "16.4149"
|
| 7 |
+
"S006" "Study_PROT08_6" "Control" "49" "Male" "White" "Non-Hispanic" "18.0358" "16.7012" "19.6176" "18.6872" "18.2826" "16.8847" "18.0069" "18.7353" "16.3572" "17.6343" "16.6471" "17.6912" "17.5004" "18.0485" "17.2137" "18.6516" "16.3937" "17.1853" "16.7249" "17.8919" "19.5598" "17.6906" "16.1681" "17.8046" "19.6625" "16.7788" "17.7860" "15.6167" "18.0543" "17.0114" "17.8926" "17.7272" "18.0025" "20.3329" "17.9506" "18.7143" "18.8964" "18.5883" "16.3661" "16.4925" "16.8855" "17.4636" "17.9937" "17.0568" "18.6372" "19.5125" "19.2473" "18.0834" "18.6050" "18.0640" "16.6879" "18.6976" "18.4748" "17.7476" "18.1103" "17.5573" "17.0592" "18.0398" "17.8861" "18.9835" "17.4425" "16.4548" "17.6768" "18.2495" "17.7273" "17.6158" "18.3823" "20.5850" "17.8845" "16.4817" "19.3329" "19.6060" "17.1132" "17.3172" "17.8996" "18.3494" "18.3381" "19.3963" "18.9429" "17.7476" "17.3539" "20.3894" "16.3864" "18.5591" "15.9637" "17.3317" "17.4996" "16.4632" "17.2563" "18.8039" "16.9838" "21.1339" "17.0979" "18.0685" "17.6422" "18.3480" "19.3436" "18.8450" "17.5915" "16.3406" "18.2519" "20.0254" "19.5144" "18.1931" "17.8200" "18.0382" "16.2511" "17.7165" "15.8378" "17.6098" "19.0353" "17.1745" "17.5743" "15.7882" "17.0892" "17.2750" "20.9353" "16.2717" "17.9851" "18.1963" "17.7845" "17.5227" "16.4308" "16.5475" "16.9268" "19.4838" "19.4464" "17.5801" "20.0161" "17.9840" "17.9632" "20.3861" "19.2390" "17.6997" "17.7157" "18.5435" "18.4032" "16.5870" "19.3224" "18.5465" "18.2041" "19.6624" "17.1245" "17.4204" "15.1600" "16.4707" "15.5791" "15.9054" "16.5224" "17.3053" "18.7321" "16.4707" "18.4128" "18.5533" "17.5788" "17.4904" "19.4813" "18.1347" "16.3336" "19.8059" "18.5258" "18.2046" "18.1937" "18.2873" "17.2546" "18.7472" "16.6926" "16.3956" "20.7735" "18.3550" "19.6719" "18.4828" "17.0511" "17.2438" "17.3578" "16.9957" "18.2545" "17.6170" "20.2050" "18.8803" "18.0494" "20.4218" "18.7525" "19.4286" "16.6815" "17.9604" "18.6574" "16.8317" "16.5974" "17.9163" "20.2361" "17.5253" "18.6858" "17.1748" "18.9240" "16.0731" "19.7464" "18.8901" "17.9212" "17.2701" "18.0989" "18.1551" "20.0259" "19.5811" "19.7269" "18.3229" "17.5039" "19.5884" "18.6275" "17.8521" "17.9526" "18.7433" "18.0755" "16.0884" "17.8868" "16.5873" "17.9048" "16.5063" "18.8794" "18.1296" "20.4006" "17.4162" "20.0746" "19.2243" "18.3876" "16.4440" "18.5712" "17.7850" "18.3283" "18.3706" "17.8186" "18.8590" "20.4216" "18.1655" "19.0005" "17.6406" "18.0225" "17.1410" "18.8887" "17.7141" "17.2721" "17.6704" "18.5211" "17.4227" "18.7731" "17.3031" "17.8503" "18.7374" "16.9333" "17.5977"
|
| 8 |
+
"S007" "Study_PROT08_7" "Case" "66" "Male" "Other" "Non-Hispanic" "17.8509" "16.8154" "18.5006" "19.3863" "19.4724" "12.9242" "19.9254" "17.7399" "17.8699" "18.6800" "16.3893" "20.0506" "15.9512" "19.1203" "18.7079" "18.3405" "16.4664" "17.3265" "16.1120" "17.2600" "18.4080" "19.7331" "17.5092" "17.4390" "17.8596" "18.5677" "17.9313" "18.0564" "19.8600" "17.1583" "17.5313" "18.5765" "18.0042" "18.9233" "18.3301" "19.6780" "18.2797" "18.4440" "17.5340" "17.3614" "17.0351" "16.6451" "19.7645" "16.7863" "17.4108" "19.0637" "20.2462" "18.6390" "17.5085" "20.7358" "17.8394" "19.4634" "20.1184" "16.2777" "17.5465" "17.5802" "17.8899" "16.9829" "19.1635" "14.4618" "18.8574" "16.5312" "17.7134" "16.7629" "18.3993" "16.9896" "15.6596" "17.0906" "19.0449" "18.9385" "15.8437" "17.6030" "17.8069" "17.4233" "16.3071" "17.8441" "19.5250" "18.7175" "18.4737" "15.5079" "19.1346" "17.9661" "17.1094" "17.5721" "17.0063" "16.1991" "16.5612" "18.4770" "17.7548" "18.9784" "18.3414" "17.7703" "18.6000" "17.4075" "19.7949" "17.3400" "16.0716" "16.4612" "17.0963" "16.9605" "17.6480" "15.9812" "18.2683" "19.6179" "19.3565" "19.2050" "17.5423" "17.8788" "19.2816" "17.7012" "15.9531" "16.1735" "18.5698" "20.6195" "17.8860" "16.9554" "18.2983" "19.6989" "17.3912" "17.1079" "18.7971" "19.2780" "17.8514" "17.3693" "18.4675" "16.1657" "20.4530" "17.9228" "18.5753" "18.6967" "18.6899" "19.7849" "17.8713" "18.4621" "19.7223" "15.6801" "16.9846" "16.6988" "18.2560" "20.8759" "18.8531" "19.4980" "15.3796" "18.9414" "18.6021" "18.8169" "16.9578" "17.8887" "19.6000" "17.8996" "17.6760" "16.3053" "19.4607" "17.0921" "17.9760" "18.3963" "18.2221" "17.2750" "17.7531" "17.0957" "16.8314" "17.9802" "18.2558" "18.4226" "18.2766" "17.7928" "17.8954" "17.0957" "18.8256" "16.1344" "18.2958" "17.6593" "17.6239" "18.9883" "19.9503" "17.4670" "17.3287" "17.2864" "19.2773" "17.5654" "19.7071" "17.9660" "19.0199" "19.7293" "16.0930" "18.8112" "17.9187" "16.2729" "17.3756" "17.4234" "20.9256" "17.7144" "17.1468" "14.2163" "19.2241" "17.5988" "18.8978" "19.0180" "17.7492" "15.6682" "18.5132" "18.5410" "19.3606" "17.2002" "19.7556" "17.8163" "18.7770" "18.5393" "17.3557" "18.6697" "18.3972" "16.1314" "19.0792" "17.6801" "15.7211" "17.4754" "18.8701" "17.1969" "18.6321" "18.1984" "20.1315" "17.6689" "16.8768" "17.7845" "17.7503" "16.3878" "20.2982" "15.3243" "17.2852" "16.9829" "19.1865" "18.8708" "18.0051" "19.9085" "17.4523" "17.6765" "17.0642" "18.4480" "17.2762" "17.1443" "18.1550" "17.1614" "16.1386" "18.8038" "17.6977" "18.1568" "18.3898" "18.6370" "17.0285" "17.2014"
|
| 9 |
+
"S008" "Study_PROT08_8" "Control" "35" "Male" "White" "Non-Hispanic" "19.1258" "17.7391" "17.8183" "18.1088" "19.1996" "19.0463" "17.7663" "18.0092" "18.1062" "19.4152" "16.8561" "17.8655" "17.4346" "20.9641" "17.9341" "19.1680" "17.1531" "18.0299" "18.5124" "17.9759" "18.0020" "17.3738" "17.0042" "19.6412" "19.3670" "18.1465" "17.6345" "20.5730" "14.9580" "17.7867" "16.3077" "19.5899" "17.8679" "17.9948" "20.0811" "16.7085" "19.2337" "19.4348" "15.7857" "17.2015" "17.1290" "17.6960" "17.9171" "17.2904" "18.5820" "18.0388" "17.4072" "18.0044" "17.6796" "21.8482" "18.1257" "19.3475" "16.9679" "16.9564" "18.7553" "17.7932" "16.0959" "17.0310" "17.0705" "18.1299" "16.6414" "17.1845" "18.3849" "16.4592" "19.7546" "16.3423" "17.8008" "19.7890" "17.3251" "17.9968" "18.1380" "16.0243" "17.8600" "17.9771" "18.4968" "16.5479" "16.8719" "18.7589" "16.8707" "17.7614" "15.1920" "17.2301" "17.1782" "19.0990" "17.2467" "16.1336" "17.1034" "17.9883" "16.6187" "18.3446" "17.2433" "17.9720" "16.3813" "19.5111" "18.1437" "18.3734" "17.7887" "18.9856" "16.6446" "17.8315" "17.0229" "16.3978" "17.5225" "16.7733" "16.0341" "17.8583" "16.6059" "18.6894" "18.8608" "19.8046" "17.9985" "17.5096" "18.9508" "17.2202" "18.9194" "19.5741" "18.9342" "17.8032" "18.0305" "18.1651" "15.7608" "19.7609" "17.5458" "20.3638" "17.9217" "17.6747" "18.4309" "17.3469" "16.3398" "19.2188" "17.7865" "20.4642" "19.9544" "17.0101" "17.7102" "19.8733" "17.7032" "18.4055" "18.3545" "17.2371" "18.0652" "20.8211" "18.4103" "18.2609" "16.9015" "19.0913" "16.6811" "18.1236" "17.2724" "16.2325" "17.8428" "16.1003" "19.8701" "19.2004" "16.8365" "18.2527" "19.2266" "19.3112" "18.0010" "16.8786" "17.0775" "18.5847" "16.9883" "17.7740" "17.1099" "18.8218" "17.8960" "18.4659" "17.3110" "17.8468" "17.6625" "17.8629" "17.6338" "15.6584" "18.0123" "18.9869" "18.4349" "19.5719" "17.6071" "19.0225" "18.0812" "18.3024" "20.4078" "20.1143" "18.0453" "20.9204" "18.3192" "19.1642" "19.3354" "14.4128" "18.8125" "16.6958" "20.1092" "16.2856" "17.5357" "17.2305" "18.7037" "15.3809" "18.6630" "15.8987" "17.4172" "18.1561" "17.9950" "19.7927" "18.4453" "18.8406" "18.3393" "19.0616" "18.9037" "17.9904" "17.9942" "17.4070" "18.3270" "19.5429" "19.2539" "18.3343" "19.4279" "17.2822" "17.5478" "16.6357" "16.3147" "18.6201" "18.4301" "18.2969" "17.7099" "17.7360" "18.2574" "17.2646" "16.1182" "19.1197" "17.6618" "19.1598" "16.7343" "18.4800" "18.8351" "19.5044" "17.8501" "18.6339" "18.7896" "16.6083" "18.1050" "18.1495" "19.5844" "17.1521" "18.3409" "18.7057" "18.1050" "18.9020" "16.9387" "16.9246"
|
| 10 |
+
"S009" "Study_PROT08_9" "Case" "52" "Female" "Black" "Non-Hispanic" "17.2659" "18.7934" "17.5783" "17.9927" "19.2442" "16.0492" "17.7900" "17.1504" "17.4373" "18.7020" "16.1679" "18.7515" "18.1275" "18.4095" "18.0040" "17.1988" "14.9634" "17.8022" "17.4077" "17.7951" "18.7596" "17.8446" "17.7731" "17.9691" "17.7906" "16.6190" "18.9084" "19.3491" "19.8930" "18.2257" "18.7233" "16.5742" "19.7391" "18.0970" "17.1931" "18.0792" "19.1590" "17.3963" "17.2103" "19.6134" "18.6433" "17.2996" "18.1503" "17.7281" "18.1173" "17.2950" "17.6378" "17.8971" "17.2848" "19.6237" "18.6313" "19.9643" "18.9781" "16.4193" "16.6359" "16.9100" "18.5476" "16.1483" "17.9712" "17.4140" "17.7697" "18.9398" "17.5342" "15.1700" "18.6770" "18.1154" "17.3500" "19.1437" "19.1853" "17.7691" "18.9502" "15.1223" "16.0009" "19.2262" "16.3487" "18.5010" "17.0225" "18.6251" "19.7125" "17.7810" "17.9287" "15.9179" "18.0487" "18.4313" "18.7751" "21.0050" "17.7433" "15.1415" "17.7676" "19.9363" "19.1847" "18.1801" "17.7982" "16.7331" "18.8210" "18.8087" "18.4761" "15.7933" "16.8489" "16.6057" "17.4415" "16.7248" "16.9314" "18.4014" "18.9577" "19.1956" "18.4690" "15.8366" "17.7828" "18.2764" "17.6074" "18.8163" "19.3648" "15.2728" "18.1067" "18.2348" "19.6578" "18.4488" "19.8740" "19.3528" "18.3782" "17.7581" "16.9828" "19.3299" "17.6929" "19.2548" "17.9754" "17.0582" "19.3460" "17.8587" "19.9569" "17.9879" "17.5650" "18.3365" "17.9801" "18.7613" "16.3492" "18.9833" "18.1173" "21.0742" "17.7427" "19.3802" "16.3409" "17.2533" "17.7624" "17.1217" "16.6517" "17.6870" "17.3175" "17.4741" "19.0805" "18.8771" "21.5770" "19.7228" "18.0350" "18.0630" "19.7954" "20.2482" "18.2726" "18.6074" "18.3730" "17.6584" "16.4862" "16.7482" "16.8671" "20.0012" "18.3319" "16.3030" "19.8373" "17.0977" "17.6565" "17.4092" "18.5410" "17.3163" "19.3802" "17.5872" "17.3318" "18.5412" "19.3884" "20.7029" "18.9974" "20.1510" "21.5518" "18.8963" "17.6427" "20.0843" "17.7433" "17.2560" "18.5619" "16.5219" "19.2472" "17.5702" "18.1976" "15.5846" "19.1828" "17.2985" "19.3750" "17.0281" "15.9699" "17.5582" "16.5680" "17.9226" "18.7244" "19.9997" "18.7953" "19.7713" "18.9643" "16.6277" "17.7343" "17.8633" "19.4371" "16.7268" "17.4290" "18.1725" "18.9481" "18.8736" "19.0494" "16.7437" "18.6819" "17.1952" "19.0305" "17.5514" "18.6776" "17.0717" "18.5075" "17.2479" "17.9649" "17.2038" "17.6263" "18.8527" "19.2265" "18.9521" "18.7445" "19.9673" "18.1914" "18.5705" "17.4756" "18.4221" "17.5890" "17.8379" "18.6657" "17.7566" "18.9346" "19.2509" "18.1640" "17.5518" "18.2731" "18.3718" "17.0045" "16.7282"
|
| 11 |
+
"S010" "Study_PROT08_10" "Case" "65" "Female" "White" "Non-Hispanic" "16.0429" "17.9637" "17.7457" "19.0463" "19.0321" "16.6650" "19.4879" "17.7227" "18.7192" "16.9450" "14.2048" "18.5993" "18.3250" "18.4423" "17.3755" "19.7037" "15.8954" "17.2519" "16.3955" "17.7001" "18.6834" "17.3067" "19.0984" "16.9149" "18.7415" "18.9551" "17.8180" "17.1662" "18.1359" "17.9385" "18.7094" "18.5174" "17.7412" "19.3781" "17.7189" "18.1893" "15.7844" "18.8682" "15.5489" "19.4175" "17.5435" "15.4780" "18.9243" "17.9129" "17.6748" "18.2388" "18.4895" "17.1886" "19.8621" "19.1818" "17.3219" "18.7654" "17.1859" "15.5590" "16.4246" "16.7683" "19.0052" "14.8017" "17.2395" "17.7912" "19.8288" "18.9119" "17.3148" "16.4156" "18.6728" "19.1691" "16.4058" "18.9260" "18.9161" "19.0428" "17.1153" "15.6344" "16.3745" "16.6194" "15.7240" "18.2456" "18.8709" "18.5805" "19.1732" "17.7307" "18.9910" "16.3738" "17.8277" "17.2031" "16.5335" "18.9687" "17.5103" "19.0201" "17.8717" "18.3648" "16.7312" "17.5469" "17.9907" "17.0042" "18.8979" "19.4786" "17.8443" "17.6592" "18.4130" "16.0054" "18.7377" "18.0231" "18.1979" "18.1622" "18.2925" "18.2053" "18.9081" "16.1540" "18.0789" "17.8227" "16.8900" "18.4045" "17.9283" "18.6474" "15.9440" "16.0080" "18.0296" "18.8458" "18.3803" "18.4106" "16.5345" "18.6269" "17.3210" "17.3340" "17.2762" "18.8968" "17.5113" "18.3238" "18.3195" "17.9602" "16.7201" "17.8228" "16.8173" "18.8268" "17.0183" "18.6094" "16.8588" "18.1418" "18.0886" "20.4328" "17.8837" "19.4811" "14.8466" "16.5313" "18.5816" "17.0278" "15.5066" "18.1762" "17.0070" "16.6850" "18.3694" "18.0630" "18.1627" "19.5742" "18.1879" "17.6282" "18.7613" "17.9983" "18.1148" "19.0088" "19.3198" "17.7445" "17.1715" "19.0958" "18.5637" "16.2754" "19.8855" "19.2279" "19.5271" "16.2079" "15.7269" "14.8233" "19.0606" "19.1311" "19.1102" "16.6655" "17.8785" "18.1237" "19.5731" "18.5106" "19.0168" "18.8524" "20.6284" "19.3282" "18.1913" "17.2099" "17.6645" "17.6915" "17.7068" "18.4409" "18.1727" "17.6370" "16.8864" "15.8324" "18.4782" "17.5194" "16.2070" "17.4829" "16.6173" "17.1416" "17.6338" "16.3374" "18.6506" "19.3540" "19.1462" "17.8946" "18.5770" "17.9632" "19.1415" "15.5200" "20.3828" "15.9594" "18.6881" "18.2320" "17.1284" "17.2629" "17.8841" "18.4045" "18.2231" "16.4683" "18.9784" "16.4629" "18.3822" "18.5948" "17.1216" "17.4351" "17.8479" "16.5250" "16.8681" "17.7785" "20.1543" "18.4832" "17.5029" "19.5619" "18.2190" "17.8486" "17.5295" "16.1195" "17.7242" "17.6651" "17.8886" "18.2430" "18.0034" "18.0681" "17.2992" "17.6383" "18.8243" "18.4853" "19.2920" "19.6434"
|
| 12 |
+
"S011" "Study_PROT08_11" "Control" "52" "Female" "Other" "Hispanic" "15.6049" "17.1097" "17.2173" "19.1014" "18.2358" "16.9635" "18.6280" "17.0230" "17.6574" "18.5658" "16.3467" "17.0700" "17.1828" "18.1959" "18.3570" "18.6239" "18.1128" "18.3149" "17.7418" "17.0584" "18.6012" "19.6771" "18.0798" "18.5593" "18.2664" "17.9964" "16.0541" "18.8689" "17.6020" "19.4809" "17.9808" "18.2805" "18.8643" "17.0243" "17.7923" "20.3002" "16.7346" "19.2935" "16.9349" "16.3457" "19.8448" "15.2089" "17.3973" "19.0991" "16.9358" "16.6270" "16.6591" "17.8509" "17.3668" "17.4747" "17.7222" "18.7908" "17.4328" "18.2151" "19.6108" "16.9481" "17.8427" "17.3460" "19.4892" "18.3988" "18.7751" "20.0006" "17.9085" "16.9058" "17.4641" "16.3483" "17.3830" "20.2015" "19.7325" "15.8785" "18.1414" "17.6236" "17.3821" "19.3772" "18.0185" "18.5260" "19.5688" "18.1704" "16.1862" "15.7349" "19.3720" "17.4615" "15.5898" "17.7758" "18.0428" "18.2861" "18.7738" "18.3524" "18.0512" "20.1772" "17.5484" "18.6963" "17.0794" "18.2940" "19.3307" "16.5652" "20.2240" "18.2158" "17.4757" "18.4125" "19.2958" "19.0222" "18.6756" "17.9595" "19.2709" "18.2629" "17.8937" "18.6576" "16.8996" "17.4268" "17.6176" "16.4863" "18.5399" "19.3837" "17.6089" "17.3281" "17.6939" "20.0502" "17.0968" "18.6324" "17.3233" "18.6291" "17.5598" "18.7649" "18.9728" "18.7395" "18.9137" "16.8676" "18.7887" "17.6167" "18.9525" "17.3966" "17.9962" "18.3168" "16.5652" "17.1528" "18.0653" "18.2874" "18.9301" "17.8090" "18.7614" "19.5006" "17.5614" "19.0168" "19.0417" "18.1621" "17.2755" "15.7353" "16.2594" "16.7626" "20.0273" "16.5564" "19.3303" "18.5370" "18.2949" "18.3617" "18.2310" "16.9939" "18.5480" "18.5523" "16.3106" "17.4599" "17.3344" "20.1254" "18.6091" "18.5606" "17.4990" "18.5163" "19.0266" "16.9446" "18.2409" "18.2814" "17.7951" "17.4293" "17.8990" "16.6472" "17.1099" "17.8062" "19.7490" "18.6125" "16.9064" "19.5893" "20.0341" "19.8594" "17.6826" "20.2295" "16.5254" "18.2075" "19.4669" "17.3589" "19.6128" "18.3691" "17.8316" "15.8217" "20.4266" "17.0274" "18.8468" "18.8059" "17.4234" "17.1697" "18.8107" "16.1174" "18.6802" "18.6419" "18.3886" "17.3102" "19.8577" "16.0157" "17.0168" "17.3232" "18.8450" "17.0393" "19.6178" "18.4890" "17.7685" "17.4634" "18.4841" "17.9853" "18.7430" "17.8677" "18.4530" "19.4342" "18.3584" "18.4351" "16.7029" "18.3524" "18.9226" "16.6649" "17.6145" "18.7938" "18.4237" "19.8640" "19.7168" "18.1353" "18.4110" "16.3780" "17.9431" "16.7872" "19.1713" "17.3880" "18.9054" "18.1706" "17.8168" "18.2561" "19.1437" "17.8888" "18.9318" "19.3501" "18.6571" "18.4664"
|
| 13 |
+
"S012" "Study_PROT08_12" "Case" "77" "Male" "White" "Non-Hispanic" "17.7747" "17.0827" "18.2523" "17.5159" "19.7839" "14.4830" "18.2144" "16.3959" "17.0653" "17.6817" "16.1411" "20.6959" "19.0257" "19.1639" "17.7036" "18.9519" "14.9278" "17.7329" "15.9575" "19.4713" "17.6349" "19.3016" "15.5491" "17.8123" "17.8767" "18.1348" "15.7783" "19.8428" "19.3559" "15.6989" "16.3306" "21.0096" "18.3892" "18.2124" "19.0902" "19.9026" "16.4893" "17.2034" "16.1594" "16.2836" "16.7672" "17.0713" "17.1430" "20.0856" "17.9988" "17.4667" "16.9412" "18.2893" "18.6400" "19.6383" "18.7549" "18.4626" "16.4933" "17.6009" "19.3693" "16.9116" "19.5793" "16.7216" "19.3372" "18.6219" "19.5617" "19.2889" "16.2633" "15.6730" "20.0699" "16.8772" "16.8888" "20.0624" "17.2738" "17.3144" "17.4738" "16.0970" "18.4940" "17.8951" "16.8928" "18.5272" "19.4475" "19.5035" "16.6807" "16.5244" "19.6573" "15.4551" "17.2897" "17.6280" "17.2630" "18.6743" "17.0829" "17.3698" "17.3507" "19.2560" "17.5867" "18.0272" "17.5604" "19.0633" "18.6235" "18.6924" "17.5995" "16.5123" "16.6704" "16.9480" "17.8084" "16.6336" "16.5486" "17.7726" "17.7257" "19.0752" "18.3904" "18.9158" "18.5672" "19.0207" "17.9948" "17.8309" "17.0549" "20.4125" "18.4479" "18.3700" "17.4226" "19.1975" "18.3104" "17.5192" "18.4015" "18.7732" "19.5058" "16.4847" "18.3296" "20.4929" "18.9277" "15.9255" "19.9642" "17.4966" "18.9431" "17.5003" "18.3007" "18.3108" "17.5763" "17.4389" "18.3785" "18.7286" "19.1365" "18.4145" "18.0972" "18.0047" "17.8224" "16.0180" "17.1183" "17.5251" "17.5904" "18.4227" "18.4304" "17.6939" "18.7739" "18.1861" "17.6575" "19.7812" "16.2682" "17.5759" "18.8927" "17.7125" "16.3222" "18.8846" "17.6117" "18.6154" "18.0390" "19.9936" "18.2703" "18.0662" "17.5372" "18.5959" "17.8057" "17.9065" "18.0843" "17.2351" "17.1565" "16.7518" "17.9214" "17.8169" "17.0238" "16.0837" "17.5783" "19.1998" "19.3610" "19.2868" "21.3381" "19.7331" "17.6416" "22.0417" "17.7993" "17.4223" "18.6757" "17.7550" "19.0319" "17.6710" "17.7353" "17.3385" "20.1334" "16.7829" "20.5170" "17.1980" "17.8672" "17.2562" "17.8001" "16.3461" "17.9803" "18.3668" "19.5189" "17.4190" "17.5763" "16.5203" "19.6311" "17.5821" "17.5251" "18.8825" "18.0553" "17.8592" "17.9167" "19.3505" "17.2524" "18.1962" "20.3726" "16.1092" "18.0019" "17.4190" "18.1991" "17.8363" "17.5574" "17.6481" "19.0703" "17.5181" "18.5757" "17.1018" "18.5836" "18.5626" "19.2179" "19.8303" "18.6658" "19.5198" "19.0546" "16.4761" "18.5964" "17.5667" "17.3589" "15.9610" "18.3447" "18.5130" "17.8881" "18.0598" "19.1284" "17.7205" "18.5757" "16.6359"
|
| 14 |
+
"S013" "Study_PROT08_13" "Control" "30" "Female" "White" "Non-Hispanic" "17.9387" "18.6797" "16.6712" "17.8607" "16.6807" "18.9972" "17.2814" "19.1198" "18.5621" "17.1539" "17.2532" "16.6524" "16.5095" "17.0350" "19.2525" "17.6960" "16.7113" "18.7465" "17.9403" "17.8152" "18.5982" "19.0541" "18.7253" "18.6078" "19.5214" "17.6413" "18.1511" "17.6621" "18.7233" "17.1348" "18.8584" "18.9899" "18.2327" "19.0568" "17.2579" "18.2478" "18.0089" "19.1615" "16.3383" "18.5775" "18.6564" "16.8867" "18.7943" "18.1392" "17.8873" "18.0391" "18.0724" "18.3714" "18.6728" "18.6625" "17.7512" "18.3494" "19.4058" "16.5239" "18.8080" "14.0272" "15.9846" "16.2877" "18.0311" "19.6529" "18.5357" "17.4219" "16.4988" "17.7502" "19.7717" "15.4071" "18.1679" "18.2939" "18.1769" "16.6765" "18.6721" "17.9219" "17.4199" "19.3157" "19.2587" "17.1690" "18.8854" "18.4022" "20.3781" "17.1356" "16.9523" "17.4826" "17.7378" "15.6634" "18.1498" "19.4333" "18.6696" "17.4139" "17.1170" "18.3821" "17.7038" "18.6089" "16.0704" "18.6888" "18.8309" "18.6396" "16.8469" "18.6242" "19.3547" "18.7676" "17.7152" "17.8876" "19.0362" "17.3564" "17.8704" "17.6079" "15.9625" "16.2195" "18.2241" "19.0017" "19.6651" "17.2943" "18.7208" "19.1392" "18.0313" "17.4487" "18.6603" "18.2540" "16.8910" "18.5416" "16.7996" "17.1518" "17.7864" "17.6202" "18.0110" "17.1373" "18.4423" "16.0562" "17.1986" "16.7281" "17.3289" "18.0522" "17.2098" "18.6784" "19.0539" "18.7522" "17.9471" "16.6030" "16.2506" "17.8393" "16.7188" "17.8706" "17.6896" "16.5442" "18.5171" "17.2178" "20.2427" "15.4771" "15.3976" "17.1908" "18.3309" "15.6012" "17.7992" "17.0456" "19.4397" "17.8855" "19.6465" "18.9441" "17.5916" "18.3562" "14.4937" "20.6003" "18.2333" "19.5940" "19.7104" "17.2186" "16.8899" "16.6377" "17.9354" "15.9724" "19.4801" "16.6158" "15.9440" "18.0621" "17.6668" "15.9840" "15.9644" "17.2484" "18.5450" "18.1643" "16.7136" "16.7726" "19.5677" "17.9471" "16.3437" "18.7969" "18.5227" "17.3140" "17.8049" "16.8010" "19.3857" "16.8629" "18.1750" "14.9843" "19.9371" "16.8853" "17.3400" "17.7798" "15.5560" "16.2867" "17.8790" "18.5182" "16.9510" "17.6796" "18.3256" "18.8313" "18.6274" "18.0326" "18.2590" "18.4648" "17.9644" "17.7045" "19.8597" "16.7512" "17.3040" "18.3553" "17.6762" "18.5285" "17.7896" "19.2768" "16.3879" "17.8665" "20.8805" "18.9494" "18.8858" "18.3384" "18.1432" "16.5641" "18.6140" "17.9916" "18.8684" "20.0018" "19.8177" "18.1087" "17.4809" "18.6290" "17.0295" "16.8474" "18.0731" "17.1864" "18.2849" "18.2290" "18.0337" "19.8649" "16.4596" "17.3302" "17.2100" "18.6228" "17.0075" "18.0127"
|
| 15 |
+
"S014" "Study_PROT08_14" "Case" "45" "Female" "White" "Non-Hispanic" "17.6016" "17.6986" "18.8381" "16.3344" "20.0037" "15.6182" "19.3813" "17.7651" "19.3986" "17.7019" "16.7491" "19.2355" "18.8551" "16.7337" "19.8538" "17.4893" "14.3700" "17.7901" "16.5900" "16.3218" "18.8000" "18.4667" "16.5719" "17.8303" "16.9421" "16.5669" "18.8837" "19.7278" "20.4582" "16.4001" "18.2111" "18.9102" "18.6293" "18.7786" "18.4050" "18.6885" "17.2957" "17.9672" "15.2373" "16.7534" "16.7292" "17.2586" "17.7084" "19.7937" "16.8708" "17.3767" "18.5326" "19.8761" "17.7690" "19.6035" "17.6173" "19.3456" "18.8833" "18.0942" "19.5378" "19.7491" "19.6847" "17.2862" "17.0249" "19.2996" "17.1564" "16.5289" "15.7215" "15.7154" "19.2496" "17.3935" "17.0791" "17.7628" "17.2780" "16.4868" "18.4087" "17.2468" "17.7510" "17.3733" "15.8368" "17.2321" "19.5106" "16.7212" "18.3746" "16.3215" "17.2896" "17.7946" "18.1736" "14.0852" "17.6138" "17.5114" "17.8101" "17.5570" "17.9209" "19.6355" "18.7224" "18.5687" "17.2925" "19.2254" "19.2253" "16.5500" "18.2647" "18.8629" "18.3813" "16.2713" "18.8886" "16.3199" "16.9986" "17.9170" "17.8364" "16.4408" "18.4337" "17.9845" "19.7056" "19.4574" "18.1192" "16.4308" "17.5937" "17.8002" "16.6367" "18.1922" "17.9506" "18.1151" "17.9621" "18.3436" "16.0221" "19.0839" "17.5308" "19.0876" "18.0097" "16.9907" "18.2144" "17.1499" "18.8509" "18.5133" "17.2370" "19.2993" "17.6065" "16.7755" "17.6484" "17.0812" "18.2913" "19.8676" "16.4810" "19.4627" "18.8106" "19.4549" "15.5855" "17.2579" "18.3205" "16.9665" "17.6045" "15.7029" "17.3380" "17.5710" "15.5706" "18.8858" "19.7917" "20.0744" "17.4976" "17.7922" "20.3009" "18.4176" "18.4513" "19.6143" "17.1357" "19.8818" "18.5291" "19.3962" "17.3051" "17.3822" "19.2292" "17.3469" "17.6530" "17.9776" "16.7784" "18.1285" "18.0203" "18.1692" "21.5480" "16.6283" "18.5686" "18.0005" "19.9420" "19.6851" "19.3831" "18.6046" "19.6148" "19.8230" "17.7383" "20.7247" "17.7620" "20.1743" "17.4453" "17.7957" "20.6759" "16.4366" "17.5737" "15.4173" "17.3788" "17.2003" "17.6448" "17.8711" "17.3747" "17.1839" "16.8906" "18.2633" "19.0620" "18.3593" "18.4263" "17.0755" "18.0560" "17.7946" "16.7369" "19.0219" "17.9828" "18.0581" "18.1553" "19.7818" "17.2144" "14.2691" "17.4599" "17.7267" "17.7015" "18.5631" "19.9392" "18.9084" "17.3755" "16.7706" "16.9443" "16.5588" "17.1497" "18.8419" "18.7250" "20.0938" "16.7139" "20.0310" "18.3407" "18.3889" "17.2846" "18.3638" "17.9049" "15.7675" "17.5102" "18.5412" "17.1350" "16.9977" "18.1310" "20.1849" "18.2530" "16.8514" "19.0219" "18.5310" "17.8097" "16.6291"
|
| 16 |
+
"S015" "Study_PROT08_15" "Case" "73" "Female" "White" "Non-Hispanic" "15.2676" "18.7520" "18.0234" "15.5396" "19.0214" "16.2081" "19.2860" "19.0773" "17.0515" "19.1754" "18.2234" "18.2173" "18.8387" "17.8339" "17.0651" "17.0036" "18.3121" "19.0068" "16.9364" "19.5653" "18.7702" "18.4908" "17.6207" "17.1033" "16.8788" "18.7927" "18.3722" "18.7321" "17.4114" "17.2265" "18.6774" "15.7920" "17.8734" "18.5248" "18.0834" "18.4710" "18.2018" "19.1268" "15.9387" "18.1739" "18.2927" "16.1525" "19.7839" "18.0552" "17.6822" "18.6551" "17.6380" "17.6982" "17.7842" "20.1772" "18.7586" "19.5892" "19.2693" "15.9776" "19.3243" "14.3026" "18.1776" "16.5634" "17.1381" "18.7243" "18.4182" "18.1512" "18.1199" "16.1238" "19.1989" "19.0224" "14.9628" "17.9062" "18.1248" "17.2161" "17.3403" "15.2296" "19.4296" "18.2389" "16.8125" "19.0760" "17.9223" "20.2610" "19.5673" "18.0834" "21.7902" "18.7247" "19.2247" "16.4736" "17.6848" "18.7190" "17.7669" "16.8507" "18.4487" "17.5303" "16.8895" "19.2616" "17.8829" "18.0541" "17.5781" "18.0724" "19.3706" "17.3714" "17.3165" "16.8537" "17.5084" "18.5712" "16.8123" "19.2796" "19.7288" "20.6157" "17.1090" "16.3645" "17.5676" "18.4859" "18.6515" "18.4034" "19.1980" "18.1468" "18.4938" "17.0003" "18.1565" "16.6068" "18.0896" "19.9008" "19.2577" "19.8072" "18.2577" "17.8479" "16.9453" "20.5395" "19.1333" "19.1334" "19.2386" "18.9932" "18.7059" "19.5258" "18.2562" "19.9795" "17.2310" "17.1897" "15.3950" "18.3335" "16.9502" "21.2460" "17.8155" "18.8261" "16.9395" "17.8068" "18.3745" "17.6520" "16.8389" "17.3599" "18.7378" "18.7419" "19.1264" "17.4505" "19.0339" "17.9117" "15.2784" "18.1460" "17.6322" "17.5077" "16.5052" "17.1193" "16.2595" "18.8697" "17.0849" "19.4509" "17.6768" "15.9532" "17.4287" "16.6018" "17.1440" "17.0601" "17.8719" "17.7202" "19.1757" "17.5287" "18.6513" "17.2186" "17.1502" "17.3777" "18.6671" "19.5764" "19.5734" "20.6926" "16.3710" "19.2642" "18.4666" "19.4475" "17.8712" "18.7740" "17.0380" "17.1113" "19.3679" "15.0112" "17.6734" "17.2235" "18.4311" "17.2237" "18.9694" "18.3025" "16.1207" "18.4104" "18.0774" "17.7642" "17.6805" "19.9262" "18.8234" "18.6530" "19.0703" "18.4756" "19.3696" "16.8767" "18.2724" "16.8479" "18.0839" "17.4734" "17.7889" "18.0058" "19.2846" "18.0716" "19.6717" "17.9508" "16.7353" "17.8413" "17.8985" "17.8450" "17.8991" "16.6371" "16.6188" "16.3609" "15.7926" "18.0608" "18.1555" "18.0040" "19.3343" "19.2475" "18.6629" "17.1923" "19.1859" "16.9499" "19.8984" "17.8166" "18.3501" "18.8185" "18.3345" "18.8250" "17.3181" "17.2636" "18.1295" "18.5802" "16.9256" "18.3285"
|
| 17 |
+
"S016" "Study_PROT08_16" "Case" "67" "Male" "Black" "Non-Hispanic" "15.8844" "17.6564" "17.8595" "18.4624" "17.8065" "16.3275" "19.1852" "17.0758" "19.3325" "16.4263" "17.4999" "19.9512" "17.9108" "18.8127" "20.2475" "18.0969" "15.8941" "20.0107" "17.5807" "15.2116" "17.0837" "19.2908" "16.9630" "18.5035" "17.4255" "19.2545" "17.8072" "19.0124" "18.8984" "15.3832" "17.4222" "17.8938" "18.7676" "17.0556" "18.8903" "18.8706" "19.0501" "18.1779" "17.0684" "17.5179" "17.4386" "15.5184" "16.0895" "19.5536" "18.4998" "16.7241" "20.0970" "18.2008" "19.7933" "18.8288" "19.5450" "18.5915" "16.5337" "17.6234" "17.4675" "15.9480" "20.8495" "14.5327" "16.9576" "17.9759" "18.2709" "18.6746" "18.1324" "15.2817" "18.8642" "18.6229" "16.3904" "17.2259" "17.7963" "19.0936" "16.0422" "17.0793" "16.8048" "18.1556" "17.6349" "17.2548" "17.5738" "18.3674" "16.0566" "17.0571" "19.6034" "18.3621" "18.0653" "16.8915" "18.5263" "19.8638" "17.6101" "18.5321" "16.3441" "18.6149" "17.7090" "18.3595" "15.6175" "18.1848" "18.7232" "18.5278" "16.8591" "18.2787" "19.2384" "16.2349" "16.8971" "18.3510" "15.8202" "18.1271" "17.1887" "17.9428" "16.6378" "17.0139" "18.3524" "16.9538" "17.4704" "18.8267" "18.4378" "18.9628" "19.2148" "16.8086" "18.6934" "19.7654" "18.2389" "17.4126" "19.6215" "20.9029" "18.6456" "18.4490" "17.3131" "18.3950" "17.8924" "16.5887" "19.2673" "17.0615" "15.2941" "17.1612" "19.2077" "18.2309" "18.3264" "17.4992" "14.7569" "19.9032" "18.0262" "19.8433" "17.5789" "17.6710" "17.3843" "15.3966" "16.3238" "16.1675" "17.3473" "17.1182" "17.8223" "16.2430" "18.1777" "17.6840" "18.2385" "19.4450" "17.0193" "18.3401" "20.0091" "17.9277" "17.9716" "19.0474" "17.4471" "18.3294" "16.6443" "18.0688" "16.3824" "18.7584" "17.1813" "15.4399" "17.7667" "16.7922" "18.2614" "17.9265" "17.5358" "17.4597" "20.3750" "16.6908" "16.5821" "17.8911" "18.7136" "18.4631" "19.3652" "19.9410" "18.9153" "18.4569" "17.4216" "19.4872" "20.0943" "16.9617" "17.6361" "17.1681" "17.8563" "16.4740" "18.8890" "17.0635" "17.0188" "17.9585" "18.4155" "19.5985" "17.5620" "18.1032" "16.9160" "16.7485" "19.0796" "18.3825" "18.6715" "19.8020" "19.3061" "17.5363" "21.8245" "16.2502" "19.4568" "17.0600" "17.1034" "17.5950" "17.6752" "17.3188" "17.2555" "17.6870" "18.1900" "17.3168" "19.3208" "18.2045" "17.8709" "17.0567" "16.1500" "19.2317" "18.1231" "19.2388" "17.7439" "19.7873" "18.3687" "19.0972" "17.7892" "21.4495" "18.5393" "18.6783" "17.1082" "18.5944" "19.0577" "17.5535" "18.1222" "19.5845" "17.8304" "18.2882" "18.9201" "18.2683" "19.2074" "19.3792" "18.1726" "18.9714"
|
| 18 |
+
"S017" "Study_PROT08_17" "Case" "54" "Male" "White" "Non-Hispanic" "18.0781" "17.9019" "17.9348" "17.9133" "18.8070" "16.2415" "17.9995" "15.9195" "16.8929" "17.8780" "18.6471" "20.3941" "16.5398" "19.3545" "19.0253" "17.9547" "17.1881" "17.5777" "15.1862" "19.6157" "19.1726" "18.7685" "19.1277" "18.3399" "18.1031" "15.6818" "16.7676" "19.7446" "18.8017" "17.4960" "19.1394" "16.5395" "18.4573" "18.0736" "17.7374" "17.1724" "17.0539" "17.3036" "17.5737" "18.1762" "16.4222" "15.8881" "18.4831" "18.7181" "18.5004" "20.4983" "16.4529" "17.7456" "17.8172" "21.4005" "19.3530" "20.1551" "19.9457" "16.9049" "17.0628" "18.5085" "16.9290" "15.2642" "18.9121" "17.6348" "21.2775" "18.5647" "17.2026" "15.9959" "18.2114" "17.8736" "18.0602" "19.4034" "19.0414" "18.3610" "17.2877" "15.7833" "18.3921" "18.0489" "18.1170" "17.2723" "19.4162" "18.7154" "18.9347" "16.6138" "18.4600" "16.5171" "18.8796" "16.4815" "18.5450" "20.1927" "18.8047" "17.3667" "19.2842" "19.1196" "17.8991" "19.5467" "17.7299" "17.7186" "18.2013" "19.4465" "17.8543" "18.0175" "18.2010" "15.4430" "18.3417" "19.1494" "17.9739" "16.8158" "17.9903" "18.4819" "18.9306" "19.0501" "19.1349" "17.5955" "18.4611" "16.0130" "17.2046" "20.7765" "19.6968" "18.5144" "18.1729" "19.6237" "17.0915" "19.2134" "16.5775" "17.7518" "17.3913" "17.3691" "18.2891" "19.2901" "18.5904" "19.4800" "17.2331" "17.9261" "17.6103" "19.6670" "19.6517" "19.5534" "19.7160" "18.4555" "17.2090" "18.1856" "19.0522" "19.3413" "18.0199" "18.2623" "17.9951" "17.6296" "17.9899" "16.8729" "19.7676" "17.0589" "19.1062" "16.4224" "19.1463" "16.4261" "19.4954" "18.8597" "18.0880" "17.7450" "19.4302" "18.6657" "18.4949" "19.8728" "19.8370" "19.6300" "17.2245" "17.4272" "19.2572" "15.5315" "18.3938" "18.6079" "17.1541" "17.0278" "18.6564" "17.5063" "19.1465" "18.4217" "17.6800" "18.0848" "17.1461" "17.6160" "18.6045" "19.2945" "19.3086" "22.5378" "20.0204" "18.1296" "19.0356" "18.0330" "18.9171" "17.1357" "18.4816" "16.5919" "17.8592" "19.5039" "16.2951" "15.7439" "19.2017" "17.7606" "20.8287" "18.4687" "17.5477" "17.4746" "17.6144" "18.6715" "18.9622" "19.5752" "17.9831" "16.9961" "17.0453" "18.3424" "18.5832" "16.8456" "18.4765" "19.5116" "18.2182" "18.8576" "15.4240" "18.6790" "18.4014" "18.3474" "21.4275" "16.8104" "19.5163" "19.7433" "17.2724" "19.0933" "18.3254" "17.8676" "17.8531" "14.5055" "18.5056" "19.1536" "18.3181" "17.2797" "18.9071" "19.1279" "20.3578" "18.1412" "19.3266" "18.9056" "18.0243" "19.2119" "19.0350" "19.0999" "18.5034" "20.2030" "19.3557" "17.3008" "18.8353" "17.3117" "18.3955" "15.6515"
|
| 19 |
+
"S018" "Study_PROT08_18" "Control" "49" "Male" "White" "Hispanic" "17.1939" "15.9260" "17.1044" "17.3714" "20.1244" "16.2408" "17.4334" "17.0900" "17.6895" "17.3104" "17.2620" "18.6530" "18.5246" "17.4410" "16.9451" "17.1430" "18.7647" "19.3815" "18.0180" "17.0479" "16.1446" "17.8684" "16.4635" "16.3882" "18.8275" "16.9990" "17.7345" "19.3371" "19.1704" "16.2076" "17.5680" "16.5980" "19.2738" "18.4715" "19.1641" "18.0006" "20.0448" "18.3767" "18.1431" "19.7948" "16.5602" "16.7173" "17.6983" "18.8152" "18.4322" "17.2095" "19.3746" "18.2275" "18.4402" "18.6304" "18.0205" "20.6237" "17.5538" "17.4085" "16.7561" "17.4015" "17.6415" "15.2891" "18.1815" "18.7002" "17.4493" "16.6833" "18.2132" "18.4474" "18.9299" "17.1736" "16.4768" "19.3687" "18.1115" "16.8689" "17.8764" "17.5852" "17.9263" "19.7383" "15.6344" "16.7051" "17.9965" "18.4881" "18.8308" "16.8627" "17.2441" "15.7146" "16.8057" "17.6973" "17.0439" "18.8046" "18.2046" "18.0345" "17.3005" "20.9931" "15.8720" "18.6972" "18.4357" "18.6359" "18.0845" "17.2896" "18.7450" "17.0209" "16.5279" "16.7864" "17.7198" "19.4101" "17.6379" "17.7973" "15.7313" "19.8948" "17.0590" "17.2472" "18.2018" "17.2048" "14.6398" "18.2699" "16.5328" "18.7226" "16.9055" "18.4111" "18.8551" "18.0146" "18.2649" "18.5683" "15.5134" "16.8829" "18.2281" "18.5589" "18.6446" "19.5508" "19.5572" "17.3024" "17.6320" "19.0954" "18.7788" "17.7991" "21.3499" "19.1938" "18.6197" "18.3638" "18.8119" "18.2349" "19.3729" "18.6581" "18.6899" "18.0199" "17.2323" "16.0650" "18.3670" "15.2346" "17.2318" "16.9715" "16.6339" "15.9487" "18.1333" "17.0775" "17.1446" "19.1626" "17.4155" "17.4025" "19.3476" "17.5612" "17.5329" "17.8015" "18.4962" "19.0141" "18.8397" "20.2111" "20.1889" "16.6450" "15.8258" "17.3605" "18.3242" "17.1427" "18.9441" "17.2192" "18.1675" "17.5293" "18.1623" "16.4890" "19.1618" "19.6945" "17.3590" "16.8592" "18.2178" "18.9099" "18.3849" "18.3936" "18.2394" "20.1205" "17.9881" "17.2681" "18.8810" "16.3584" "17.1471" "17.2295" "17.3958" "16.5432" "20.6265" "17.2716" "20.7149" "17.8310" "17.4794" "18.7435" "18.0061" "17.2311" "19.7551" "17.6761" "19.1856" "16.6229" "14.8003" "18.8396" "17.0731" "17.7580" "18.2521" "18.3672" "17.4612" "18.8522" "17.7248" "17.2149" "18.3200" "16.3467" "16.9217" "18.4262" "18.6541" "17.2428" "17.5469" "18.9339" "16.6504" "18.7565" "18.3810" "16.0281" "18.5676" "17.6235" "17.4118" "18.4511" "17.7413" "19.9856" "17.8649" "18.0893" "18.2089" "18.2348" "20.2305" "16.8619" "18.2093" "18.8284" "18.1375" "19.3832" "16.5382" "17.7432" "18.5294" "17.9546" "18.5819" "15.9185"
|
| 20 |
+
"S019" "Study_PROT08_19" "Control" "69" "Male" "White" "Non-Hispanic" "17.0923" "18.1266" "17.5469" "18.0770" "18.1858" "16.3434" "17.5540" "17.3911" "17.5916" "16.4051" "18.6147" "17.9728" "17.1992" "18.6991" "17.1279" "18.2815" "15.3054" "17.5724" "17.2451" "17.8827" "19.1756" "18.9681" "18.4362" "16.7161" "15.9392" "17.8488" "18.6648" "17.8798" "14.5915" "18.7798" "17.1650" "20.7714" "19.2523" "19.6322" "15.7806" "18.2713" "17.4446" "18.6987" "15.4665" "16.8078" "18.1667" "15.3180" "17.5382" "17.8980" "16.8813" "17.9688" "17.6963" "17.9288" "20.2386" "17.8646" "16.5152" "18.1993" "19.5362" "17.2331" "18.2627" "16.8343" "17.5883" "17.7517" "18.2699" "17.8824" "19.0467" "17.8210" "17.7242" "15.7697" "20.6405" "18.4707" "16.9854" "17.2905" "18.5952" "18.4943" "18.9936" "18.4916" "16.3640" "15.3312" "17.0837" "19.2697" "18.1874" "17.8863" "18.5073" "17.0696" "19.1749" "18.0755" "18.2264" "16.4620" "17.5205" "17.3224" "17.5026" "19.0436" "19.6251" "19.1919" "18.5271" "16.9801" "17.7027" "18.0392" "18.9933" "17.7333" "16.6697" "18.9488" "17.1139" "18.1706" "16.1948" "18.3588" "17.9419" "15.8043" "19.0656" "18.1873" "17.8332" "16.5378" "20.4388" "17.2934" "17.3297" "16.9550" "19.8854" "19.8931" "18.7496" "16.3202" "19.1973" "19.6857" "18.3946" "18.0225" "17.4542" "18.2656" "18.6291" "18.5308" "17.4972" "19.0162" "19.0670" "16.7106" "19.1916" "17.7132" "16.6397" "18.5243" "18.9153" "19.2413" "18.6396" "17.5811" "18.3547" "18.7724" "16.6192" "18.8740" "17.8784" "19.5769" "15.4087" "18.4085" "16.4555" "17.4470" "18.2098" "17.9527" "18.7245" "18.6286" "19.5442" "16.8870" "19.6858" "18.8486" "16.7962" "17.4204" "18.6746" "18.3500" "17.2450" "18.2633" "18.3331" "17.1614" "16.7708" "18.3572" "19.5067" "17.4613" "20.6313" "17.4289" "17.1813" "19.0065" "17.3073" "16.8354" "18.4517" "19.6132" "17.5235" "18.3005" "18.1860" "18.8983" "17.6483" "19.1727" "17.4407" "19.5872" "20.0038" "20.1327" "17.5668" "17.9191" "17.5352" "17.2687" "17.8865" "16.3155" "20.6643" "17.4451" "17.4266" "16.3548" "18.3970" "17.5598" "19.2784" "17.5122" "17.1986" "15.9194" "16.8295" "18.4188" "18.7618" "19.7491" "20.2493" "18.8850" "16.6021" "18.1824" "17.3469" "18.6254" "17.5450" "17.8622" "19.2350" "16.8319" "18.1301" "17.9518" "18.4896" "16.7882" "18.6543" "18.5431" "18.2458" "15.8643" "18.0475" "17.9863" "19.2799" "16.9775" "18.5298" "15.8750" "17.9506" "18.7158" "18.9508" "17.8671" "18.7075" "21.0201" "19.1464" "16.9701" "18.0580" "18.0988" "17.3165" "16.6786" "19.0613" "17.9534" "18.6958" "18.1100" "20.7040" "18.6447" "17.2296" "18.1259" "19.1507" "16.5558"
|
| 21 |
+
"S020" "Study_PROT08_20" "Control" "28" "Male" "White" "Hispanic" "16.1176" "17.4433" "17.7917" "16.4348" "17.7636" "18.5457" "17.7649" "17.0644" "18.5508" "18.7008" "17.2374" "17.8723" "19.5317" "18.5928" "19.2804" "18.1433" "16.3718" "16.1018" "16.2797" "17.9187" "17.5764" "18.4034" "17.7431" "18.0857" "19.0514" "19.5646" "16.7296" "18.7865" "17.3408" "17.9509" "16.4652" "19.9236" "18.5366" "17.7808" "18.2517" "17.5642" "17.6653" "17.3023" "15.6115" "16.7727" "16.5343" "15.2539" "18.1457" "17.3195" "17.0698" "17.9300" "16.9498" "18.1816" "18.7954" "18.2569" "18.1926" "17.2464" "17.4346" "16.5297" "19.4573" "19.6093" "16.8599" "16.0244" "20.1626" "17.9762" "18.6177" "18.9044" "19.3233" "18.7474" "18.9154" "17.8512" "16.0233" "18.8581" "17.8376" "19.5443" "18.3901" "18.6735" "17.6461" "18.6769" "18.5256" "18.0291" "17.5493" "17.9224" "18.5135" "15.8238" "18.5107" "18.8989" "19.4710" "18.2348" "18.6934" "18.9137" "16.4353" "17.7905" "18.6062" "17.3715" "17.7950" "19.1036" "19.4930" "18.8040" "18.7884" "17.2316" "18.5821" "16.7160" "18.5785" "17.7219" "16.5158" "16.5507" "17.4314" "16.6499" "17.4287" "18.8907" "17.8518" "18.1120" "17.7307" "20.3135" "19.7252" "18.9853" "18.3697" "17.6062" "18.6761" "17.5055" "19.5451" "18.0057" "18.6825" "17.5253" "17.8683" "16.8481" "17.4743" "19.8571" "20.2455" "18.3071" "17.1772" "16.7290" "18.6608" "18.9431" "16.9393" "19.5427" "18.1835" "17.1655" "19.5730" "18.5065" "17.2587" "19.6249" "17.3371" "18.4653" "17.8299" "20.1595" "18.8024" "16.9150" "17.0948" "16.7001" "18.5412" "17.4102" "18.1647" "16.3933" "19.3542" "16.8036" "17.6621" "19.7418" "17.3677" "17.8600" "18.7599" "18.6576" "15.5230" "18.2507" "19.2021" "18.2233" "17.3964" "17.6057" "19.0075" "17.7223" "18.5447" "14.8807" "17.0589" "18.3738" "18.3553" "18.4972" "17.5949" "17.0583" "16.9821" "17.4198" "16.4484" "17.9151" "20.5431" "17.8864" "18.4566" "20.3022" "18.5774" "19.2923" "16.0322" "16.5238" "17.1365" "17.2994" "19.5663" "18.8675" "19.6884" "18.6631" "16.1910" "17.9463" "20.3124" "17.6192" "17.1121" "18.7932" "18.6904" "17.6986" "17.9126" "15.5367" "18.9942" "16.4867" "18.0882" "19.8608" "16.4608" "18.3927" "17.5746" "19.8991" "19.5238" "18.6713" "20.2454" "19.8595" "17.1159" "16.3526" "17.8990" "18.1357" "19.9142" "18.2792" "17.2227" "18.5701" "18.0542" "17.9595" "18.8986" "16.6745" "20.7303" "16.9967" "18.0221" "18.0896" "16.7313" "18.9212" "18.8137" "19.5361" "17.3320" "14.7230" "17.7451" "18.5061" "18.2266" "16.8864" "16.3516" "17.2340" "18.7072" "19.0697" "17.6389" "17.5856" "17.9785" "18.5441" "17.2765" "17.0072"
|
| 22 |
+
"S021" "Study_PROT08_21" "Case" "49" "Male" "Asian" "Non-Hispanic" "16.2951" "18.6381" "18.3563" "17.4515" "19.0876" "15.2282" "18.6596" "19.3933" "18.5725" "19.1523" "17.3301" "18.3554" "17.7192" "18.7776" "18.5887" "16.7268" "15.8173" "18.3715" "17.1670" "15.6493" "20.3451" "19.3573" "19.3989" "15.5568" "17.9772" "19.1707" "18.3490" "18.2582" "19.4642" "16.8059" "18.8976" "18.4703" "19.4153" "17.8936" "20.1181" "18.7174" "17.4861" "18.2756" "14.9202" "18.5014" "17.0499" "15.8426" "16.6970" "20.4559" "18.9659" "18.9371" "18.1854" "17.6647" "18.1013" "18.9188" "17.9524" "18.1882" "17.6060" "19.2563" "18.1547" "16.8484" "19.5610" "17.5016" "16.8899" "16.6269" "18.2678" "18.0511" "18.9451" "14.8416" "18.8506" "17.7327" "15.2122" "17.8689" "18.1955" "17.8845" "17.4226" "17.5524" "19.5989" "18.3040" "15.5211" "18.4245" "19.3184" "17.9618" "19.4355" "16.0483" "20.3641" "17.4587" "16.2683" "18.1856" "15.7723" "18.6595" "18.3154" "17.9311" "17.7906" "18.2610" "19.0235" "19.3975" "18.6673" "18.3865" "15.4915" "18.4259" "16.8041" "18.0679" "17.9366" "13.6897" "16.4321" "18.7298" "16.2067" "16.3179" "17.1374" "17.8412" "18.3541" "17.5927" "18.3152" "18.9583" "16.6018" "17.2579" "17.7769" "18.7434" "18.6442" "17.3945" "20.3881" "18.1028" "18.7031" "18.3428" "19.6807" "20.1129" "17.7659" "14.9589" "19.8644" "17.8162" "17.5700" "17.5128" "18.3125" "16.6314" "18.8719" "17.8993" "18.6619" "17.9053" "18.9214" "17.3999" "16.9164" "18.7236" "18.2354" "19.3371" "18.2513" "18.3529" "17.2488" "16.9189" "16.2380" "17.5485" "18.4618" "16.2988" "17.9555" "17.9268" "17.1657" "18.4414" "18.2863" "18.5854" "17.9685" "18.5732" "17.9396" "19.4033" "17.6469" "18.3736" "18.9643" "18.2495" "17.0953" "20.1248" "17.3435" "18.7777" "18.8104" "17.5612" "18.3712" "19.1560" "17.0396" "18.0252" "19.5137" "18.8517" "19.7367" "17.8582" "18.8258" "18.7224" "19.1038" "18.9844" "19.0721" "22.0774" "19.3616" "18.3951" "17.8785" "17.6596" "18.1691" "16.8820" "18.5995" "17.2414" "20.3469" "16.3932" "18.0078" "17.4735" "18.4997" "16.4738" "17.5713" "16.7816" "18.0006" "16.8844" "19.8938" "18.3156" "19.0505" "19.4498" "18.3663" "17.3432" "17.5191" "17.1935" "19.2660" "17.6164" "17.1178" "18.3670" "17.6728" "17.6701" "18.6856" "17.8476" "18.2262" "16.6490" "18.3885" "18.4827" "21.6790" "19.3197" "19.4531" "17.8551" "16.7586" "18.6266" "18.2792" "17.9246" "18.7135" "16.5426" "18.9085" "19.7715" "20.5718" "20.7400" "17.3304" "16.6172" "18.3635" "17.4688" "16.1066" "19.6709" "16.9085" "18.5918" "16.6865" "17.4519" "16.6906" "17.5805" "19.4260" "18.8129" "18.5078" "17.5656"
|
| 23 |
+
"S022" "Study_PROT08_22" "Case" "62" "Male" "Asian" "Non-Hispanic" "15.4775" "16.3796" "17.7303" "15.6648" "16.8382" "17.1659" "19.8108" "18.0268" "17.5910" "17.6778" "16.7016" "21.1488" "17.2814" "18.3082" "17.6995" "15.8717" "15.6064" "17.8954" "17.1551" "16.2642" "16.1869" "18.6188" "17.6337" "16.7807" "18.4628" "18.9049" "16.3651" "18.3980" "17.4275" "17.1208" "18.6281" "17.6915" "17.3765" "20.3617" "18.3235" "18.0880" "19.1054" "18.3985" "17.1088" "17.6075" "19.8038" "17.0902" "19.2420" "18.3765" "15.6177" "17.0326" "19.3632" "18.1395" "17.7094" "20.0654" "19.0135" "17.0036" "19.0017" "17.9731" "19.4696" "17.0341" "20.0344" "18.3501" "18.3080" "16.0502" "18.9657" "19.7842" "18.2988" "14.9547" "19.2167" "16.6893" "16.0373" "16.8991" "18.0020" "16.0857" "19.4370" "17.8685" "18.0109" "19.4548" "18.3455" "17.8311" "18.5006" "18.8377" "18.2699" "16.5358" "17.8188" "15.3473" "16.6485" "16.9809" "17.3759" "16.9696" "18.4264" "16.6304" "16.6905" "19.5249" "18.4572" "18.2496" "18.3257" "19.2493" "17.4846" "17.1857" "17.7546" "18.7701" "16.6566" "18.4667" "17.8880" "15.0950" "17.2352" "18.2849" "19.9352" "16.4407" "17.2006" "18.2627" "18.9104" "18.2870" "16.5793" "16.4895" "19.6552" "17.3420" "17.1998" "17.0527" "18.1219" "17.0906" "18.5213" "18.0573" "17.4680" "17.6907" "17.7176" "17.0992" "16.7570" "17.5443" "16.9185" "19.1660" "19.2318" "16.6080" "19.8912" "16.5098" "19.1312" "18.5499" "19.5994" "17.9446" "16.6372" "20.1177" "19.5678" "20.6752" "18.9684" "19.3173" "18.1143" "17.8207" "16.8330" "17.4280" "18.6975" "19.2088" "18.1222" "17.7275" "19.5760" "17.1270" "17.4721" "19.8092" "17.1291" "18.6379" "18.1644" "19.3608" "16.8089" "15.8818" "16.4540" "18.6173" "17.5202" "18.7920" "17.9069" "18.1074" "18.9246" "19.0579" "17.9471" "16.6678" "18.4744" "19.9485" "17.5032" "17.8838" "19.2403" "17.6929" "17.4654" "18.9999" "18.4628" "17.8809" "17.6346" "18.2917" "20.5058" "19.8458" "19.6483" "19.4831" "19.0000" "17.3114" "17.0954" "15.7160" "18.0967" "17.6662" "17.0638" "16.6685" "17.4670" "18.9530" "17.9224" "18.3914" "18.6156" "17.6853" "19.2262" "17.6283" "17.9483" "19.0829" "18.4948" "18.8800" "17.0458" "16.4481" "17.3303" "18.3969" "15.7668" "17.4565" "18.2491" "18.0283" "16.5992" "17.9290" "18.0356" "19.0530" "18.2575" "16.5272" "19.7857" "18.1696" "16.9903" "16.9176" "16.8334" "15.7962" "17.4839" "15.4092" "17.1999" "15.2698" "16.7162" "19.3674" "18.2904" "18.5169" "18.7302" "16.2419" "16.9053" "17.4052" "17.7162" "18.0288" "18.2376" "17.7571" "19.3890" "18.5903" "18.2278" "18.2163" "19.3502" "20.0367" "15.8138" "17.5426"
|
| 24 |
+
"S023" "Study_PROT08_23" "Case" "69" "Female" "White" "Non-Hispanic" "18.8408" "17.1428" "17.0631" "18.9422" "17.6016" "17.2208" "20.5443" "15.9130" "18.0241" "18.7699" "17.1545" "18.7693" "17.4860" "18.2383" "17.5491" "17.1822" "17.0662" "18.5291" "18.4678" "16.0336" "19.2647" "20.7352" "17.7491" "16.7301" "17.7717" "17.4484" "18.0828" "18.9800" "18.9516" "16.9199" "19.2524" "18.0341" "17.6653" "18.9462" "17.7273" "18.7103" "17.3279" "18.0991" "17.4790" "17.9379" "16.1365" "17.0962" "18.0732" "17.4615" "20.6828" "17.4317" "17.6484" "19.6680" "19.7230" "19.6017" "16.6725" "17.5224" "18.2039" "17.0370" "19.8905" "14.7796" "20.2484" "16.6071" "19.4684" "18.1149" "18.0398" "16.8645" "16.2906" "15.1524" "16.7107" "17.3663" "16.8780" "20.9668" "16.8814" "18.1930" "18.3289" "15.9001" "17.3559" "18.8494" "17.8793" "17.9381" "18.1994" "19.0404" "20.0546" "15.4860" "20.8004" "16.4231" "16.1418" "16.5607" "18.8098" "18.1367" "20.3848" "16.8391" "19.3492" "17.9564" "17.8496" "16.3461" "16.7643" "16.7989" "18.4436" "17.6559" "19.4268" "17.1214" "15.6112" "15.3285" "16.8542" "17.4875" "16.8072" "18.6275" "17.4576" "17.6687" "16.8530" "17.3199" "17.3134" "18.2070" "18.1879" "18.4825" "19.1679" "17.0835" "19.1185" "16.8182" "19.1163" "18.8266" "19.3690" "19.0664" "19.4193" "18.0510" "18.0845" "16.3271" "17.9648" "19.6237" "18.0487" "16.4032" "17.8645" "17.7472" "17.6792" "16.3055" "20.7786" "20.4722" "19.0533" "18.8310" "15.5505" "20.4884" "17.1811" "20.5265" "17.9660" "17.8108" "18.9933" "19.6375" "17.4457" "17.2662" "19.0472" "18.1220" "17.5691" "17.5506" "17.4959" "17.0189" "18.9198" "18.8356" "18.4227" "19.4335" "17.7107" "18.4734" "18.2018" "16.7397" "16.8916" "20.1249" "18.8180" "18.0852" "18.0303" "18.6642" "17.7183" "17.9402" "18.4659" "16.8902" "18.8126" "18.8805" "16.7581" "16.0807" "18.3281" "17.7342" "19.8897" "18.9257" "18.0644" "18.5807" "20.0081" "19.2793" "19.1990" "18.0587" "18.4521" "18.4442" "20.5742" "18.3219" "18.0119" "17.2160" "18.6295" "18.9358" "16.3255" "16.9097" "18.2224" "18.0131" "18.6776" "16.2733" "17.1928" "17.6874" "18.4403" "18.7946" "18.9505" "18.4932" "20.1229" "16.9628" "16.9741" "17.1150" "18.1884" "18.6012" "17.8503" "18.3874" "18.5177" "16.7494" "15.8789" "18.7185" "16.7481" "18.3244" "17.5654" "17.4234" "19.5434" "18.5768" "17.7872" "16.5147" "18.7559" "19.5229" "17.8648" "17.5864" "17.9875" "18.4882" "18.6111" "19.0817" "17.6946" "20.9603" "18.5072" "17.0207" "17.1639" "18.1129" "18.0259" "18.4762" "17.5951" "20.1452" "19.3645" "19.3118" "17.1170" "17.1344" "18.0911" "17.1595" "17.5855" "17.1679"
|
| 25 |
+
"S024" "Study_PROT08_24" "Control" "34" "Male" "White" "Hispanic" "18.3410" "17.6985" "17.0084" "16.8429" "18.3641" "17.3503" "18.2391" "17.3805" "20.1178" "16.5345" "16.9177" "16.6957" "17.5655" "19.3665" "18.5834" "18.2261" "18.5073" "17.4260" "16.9537" "19.3041" "18.0122" "18.3684" "19.2039" "17.4460" "18.0049" "20.9394" "16.6830" "17.3063" "17.8150" "17.7715" "17.7381" "18.4588" "17.5573" "18.4706" "18.0203" "18.4850" "17.2418" "18.5409" "16.9009" "16.8519" "17.4723" "16.8187" "18.7416" "16.9961" "18.6272" "18.6665" "18.7607" "19.1873" "19.0022" "18.5859" "16.7728" "19.4231" "17.9592" "17.6953" "20.9406" "17.4198" "15.9416" "16.4312" "16.8296" "18.0345" "19.0959" "16.6561" "17.6759" "18.1263" "18.7832" "17.3050" "17.7282" "18.7824" "17.6906" "18.5806" "18.3138" "18.1028" "17.0267" "18.8268" "16.6152" "18.9631" "18.2925" "18.7390" "18.3259" "15.5422" "19.0802" "16.2004" "17.6570" "18.1713" "16.9790" "19.1975" "16.8564" "16.1524" "19.2052" "18.0718" "17.5430" "18.9458" "18.0545" "17.6680" "18.8037" "19.4863" "16.8688" "16.8450" "18.0834" "18.3732" "16.9535" "16.7203" "19.8629" "19.3166" "16.9113" "20.2048" "17.6516" "16.8800" "19.1820" "18.6316" "17.5370" "16.8164" "16.4406" "19.5541" "16.3011" "15.3466" "18.1411" "19.3249" "17.3742" "19.7589" "20.2625" "18.1416" "17.1654" "18.1145" "17.7584" "18.9801" "17.4746" "17.0750" "18.7057" "18.4815" "17.1819" "20.0241" "18.0630" "19.4153" "19.3541" "19.1638" "17.9776" "19.2950" "17.3979" "16.3039" "16.6558" "17.9714" "18.3404" "19.4257" "18.1795" "15.9616" "19.1070" "17.7587" "17.5771" "18.1560" "18.2407" "16.9609" "17.8053" "19.2547" "15.5985" "18.3592" "18.6720" "18.4597" "16.9970" "19.1557" "18.4032" "18.4481" "16.5414" "19.8936" "15.8544" "18.1733" "18.1154" "19.5477" "19.7500" "18.9907" "18.8590" "17.3809" "17.3599" "18.7169" "17.2440" "16.6999" "17.8343" "18.1926" "18.7507" "18.2490" "18.8668" "20.0545" "18.3502" "18.3900" "19.7877" "19.3424" "17.1313" "18.3043" "17.0173" "17.6995" "19.7551" "17.2985" "19.4279" "16.1843" "18.9479" "15.4961" "18.2198" "17.5008" "17.7197" "17.2572" "20.5342" "17.1069" "17.5939" "19.7363" "17.3513" "16.0611" "15.3294" "18.4142" "17.5869" "21.0888" "20.0984" "17.7913" "18.6569" "16.0379" "16.9419" "18.4963" "18.0722" "18.9146" "19.9146" "16.9702" "15.6005" "18.8244" "17.1521" "17.4650" "16.1915" "17.9585" "16.8509" "15.9806" "19.8784" "17.1039" "17.3245" "19.1135" "18.0979" "20.6977" "17.8103" "16.7711" "19.4585" "17.8747" "18.0113" "19.1049" "15.9082" "19.8180" "16.0656" "20.3095" "16.9662" "17.6302" "19.7757" "18.8812" "17.8302" "19.3931"
|
src/statlens/data/examples/09_Continuous_limma_with_batch_synthetic.tsv
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"subject_id" "sample_id" "group" "batch" "age" "sex" "race" "ethnicity" "metab_1" "metab_2" "metab_3" "metab_4" "metab_5" "metab_6" "metab_7" "metab_8" "metab_9" "metab_10" "metab_11" "metab_12" "metab_13" "metab_14" "metab_15" "metab_16" "metab_17" "metab_18" "metab_19" "metab_20" "metab_21" "metab_22" "metab_23" "metab_24" "metab_25" "metab_26" "metab_27" "metab_28" "metab_29" "metab_30" "metab_31" "metab_32" "metab_33" "metab_34" "metab_35" "metab_36" "metab_37" "metab_38" "metab_39" "metab_40" "metab_41" "metab_42" "metab_43" "metab_44" "metab_45" "metab_46" "metab_47" "metab_48" "metab_49" "metab_50" "metab_51" "metab_52" "metab_53" "metab_54" "metab_55" "metab_56" "metab_57" "metab_58" "metab_59" "metab_60" "metab_61" "metab_62" "metab_63" "metab_64" "metab_65" "metab_66" "metab_67" "metab_68" "metab_69" "metab_70" "metab_71" "metab_72" "metab_73" "metab_74" "metab_75" "metab_76" "metab_77" "metab_78" "metab_79" "metab_80" "metab_81" "metab_82" "metab_83" "metab_84" "metab_85" "metab_86" "metab_87" "metab_88" "metab_89" "metab_90" "metab_91" "metab_92" "metab_93" "metab_94" "metab_95" "metab_96" "metab_97" "metab_98" "metab_99" "metab_100" "metab_101" "metab_102" "metab_103" "metab_104" "metab_105" "metab_106" "metab_107" "metab_108" "metab_109" "metab_110" "metab_111" "metab_112" "metab_113" "metab_114" "metab_115" "metab_116" "metab_117" "metab_118" "metab_119" "metab_120" "metab_121" "metab_122" "metab_123" "metab_124" "metab_125" "metab_126" "metab_127" "metab_128" "metab_129" "metab_130" "metab_131" "metab_132" "metab_133" "metab_134" "metab_135" "metab_136" "metab_137" "metab_138" "metab_139" "metab_140" "metab_141" "metab_142" "metab_143" "metab_144" "metab_145" "metab_146" "metab_147" "metab_148" "metab_149" "metab_150" "metab_151" "metab_152" "metab_153" "metab_154" "metab_155" "metab_156" "metab_157" "metab_158" "metab_159" "metab_160" "metab_161" "metab_162" "metab_163" "metab_164" "metab_165" "metab_166" "metab_167" "metab_168" "metab_169" "metab_170" "metab_171" "metab_172" "metab_173" "metab_174" "metab_175" "metab_176" "metab_177" "metab_178" "metab_179" "metab_180"
|
| 2 |
+
"S001" "Study_MET09_1" "Control" "Site_A" "64" "Male" "White" "Non-Hispanic" "17.6391" "16.5648" "15.7434" "18.8214" "20.4196" "18.5273" "20.2708" "17.1106" "17.7330" "21.2407" "16.6313" "16.3770" "18.1873" "19.0100" "19.3951" "19.0411" "16.5424" "18.6489" "19.4591" "18.2447" "17.1067" "20.1168" "18.0802" "17.0613" "18.0353" "18.2641" "16.4828" "17.3503" "17.2621" "20.1469" "15.1502" "17.3861" "16.6610" "19.3455" "17.3967" "18.9344" "17.0834" "18.2787" "19.5659" "18.5567" "18.9796" "19.8890" "18.2865" "17.5228" "19.7694" "17.1096" "14.6224" "17.3091" "17.7772" "17.8183" "18.2406" "18.4475" "20.5580" "15.2433" "17.9682" "19.2460" "17.1264" "18.3293" "18.0784" "17.5187" "16.5119" "19.3123" "18.4946" "15.3050" "15.7535" "17.7600" "15.5773" "17.3391" "19.2433" "17.2639" "19.5112" "17.8822" "18.5558" "18.9988" "17.4209" "18.6787" "19.8980" "18.8765" "17.4754" "19.7070" "16.6015" "15.2663" "18.1575" "18.9487" "19.0898" "18.0692" "19.0873" "18.1286" "18.3908" "16.2858" "18.5400" "18.7238" "18.4758" "20.0354" "17.6737" "17.3640" "16.9262" "17.5844" "19.0294" "19.6294" "16.5877" "19.9790" "16.3639" "19.8293" "17.3844" "16.4192" "17.9931" "18.4892" "17.5826" "18.7808" "18.2248" "18.5686" "18.9917" "20.0866" "18.6275" "17.5894" "19.7954" "17.3557" "18.2616" "18.2774" "17.4508" "15.8873" "17.8624" "18.9949" "16.7022" "15.4016" "19.5324" "18.9138" "21.0367" "17.7809" "14.4279" "18.2027" "17.6722" "17.5322" "19.6677" "16.5232" "18.6551" "18.5339" "17.2501" "17.6058" "16.4114" "16.7746" "18.6986" "18.0909" "17.9183" "17.9951" "18.6722" "17.3174" "18.2176" "18.6378" "17.2555" "16.0216" "19.0911" "16.9043" "19.4675" "17.5221" "19.6768" "17.5861" "14.8436" "19.5888" "18.5009" "17.7176" "19.8884" "18.4686" "17.3658" "16.8191" "18.4386" "19.7152" "19.2204" "16.0612" "18.6125" "15.7297" "22.3987" "18.8662" "17.6467" "18.6579" "17.8020" "19.6762" "19.7728" "15.8520"
|
| 3 |
+
"S002" "Study_MET09_2" "Case" "Site_D" "66" "Female" "White" "Hispanic" "17.8045" "17.3634" "17.3235" "18.8478" "18.1710" "19.3886" "17.7249" "18.4980" "18.8050" "17.5748" "17.4524" "16.2641" "19.1845" "16.2816" "19.0028" "16.9967" "17.8332" "17.1094" "17.1791" "18.0286" "18.7660" "18.5542" "16.5585" "17.0107" "19.4024" "18.7088" "16.5531" "18.7654" "17.5733" "17.4598" "16.8664" "17.6080" "16.5924" "18.0928" "17.1774" "18.5316" "17.4907" "17.9701" "15.9850" "16.2448" "18.0311" "16.3749" "18.5792" "16.8994" "16.5475" "18.0898" "17.7715" "16.8114" "17.9754" "17.8381" "17.2744" "19.3436" "18.5057" "16.2072" "17.3906" "19.5840" "18.4908" "18.0306" "16.2323" "18.9324" "19.1693" "17.8573" "18.2868" "18.1804" "14.5418" "17.5217" "16.2635" "17.0657" "20.2471" "16.7655" "20.5836" "18.3657" "18.4135" "18.2024" "19.2565" "17.4345" "17.3237" "17.8413" "19.3528" "17.8362" "17.2884" "16.5015" "16.4352" "18.7361" "18.4136" "17.7243" "17.8394" "17.1697" "19.0771" "16.6270" "18.2561" "17.9576" "17.4677" "18.1653" "17.9122" "15.9142" "18.0568" "17.8444" "16.0604" "18.1851" "16.4133" "18.5548" "16.8810" "18.0609" "17.9636" "18.0814" "17.5770" "18.6205" "17.6443" "17.0942" "17.2966" "18.9924" "18.8766" "18.9055" "17.8519" "18.0160" "17.3866" "17.0097" "16.7248" "17.7360" "19.7398" "17.3470" "19.5922" "17.7156" "17.1539" "16.4606" "18.0899" "20.2197" "18.6272" "18.5308" "20.1926" "19.0000" "19.6941" "19.0346" "16.4443" "19.5837" "17.2729" "19.6027" "17.6152" "19.1749" "18.2345" "17.5795" "16.3393" "16.7024" "19.4343" "19.7447" "17.8841" "16.7912" "18.3215" "16.1923" "18.3474" "16.3829" "18.2925" "17.7429" "19.9056" "18.2714" "17.2716" "18.7218" "15.7894" "17.9470" "18.2287" "19.0872" "18.8430" "20.5901" "16.5830" "18.5346" "16.8314" "18.2942" "18.1318" "16.7304" "18.3579" "15.5041" "18.8390" "17.7392" "18.6540" "19.7840" "19.3194" "18.0309" "16.5599" "16.9901"
|
| 4 |
+
"S003" "Study_MET09_3" "Case" "Site_D" "49" "Male" "White" "Non-Hispanic" "16.9408" "18.9382" "17.3179" "18.9779" "17.4202" "18.1278" "19.0134" "18.5289" "17.1695" "17.0228" "17.8533" "16.1733" "17.1712" "15.5918" "15.8722" "18.9557" "17.1527" "19.9642" "17.8640" "21.8818" "19.0168" "16.4893" "17.3868" "15.8942" "17.9431" "16.9734" "17.5053" "19.3958" "16.8405" "18.4959" "16.4341" "18.6658" "18.7007" "21.6432" "20.1188" "17.8228" "16.6879" "17.7177" "17.2810" "17.5110" "18.6181" "18.5823" "16.8073" "16.5659" "17.8764" "18.1669" "15.7649" "14.2863" "19.2008" "17.6531" "17.2122" "17.8946" "19.3605" "17.7152" "16.0849" "18.7070" "16.1536" "17.5940" "17.9776" "17.2381" "18.4566" "17.8627" "19.1497" "17.3974" "19.2362" "19.3427" "15.5899" "17.7582" "21.3966" "19.1089" "18.9635" "18.7571" "17.8923" "17.4496" "18.4475" "18.6973" "17.8266" "19.1459" "19.7807" "17.5203" "17.9762" "16.5709" "15.6551" "17.8844" "15.2668" "19.3606" "18.4366" "16.8940" "17.8337" "18.3002" "18.5882" "20.1126" "17.4218" "16.9045" "16.1247" "17.7627" "16.3269" "17.0902" "16.9358" "17.7366" "16.4610" "19.6053" "15.8647" "18.6389" "18.3762" "18.1258" "18.5605" "18.9852" "17.8330" "18.7765" "18.4434" "18.3683" "20.6642" "18.6817" "19.0431" "18.7105" "17.6177" "19.0178" "16.9025" "16.8293" "16.8350" "18.5051" "17.9014" "17.8300" "16.5819" "15.5161" "18.9591" "18.9789" "17.6119" "17.9077" "17.4615" "18.0811" "19.3091" "17.3888" "18.8708" "18.4539" "18.4022" "16.2528" "18.2452" "17.3905" "17.9251" "17.3516" "16.5015" "18.5551" "19.9547" "20.3173" "19.4818" "19.9276" "17.6459" "14.6906" "18.3776" "16.9269" "20.3599" "18.5122" "19.4769" "17.7189" "16.8498" "17.0359" "15.1028" "16.8128" "17.1810" "16.5281" "20.1600" "19.3554" "17.9182" "19.4455" "17.0832" "17.7978" "18.7159" "18.3933" "18.4614" "17.2152" "19.5610" "20.3598" "16.8168" "18.0331" "19.7631" "18.2757" "16.3143" "19.0368"
|
| 5 |
+
"S004" "Study_MET09_4" "Case" "Site_B" "73" "Female" "Black" "Non-Hispanic" "16.4526" "16.7076" "17.7271" "17.8486" "15.6736" "19.3192" "18.1322" "18.6296" "17.8651" "17.5884" "18.8787" "16.6022" "17.9521" "16.3832" "19.2216" "17.8486" "17.9956" "18.3792" "18.7562" "18.0765" "17.8288" "18.9097" "17.5382" "19.2497" "20.5343" "17.9150" "17.6949" "18.6607" "15.7890" "16.6592" "16.0961" "16.7637" "18.2340" "18.3920" "17.5236" "19.8249" "17.2673" "18.0133" "19.5015" "18.3014" "18.6812" "16.5222" "16.3044" "16.3929" "17.9739" "17.9952" "16.3052" "16.3173" "19.7950" "17.3587" "17.6756" "18.1812" "18.0224" "18.3042" "15.0985" "17.9543" "16.0482" "18.3924" "17.3310" "17.6440" "17.6738" "17.6802" "15.8206" "17.5976" "17.5323" "16.2924" "18.2818" "17.9486" "18.3339" "19.5531" "17.6690" "18.3480" "18.5921" "18.2860" "17.8818" "19.6088" "18.8251" "20.3431" "19.8105" "19.4587" "16.7278" "19.1604" "17.7154" "17.3076" "17.5528" "17.8005" "19.8177" "17.5155" "19.6737" "18.2100" "18.1702" "20.2559" "15.4458" "16.2745" "18.0535" "18.8777" "18.7774" "15.2061" "16.6102" "17.6408" "19.6094" "18.5125" "16.9197" "18.2006" "17.5575" "19.8280" "17.6311" "17.6766" "17.4321" "17.6170" "18.4993" "18.0961" "19.3811" "17.1551" "18.7918" "17.3909" "19.1180" "17.9677" "18.0309" "17.7618" "18.4643" "18.5346" "18.9045" "18.3320" "17.3532" "16.3507" "19.2225" "19.1463" "17.6244" "18.6633" "16.7643" "18.5362" "20.1431" "18.3210" "18.2854" "17.8262" "18.6126" "17.8783" "18.7599" "19.5227" "19.0774" "17.2646" "15.5544" "17.3911" "18.5634" "18.9250" "16.9381" "17.7269" "17.4939" "16.0258" "19.3787" "16.0100" "18.2143" "16.9956" "19.7613" "16.6199" "20.0068" "19.7909" "16.7983" "19.4871" "17.8549" "19.3147" "16.9576" "16.3415" "18.8782" "17.2348" "19.0219" "18.5568" "17.6285" "17.4813" "17.4167" "17.3879" "19.3499" "17.7606" "16.8940" "20.0295" "16.5537" "15.7224" "15.5133" "17.1647"
|
| 6 |
+
"S005" "Study_MET09_5" "Case" "Site_A" "44" "Female" "Asian" "Non-Hispanic" "16.3880" "19.9816" "16.9076" "17.3882" "17.4871" "18.7705" "17.6475" "17.3756" "16.2823" "19.9602" "15.8727" "17.5178" "17.1063" "14.3783" "15.9586" "17.4775" "17.6945" "19.2669" "18.6438" "17.7357" "18.1353" "17.7678" "18.5565" "15.6608" "18.5640" "17.9428" "15.1946" "18.3381" "18.2753" "18.8971" "15.7529" "17.9901" "15.5506" "18.5283" "20.7420" "18.9942" "17.7330" "17.5047" "17.9698" "17.8350" "16.5975" "16.9231" "18.0124" "13.8133" "16.7878" "18.6095" "16.1599" "14.6638" "17.4172" "17.4029" "18.7142" "17.1486" "20.4357" "15.5620" "19.0513" "19.7763" "15.8690" "18.3933" "18.4899" "17.8691" "17.0900" "20.2456" "16.6125" "18.4461" "17.6700" "18.3371" "17.1425" "17.2228" "20.2952" "16.0393" "20.6938" "18.4612" "18.4436" "17.1398" "17.8051" "18.9804" "17.6307" "17.6537" "18.1770" "20.4265" "18.3952" "15.3907" "17.3728" "18.8894" "18.5533" "15.7933" "18.6629" "20.9982" "18.3264" "19.4734" "18.3899" "19.0949" "17.1401" "19.4725" "18.2227" "16.2812" "17.4604" "17.5611" "19.3207" "18.6214" "18.2874" "19.1424" "16.9085" "17.0459" "19.7764" "18.4052" "18.3565" "19.3040" "18.7214" "17.2176" "16.1729" "17.6256" "19.2056" "19.6375" "19.1660" "15.4924" "17.1020" "19.0854" "16.7489" "16.9040" "17.1280" "16.1599" "17.1632" "18.5189" "18.4006" "17.3718" "17.3749" "21.0554" "21.6623" "17.4507" "16.1581" "18.4556" "18.1436" "15.5337" "17.3556" "17.9893" "17.3604" "17.8246" "18.8062" "19.6297" "16.4409" "14.3637" "17.3231" "17.3923" "17.9979" "20.1405" "16.7970" "18.6676" "18.0314" "14.4541" "18.0833" "17.2359" "20.2755" "18.4168" "19.2288" "17.7587" "18.1913" "17.6948" "15.3550" "20.0121" "18.2305" "16.3297" "18.5586" "17.7292" "17.5591" "18.0045" "17.6814" "19.0591" "19.3861" "17.4976" "19.5486" "15.0166" "21.1077" "18.4648" "17.6486" "18.4364" "18.8462" "18.1305" "17.5405" "17.5919"
|
| 7 |
+
"S006" "Study_MET09_6" "Case" "Site_C" "36" "Female" "Asian" "Non-Hispanic" "17.8139" "18.1611" "15.7160" "17.1836" "14.8698" "18.6426" "17.1666" "18.6887" "17.8567" "17.4016" "20.6948" "18.7226" "15.7659" "16.5355" "18.7519" "18.2306" "15.5317" "18.3762" "16.4047" "18.3054" "17.8224" "19.1652" "18.8042" "20.9070" "17.9418" "17.2481" "19.7835" "22.9884" "16.3471" "18.0027" "17.2853" "18.3331" "19.6646" "17.2042" "15.6662" "19.1587" "17.8693" "17.9016" "17.9091" "18.4594" "20.5584" "16.0511" "17.2244" "17.3862" "17.0950" "16.1597" "17.0252" "16.0581" "16.8027" "18.5748" "18.9361" "18.9182" "17.1512" "18.6687" "17.7734" "19.9839" "17.6105" "18.1393" "14.1069" "17.7517" "17.5129" "17.1031" "16.9826" "20.3222" "17.4393" "20.0734" "18.1830" "18.0694" "17.6914" "17.7072" "18.2965" "18.4393" "17.5693" "19.5961" "17.2457" "18.9475" "16.9812" "16.5597" "19.4611" "19.4248" "18.4024" "18.2429" "16.4929" "16.9078" "20.1127" "17.0532" "17.3525" "18.2589" "20.0250" "18.1514" "17.4279" "19.3916" "17.0546" "18.6978" "18.5955" "16.7252" "17.1793" "17.9762" "15.6799" "16.6469" "17.8814" "18.6249" "17.0623" "15.6650" "18.9676" "21.0916" "16.9054" "17.0040" "20.3880" "20.1461" "17.5074" "17.0091" "18.1779" "17.9966" "17.5442" "19.7079" "16.3822" "18.3634" "18.6478" "18.6216" "19.6395" "19.1775" "18.9930" "17.4286" "18.7476" "17.4456" "18.7852" "19.7883" "18.5363" "18.5265" "19.2440" "16.7140" "18.1197" "18.0835" "20.1098" "18.3558" "16.5901" "16.5516" "18.0228" "17.7350" "19.6329" "18.1429" "19.2417" "16.6900" "18.3651" "19.8394" "19.3500" "18.7985" "19.1374" "16.6780" "16.3484" "18.1637" "17.6693" "16.6986" "17.9948" "19.9264" "18.3334" "19.9027" "16.2760" "16.9345" "15.5851" "19.2764" "18.1303" "18.8745" "16.8053" "17.6232" "21.1596" "17.7929" "16.5815" "18.4827" "16.9197" "17.8451" "18.9531" "20.0022" "15.8505" "19.5554" "18.1810" "15.8556" "14.1631" "17.6463"
|
| 8 |
+
"S007" "Study_MET09_7" "Control" "Site_A" "59" "Female" "White" "Non-Hispanic" "19.5316" "19.2659" "17.2166" "20.0607" "20.8568" "16.5052" "17.2883" "17.4582" "19.4068" "16.6148" "17.1994" "17.1736" "17.7804" "16.6986" "17.9440" "18.4028" "18.4195" "16.7246" "18.8347" "19.0358" "17.6572" "18.6426" "17.8319" "18.5700" "18.7760" "17.6527" "18.0385" "19.0002" "18.6372" "20.1364" "16.0346" "16.3210" "16.9935" "19.8292" "18.9352" "19.5689" "17.1413" "16.4233" "17.4424" "17.8767" "17.0124" "20.0804" "18.7520" "19.1105" "18.7651" "17.9588" "16.3995" "15.4794" "17.3265" "17.3780" "15.2431" "18.1031" "19.7714" "17.6421" "16.9793" "17.9927" "17.3193" "17.6904" "17.7292" "16.5945" "16.3966" "20.9961" "18.6643" "16.3685" "17.2736" "20.7995" "16.3835" "18.3270" "19.6534" "16.0285" "22.1849" "16.9767" "18.4409" "17.7421" "18.6546" "17.1343" "20.7264" "17.3577" "17.2577" "16.8378" "16.3107" "16.1553" "17.0321" "17.5233" "18.3436" "18.2595" "16.4943" "17.8804" "18.3358" "16.5645" "19.3719" "19.0691" "18.2305" "17.5590" "18.0735" "15.7211" "17.6029" "16.7951" "18.3312" "19.5999" "16.4737" "18.1900" "17.9774" "17.3492" "18.2485" "17.4000" "17.4141" "17.4011" "19.2164" "18.2384" "16.3168" "19.6208" "19.4619" "17.4169" "17.3787" "16.5742" "19.5855" "16.8882" "16.9686" "16.7388" "17.6440" "18.6518" "16.6371" "19.4372" "17.3596" "17.4544" "18.0121" "19.6225" "20.7403" "17.8797" "15.0907" "17.9618" "18.4302" "15.9685" "17.0265" "17.8416" "17.5170" "16.7396" "18.2178" "20.1000" "18.1501" "17.9725" "17.5747" "17.1344" "17.8271" "19.7211" "17.3216" "16.5417" "18.0132" "16.9402" "17.9647" "18.1262" "20.2542" "18.6602" "18.6795" "18.3674" "20.0482" "17.8944" "16.1278" "18.9707" "17.1334" "17.7811" "16.5075" "18.0641" "17.6986" "19.8277" "19.8983" "17.6976" "20.4513" "17.6201" "16.7071" "13.8852" "18.7604" "17.8814" "17.4564" "18.9489" "18.6622" "16.2657" "17.2746" "17.1114"
|
| 9 |
+
"S008" "Study_MET09_8" "Case" "Site_C" "73" "Male" "White" "Non-Hispanic" "20.0679" "16.6430" "17.7902" "17.7960" "15.8599" "19.3234" "17.6268" "18.3330" "17.5306" "19.3921" "18.4482" "15.8865" "18.4690" "17.9328" "19.9306" "17.7727" "16.4829" "19.7844" "17.1619" "18.5829" "18.8204" "18.0444" "19.2443" "18.7145" "19.1123" "15.6896" "19.2846" "18.9111" "16.9576" "18.7386" "19.1838" "17.5643" "19.6488" "17.9177" "17.9399" "17.6198" "16.6516" "17.8422" "19.2512" "17.1851" "19.5010" "16.6412" "17.0917" "15.5272" "17.3956" "18.9912" "18.0108" "15.1100" "18.1778" "17.7378" "17.0500" "17.2746" "17.8585" "18.1546" "16.7120" "17.6699" "17.2147" "17.8105" "16.9712" "16.8486" "17.4767" "18.6253" "17.9491" "19.8152" "16.9216" "16.5335" "19.4346" "18.8902" "17.2718" "17.9867" "17.2977" "18.7795" "18.0598" "19.9344" "18.8348" "19.9771" "18.9811" "19.2674" "21.0589" "17.1474" "17.8393" "17.9409" "17.7431" "19.2351" "16.6879" "18.2105" "16.6488" "19.2921" "18.7510" "17.3235" "15.8169" "19.2649" "18.1341" "19.5285" "17.6894" "17.0637" "15.5802" "18.0257" "15.0221" "17.3480" "17.8878" "18.3417" "17.5762" "20.5068" "18.8047" "19.5258" "18.7892" "18.0333" "18.9773" "20.7028" "18.4161" "15.8525" "18.1994" "18.0725" "18.6660" "19.2233" "17.4444" "19.0009" "17.5395" "17.0187" "18.9448" "20.5129" "16.4302" "18.2566" "18.8537" "16.4871" "17.2349" "19.0971" "18.9276" "17.3536" "18.5506" "18.8037" "18.8734" "18.0897" "16.8560" "18.2759" "17.2725" "19.3820" "17.8290" "18.8192" "18.9021" "16.4252" "18.6832" "17.7807" "17.1187" "19.6607" "18.8920" "17.3489" "17.8179" "16.2394" "17.6773" "16.1379" "18.1320" "18.0313" "20.2724" "17.1907" "18.3947" "18.6878" "17.9575" "16.4836" "18.1706" "17.7358" "18.1338" "18.6707" "16.3381" "16.9299" "19.1598" "17.0654" "15.8367" "18.0543" "15.1799" "19.2772" "17.3095" "20.5410" "15.6553" "18.4320" "17.8422" "15.2089" "13.6105" "19.6784"
|
| 10 |
+
"S009" "Study_MET09_9" "Control" "Site_A" "41" "Female" "White" "Non-Hispanic" "17.3177" "19.1531" "16.7866" "19.1438" "17.4044" "19.4481" "17.6625" "17.3248" "17.5504" "17.7563" "16.8176" "17.6875" "18.7825" "15.3918" "18.0485" "17.0996" "18.6648" "18.3708" "18.0434" "17.8983" "15.9107" "18.7090" "18.0408" "16.2074" "19.9632" "19.6956" "19.4850" "18.1398" "15.7015" "18.5952" "17.8071" "15.5587" "17.1235" "20.1748" "18.9912" "19.0940" "16.9145" "18.4158" "17.6167" "18.3887" "17.0298" "19.1999" "19.1401" "17.1937" "18.9227" "19.0528" "15.8075" "15.8146" "18.9679" "17.2530" "18.8516" "19.8169" "18.7562" "16.7621" "18.1907" "19.7962" "17.8434" "17.2472" "16.3919" "18.9443" "18.1239" "19.9482" "20.0284" "16.8354" "16.7881" "19.1265" "16.2897" "17.2577" "18.2868" "18.0153" "20.3746" "17.8492" "19.3992" "18.0184" "19.5696" "17.9255" "18.4364" "19.6178" "18.8773" "18.1693" "16.1186" "15.1122" "19.5162" "17.5928" "19.7365" "16.6512" "20.0982" "18.4270" "18.9868" "18.1022" "16.5496" "17.3904" "19.1309" "19.4158" "18.3720" "18.1409" "17.3064" "16.0111" "19.7238" "17.9592" "17.3125" "18.5474" "16.0156" "20.1414" "18.7248" "18.7060" "17.1657" "18.3778" "16.9630" "19.8089" "18.0696" "18.3120" "19.2181" "18.0486" "17.4144" "18.7543" "17.4556" "17.2294" "16.5514" "17.6541" "18.0275" "17.4550" "18.2756" "19.9852" "17.8234" "16.6186" "17.2443" "18.2478" "17.7240" "16.8939" "17.1844" "17.0571" "18.9603" "18.5003" "17.8684" "17.5280" "16.2785" "17.1973" "18.4432" "19.0799" "16.7522" "18.3763" "19.2533" "16.1484" "16.5564" "17.7984" "17.2835" "18.6205" "18.1016" "16.5921" "17.8707" "19.0177" "18.4821" "19.0875" "18.9064" "18.4920" "19.2056" "17.3776" "14.1759" "19.1437" "19.1088" "17.6099" "18.5718" "17.5235" "17.6976" "17.6738" "15.8160" "18.6599" "19.7352" "17.9236" "17.9409" "15.4979" "20.9578" "17.7740" "18.8344" "18.3296" "15.8538" "17.7244" "19.6364" "16.1359"
|
| 11 |
+
"S010" "Study_MET09_10" "Case" "Site_A" "43" "Male" "Black" "Hispanic" "19.1354" "18.8922" "16.3639" "17.5302" "18.8848" "21.2463" "18.4996" "16.7408" "17.6022" "17.7769" "17.5178" "17.5114" "17.3079" "15.4064" "18.1315" "17.6500" "19.9251" "16.6418" "19.0851" "18.7588" "19.1022" "19.1244" "19.5649" "18.7986" "20.4795" "17.1465" "15.9836" "19.3522" "15.8551" "18.0880" "16.6250" "16.5002" "15.2211" "18.8266" "18.3228" "19.4420" "16.8682" "17.5975" "16.8219" "18.0926" "17.5403" "17.9029" "17.0215" "16.7659" "19.0252" "18.6502" "18.2236" "14.0049" "17.8083" "17.1621" "19.0265" "18.8928" "18.6510" "16.4449" "17.9891" "19.6596" "16.1322" "17.6044" "18.2721" "18.6477" "18.6114" "20.8452" "20.5356" "18.1527" "19.8802" "18.7624" "16.2904" "17.7527" "17.7568" "18.4512" "20.1448" "17.6373" "18.9254" "18.9860" "19.6670" "17.5938" "17.7426" "16.0605" "19.8613" "16.7551" "17.0706" "16.1379" "17.9954" "16.9103" "18.4587" "18.2416" "18.5046" "17.9153" "18.8958" "17.8070" "15.8864" "19.3855" "17.2359" "18.3675" "17.8275" "19.3282" "16.0365" "17.2699" "17.0994" "18.3023" "16.2930" "19.2530" "18.8166" "18.9166" "19.7508" "17.2466" "19.2364" "19.6862" "20.5546" "19.0902" "16.6839" "17.2083" "20.0418" "18.9082" "17.5354" "16.6368" "18.6685" "18.5568" "18.0317" "16.8114" "17.5321" "18.1699" "17.0958" "18.0404" "18.0828" "17.9805" "18.3518" "19.3200" "20.6878" "18.2967" "15.3071" "16.8384" "19.7429" "17.3771" "18.2263" "17.5476" "18.0463" "18.5171" "18.5318" "18.5187" "16.5486" "15.1398" "18.4859" "17.8958" "15.5523" "18.7540" "16.5045" "17.6353" "18.0095" "16.0828" "19.1242" "17.8129" "18.5838" "19.7959" "20.2333" "16.8902" "17.0226" "19.2781" "14.6358" "18.0649" "19.5348" "15.5769" "20.0927" "17.9820" "19.1295" "17.3109" "17.5580" "17.7768" "20.4244" "15.4746" "19.3615" "17.4552" "19.9437" "20.2118" "17.8346" "19.6552" "17.4033" "17.2904" "18.4737" "16.8391"
|
| 12 |
+
"S011" "Study_MET09_11" "Control" "Site_A" "67" "Male" "White" "Non-Hispanic" "17.3380" "16.6664" "16.2792" "17.2060" "18.7223" "19.6843" "16.8416" "18.3846" "18.3858" "18.3780" "17.2619" "17.9571" "18.2727" "17.6821" "18.3931" "18.8779" "21.5805" "18.5778" "18.2140" "18.2851" "18.4342" "17.8073" "17.2470" "17.1115" "18.7844" "18.9239" "15.9166" "16.7110" "16.0179" "18.5764" "14.4123" "18.4832" "16.0143" "19.6242" "18.7237" "19.4937" "18.8130" "18.5326" "18.1710" "17.3390" "16.3256" "19.8621" "18.5847" "19.1067" "17.3521" "17.6113" "17.1682" "17.5399" "19.6508" "19.6583" "17.7063" "17.0471" "19.5541" "17.5053" "19.7075" "17.9579" "17.6609" "17.1370" "17.7000" "17.9294" "18.3034" "20.3370" "18.4815" "17.2802" "17.5314" "18.9459" "17.1218" "17.8764" "19.1645" "17.8335" "19.4826" "18.8055" "16.9435" "17.9696" "18.4895" "16.5344" "18.4513" "17.9232" "17.1284" "17.6104" "18.9402" "15.3145" "17.2958" "17.9387" "17.7133" "17.1783" "17.8324" "17.9908" "18.5436" "18.2166" "17.8282" "18.9656" "19.0843" "17.2894" "20.0341" "18.9728" "16.1513" "18.4066" "16.5016" "19.6601" "17.7634" "17.9334" "16.9801" "16.3236" "19.8795" "17.2939" "18.2526" "17.7373" "17.6578" "16.5158" "17.4038" "16.7777" "20.3245" "19.3471" "16.7057" "17.5488" "18.0879" "17.8110" "18.5412" "17.9381" "16.5523" "18.1841" "18.8418" "20.1761" "17.7047" "16.7914" "16.5814" "19.7775" "21.0113" "19.0140" "17.4310" "17.1102" "20.3217" "16.7047" "19.1875" "16.9828" "17.7969" "17.6728" "18.0663" "17.2579" "18.2367" "16.3982" "18.0509" "18.0684" "17.7133" "18.2208" "16.2272" "17.0588" "17.3650" "15.2732" "19.8863" "19.1587" "18.5360" "16.8863" "19.4487" "17.7014" "17.5715" "17.7277" "15.7367" "18.1832" "18.3731" "16.1362" "18.4509" "16.4264" "16.6994" "19.0715" "17.8193" "18.8661" "18.5465" "17.1497" "19.6205" "16.3625" "19.9033" "17.0447" "17.6563" "18.0581" "18.6996" "17.9851" "18.4271" "16.9043"
|
| 13 |
+
"S012" "Study_MET09_12" "Control" "Site_B" "29" "Female" "White" "Hispanic" "18.8316" "18.4374" "17.2757" "16.3089" "17.2863" "17.1080" "16.6602" "16.8526" "18.0940" "18.4109" "19.7952" "18.2050" "17.6702" "19.8357" "19.0496" "18.2395" "16.9145" "17.4822" "18.8936" "17.4489" "18.3845" "20.4357" "18.6748" "18.2328" "20.0471" "18.2565" "18.6337" "19.8171" "17.0419" "18.9257" "18.0405" "17.4240" "18.5658" "17.8919" "17.6792" "18.2391" "18.0554" "18.4127" "18.5221" "18.2213" "18.1053" "18.4041" "17.9118" "18.3707" "16.8584" "19.5595" "17.3790" "15.7780" "19.1225" "18.9931" "17.0083" "17.7550" "18.6807" "18.4126" "17.4357" "18.9459" "17.2632" "18.4182" "16.6189" "17.9236" "17.8226" "18.8378" "18.5221" "18.0111" "16.7308" "17.7154" "17.8795" "18.7795" "19.1665" "15.4589" "17.3853" "17.9545" "16.0176" "18.3917" "17.6549" "17.8065" "17.7244" "16.9292" "17.1824" "17.5392" "18.6911" "18.5054" "18.7614" "17.3279" "18.0579" "16.1690" "17.4771" "18.5450" "17.9377" "18.2341" "17.3246" "18.1001" "19.6727" "18.0491" "18.3728" "15.1917" "17.6426" "18.8828" "16.6811" "17.9474" "17.0744" "19.7973" "16.9962" "19.5909" "18.1280" "19.3552" "18.0953" "15.9305" "16.7229" "18.8657" "19.3020" "17.5697" "18.0972" "17.7836" "19.0096" "17.6498" "20.0477" "17.3845" "17.3974" "16.8044" "18.1936" "17.2064" "18.9258" "18.0445" "17.8202" "16.6929" "17.2956" "19.2986" "18.0398" "18.0152" "19.5178" "18.4097" "19.9487" "17.7726" "18.7542" "17.5939" "15.4193" "18.0401" "18.4221" "19.6457" "16.9946" "14.6330" "18.8111" "16.7451" "18.9069" "17.6822" "19.1397" "18.2402" "17.5656" "17.7527" "16.0582" "18.0548" "18.2652" "17.8325" "19.0671" "18.9648" "19.2448" "17.9630" "16.4578" "17.2761" "17.5741" "17.3092" "19.3482" "18.3159" "19.3958" "15.8661" "20.2424" "16.6994" "17.7977" "18.9181" "17.9751" "14.9655" "17.5764" "18.6188" "17.5719" "18.7162" "17.9076" "18.7524" "18.3504" "17.7145"
|
| 14 |
+
"S013" "Study_MET09_13" "Control" "Site_D" "68" "Female" "Black" "Hispanic" "16.9478" "18.8612" "16.6019" "17.1171" "17.1583" "19.6523" "17.5925" "19.5275" "17.3123" "16.8255" "18.1080" "18.0633" "18.7476" "19.1957" "18.9499" "17.7581" "19.2507" "18.9890" "17.5924" "18.4087" "17.4900" "19.1909" "17.9003" "17.3143" "18.9267" "17.6016" "16.4123" "20.7410" "18.4392" "19.3873" "17.1910" "17.8543" "16.8475" "18.1928" "17.9228" "18.7574" "18.2042" "18.1743" "18.8765" "18.6878" "18.9723" "19.3581" "17.1072" "19.6755" "19.0747" "19.1020" "16.8090" "15.5125" "17.5383" "17.9537" "18.8132" "19.6572" "19.5694" "17.0381" "19.5335" "17.9129" "18.9289" "15.7277" "17.8255" "19.1581" "19.5764" "18.7776" "18.3807" "15.5500" "16.4057" "18.8280" "16.7942" "16.0786" "16.9126" "17.9750" "21.0960" "17.8989" "18.2281" "18.0151" "17.5466" "17.1117" "17.5910" "19.4038" "19.2255" "17.6291" "18.6032" "17.0643" "16.9284" "16.6239" "18.7076" "17.0625" "19.2846" "17.3758" "20.1764" "16.4696" "18.6515" "18.1960" "17.5680" "17.8949" "18.6836" "17.3670" "20.0219" "17.8877" "19.6667" "19.4464" "19.4781" "20.0610" "16.5879" "17.7023" "19.3285" "18.0311" "17.1974" "18.2337" "17.8933" "16.8348" "19.0470" "19.0892" "18.8388" "16.9685" "17.9568" "17.1995" "17.2858" "18.8374" "18.2671" "18.6022" "16.0369" "17.7769" "18.9525" "17.9967" "17.5582" "18.0609" "18.6440" "20.4668" "19.4437" "17.6649" "16.7556" "15.7660" "20.8534" "17.0022" "17.3682" "18.0519" "17.6804" "18.8813" "18.4127" "16.7338" "18.9141" "16.7467" "18.1681" "16.8089" "17.7634" "18.5902" "18.0685" "16.9763" "17.5306" "17.8607" "19.4518" "18.1346" "19.2568" "17.0377" "17.7605" "17.9189" "16.4179" "17.6318" "17.7579" "18.3271" "17.7887" "17.0152" "18.3223" "16.6381" "17.6960" "19.4253" "18.0873" "18.0575" "18.5180" "18.8343" "17.8293" "17.4815" "17.3019" "18.4555" "16.4486" "18.4247" "17.7880" "17.2668" "17.3597" "20.0059"
|
| 15 |
+
"S014" "Study_MET09_14" "Control" "Site_C" "68" "Female" "Black" "Non-Hispanic" "17.1777" "17.4922" "17.7366" "16.9356" "15.7372" "17.9903" "17.9128" "17.2811" "17.5621" "18.2839" "20.8175" "17.0929" "16.9315" "18.3689" "19.7149" "16.8252" "17.0986" "18.4761" "17.6315" "19.0031" "19.5941" "18.1658" "19.0306" "18.6636" "19.0929" "17.0379" "19.8580" "21.2159" "17.2958" "16.7736" "17.3188" "16.4460" "17.4733" "15.2133" "18.1359" "17.0241" "17.9555" "18.6636" "16.9241" "18.6461" "20.0741" "18.7269" "19.0604" "18.5776" "16.7821" "18.3974" "15.9630" "16.5630" "16.7161" "17.0056" "18.2302" "18.6004" "17.3201" "17.9191" "16.2456" "18.5486" "19.9328" "18.4901" "17.2881" "17.7003" "17.4911" "16.3735" "18.3552" "18.8395" "18.0094" "16.8098" "17.1888" "17.0268" "16.6449" "18.4506" "17.6865" "17.3944" "18.2781" "18.0088" "18.6532" "19.8280" "18.5020" "17.5208" "19.4771" "19.4104" "18.6724" "17.5544" "18.0960" "18.0189" "18.9608" "16.8530" "18.1330" "19.0586" "18.4776" "16.7206" "18.7637" "18.3274" "18.5266" "19.0828" "18.2361" "19.4151" "16.6179" "17.0179" "15.0283" "16.3067" "17.0763" "19.0392" "18.3993" "17.9164" "16.5169" "19.1875" "16.5591" "16.4224" "17.8257" "20.1544" "19.0583" "17.1467" "18.2412" "15.6943" "19.2470" "19.4428" "15.6759" "17.2873" "17.6853" "17.1399" "19.6752" "20.0947" "19.6286" "19.1458" "16.6047" "15.4448" "17.4996" "19.0503" "16.5179" "17.3039" "18.7302" "19.5453" "18.6199" "18.3150" "18.8799" "16.4056" "15.8982" "16.7964" "18.9518" "19.7324" "17.8330" "16.6858" "17.2929" "18.2939" "20.8009" "17.6447" "19.2770" "19.1878" "15.8354" "16.9503" "16.8439" "18.4325" "16.7288" "18.3656" "19.2096" "18.7099" "17.3545" "19.3183" "15.4472" "17.5470" "17.7351" "19.1758" "17.7441" "17.1330" "16.4378" "17.7740" "18.4265" "17.8967" "17.2835" "19.5496" "18.7431" "18.4062" "17.1679" "20.1802" "13.7666" "18.8463" "17.8400" "17.8004" "18.7784" "18.7676"
|
| 16 |
+
"S015" "Study_MET09_15" "Control" "Site_C" "44" "Female" "White" "Non-Hispanic" "17.9638" "18.0012" "19.2067" "17.4275" "16.5461" "16.2281" "19.5504" "18.8950" "15.5179" "16.7016" "18.4526" "18.5642" "19.3586" "20.6162" "19.8564" "17.8393" "15.9379" "18.5694" "17.1494" "18.8506" "17.5534" "18.4412" "17.7797" "19.8635" "17.3835" "18.4437" "20.0132" "20.9259" "17.5115" "16.3906" "17.4245" "18.1982" "19.4934" "17.3632" "18.5603" "16.8572" "16.8280" "17.1500" "18.0566" "15.4507" "21.9318" "18.9489" "17.1225" "17.8387" "16.5077" "18.1030" "16.7097" "17.6733" "18.8231" "16.1161" "18.6588" "17.6337" "18.0724" "17.5124" "17.2803" "15.5772" "20.3348" "18.3998" "16.7550" "17.1759" "17.4546" "18.3750" "16.2134" "18.2187" "16.7227" "17.0511" "17.1490" "18.3727" "17.8335" "18.2527" "16.3655" "19.8361" "17.0521" "19.0045" "16.1302" "21.4324" "19.6085" "17.6657" "19.5903" "17.7898" "17.3295" "17.7592" "18.3377" "20.3171" "19.9050" "17.5384" "19.1167" "20.5091" "17.5488" "18.4292" "17.3921" "18.4319" "17.5915" "19.3401" "19.2719" "16.6452" "17.9254" "18.3937" "15.6825" "18.4394" "19.1361" "19.2295" "19.3580" "16.4034" "19.4248" "20.0245" "19.2088" "17.0038" "16.3532" "18.7805" "19.4098" "18.9618" "17.4759" "18.4545" "19.2792" "18.7234" "17.6373" "17.8533" "15.8318" "17.1332" "19.0063" "17.7873" "18.0959" "17.2659" "18.7281" "16.9120" "18.1758" "18.6872" "19.1794" "19.5053" "17.9376" "18.6141" "19.4263" "20.6609" "17.3355" "17.5103" "15.8974" "19.2826" "18.6992" "19.0270" "21.0382" "17.7778" "17.8945" "17.5285" "19.1273" "18.7462" "17.7417" "18.2853" "17.1083" "17.9874" "16.6002" "18.5018" "17.6914" "17.1199" "19.3755" "16.5552" "18.4331" "20.7468" "16.8072" "15.4542" "16.7838" "18.5964" "17.5347" "18.6307" "17.6230" "16.0195" "17.6206" "17.6996" "16.0359" "19.5191" "16.1104" "16.5175" "19.2031" "19.7685" "14.1859" "21.0741" "17.8338" "18.1937" "15.2834" "17.4381"
|
| 17 |
+
"S016" "Study_MET09_16" "Case" "Site_A" "32" "Female" "White" "Non-Hispanic" "15.8632" "18.3691" "16.1704" "20.0767" "21.5786" "16.7898" "17.6081" "16.5593" "17.9377" "18.4521" "16.3274" "19.6264" "19.2761" "17.1070" "15.6821" "17.0758" "18.3644" "18.9132" "18.5737" "18.9524" "16.9162" "17.8073" "18.6372" "17.5471" "19.5663" "20.3657" "15.9753" "17.3814" "15.9086" "17.8610" "17.8282" "17.5527" "17.1828" "20.9547" "16.9632" "19.3591" "18.2309" "16.6486" "20.8216" "19.2783" "16.8697" "16.4914" "18.1245" "14.8616" "16.5010" "16.7119" "16.0576" "14.8654" "17.5848" "18.7130" "17.3090" "18.8217" "19.6934" "16.5847" "17.0170" "19.6267" "17.1090" "18.3560" "18.4604" "19.1478" "18.8168" "16.7471" "17.7510" "17.1215" "17.3123" "17.7553" "18.7667" "19.1627" "19.7180" "16.3593" "19.0219" "19.8042" "17.5983" "17.2371" "18.8992" "18.4185" "17.9842" "19.2047" "18.9666" "17.3403" "19.3652" "17.7102" "15.5621" "18.4711" "16.5739" "18.1439" "18.1380" "17.0248" "16.9250" "17.1854" "19.4668" "16.6124" "18.7073" "17.9201" "16.6091" "17.6065" "17.0296" "17.6997" "17.3481" "18.9000" "15.9314" "20.2088" "17.7054" "17.8670" "19.0949" "18.8904" "17.1500" "18.4076" "17.9265" "16.9153" "16.7115" "19.0801" "19.5688" "16.5277" "18.2438" "16.6134" "16.1547" "17.1544" "16.6858" "18.6628" "17.1736" "18.0956" "19.5661" "17.6692" "17.9279" "17.7274" "16.9103" "19.9010" "18.9580" "18.6566" "18.3846" "17.6696" "17.8644" "17.0469" "18.6459" "17.8463" "16.9073" "18.8148" "19.7626" "18.1710" "17.9383" "17.1937" "17.6713" "16.4078" "16.4026" "21.1793" "16.9184" "18.1158" "18.2044" "14.6598" "18.3852" "18.4372" "20.6587" "16.6177" "18.6005" "17.9802" "20.2805" "18.2189" "15.7402" "19.0429" "18.2392" "16.4986" "20.1547" "17.0952" "18.7774" "18.3390" "18.9359" "18.2811" "18.3037" "15.2777" "18.1428" "14.9649" "21.2632" "17.7643" "18.1155" "18.8865" "19.2645" "18.3949" "16.8662" "17.1216"
|
| 18 |
+
"S017" "Study_MET09_17" "Case" "Site_C" "55" "Female" "White" "Non-Hispanic" "15.9249" "16.1705" "18.6993" "17.5050" "16.4864" "18.2018" "17.3120" "17.0484" "16.9524" "19.0382" "18.1541" "17.3668" "17.4461" "18.3018" "19.2918" "17.8828" "18.4424" "18.7187" "18.2426" "19.8934" "18.9769" "18.2249" "19.2312" "20.6625" "17.7472" "16.2323" "18.6010" "19.4944" "17.0009" "18.4450" "18.8896" "16.0851" "20.3655" "18.5915" "18.3469" "17.4610" "16.8353" "17.3876" "17.7598" "17.8972" "18.8758" "17.2331" "17.9273" "17.5759" "15.9190" "18.0181" "16.7041" "15.9794" "17.1279" "18.7770" "19.3188" "19.6367" "16.2887" "18.4738" "17.5357" "17.0348" "18.2996" "18.3349" "16.4912" "19.0791" "18.9447" "18.1235" "15.6949" "18.2046" "16.5392" "18.1617" "18.1108" "18.1672" "17.1242" "16.9151" "17.7551" "18.7924" "15.8206" "17.6708" "21.3155" "17.8530" "17.1616" "18.0291" "17.8755" "18.5461" "18.4770" "19.8728" "18.5742" "17.4224" "16.6220" "17.8137" "17.5918" "18.8487" "16.1361" "18.3320" "18.3353" "20.4127" "17.2181" "20.1050" "18.2289" "17.9208" "17.1053" "17.7977" "16.8056" "17.3430" "17.7654" "19.9648" "18.3487" "17.4537" "18.2258" "21.0810" "18.6691" "15.0755" "17.8878" "18.6918" "18.0766" "16.2871" "16.9152" "17.6642" "19.9309" "18.7420" "18.8389" "16.7370" "17.9792" "18.8494" "18.7918" "17.2736" "17.5747" "17.7831" "18.5342" "17.5046" "18.0137" "19.7947" "16.7949" "19.2726" "18.6370" "17.0552" "16.9958" "18.8520" "16.6256" "18.3988" "17.9735" "18.1371" "17.5880" "19.3250" "20.2386" "16.1698" "16.4457" "17.4421" "18.6547" "18.6585" "19.2607" "18.4223" "18.5434" "17.0348" "17.0622" "17.4957" "17.7861" "17.7273" "17.8467" "18.1316" "18.6716" "20.9919" "15.3569" "17.2062" "17.3553" "18.1687" "16.5718" "18.9694" "17.2048" "17.6609" "18.7505" "16.7944" "18.0615" "17.6577" "16.3073" "17.6504" "18.4260" "17.8097" "14.9149" "19.2596" "17.0046" "16.4464" "16.1446" "19.9538"
|
| 19 |
+
"S018" "Study_MET09_18" "Case" "Site_D" "49" "Female" "White" "Non-Hispanic" "18.5669" "17.5876" "17.1988" "17.2490" "18.7984" "17.3825" "18.4740" "17.0904" "19.7998" "18.8019" "15.8754" "15.6598" "19.4477" "16.3763" "17.5905" "17.5348" "17.4511" "18.3804" "18.8143" "20.4333" "16.6701" "20.0374" "20.8625" "19.3793" "18.8321" "18.5138" "16.3302" "18.3815" "16.7724" "17.8535" "18.9127" "18.5765" "17.4688" "17.7369" "18.7436" "19.3900" "18.0687" "17.2731" "18.7726" "17.4348" "17.3514" "17.6361" "17.2039" "18.4236" "18.9945" "17.3654" "17.9190" "13.8440" "18.1222" "17.3569" "19.9808" "17.3432" "18.4944" "17.7532" "17.6562" "19.8202" "19.9345" "17.1210" "16.5759" "16.5325" "17.9930" "19.1667" "19.5088" "17.3882" "19.2316" "18.0688" "16.9205" "19.0652" "18.8418" "17.6240" "18.2157" "19.5544" "17.6014" "17.0783" "19.0716" "18.6595" "16.9785" "18.4738" "20.8750" "20.1496" "17.2632" "17.1384" "18.2321" "17.0148" "17.6738" "18.4228" "18.7593" "19.1937" "19.2910" "16.2730" "19.9422" "19.9611" "18.1120" "19.6970" "16.2315" "16.7006" "18.5406" "17.0036" "16.6034" "17.8548" "17.6891" "19.0219" "16.4236" "17.3356" "18.2238" "18.6620" "18.1430" "17.8478" "18.2037" "17.0875" "17.6588" "17.8633" "18.8375" "17.7350" "18.7094" "16.4183" "17.7777" "16.2357" "17.0218" "17.0399" "17.3036" "18.8781" "16.9269" "18.9589" "18.6719" "17.0498" "20.3124" "18.8452" "18.7266" "19.3034" "18.1661" "17.8632" "19.5180" "16.0370" "18.1229" "16.6203" "17.0346" "18.3349" "17.1784" "17.7411" "18.0744" "17.9089" "18.0246" "17.6431" "18.5094" "20.7826" "20.2870" "16.6599" "17.2909" "16.3865" "17.5524" "18.1283" "20.4660" "19.1339" "17.3451" "16.5021" "18.5466" "17.7629" "16.9655" "18.5349" "18.4838" "16.9329" "18.4007" "19.2464" "18.1407" "18.0927" "19.7757" "18.3608" "18.1051" "17.1926" "18.5421" "16.0134" "19.4153" "17.8769" "18.0147" "17.9426" "16.6743" "15.6933" "16.7828" "18.0686"
|
| 20 |
+
"S019" "Study_MET09_19" "Case" "Site_D" "43" "Female" "Black" "Non-Hispanic" "18.7463" "17.0053" "17.5135" "17.3704" "18.1275" "17.2952" "17.6315" "18.8345" "18.7866" "18.2729" "18.8233" "19.2580" "17.4207" "16.7822" "18.0083" "17.5912" "18.5543" "17.6250" "17.2637" "18.8862" "19.0973" "17.4520" "17.0630" "18.1604" "19.2596" "16.7451" "16.1514" "18.3965" "17.4536" "20.7311" "17.4067" "17.5158" "18.1114" "19.5267" "18.9355" "18.2913" "15.0908" "19.0647" "18.1265" "17.9103" "18.4836" "17.5153" "17.9306" "17.7990" "19.0635" "17.1242" "17.2893" "16.0537" "18.1424" "18.6799" "17.6451" "16.6576" "18.0916" "16.9213" "19.3305" "18.9745" "18.1970" "16.9478" "18.5280" "20.0668" "17.4270" "20.6194" "16.7575" "16.5792" "17.0167" "18.8954" "17.4792" "20.6342" "18.4152" "15.3618" "18.4084" "16.4738" "19.9599" "17.5159" "18.0964" "17.1903" "18.6938" "18.3648" "20.0438" "16.1874" "16.3800" "17.4898" "17.6508" "18.6233" "19.0456" "14.6731" "18.9161" "18.6483" "18.5946" "16.8793" "17.0587" "18.0947" "19.7197" "18.9572" "14.7986" "17.2364" "17.4178" "18.9754" "15.8197" "17.6443" "18.3084" "18.3622" "16.4188" "18.1696" "17.9463" "18.2582" "17.7547" "17.0219" "17.1977" "18.2267" "17.4591" "17.9741" "18.6246" "18.8476" "17.7700" "17.1260" "18.7200" "17.6719" "18.4123" "18.2023" "19.7342" "19.0619" "18.4974" "18.4332" "19.3855" "17.8911" "18.3479" "19.3979" "20.0228" "19.3922" "17.3822" "16.9851" "20.0969" "17.1448" "17.5121" "17.5235" "17.2669" "17.5276" "18.4594" "20.4647" "19.7221" "17.5202" "17.6435" "16.8518" "18.2067" "20.8794" "18.0144" "18.4369" "18.2987" "14.4380" "18.9032" "18.0201" "18.3564" "18.5207" "17.5349" "16.6918" "18.7871" "19.1332" "15.2752" "18.2739" "17.6975" "18.0271" "19.9916" "18.9505" "16.1115" "18.0664" "19.0050" "18.0265" "18.2999" "17.4811" "18.0243" "15.8395" "19.5786" "17.6889" "16.5132" "20.5950" "17.2530" "16.1579" "14.7355" "16.6471"
|
| 21 |
+
"S020" "Study_MET09_20" "Case" "Site_B" "56" "Male" "White" "Non-Hispanic" "20.3188" "18.1172" "18.8350" "16.4264" "18.0840" "18.3183" "19.5324" "15.9544" "20.3973" "17.7809" "18.6296" "18.7289" "18.4636" "17.3274" "19.8044" "17.2243" "19.1189" "18.3382" "17.9181" "19.3491" "18.2485" "19.5808" "18.6479" "18.5170" "17.8644" "18.0784" "16.2525" "18.7771" "17.9762" "18.4880" "16.8475" "16.7406" "18.2209" "17.7225" "18.8402" "16.6810" "17.3789" "19.5699" "16.0273" "18.6611" "17.9967" "17.4695" "17.3597" "16.6618" "20.0234" "18.1495" "15.2366" "16.7757" "17.8559" "17.6399" "17.2290" "17.6602" "16.5218" "17.2984" "18.3264" "18.0405" "18.7460" "17.8461" "17.0696" "18.4579" "16.6994" "15.6357" "17.2597" "16.9207" "17.7755" "18.1674" "17.8161" "19.2458" "17.6873" "18.3237" "16.1626" "18.6793" "17.0536" "19.7356" "19.2392" "17.9448" "17.2674" "19.7510" "17.1369" "19.7500" "18.7143" "18.7546" "18.1501" "16.0295" "16.9771" "16.1711" "16.8055" "18.2572" "17.9347" "18.2961" "17.2623" "18.4017" "18.4228" "20.0504" "19.3567" "17.0496" "17.3130" "17.7613" "15.5065" "17.8191" "17.1463" "18.5586" "16.8265" "18.0492" "19.7266" "18.3320" "17.6932" "18.0554" "18.7907" "18.5149" "16.5856" "16.5369" "17.4523" "16.6167" "18.0638" "19.4988" "20.0101" "19.9978" "18.4304" "17.4340" "19.6970" "16.0824" "16.2726" "17.4219" "18.2965" "18.5282" "18.4647" "18.5880" "20.1804" "20.6814" "16.7261" "17.1154" "19.0513" "18.5293" "18.1600" "17.8685" "17.3837" "17.9638" "16.2331" "18.5293" "18.2708" "16.7946" "18.1519" "16.0361" "18.2024" "21.0770" "18.4491" "18.4351" "18.3717" "16.4006" "17.6935" "19.3477" "18.6831" "18.8514" "19.6559" "18.2459" "18.5827" "18.9614" "16.9272" "18.6247" "17.4678" "19.1086" "16.1453" "18.9902" "18.3707" "18.6015" "17.3119" "16.4462" "18.3112" "18.8621" "16.9216" "16.9715" "18.2740" "18.0885" "17.7893" "17.8695" "17.7644" "16.1754" "12.8406" "19.0193"
|
| 22 |
+
"S021" "Study_MET09_21" "Case" "Site_A" "72" "Female" "Other" "Non-Hispanic" "17.7628" "17.2482" "16.6986" "17.6531" "18.4895" "17.1674" "15.9243" "16.9799" "18.8919" "18.4904" "18.1821" "16.9905" "19.8230" "16.4618" "18.1363" "17.7979" "18.5564" "19.0747" "18.3693" "18.3281" "18.8455" "18.8374" "17.7392" "16.6236" "19.5694" "18.5461" "16.0753" "16.4845" "14.3894" "20.1665" "16.8882" "16.6533" "15.1436" "19.4926" "19.5987" "18.2382" "18.7191" "20.0014" "17.3814" "19.3154" "15.4622" "16.5080" "18.4974" "15.4567" "18.9801" "17.7244" "18.0059" "16.2847" "18.9518" "17.6375" "16.1749" "16.0648" "17.6776" "15.1565" "18.2504" "18.0767" "18.1783" "17.9652" "18.4076" "17.0016" "17.6198" "18.9151" "19.8308" "18.3456" "17.5851" "19.4948" "17.0224" "15.9343" "19.2269" "16.4613" "19.9827" "17.3552" "18.1690" "18.3011" "20.1002" "17.8199" "19.2727" "15.6790" "18.3305" "18.2734" "15.5249" "16.6490" "17.5123" "17.4212" "18.0764" "18.4024" "18.2536" "19.7229" "17.6604" "14.7825" "18.4824" "17.8668" "19.6934" "18.2443" "19.9924" "18.0532" "15.9062" "16.8681" "19.2393" "19.5501" "17.2315" "19.1586" "17.2881" "18.3553" "21.1995" "18.7588" "18.5835" "16.6720" "18.7871" "16.5448" "16.5063" "19.1318" "19.7601" "20.4008" "16.2935" "16.8044" "18.3735" "18.1890" "17.2522" "16.8410" "17.6436" "18.9733" "18.6904" "18.5536" "18.7685" "17.6211" "17.3311" "16.1470" "19.7541" "19.3316" "16.4590" "19.1805" "17.7828" "16.5974" "17.1444" "18.6990" "19.1587" "18.6034" "17.4772" "17.7214" "16.2037" "17.1473" "18.0151" "17.3926" "19.4318" "19.0665" "19.2756" "17.5884" "17.4126" "14.3038" "19.3754" "19.1520" "18.9324" "17.9835" "18.3984" "17.7978" "20.0092" "19.2097" "15.0333" "21.3832" "19.9141" "16.8740" "19.6745" "19.5884" "18.5491" "17.2615" "16.3099" "17.6096" "19.1412" "18.1857" "19.1430" "15.8031" "19.8757" "15.9657" "18.4820" "18.9436" "18.9445" "19.3562" "17.1959" "17.4891"
|
| 23 |
+
"S022" "Study_MET09_22" "Control" "Site_C" "28" "Female" "White" "Non-Hispanic" "17.9719" "17.7509" "18.0327" "17.1654" "15.2329" "17.1089" "16.7497" "17.3624" "14.9787" "18.6678" "18.1626" "16.6177" "16.5322" "20.4529" "20.4735" "17.5606" "17.3821" "17.1535" "18.6048" "21.3609" "17.6725" "18.4065" "20.3501" "19.3644" "18.4319" "17.2818" "19.1918" "20.5101" "17.1202" "16.1612" "17.9496" "16.5683" "18.7746" "15.6221" "17.2248" "18.3075" "15.2358" "18.0490" "19.0425" "16.7212" "18.8420" "17.8529" "18.4243" "18.2398" "17.6275" "17.9104" "16.0533" "17.4642" "17.7180" "18.8575" "17.5003" "19.4320" "17.1866" "17.8746" "16.5268" "19.5027" "17.7960" "16.9979" "14.9424" "18.2072" "18.0494" "18.3437" "15.2590" "17.9069" "18.8766" "18.4228" "19.0851" "17.0766" "16.0432" "18.6868" "17.3971" "17.6123" "18.0492" "17.8063" "15.5629" "18.7428" "20.4027" "17.0928" "17.2502" "21.0190" "17.5527" "16.8756" "15.6275" "18.6696" "17.9062" "16.7986" "18.8180" "19.1870" "17.3427" "18.5363" "19.1733" "18.9817" "16.8331" "18.0419" "18.5043" "14.2276" "19.1023" "19.2214" "14.7377" "16.2708" "17.8870" "19.6946" "16.7084" "19.1706" "18.0849" "18.4106" "17.4929" "17.1540" "17.8481" "19.3779" "20.2337" "16.2221" "17.3276" "17.6513" "17.6513" "19.3708" "18.2785" "18.9883" "18.7996" "18.3004" "17.1313" "19.3468" "19.3730" "15.0978" "17.8709" "16.4877" "17.9605" "20.3830" "16.9729" "17.7431" "19.6964" "15.9017" "19.3877" "16.5292" "17.7544" "17.8020" "17.5685" "20.4972" "19.7827" "20.0344" "18.9051" "16.6109" "18.3883" "15.3364" "17.7582" "19.1972" "18.0694" "16.7029" "16.6540" "16.4656" "16.9836" "17.7765" "16.2287" "17.3929" "19.3676" "17.8563" "17.8357" "19.0675" "17.7540" "17.1250" "17.2151" "19.7142" "17.1837" "19.7054" "16.0106" "17.6367" "17.4702" "17.6512" "16.7976" "21.3514" "17.0333" "18.1359" "19.9083" "21.2671" "14.3782" "18.2924" "15.5398" "18.8919" "16.4709" "18.6047"
|
| 24 |
+
"S023" "Study_MET09_23" "Case" "Site_C" "70" "Female" "White" "Non-Hispanic" "18.9237" "19.1533" "18.6446" "16.5225" "17.4042" "18.6826" "20.7231" "18.2780" "18.3586" "17.9067" "19.6932" "17.7817" "17.5895" "17.9023" "16.9449" "19.6087" "17.2201" "18.2242" "17.5492" "19.4025" "17.1798" "16.6394" "22.2968" "17.9212" "17.6648" "17.9563" "17.4800" "21.8992" "19.1629" "17.4900" "19.5891" "16.6454" "20.3338" "17.7369" "18.1546" "17.6852" "17.0468" "20.5984" "17.6831" "17.3858" "18.5653" "17.8454" "18.4536" "16.0714" "15.5533" "18.8363" "16.7959" "16.4702" "17.9667" "16.9359" "17.3723" "16.3400" "20.0090" "19.3355" "15.9643" "17.1994" "17.5720" "18.6113" "17.5384" "18.7798" "18.1029" "20.2981" "17.0221" "17.2906" "15.6357" "18.3828" "17.7643" "19.4916" "15.3537" "17.9430" "18.5803" "16.7436" "16.4248" "16.3811" "17.5788" "20.9688" "19.9720" "17.0002" "18.5833" "18.6597" "15.7149" "18.7842" "16.8615" "17.4172" "19.7659" "18.3901" "20.1529" "19.5581" "18.1655" "17.6761" "17.5465" "18.5796" "17.1063" "20.1797" "18.4700" "16.4629" "17.2905" "17.3210" "13.3947" "16.5009" "19.3568" "19.4538" "17.0761" "18.1493" "17.9002" "18.9233" "17.7600" "17.1217" "17.8169" "19.2614" "19.6230" "16.4665" "19.3382" "17.1909" "19.1099" "17.0646" "17.5279" "16.9520" "17.6668" "16.4120" "18.5889" "19.4139" "19.0446" "17.9476" "17.3961" "18.5649" "17.4604" "18.0391" "16.9933" "18.2053" "18.8575" "15.8150" "18.7729" "18.8783" "18.9552" "17.4488" "17.0959" "17.4094" "18.6813" "20.2998" "19.0570" "18.5740" "17.0342" "17.4948" "19.1638" "21.1414" "16.8032" "17.8558" "18.0764" "12.9625" "16.7402" "17.4292" "19.7395" "17.2689" "18.4998" "16.9955" "18.8570" "19.6241" "16.2489" "17.1538" "17.1290" "18.9245" "17.8423" "18.9028" "14.8227" "16.7746" "18.5938" "17.6696" "17.6373" "17.8744" "17.0834" "18.8558" "19.1283" "19.3199" "17.7393" "19.7821" "16.9898" "18.8515" "14.6733" "16.7362"
|
| 25 |
+
"S024" "Study_MET09_24" "Case" "Site_C" "63" "Male" "White" "Non-Hispanic" "17.1429" "18.8523" "20.0207" "18.0069" "17.4660" "18.2664" "18.2130" "17.5331" "17.6076" "18.2776" "20.8487" "17.5489" "18.0114" "17.6323" "19.7870" "17.5982" "17.4237" "18.1204" "17.9269" "19.1269" "18.4149" "18.5333" "21.5269" "20.5604" "17.0191" "17.7019" "17.3584" "17.8726" "15.5757" "16.7774" "20.6335" "18.4944" "19.9442" "19.5279" "16.4404" "17.8317" "17.8435" "18.7602" "16.9044" "17.1609" "18.4837" "16.1291" "18.2303" "16.7292" "17.6489" "17.6622" "17.6238" "13.1855" "18.2333" "17.4821" "17.8132" "19.1144" "17.3263" "17.9803" "17.6439" "17.9349" "17.9350" "19.1045" "15.9650" "18.6958" "17.2739" "17.3079" "18.4145" "16.7306" "16.5458" "16.9000" "18.4279" "19.7885" "15.7910" "18.9285" "17.0613" "16.7459" "17.2339" "19.9536" "19.5895" "19.6454" "16.4662" "17.4879" "19.4888" "18.7617" "17.4607" "17.2849" "17.6205" "19.2985" "17.3913" "16.6571" "17.6843" "18.1214" "18.8016" "15.7839" "17.2279" "19.8971" "18.8130" "18.2586" "18.8990" "17.4683" "15.8481" "19.1831" "15.2700" "16.4242" "19.9371" "19.5662" "17.6732" "15.5812" "19.0808" "19.7178" "18.4219" "16.4340" "18.3723" "19.5008" "20.7956" "16.6529" "17.7252" "17.4016" "20.1307" "18.4697" "19.2322" "19.1797" "16.4856" "18.2936" "19.2972" "18.8349" "17.9097" "16.5175" "17.7098" "18.4314" "19.0111" "18.5491" "17.8136" "17.4108" "18.6184" "19.6585" "18.5499" "17.0641" "20.1717" "17.9270" "18.3554" "20.4049" "18.0206" "20.5695" "20.2657" "16.0188" "15.8021" "18.8374" "17.2508" "20.2876" "16.8626" "16.6496" "19.5308" "15.2261" "16.6771" "16.3842" "18.1618" "17.5886" "19.4352" "16.3548" "17.7696" "19.8545" "16.4013" "15.3926" "17.2811" "18.9347" "15.7169" "17.7260" "15.5172" "15.1972" "18.9229" "16.2634" "18.2800" "17.7902" "17.9555" "17.4268" "19.7100" "19.3747" "16.7270" "19.6880" "18.2092" "18.4505" "14.4927" "19.2297"
|
| 26 |
+
"S025" "Study_MET09_25" "Control" "Site_D" "52" "Male" "White" "Non-Hispanic" "17.7298" "19.3850" "15.0211" "16.5612" "18.8714" "18.8792" "18.4114" "17.5164" "18.8250" "18.9880" "17.8852" "18.2302" "18.5612" "18.5222" "16.0342" "16.6369" "18.7869" "18.6103" "18.7708" "19.2033" "18.0609" "19.5654" "19.8431" "19.0441" "18.6168" "17.2528" "16.6430" "20.9641" "16.3485" "18.7228" "18.2970" "17.4451" "17.5631" "18.1647" "19.1766" "19.0047" "17.8032" "19.6295" "17.6528" "16.8690" "16.7345" "19.0380" "18.6935" "18.1268" "18.6250" "18.5749" "17.0417" "16.9064" "18.6360" "18.0787" "18.0598" "18.6205" "19.1259" "17.6238" "17.7019" "19.7599" "19.7937" "16.2664" "18.2787" "17.2893" "16.5176" "19.0406" "16.8708" "15.4080" "17.5639" "16.2302" "18.5253" "16.8781" "19.3090" "18.6210" "17.9618" "17.3655" "17.3735" "18.4770" "20.3967" "18.1693" "17.6787" "18.6150" "19.8111" "18.1794" "18.6080" "17.2797" "16.6300" "18.4440" "16.5257" "15.4045" "19.8025" "17.6220" "19.2342" "17.1377" "17.4987" "19.8252" "17.7587" "19.6465" "16.5867" "17.3587" "18.0348" "18.3033" "19.5417" "18.9709" "15.5299" "18.0604" "18.3139" "18.2817" "18.9644" "18.3150" "20.9136" "18.8136" "17.4308" "18.8809" "17.1302" "19.0264" "17.4353" "19.5239" "18.9054" "14.3514" "19.1585" "17.1527" "16.5588" "16.6970" "18.3218" "17.5426" "17.1762" "17.2460" "16.5385" "18.2962" "19.3390" "19.4838" "17.6910" "19.4619" "17.2312" "16.1625" "18.3576" "17.3704" "18.0578" "17.1028" "18.3788" "18.1273" "17.2463" "20.0862" "18.4014" "15.3099" "16.6889" "16.9416" "18.1508" "18.1304" "17.7287" "18.7486" "18.9978" "16.1351" "18.5372" "18.7496" "18.5498" "16.5717" "18.6142" "17.1952" "17.8289" "17.0889" "17.0565" "17.5436" "17.8651" "17.5004" "19.1631" "18.8962" "17.2747" "18.6341" "18.1766" "16.9285" "16.5457" "18.2459" "16.9184" "14.5676" "20.6844" "18.0182" "18.1278" "18.0829" "18.6015" "17.6309" "18.7427" "18.7522"
|
| 27 |
+
"S026" "Study_MET09_26" "Control" "Site_D" "76" "Female" "White" "Non-Hispanic" "17.4043" "18.0737" "16.7361" "18.0147" "18.8971" "16.6495" "19.6243" "17.6270" "18.8927" "20.3768" "18.4515" "18.1452" "17.6966" "16.7559" "17.6325" "16.0543" "18.6884" "18.2599" "18.7214" "20.2008" "16.6845" "17.9114" "18.8861" "17.1706" "18.1957" "17.8819" "17.9324" "20.3772" "16.3886" "18.1379" "18.1260" "17.0771" "17.8283" "17.2308" "20.0487" "17.6672" "18.9285" "18.4839" "18.1029" "18.8814" "16.8882" "17.5035" "17.1462" "17.8794" "20.0484" "16.8150" "18.5053" "18.6655" "19.1421" "17.4645" "17.6218" "17.0099" "18.9937" "16.6740" "17.4473" "19.3576" "17.7854" "17.8534" "19.0532" "17.6397" "18.7925" "19.5459" "18.2498" "18.2498" "16.4835" "19.4353" "17.4674" "17.0692" "17.8742" "20.0422" "18.8511" "17.0771" "20.0117" "17.2962" "17.8925" "18.0553" "17.9982" "17.8960" "19.4032" "20.7797" "16.9217" "16.6924" "17.1203" "18.2444" "18.1197" "15.6993" "19.6562" "18.6028" "17.0171" "18.5422" "17.8845" "18.3152" "20.0360" "17.6438" "17.8593" "15.2092" "17.1077" "20.0801" "18.2431" "17.9932" "17.0822" "19.2763" "17.5874" "19.2343" "18.4413" "18.2681" "18.4154" "17.5817" "18.3751" "18.3012" "17.1487" "17.0850" "19.4806" "18.8607" "18.6536" "16.4406" "18.0425" "18.3512" "16.5576" "17.6550" "16.3316" "17.7601" "19.5619" "18.8110" "18.7226" "18.2579" "18.6231" "19.8550" "17.5680" "16.8388" "17.3556" "16.7619" "18.0728" "17.6060" "18.1242" "16.3873" "17.7512" "18.3350" "17.0865" "19.6540" "17.7983" "15.7044" "19.3843" "19.4822" "19.0567" "18.4762" "16.4842" "19.1794" "18.9471" "15.9156" "18.5024" "19.1282" "17.0548" "18.7372" "17.7429" "17.5182" "16.7029" "19.8437" "16.6998" "16.7440" "19.7293" "16.9095" "18.4062" "17.7097" "16.2103" "16.7158" "16.5715" "17.7275" "18.4157" "19.1074" "18.1207" "15.5901" "19.2028" "19.2189" "18.5786" "17.9894" "17.7063" "18.2520" "20.1367" "18.9370"
|
| 28 |
+
"S027" "Study_MET09_27" "Case" "Site_B" "42" "Male" "White" "Non-Hispanic" "17.5938" "16.8777" "16.8689" "16.8156" "18.4098" "18.9486" "17.9344" "17.8147" "19.0222" "18.6206" "19.3813" "18.8920" "18.6219" "16.3032" "19.0806" "17.4629" "17.3794" "20.5670" "17.4631" "17.8804" "17.6174" "18.3846" "19.4736" "19.3389" "19.0275" "18.9380" "18.3220" "18.9672" "17.7469" "17.1559" "19.2660" "18.4232" "19.8487" "19.2609" "18.5621" "17.6796" "16.0164" "18.2560" "17.9692" "19.0873" "17.0452" "16.9963" "19.3001" "18.5508" "16.0950" "17.5728" "16.9479" "16.6814" "19.1258" "18.2988" "18.2094" "17.4879" "18.1285" "18.7702" "17.4957" "17.6442" "17.9523" "16.7302" "15.3860" "15.7924" "18.0008" "19.1233" "17.9509" "18.7084" "17.1706" "18.7215" "17.3918" "17.6653" "18.1866" "18.2612" "19.0632" "17.4532" "18.8716" "18.0468" "17.8624" "19.4687" "20.2432" "16.7411" "18.0473" "17.3840" "16.9504" "17.7719" "17.8892" "19.1935" "16.9837" "17.3412" "17.5082" "15.5210" "18.6616" "18.1870" "20.7667" "20.6574" "18.5906" "17.9952" "19.9015" "17.7292" "19.1156" "20.0179" "15.6607" "18.0723" "16.8628" "18.9876" "18.0263" "18.3666" "17.5410" "18.7168" "18.0511" "17.1143" "16.4138" "19.4917" "17.2114" "16.1601" "19.5697" "18.3314" "18.6871" "18.6581" "18.8469" "18.2059" "16.7266" "16.7459" "20.3559" "18.3532" "18.9973" "18.8658" "19.5867" "17.5235" "18.4362" "19.8166" "17.0310" "17.7452" "18.2627" "17.7635" "19.0634" "16.7699" "17.7970" "18.4127" "16.5759" "18.4350" "16.5636" "19.6474" "19.6671" "17.4174" "17.2676" "17.7181" "20.2560" "21.0945" "18.7152" "16.2239" "18.7285" "15.8461" "16.5248" "17.5198" "18.6568" "18.1828" "17.6488" "16.4184" "18.0320" "17.4707" "16.1811" "19.3063" "18.3350" "16.7844" "18.1788" "19.5318" "18.9483" "17.3756" "19.2887" "15.8609" "17.4376" "18.0736" "15.5420" "17.4563" "18.7054" "17.9631" "19.3859" "18.6038" "17.4290" "18.2108" "14.4060" "19.1081"
|
| 29 |
+
"S028" "Study_MET09_28" "Control" "Site_B" "66" "Female" "White" "Hispanic" "16.9721" "18.3955" "18.8598" "15.7047" "16.6583" "16.6164" "18.0192" "17.8249" "18.5465" "19.2668" "20.3975" "17.7210" "18.6014" "19.9653" "18.6001" "18.3079" "17.4392" "16.7800" "17.4225" "18.1036" "20.4862" "18.7251" "19.8814" "18.7928" "16.4384" "15.0366" "17.9966" "19.4260" "14.2776" "18.2966" "17.6286" "16.9138" "20.2404" "18.1738" "19.8988" "17.1761" "16.3398" "18.2554" "16.5906" "17.4255" "17.7569" "18.7515" "17.7879" "16.7102" "17.4626" "18.4435" "15.9446" "15.6965" "19.4134" "18.1773" "17.3653" "19.2226" "18.5115" "18.7202" "16.1311" "18.6214" "18.4945" "18.4800" "18.2070" "17.4002" "18.2224" "18.4232" "18.2749" "18.0025" "16.6018" "18.3031" "16.7887" "19.2872" "18.3167" "18.9932" "19.8285" "19.6437" "18.0604" "17.9776" "18.4010" "17.8845" "19.1375" "20.9307" "18.1774" "18.0394" "18.0702" "17.6932" "16.4828" "18.3745" "19.5956" "17.8772" "19.4939" "20.4744" "19.6173" "17.5355" "16.8335" "19.1696" "17.5833" "17.7230" "16.9505" "19.8641" "16.8453" "16.1430" "16.5409" "18.2691" "19.2972" "19.6224" "19.0145" "18.8837" "17.9165" "18.5884" "17.3326" "19.8677" "16.9312" "19.8217" "17.6465" "17.3404" "17.2696" "18.3643" "18.5915" "18.6481" "16.3542" "18.0507" "18.3050" "17.6426" "16.9127" "18.2054" "18.4025" "18.9552" "18.3924" "17.8836" "17.3044" "19.3179" "18.4415" "17.4575" "18.9671" "16.5912" "18.4711" "18.1803" "16.9698" "17.5764" "17.2598" "17.5317" "16.7393" "18.0761" "16.6689" "18.0684" "16.2133" "17.0382" "19.7596" "17.2982" "19.3396" "18.4853" "17.2712" "16.1424" "16.8293" "16.2732" "20.7901" "17.4016" "18.1523" "17.0402" "20.7646" "18.1191" "17.7382" "15.4110" "16.5857" "17.4385" "19.4310" "16.1450" "18.0123" "17.2692" "18.8723" "17.8996" "17.5972" "19.2156" "17.8084" "18.0477" "18.9308" "18.9407" "16.3318" "17.8281" "20.1431" "17.1818" "17.6599" "18.2412"
|
| 30 |
+
"S029" "Study_MET09_29" "Case" "Site_B" "32" "Female" "White" "Hispanic" "19.0761" "18.7145" "17.1278" "17.2286" "15.3538" "18.5342" "19.4918" "18.9975" "19.3811" "15.8912" "17.4842" "17.5722" "16.2035" "16.4303" "19.1881" "18.1920" "17.4997" "18.3140" "17.4330" "18.0776" "17.9642" "19.1755" "19.8636" "17.7077" "16.6079" "17.6374" "17.1486" "19.8722" "15.4204" "20.5626" "18.6849" "15.9777" "18.4720" "19.0917" "18.9962" "16.7283" "16.8634" "18.3315" "17.6813" "17.5154" "18.2316" "15.6127" "19.5506" "16.7963" "17.6821" "16.5981" "16.5699" "13.5394" "17.3821" "16.4228" "16.8464" "17.0293" "17.8177" "18.3399" "16.2917" "18.1254" "19.0454" "17.9510" "16.0571" "19.6720" "16.7943" "18.9913" "17.4783" "20.0122" "18.3764" "18.6968" "15.8816" "17.6835" "16.1977" "17.3852" "18.4213" "18.0266" "17.5593" "17.8086" "18.8566" "17.4359" "16.6675" "17.3649" "19.7500" "18.7194" "17.7903" "16.9859" "17.6875" "19.3400" "17.4988" "18.7727" "18.8489" "17.7698" "18.0980" "18.3221" "17.6011" "18.9303" "17.3712" "18.4043" "19.0150" "16.5621" "17.1244" "16.5519" "15.7122" "17.1791" "17.8181" "18.9925" "17.9389" "16.8092" "18.0863" "18.6918" "17.9644" "18.0232" "18.7537" "18.1820" "17.4987" "17.1885" "19.8157" "18.9070" "19.7686" "18.0511" "18.7922" "19.4550" "18.2115" "16.1619" "17.9497" "17.1482" "18.1355" "17.2102" "17.8906" "17.4531" "17.3749" "18.2752" "18.0357" "19.1601" "18.0193" "18.8603" "18.1315" "17.6394" "19.0231" "17.4609" "17.1649" "18.7446" "18.8118" "18.6807" "19.9723" "15.7518" "15.4698" "17.2021" "17.8973" "19.6259" "16.8170" "19.3075" "17.5908" "16.7554" "17.6992" "18.6019" "17.1894" "16.0982" "18.1100" "17.5911" "19.2596" "18.7530" "17.0425" "16.8730" "17.2287" "18.6798" "17.9832" "19.5004" "19.3455" "17.1174" "17.9965" "17.3979" "16.4385" "18.9299" "16.4365" "17.0976" "18.2534" "18.3537" "17.4298" "19.0108" "15.7390" "19.3576" "17.3262" "17.2414"
|
| 31 |
+
"S030" "Study_MET09_30" "Control" "Site_C" "77" "Male" "White" "Non-Hispanic" "19.1614" "19.7390" "17.9629" "16.8247" "18.2579" "17.9358" "18.8078" "19.1999" "17.2202" "17.1192" "18.3930" "18.0898" "17.6527" "18.7796" "19.0579" "18.4269" "15.7623" "19.1786" "19.4144" "17.8712" "18.7498" "18.0203" "19.3729" "17.2561" "18.6944" "18.9595" "19.7680" "19.9277" "16.5864" "18.6529" "17.6478" "17.4481" "19.5805" "16.4566" "16.7879" "18.3054" "17.6252" "19.8027" "15.8524" "17.1651" "19.7045" "17.4653" "19.2535" "20.0719" "16.7963" "17.8543" "16.4682" "16.7685" "15.7662" "17.5308" "18.5593" "19.3240" "15.9180" "16.0299" "16.9183" "20.3478" "18.3846" "16.6505" "15.4744" "17.6124" "18.7870" "18.9921" "15.0133" "18.5933" "17.3769" "19.2002" "18.0197" "19.1050" "16.9043" "19.6179" "17.2403" "18.4517" "17.8793" "18.5409" "17.9465" "18.8200" "18.9229" "17.7107" "18.8960" "19.9803" "16.8525" "19.3884" "17.6119" "17.5283" "17.8649" "18.4744" "18.6203" "20.5441" "19.0109" "17.0828" "17.2361" "17.7576" "16.3752" "18.5163" "17.2368" "17.2506" "16.2220" "19.1739" "17.4650" "15.9708" "17.5029" "18.2383" "16.7106" "17.8559" "18.9956" "17.4184" "18.9484" "16.6443" "17.7910" "20.4286" "18.9197" "18.3680" "17.4546" "19.3575" "18.1086" "20.5150" "19.5254" "18.5426" "17.1836" "17.5102" "19.5167" "18.6346" "17.3051" "19.4358" "19.6279" "18.8462" "18.3717" "19.1394" "17.5829" "16.8466" "18.0440" "16.3176" "17.8128" "18.7299" "18.3898" "16.0362" "17.2126" "17.3689" "18.0873" "18.4978" "19.5233" "15.4275" "17.4887" "19.2322" "18.3805" "18.2313" "17.7147" "16.2153" "17.9064" "17.6599" "17.1202" "18.7708" "18.3343" "18.1884" "19.7934" "17.0521" "17.4247" "19.9811" "17.1332" "16.5568" "18.2654" "17.7769" "18.1051" "17.3535" "16.9909" "17.0648" "20.4462" "17.7349" "17.2449" "17.7549" "15.6347" "17.7456" "17.2221" "18.7217" "16.5448" "19.2433" "17.5041" "17.4486" "17.8574" "18.5844"
|
| 32 |
+
"S031" "Study_MET09_31" "Control" "Site_D" "28" "Male" "White" "Non-Hispanic" "16.6218" "17.1910" "15.5003" "17.9704" "16.3172" "21.0816" "17.3333" "18.1223" "19.0547" "18.4439" "17.3733" "17.9546" "19.6287" "18.7078" "18.4991" "18.5703" "19.1737" "17.7977" "18.6522" "18.2840" "17.4556" "18.1786" "17.5961" "17.8166" "20.0775" "17.5573" "17.4528" "19.7616" "18.4641" "18.4963" "16.9654" "17.2858" "17.6485" "17.3888" "18.2614" "19.7654" "15.4486" "18.0057" "18.6198" "18.5624" "17.6060" "19.2456" "17.3408" "17.9181" "16.7237" "17.3310" "14.3287" "17.7494" "16.3085" "18.4727" "17.8063" "17.4841" "18.1376" "17.0661" "17.6215" "16.5755" "15.4559" "16.9151" "16.3596" "18.4072" "17.2919" "17.6646" "19.2473" "18.2961" "16.8698" "18.2490" "16.0806" "18.8390" "16.2458" "17.7069" "18.5192" "19.0450" "17.7742" "17.8265" "17.8443" "17.5843" "15.7252" "17.8122" "19.0875" "18.7705" "16.9624" "17.7770" "18.3076" "17.7499" "18.9408" "18.6191" "19.4382" "18.2882" "17.6416" "17.9854" "18.7989" "18.1054" "17.8676" "18.6976" "19.7307" "17.6560" "15.6701" "17.1565" "16.5451" "17.1931" "18.0561" "19.7327" "17.4401" "18.9231" "17.7510" "16.2516" "17.4237" "16.5386" "18.3382" "18.3662" "16.8400" "16.6562" "17.3790" "19.3040" "19.1283" "16.9579" "18.9726" "16.3607" "14.7052" "19.4521" "18.1691" "18.5428" "19.7429" "18.7805" "18.1381" "15.4194" "17.0522" "18.8779" "21.0959" "17.1242" "17.6377" "17.4679" "20.3913" "16.9696" "17.3654" "17.8467" "16.7874" "17.7997" "17.5434" "20.6042" "17.0209" "18.0178" "17.6472" "17.2569" "19.3927" "18.3484" "16.5374" "20.1799" "18.4885" "18.2616" "18.5745" "17.4946" "20.0657" "16.8898" "19.5944" "16.3815" "17.9485" "19.9237" "16.5989" "17.6980" "17.1979" "19.4893" "17.0734" "18.4929" "17.3839" "17.1233" "16.8032" "17.6746" "19.0755" "18.8894" "18.5633" "17.4315" "18.9096" "15.9196" "17.7190" "20.4210" "16.2418" "17.7147" "18.7223" "17.9701"
|
| 33 |
+
"S032" "Study_MET09_32" "Case" "Site_B" "44" "Male" "Black" "Non-Hispanic" "18.5678" "18.2106" "19.1892" "17.1228" "16.6474" "17.8876" "19.2423" "18.7331" "16.1436" "17.7212" "19.0240" "17.1111" "16.9875" "18.4595" "20.4531" "16.7470" "18.3131" "17.3085" "19.1413" "19.4904" "18.1986" "17.4523" "19.5695" "19.8161" "18.1031" "19.3227" "16.2814" "20.8189" "16.4604" "17.1940" "17.2664" "17.4958" "19.8962" "19.1056" "15.8807" "17.3648" "18.3676" "18.6265" "17.7322" "18.5945" "19.0196" "17.0745" "18.7216" "15.5535" "16.8233" "17.0265" "16.0148" "15.6353" "18.4370" "18.4737" "18.5623" "18.8378" "17.6058" "16.1842" "16.8051" "18.2495" "18.1407" "17.7589" "18.3866" "17.7879" "18.1960" "17.7995" "17.3765" "17.6560" "18.6523" "17.6401" "17.6648" "17.1672" "17.8734" "18.5453" "18.8176" "19.0049" "16.8326" "18.3217" "18.0250" "19.6511" "18.3676" "16.0679" "19.8925" "18.4643" "19.2395" "18.1721" "18.4069" "18.9874" "18.5875" "16.1532" "19.3077" "17.6393" "19.6662" "16.7159" "18.5773" "19.7219" "16.9882" "19.0644" "16.9129" "16.6361" "18.3970" "18.6763" "16.1738" "18.4127" "17.5843" "18.7106" "18.0764" "18.1425" "17.0493" "19.3700" "18.4549" "18.2692" "17.5567" "20.1527" "16.5302" "15.9375" "17.3575" "18.8627" "17.9684" "19.3741" "19.5568" "15.4114" "18.2347" "18.3076" "18.9988" "20.4162" "18.2849" "18.5567" "18.3488" "17.0627" "16.5722" "18.2998" "17.5249" "19.7072" "17.4990" "16.5874" "19.4395" "18.1110" "18.2257" "15.3179" "17.9705" "18.9046" "20.2306" "20.0673" "18.3859" "15.9220" "16.2362" "17.0162" "18.3036" "20.3833" "17.6128" "16.2928" "17.9446" "17.3082" "18.9005" "18.1329" "17.6474" "17.2031" "19.4672" "18.2004" "19.1612" "19.8774" "16.7514" "19.2588" "16.9920" "17.3574" "18.2136" "19.3449" "17.8411" "17.4581" "18.1605" "18.1578" "17.3792" "18.0128" "17.2804" "18.0019" "18.5882" "18.8390" "18.2641" "17.6452" "17.3358" "16.4393" "18.9280" "17.1055"
|
| 34 |
+
"S033" "Study_MET09_33" "Control" "Site_C" "72" "Male" "Other" "Hispanic" "15.8227" "18.3754" "17.4844" "17.7254" "15.0126" "17.8352" "19.9240" "17.5703" "17.2983" "15.8830" "19.3408" "18.0424" "17.8009" "18.6115" "18.3571" "17.2475" "17.7678" "20.2602" "17.2700" "19.3655" "16.6537" "19.1424" "20.6713" "19.1321" "17.7993" "16.5540" "18.1770" "19.7283" "17.3126" "19.4560" "16.6641" "18.2909" "20.0663" "15.8404" "16.9063" "18.8521" "18.4830" "19.8230" "17.3494" "18.0671" "19.4574" "18.0422" "17.8476" "17.5573" "16.9889" "17.9536" "16.7683" "18.4398" "18.6652" "18.5659" "19.8774" "17.1124" "19.2375" "18.6159" "17.0072" "19.3727" "18.9374" "17.9978" "16.3194" "17.9565" "16.8809" "18.0554" "16.8117" "17.3368" "15.1675" "16.9827" "18.2308" "17.8719" "18.9156" "20.1129" "18.2687" "18.0750" "15.1111" "21.6321" "17.4489" "19.4306" "18.2227" "19.8058" "17.9333" "19.2926" "16.1990" "17.0863" "16.8938" "18.6304" "17.4243" "16.1287" "18.2025" "19.5864" "18.1753" "18.0277" "17.5723" "18.5310" "16.8072" "18.2700" "18.4613" "17.7255" "16.4774" "16.5152" "16.7740" "16.5968" "17.8259" "17.4862" "16.5518" "18.2437" "20.0505" "19.1462" "16.5800" "16.4751" "17.2068" "19.7825" "20.6621" "18.5820" "16.8000" "18.4713" "20.7123" "17.8771" "16.9397" "20.7422" "17.8620" "17.3099" "19.5396" "18.6997" "18.8964" "15.6320" "17.1895" "18.7746" "17.1636" "17.8888" "16.7618" "19.3412" "17.0171" "17.3817" "18.7320" "19.9058" "17.8204" "18.4805" "16.9689" "17.3458" "17.9937" "21.1517" "19.5737" "16.9736" "15.5719" "18.7119" "18.8168" "17.4104" "19.3908" "17.5664" "17.2245" "17.5258" "17.4917" "20.0128" "19.7789" "15.5947" "18.2043" "19.6248" "19.4511" "17.7870" "19.9188" "16.7892" "16.1619" "18.5904" "17.6234" "17.2792" "16.8507" "15.8744" "20.4573" "18.1316" "17.7701" "19.4431" "17.7145" "17.1700" "17.8477" "19.9695" "15.5677" "18.9006" "16.0996" "17.0473" "17.8336" "17.6139"
|
| 35 |
+
"S034" "Study_MET09_34" "Control" "Site_B" "28" "Female" "White" "Non-Hispanic" "17.3064" "18.3441" "17.4040" "17.7583" "16.9067" "17.2863" "18.0506" "18.8993" "17.8308" "18.5497" "17.8456" "20.1983" "17.6150" "20.1876" "19.0156" "17.1801" "16.5616" "19.6920" "16.9387" "18.2905" "19.4151" "17.4459" "19.0898" "17.6449" "19.1620" "17.8148" "19.1147" "19.0287" "16.4259" "18.1715" "19.2374" "18.2348" "16.6673" "18.2096" "18.1408" "19.7093" "17.6134" "17.6339" "16.3481" "17.3016" "19.1165" "17.2162" "19.6879" "18.1866" "16.3702" "17.4075" "15.8741" "16.4184" "18.9858" "17.7686" "19.3283" "17.4995" "17.9134" "16.7395" "18.0411" "20.3690" "17.4091" "17.3618" "16.9519" "16.6988" "17.9578" "20.4652" "17.2340" "16.7091" "19.2002" "18.8625" "17.3374" "18.9250" "19.8877" "18.0699" "19.1463" "18.1220" "18.2200" "18.5924" "18.0385" "18.3244" "16.4385" "16.8834" "15.3682" "18.7710" "16.5835" "19.1184" "18.4310" "15.5642" "19.0074" "16.2810" "18.0790" "18.8931" "17.8449" "17.7347" "19.1273" "18.6018" "17.4155" "18.2101" "18.5771" "15.8663" "16.9579" "17.1064" "17.0277" "16.8911" "17.2283" "17.2379" "17.6540" "17.6847" "17.9755" "19.1312" "19.0703" "14.8865" "17.4138" "19.1238" "17.7459" "18.6234" "18.5464" "17.9911" "18.9359" "16.8742" "19.2668" "18.0969" "14.9465" "17.8442" "20.0256" "19.9102" "18.8976" "18.1211" "18.1415" "18.0710" "17.1218" "18.2094" "17.7119" "16.7982" "17.3166" "18.9598" "18.0382" "18.1053" "19.3444" "17.8808" "17.4472" "17.8518" "18.6612" "19.0065" "19.3577" "15.1374" "16.4855" "17.9059" "18.8891" "17.9494" "17.4027" "18.0997" "17.2831" "18.2340" "17.9509" "17.9473" "18.5550" "18.7027" "17.9286" "18.1170" "18.9977" "18.5619" "16.6048" "18.0493" "18.6170" "17.3346" "17.6990" "15.1196" "18.8089" "17.2931" "19.2909" "17.0719" "17.6099" "18.5812" "18.8253" "16.6201" "17.5447" "18.9178" "17.9240" "18.1418" "17.7123" "17.4572" "18.1976" "16.8925"
|
| 36 |
+
"S035" "Study_MET09_35" "Case" "Site_D" "68" "Male" "White" "Non-Hispanic" "19.2131" "18.0696" "16.5771" "17.6801" "18.6112" "18.8824" "19.5100" "18.5874" "18.8113" "17.5441" "17.7706" "18.0535" "17.7093" "17.3497" "17.6754" "16.5252" "17.2172" "18.2959" "16.6681" "19.9096" "17.7274" "17.9798" "18.9195" "17.4093" "20.3343" "18.6757" "18.9513" "19.1779" "16.5076" "20.1295" "16.0485" "15.7245" "17.9257" "19.5819" "17.0690" "18.0697" "17.5365" "20.8286" "17.5550" "18.4382" "18.7947" "15.8236" "17.0883" "16.0472" "18.3978" "20.2344" "17.5355" "15.6772" "17.2992" "17.0391" "18.2578" "19.3323" "17.4330" "17.1716" "17.3969" "19.6585" "17.8666" "17.2325" "17.5772" "18.6681" "18.2608" "17.4648" "19.5735" "18.6151" "18.9436" "18.3821" "17.5172" "17.4661" "19.6885" "16.7769" "18.9512" "19.1315" "18.1697" "18.6288" "18.9225" "18.9843" "19.2471" "16.6199" "18.5108" "18.5032" "16.3812" "15.6240" "16.8811" "17.8075" "18.0137" "18.2592" "18.2283" "18.8684" "18.7181" "16.2940" "18.0629" "20.1870" "17.3810" "18.6128" "18.2154" "18.8219" "16.3273" "18.2796" "17.0651" "17.6865" "19.0583" "18.9082" "18.2814" "18.6934" "18.2399" "18.6186" "19.2249" "18.8666" "17.6595" "19.0107" "18.8468" "17.1056" "18.9382" "18.8420" "18.4520" "17.4583" "17.4347" "16.7068" "15.8336" "17.8757" "18.2791" "18.4933" "18.0510" "17.4990" "17.8536" "17.6792" "17.2882" "19.7673" "17.6707" "17.9245" "15.1520" "18.4203" "20.4190" "18.0725" "19.6326" "17.6393" "17.2673" "19.1177" "19.0186" "17.3463" "18.7635" "16.4379" "17.9432" "17.6157" "16.9420" "19.1147" "17.1872" "18.8841" "17.6062" "14.0219" "18.9782" "16.4027" "18.6863" "18.5035" "19.2914" "17.5018" "17.2554" "17.5963" "14.1198" "16.5483" "17.8204" "16.4342" "18.8270" "20.7558" "17.0559" "17.5756" "18.4336" "18.5466" "18.2368" "18.1641" "19.3652" "15.7791" "19.0057" "18.7992" "17.2155" "19.9086" "18.0318" "15.8131" "15.7798" "19.1037"
|
| 37 |
+
"S036" "Study_MET09_36" "Control" "Site_C" "28" "Female" "White" "Hispanic" "18.8068" "19.9800" "19.8043" "18.1936" "17.3712" "18.7213" "17.2418" "18.2765" "17.5695" "16.5740" "18.4434" "16.5941" "17.5998" "19.7073" "17.1723" "19.4964" "17.9310" "19.6212" "17.2425" "18.2836" "17.2682" "17.9385" "20.5090" "19.0483" "18.8059" "16.3436" "22.1099" "19.9873" "17.3501" "17.5353" "20.2911" "16.1985" "18.0835" "15.9774" "18.3960" "17.3481" "17.8938" "19.1471" "19.3554" "17.7153" "20.2551" "17.1511" "18.5873" "18.6620" "15.3097" "19.1072" "16.0251" "17.0304" "18.5740" "17.1758" "18.3849" "18.3790" "17.4330" "18.0375" "16.2618" "17.4002" "18.9369" "19.0663" "15.2890" "15.5980" "17.2461" "18.6245" "19.5574" "17.9396" "19.1237" "18.2646" "17.4211" "19.0847" "16.9271" "17.8841" "17.7705" "18.5189" "16.4329" "19.9306" "20.3951" "19.7949" "17.1168" "18.7911" "16.5581" "18.1301" "18.1805" "18.0779" "18.4387" "19.1882" "20.3025" "17.7138" "18.7383" "18.8673" "17.3803" "17.7923" "17.9205" "19.1431" "15.3739" "19.6956" "18.7162" "15.7812" "17.7185" "17.5895" "15.3612" "17.5982" "14.9279" "17.8300" "16.5526" "17.3980" "19.2294" "19.1981" "17.4295" "17.3840" "16.5379" "17.2204" "19.2520" "16.9734" "18.2520" "20.4337" "19.5386" "19.3753" "20.4222" "18.6595" "17.2741" "18.2593" "19.6240" "18.6693" "17.4883" "18.5407" "18.7851" "17.2597" "17.5415" "19.9691" "15.4993" "15.4616" "17.9102" "17.1590" "19.2465" "17.1464" "16.4595" "17.4545" "17.0910" "16.0821" "18.7748" "17.6675" "20.3880" "17.4067" "17.1945" "18.9149" "19.5349" "17.8960" "18.6986" "16.5492" "17.9067" "19.0793" "19.1650" "19.4791" "17.2362" "18.5574" "17.8723" "17.0204" "17.4392" "18.3813" "17.1637" "19.5671" "16.3997" "20.1650" "18.1958" "19.0607" "18.4052" "16.6167" "19.8979" "18.9636" "14.7007" "20.2951" "16.8761" "17.8042" "15.7801" "18.8961" "15.5842" "18.7559" "19.1506" "18.7407" "16.8606" "19.0454"
|
| 38 |
+
"S037" "Study_MET09_37" "Control" "Site_B" "49" "Male" "White" "Non-Hispanic" "18.0630" "18.0045" "17.8632" "17.1225" "17.4822" "18.5750" "19.5322" "18.1455" "17.2417" "17.7703" "18.6204" "17.2500" "17.2201" "18.7468" "18.7452" "19.0187" "17.6151" "18.8734" "18.2742" "18.8942" "16.6557" "18.1733" "17.9673" "17.6672" "18.2082" "17.3198" "20.6068" "19.3176" "15.5131" "19.3103" "17.1373" "16.1293" "19.5283" "18.1661" "18.5722" "19.6942" "16.9163" "18.3634" "18.1858" "16.8178" "18.2103" "18.4033" "18.9760" "18.3726" "18.0234" "16.1460" "17.7080" "17.5008" "19.0382" "17.0547" "18.9648" "17.7982" "16.2454" "17.2828" "16.5951" "19.2553" "19.0266" "16.5775" "17.2653" "20.1238" "16.2383" "19.2274" "16.1555" "20.0212" "17.2410" "16.6370" "16.1258" "17.6219" "20.2638" "18.9911" "17.3120" "17.6916" "15.9677" "18.8856" "17.1982" "18.6082" "20.1444" "18.4652" "17.6722" "20.1950" "18.0579" "16.9415" "16.0200" "19.4700" "16.9795" "18.7470" "16.9939" "19.2466" "15.7465" "17.6918" "19.2994" "18.5610" "16.6644" "18.2932" "19.1634" "16.1194" "16.9757" "17.5159" "15.8074" "17.3451" "16.1278" "20.5216" "18.1984" "18.8543" "17.9308" "18.9376" "18.5870" "18.7135" "17.1838" "16.9839" "21.2894" "16.9365" "18.2375" "17.5333" "20.8986" "18.6327" "16.6625" "17.1164" "17.7322" "17.6699" "17.2705" "17.5616" "18.8055" "16.6381" "18.4117" "17.0536" "18.1919" "18.8351" "16.4856" "17.8023" "16.4879" "14.8587" "19.8104" "18.7993" "18.6209" "17.3418" "16.6905" "17.9002" "18.7775" "17.3462" "18.1254" "14.0627" "17.1705" "18.5816" "19.0250" "18.3128" "18.0394" "16.9892" "18.6045" "16.2962" "17.1380" "17.2913" "17.4894" "18.3947" "19.5463" "18.6357" "19.1193" "20.3778" "18.9910" "17.2071" "17.8755" "18.6769" "18.4035" "16.3367" "18.6133" "15.6620" "16.7686" "19.2224" "17.6422" "18.3058" "16.7886" "15.4548" "18.5684" "17.0331" "16.6950" "20.3696" "16.5007" "16.9383" "19.4514" "18.6943"
|
| 39 |
+
"S038" "Study_MET09_38" "Control" "Site_D" "62" "Female" "White" "Hispanic" "17.7417" "18.6785" "15.7444" "19.0944" "17.3211" "17.4754" "19.2680" "18.9191" "19.2134" "18.4718" "17.2441" "19.0441" "18.0779" "17.7801" "17.0469" "16.8058" "17.8638" "17.9091" "18.4821" "19.6927" "17.5476" "19.9266" "17.5575" "18.4023" "19.1418" "16.3111" "17.8119" "16.7153" "16.6949" "19.7789" "17.8430" "19.2520" "18.1398" "17.5574" "20.2895" "18.1634" "17.1663" "18.0402" "18.3818" "15.9418" "17.5757" "19.7946" "19.7266" "18.9809" "19.7120" "18.5021" "15.3129" "16.5011" "16.3233" "17.2943" "18.3703" "18.3135" "18.7452" "17.4280" "18.9624" "18.0118" "18.0866" "16.9578" "17.8901" "17.7941" "18.5330" "19.4894" "18.0234" "16.8438" "17.1424" "18.3092" "17.5758" "17.6831" "17.4712" "17.7513" "19.2470" "16.1624" "17.3170" "17.6836" "19.3247" "16.3293" "20.4376" "16.7998" "17.6621" "18.3445" "16.8244" "17.2699" "19.4585" "18.9442" "17.3819" "17.7679" "19.0841" "19.5805" "18.1999" "17.8446" "17.8272" "18.8286" "18.6103" "19.4153" "17.9179" "17.5656" "16.4016" "18.7855" "18.3500" "18.5372" "16.6666" "18.6260" "18.3470" "20.1454" "17.9235" "19.5065" "18.5912" "17.6020" "17.9456" "18.1101" "19.4794" "17.3359" "19.8920" "18.0753" "18.7688" "17.8582" "18.6762" "17.6584" "18.5221" "18.0359" "18.0870" "18.4751" "16.8458" "18.1224" "17.8032" "17.2130" "17.6866" "19.3600" "17.5583" "17.3546" "17.0885" "17.7712" "19.4030" "16.6661" "19.3520" "16.9951" "15.8841" "19.1778" "17.2438" "19.2202" "19.6340" "18.2772" "17.3607" "19.4973" "16.5658" "16.7984" "15.7442" "17.3603" "17.6201" "19.0709" "18.5973" "18.6513" "20.0572" "18.9684" "19.8381" "16.5455" "17.8227" "18.7150" "17.4225" "16.7315" "18.4938" "19.0877" "18.7950" "16.7056" "17.3059" "17.1543" "18.8993" "18.4485" "19.2472" "17.8200" "17.8595" "17.5532" "20.0648" "18.4041" "17.5582" "19.0233" "18.0132" "16.8832" "19.1340" "17.9809"
|
| 40 |
+
"S039" "Study_MET09_39" "Control" "Site_B" "67" "Male" "White" "Hispanic" "17.2427" "18.9482" "18.0904" "17.6398" "18.2816" "19.1210" "17.1838" "17.8065" "16.1398" "18.1961" "18.6830" "17.1415" "17.7349" "18.1201" "18.8947" "16.7427" "18.8475" "20.4881" "18.6620" "20.4222" "19.7010" "18.8466" "19.5905" "17.6282" "17.4919" "17.5323" "18.1499" "19.2359" "15.4575" "17.8746" "16.9533" "18.4221" "18.0759" "17.4739" "18.8318" "18.3738" "18.4883" "19.3054" "19.2091" "17.0227" "19.3185" "17.5816" "16.8349" "17.7998" "17.5775" "17.1039" "17.6944" "15.5890" "19.0898" "20.9713" "17.9525" "17.8801" "18.2349" "17.5963" "17.1273" "19.4715" "17.3878" "18.9380" "16.7178" "17.0051" "18.3330" "18.5232" "19.3373" "17.9999" "16.5559" "18.4686" "16.6666" "17.9820" "16.8595" "17.5228" "18.2702" "18.5406" "17.6560" "19.7054" "17.1755" "18.5205" "16.8703" "17.2706" "18.0897" "19.6991" "17.1063" "17.5955" "16.6946" "16.7545" "18.7010" "16.5143" "21.0749" "16.8236" "18.0866" "18.6673" "16.1964" "17.8073" "16.8950" "20.7265" "19.7183" "15.7814" "17.5837" "17.8940" "16.1273" "17.6183" "18.1088" "18.6714" "16.1473" "18.2189" "19.8826" "18.5438" "18.4684" "17.3882" "16.1953" "18.2524" "17.4207" "17.1438" "18.3689" "19.3557" "20.8608" "17.2388" "18.2250" "18.8067" "20.3105" "15.3255" "20.8150" "18.6242" "17.4959" "17.9488" "17.6560" "17.2201" "18.3284" "19.1221" "18.3737" "15.8007" "18.3534" "18.8058" "18.3040" "17.9082" "18.0874" "18.0256" "18.0565" "19.0120" "19.3744" "19.6992" "20.0075" "18.5424" "17.8762" "17.8841" "18.6980" "19.2359" "18.2555" "16.5298" "16.9435" "18.4631" "16.8192" "19.2537" "16.5162" "19.2965" "19.5802" "17.0849" "19.9432" "17.2117" "17.5137" "19.3091" "17.9921" "16.3560" "19.4059" "17.9573" "17.9054" "18.6926" "18.4334" "18.2368" "17.6256" "17.3590" "16.9822" "17.0667" "17.8486" "19.4977" "15.5436" "19.4192" "18.6322" "16.7226" "16.6210" "17.6028"
|
| 41 |
+
"S040" "Study_MET09_40" "Control" "Site_A" "53" "Female" "Asian" "Hispanic" "17.7107" "18.4942" "16.7079" "17.9513" "19.5924" "19.9214" "17.3835" "19.5039" "17.9477" "19.1305" "18.3478" "18.5856" "18.1152" "16.9238" "18.2417" "17.2080" "19.9928" "19.7345" "17.0572" "19.9617" "18.3456" "18.2822" "18.3896" "17.3418" "20.4409" "17.7215" "16.8487" "19.2423" "17.0929" "18.7324" "15.4853" "18.9220" "16.3872" "18.0869" "17.1497" "17.6618" "17.1919" "17.5644" "17.1816" "17.2545" "17.1871" "17.5710" "17.4673" "17.6145" "19.4326" "18.4490" "16.1197" "17.1721" "18.8172" "18.5558" "16.7942" "19.5002" "19.4365" "15.4753" "16.5548" "18.1090" "16.3426" "16.5446" "18.5355" "18.0031" "16.3371" "19.2136" "17.4780" "18.1010" "15.2374" "18.8913" "16.4505" "17.2308" "20.3649" "19.4492" "19.1679" "16.7444" "19.1985" "18.1194" "18.1568" "17.3013" "18.6083" "18.9591" "19.7320" "16.9652" "15.4891" "15.3947" "16.6881" "18.6454" "17.8943" "17.2789" "18.6872" "16.0342" "16.2670" "17.0295" "16.4876" "21.1876" "17.8520" "20.0130" "17.3734" "18.3495" "17.2534" "17.3836" "19.8384" "17.4587" "17.5843" "17.0882" "18.5312" "19.3629" "19.5152" "17.9039" "18.4854" "18.4261" "19.3825" "18.6709" "16.9992" "18.1651" "19.6458" "18.3510" "19.3698" "16.9313" "17.3510" "17.3748" "17.1140" "17.6777" "17.3024" "20.0806" "15.5227" "19.0694" "17.0215" "17.9156" "18.4450" "17.5999" "20.9175" "16.9676" "17.2238" "18.5996" "18.4412" "17.8374" "17.8473" "19.0204" "15.7757" "17.4906" "18.9109" "19.6460" "18.9890" "17.2105" "18.5415" "18.1104" "18.4200" "17.7892" "18.8671" "18.6021" "16.8456" "15.6115" "18.8825" "19.1051" "19.6151" "15.6193" "18.7887" "17.9910" "18.8812" "18.1892" "14.3470" "17.9156" "18.1806" "16.1741" "18.5871" "17.2441" "18.5357" "17.8358" "18.9275" "16.5083" "19.9033" "16.7283" "17.9338" "15.5117" "20.6662" "15.9405" "19.4488" "19.2924" "17.9946" "17.8848" "19.1046" "16.5378"
|
| 42 |
+
"S041" "Study_MET09_41" "Case" "Site_C" "77" "Male" "White" "Non-Hispanic" "18.5562" "18.2008" "18.4031" "17.5517" "15.4013" "18.2001" "17.6485" "18.6186" "17.9897" "17.3522" "18.5162" "18.1738" "17.5429" "15.9573" "20.4843" "17.4605" "17.7563" "17.4039" "19.0260" "17.4739" "18.3982" "19.0485" "19.3456" "18.3208" "17.7366" "17.4076" "18.7008" "22.5955" "16.9364" "17.1743" "18.2234" "16.1436" "19.8169" "18.7078" "17.7746" "17.5771" "14.7942" "17.9408" "16.2051" "17.0023" "21.6932" "16.8047" "18.8424" "17.5800" "17.1751" "16.8141" "17.0481" "11.6140" "17.9111" "18.8279" "17.3276" "18.0092" "17.8083" "16.9309" "16.4118" "18.8682" "18.0499" "16.9248" "17.6716" "18.5832" "17.6332" "19.7386" "18.5358" "18.1837" "16.5158" "17.6130" "18.5461" "20.1856" "17.5166" "17.5412" "19.6110" "17.2884" "19.4661" "18.2354" "18.4232" "18.0893" "18.0606" "16.4850" "18.2528" "19.6960" "16.3552" "20.1565" "17.7630" "18.3447" "17.6011" "17.7715" "18.0674" "19.2445" "17.1957" "18.3202" "18.2550" "19.2104" "18.8483" "18.6106" "18.3624" "15.6365" "17.1882" "16.2332" "15.6260" "17.3743" "17.8699" "19.3470" "19.1151" "19.4573" "18.3326" "19.5436" "18.8440" "16.7521" "16.9994" "20.2192" "19.0903" "18.0936" "17.1298" "19.2908" "16.8931" "19.1263" "17.5582" "15.8644" "18.1961" "14.9963" "17.8506" "18.0830" "19.1916" "15.2148" "17.7748" "17.7578" "18.4510" "20.1340" "17.7099" "19.0272" "19.0085" "17.9105" "18.9984" "18.9685" "17.7490" "17.5290" "18.0642" "19.4109" "17.8724" "17.8673" "17.4092" "17.4917" "16.2195" "19.9726" "18.6522" "18.4481" "17.0175" "18.2117" "18.2815" "15.1988" "17.7773" "16.6219" "18.2125" "17.0836" "17.5202" "17.9686" "17.1072" "21.5266" "14.7426" "19.1303" "18.1297" "18.6723" "17.3641" "19.2011" "17.8938" "14.9451" "18.1608" "17.0961" "15.6730" "20.1184" "18.6673" "16.7307" "18.9670" "19.3471" "15.4744" "19.9203" "16.9375" "17.7570" "15.0192" "18.4595"
|
| 43 |
+
"S042" "Study_MET09_42" "Case" "Site_D" "72" "Female" "Other" "Non-Hispanic" "17.8700" "15.6593" "16.8247" "16.6399" "17.6550" "18.7814" "17.7312" "17.3675" "20.1659" "17.9792" "18.2025" "17.5452" "17.4062" "17.2588" "17.8819" "19.0359" "21.4038" "17.2600" "17.3478" "18.4841" "17.6374" "18.9443" "19.6850" "18.4222" "16.4474" "17.8045" "14.4476" "18.5588" "16.8965" "18.1540" "15.5549" "16.7527" "18.2032" "21.1220" "17.6130" "17.1296" "18.0195" "17.7266" "18.1415" "16.9728" "18.0824" "16.3270" "17.4382" "17.3063" "18.0076" "17.0195" "16.7820" "16.6284" "17.8898" "17.7725" "17.1343" "18.8798" "19.6763" "16.7681" "17.3112" "19.1178" "18.6322" "17.6100" "18.2392" "19.0717" "18.5559" "18.8652" "19.7367" "17.0658" "17.7613" "17.3895" "16.8374" "17.2866" "19.1439" "17.1152" "18.2853" "17.8344" "18.6928" "20.7410" "17.0596" "16.8874" "18.5163" "18.2332" "17.9672" "20.1393" "15.9071" "18.9977" "16.3688" "18.6287" "19.2952" "18.8011" "18.6348" "17.6270" "17.5007" "17.2523" "17.7720" "21.0314" "18.2347" "17.4021" "18.2412" "18.4331" "17.3974" "17.1330" "18.0956" "18.8454" "16.9056" "17.9715" "15.5388" "17.8440" "18.3490" "20.2290" "20.1287" "20.0604" "18.6451" "17.5233" "18.8628" "16.3525" "20.2328" "18.0311" "19.4893" "15.7938" "18.8984" "18.1170" "16.7740" "18.3704" "18.3600" "18.8338" "18.7189" "19.2932" "19.3690" "18.8096" "17.2953" "20.8735" "18.2045" "20.7810" "17.2763" "17.0062" "17.5958" "17.7689" "17.2816" "18.8039" "16.1148" "18.3862" "18.4794" "18.9244" "17.5883" "15.3247" "17.7756" "18.4214" "18.9920" "19.2033" "18.3133" "18.7534" "17.3995" "16.0634" "19.0691" "20.5946" "17.7802" "17.4518" "20.2242" "19.1720" "18.7874" "18.9789" "15.4836" "16.3854" "18.5077" "15.7855" "19.0453" "19.7642" "19.3700" "19.9156" "17.4250" "19.9528" "19.1427" "18.7591" "18.0430" "14.6048" "20.0883" "17.4054" "17.6880" "18.1310" "18.4682" "17.0957" "15.1356" "17.5073"
|
| 44 |
+
"S043" "Study_MET09_43" "Control" "Site_D" "29" "Female" "Other" "Hispanic" "17.5778" "18.1914" "17.8178" "17.4473" "18.1532" "18.7613" "19.3293" "16.6800" "18.1950" "20.4635" "18.3200" "16.7609" "19.0380" "16.9267" "16.7480" "18.4196" "18.9414" "19.9964" "17.1625" "17.8098" "18.8631" "19.5817" "18.5430" "18.2568" "17.7503" "16.9126" "19.2919" "18.1752" "16.7512" "18.8421" "17.6942" "15.8970" "17.3290" "17.7352" "17.9179" "19.4279" "17.2458" "19.3889" "17.7365" "16.7810" "18.2122" "17.6043" "17.7001" "18.0852" "17.0065" "19.8248" "15.8956" "17.2383" "18.0319" "20.4319" "17.3695" "17.3643" "17.2987" "15.9645" "18.1036" "19.4647" "18.3892" "17.8188" "18.6548" "16.9526" "17.4310" "19.6070" "20.2252" "17.3953" "17.5585" "17.8749" "16.0338" "18.3005" "17.8039" "17.8621" "19.0492" "17.2976" "16.1402" "19.9168" "17.7398" "18.7437" "18.3143" "16.9128" "18.5410" "17.9468" "17.5078" "17.3085" "16.2315" "18.4612" "17.3170" "17.0839" "18.2435" "18.7573" "17.7775" "17.6336" "18.3146" "19.0393" "19.7852" "17.9344" "18.3247" "17.8595" "16.9258" "19.0255" "17.3836" "17.7241" "17.2429" "19.4691" "16.7006" "18.2339" "18.6231" "18.7055" "18.7126" "18.7457" "18.0283" "17.7832" "17.8006" "17.5216" "16.6431" "16.7952" "20.9826" "16.9577" "19.2356" "18.6209" "18.1202" "16.3975" "16.2701" "16.3607" "16.7671" "17.5356" "17.4176" "17.0033" "16.4583" "17.6510" "18.0419" "16.1278" "17.8395" "16.7206" "19.2249" "19.6664" "17.3956" "17.0368" "17.2532" "18.1340" "17.0610" "17.7051" "17.4639" "17.3792" "18.6084" "17.2430" "17.8813" "19.7403" "19.9796" "17.2840" "16.9480" "17.1134" "18.0287" "17.5434" "19.1633" "19.0119" "19.8115" "17.4235" "17.8650" "18.2074" "17.1988" "17.1891" "18.3717" "16.9643" "19.2069" "16.9195" "17.3854" "19.9020" "17.4922" "20.7556" "17.7060" "19.1854" "17.8110" "16.3646" "18.7350" "16.5654" "17.8889" "16.7381" "17.3851" "16.5715" "16.3665" "18.4525"
|
| 45 |
+
"S044" "Study_MET09_44" "Control" "Site_B" "48" "Female" "Asian" "Non-Hispanic" "18.1224" "17.9667" "17.5816" "16.1976" "18.3246" "19.5907" "18.8729" "19.4558" "17.6506" "16.8458" "19.0315" "17.2075" "19.4539" "17.9773" "18.1167" "16.6970" "17.8511" "18.5721" "18.3151" "16.4194" "18.0265" "18.5651" "19.5135" "18.0053" "18.5856" "16.9995" "16.7009" "19.0197" "17.1798" "17.7479" "17.3148" "17.2692" "20.4470" "17.6252" "19.1111" "16.4369" "17.9186" "18.1087" "17.4206" "20.0000" "17.6718" "18.8442" "17.3777" "17.4978" "16.1485" "17.1589" "16.5577" "16.8690" "19.8055" "17.3601" "15.4948" "18.6461" "17.5505" "16.3532" "17.1852" "19.7279" "18.9442" "17.5730" "16.4935" "17.2680" "20.3994" "17.2806" "18.2115" "17.9423" "18.2992" "19.3590" "17.5330" "16.8289" "18.5311" "18.7203" "18.5667" "18.7217" "16.4390" "16.5386" "19.1199" "17.8329" "16.8649" "17.5588" "19.0326" "18.1461" "18.2634" "16.1239" "15.3051" "18.8486" "18.6497" "17.9023" "17.4660" "18.9597" "18.2436" "18.4890" "17.6812" "19.7458" "18.7619" "18.2249" "17.5228" "17.0138" "18.5802" "18.6583" "16.5574" "17.9321" "18.9084" "19.5247" "18.8125" "16.6691" "16.6348" "18.4082" "17.6109" "16.4706" "18.4647" "18.7225" "16.5942" "18.9894" "19.3763" "16.4832" "17.7142" "20.2366" "17.4773" "17.9833" "16.6572" "18.7663" "18.0591" "20.1671" "17.3418" "18.3528" "17.4207" "19.5083" "17.1475" "19.8938" "18.0327" "18.2922" "16.8321" "17.3807" "19.6851" "17.9283" "18.8800" "17.9338" "15.9898" "16.8140" "19.3060" "19.1663" "19.1857" "16.6488" "16.7604" "17.2422" "16.4945" "18.2080" "16.9844" "18.1127" "19.0522" "18.2327" "17.5243" "16.0055" "18.7487" "19.4785" "18.4424" "16.6762" "18.0116" "19.9485" "16.8999" "18.0021" "18.8114" "18.7904" "17.7838" "17.1356" "17.2113" "16.5130" "18.4904" "16.0746" "18.0875" "19.3448" "15.9565" "18.1887" "19.2699" "17.8407" "16.9560" "16.9724" "17.3607" "18.3943" "18.0944" "19.0841"
|
| 46 |
+
"S045" "Study_MET09_45" "Control" "Site_A" "58" "Female" "Asian" "Hispanic" "17.1155" "19.0888" "16.4126" "16.7505" "19.4456" "18.7090" "19.9099" "17.3860" "19.6975" "20.0246" "16.4969" "17.5396" "18.4073" "17.0932" "16.7447" "16.8032" "21.3383" "18.6599" "19.3097" "20.6888" "17.1525" "18.0834" "18.9466" "17.3139" "19.9860" "19.3085" "17.0739" "17.9867" "17.8460" "18.1386" "17.3145" "18.8825" "16.7649" "17.8057" "20.3381" "17.5286" "15.8858" "17.6987" "17.7466" "19.5629" "16.6690" "17.2824" "17.6301" "18.7866" "20.6499" "19.1490" "16.6015" "18.2120" "19.1902" "17.5771" "17.3942" "17.6662" "20.8227" "17.0140" "16.0583" "19.5502" "17.4644" "18.4507" "20.3869" "18.2144" "17.9674" "18.5892" "18.2852" "16.4395" "16.7149" "17.7721" "16.1786" "18.2361" "17.2331" "17.5075" "21.4825" "16.7740" "19.9795" "19.2860" "17.2639" "17.9970" "18.6237" "17.2142" "18.7343" "20.2577" "19.3086" "17.7577" "18.2293" "18.2539" "17.8275" "16.8813" "18.5950" "17.8641" "17.6908" "17.9895" "17.9499" "18.9928" "18.0116" "17.3297" "19.5867" "16.4671" "16.8204" "14.6921" "18.6070" "20.2577" "18.9890" "17.3031" "18.9418" "20.2823" "16.3774" "16.3038" "18.4044" "17.4830" "17.5018" "16.8744" "17.2872" "18.7411" "19.4182" "18.9346" "18.1956" "17.6303" "15.8805" "19.0292" "16.7490" "17.6071" "17.4637" "16.7627" "18.4205" "19.0495" "16.4633" "18.2354" "17.7202" "19.5851" "19.1727" "18.3033" "17.1727" "17.6058" "17.0171" "18.0444" "17.9008" "17.7868" "18.5163" "17.8102" "16.0034" "17.7599" "15.8734" "16.6970" "17.7281" "18.3916" "17.6195" "20.4822" "17.9817" "16.4583" "17.2075" "16.0266" "19.1584" "17.6539" "21.1551" "17.0115" "18.8883" "19.1605" "20.0296" "17.7166" "17.6239" "18.1683" "17.6006" "16.4894" "19.3990" "16.9393" "18.9669" "19.5076" "16.9421" "17.0988" "21.0237" "17.6927" "18.8495" "14.9413" "19.8585" "17.9684" "17.9870" "17.9970" "18.2223" "16.5257" "20.6835" "18.2642"
|
| 47 |
+
"S046" "Study_MET09_46" "Case" "Site_A" "35" "Female" "White" "Non-Hispanic" "17.0359" "18.6425" "16.4021" "19.2149" "16.9672" "19.1716" "16.0773" "18.4449" "18.0105" "17.9576" "17.5641" "17.0594" "17.5766" "16.4266" "18.1612" "16.4934" "18.2968" "18.6869" "20.3014" "18.1249" "16.6657" "19.4465" "16.7198" "16.7044" "17.5158" "17.6037" "16.7866" "18.4423" "16.5742" "18.1966" "15.4391" "17.5457" "16.8443" "20.5861" "19.0381" "17.9791" "18.8279" "17.7526" "17.6870" "16.5719" "17.4478" "16.3830" "19.3739" "16.8597" "19.3301" "18.7712" "16.2888" "15.6416" "17.8034" "17.2879" "19.5152" "18.4842" "19.0369" "15.6931" "17.4690" "17.2819" "16.6407" "16.4786" "17.9365" "19.1692" "19.5836" "18.6545" "17.9271" "18.8113" "17.8744" "18.4593" "18.8263" "17.3989" "16.5687" "17.2075" "20.1405" "16.8439" "18.5698" "17.6213" "19.0175" "14.9264" "17.7240" "19.4998" "19.7243" "20.0171" "18.0776" "16.1974" "18.4863" "17.2528" "16.7952" "16.3086" "16.1941" "18.0140" "17.3249" "16.8304" "18.5367" "18.9041" "19.2244" "17.7807" "18.4391" "19.3997" "17.6259" "15.8547" "18.1863" "19.3762" "17.1925" "16.9821" "15.5099" "18.3999" "17.2786" "17.0249" "17.9769" "18.9576" "17.7315" "19.6138" "17.8514" "17.9558" "19.2182" "16.4263" "17.9958" "16.6970" "17.7332" "18.6733" "17.8954" "19.4383" "16.8116" "17.5238" "18.6492" "19.4046" "20.1574" "18.7944" "18.3347" "19.7137" "20.7825" "20.7378" "17.1681" "17.9466" "19.4621" "17.3398" "17.1123" "17.4707" "17.3006" "19.3233" "16.5259" "17.5743" "17.8415" "17.1117" "17.1156" "18.5525" "17.0945" "20.7083" "16.8236" "18.1798" "17.5173" "14.9649" "18.9116" "18.6877" "20.5640" "19.8854" "18.7154" "19.1484" "17.1781" "15.1205" "16.9746" "18.5526" "18.0184" "16.2183" "20.2601" "18.5744" "18.1072" "18.2781" "17.1869" "18.3755" "18.9977" "16.6349" "19.4808" "14.3022" "18.7762" "17.5789" "16.6727" "18.0439" "18.5895" "16.2576" "17.2217" "18.5461"
|
| 48 |
+
"S047" "Study_MET09_47" "Case" "Site_B" "46" "Female" "White" "Non-Hispanic" "19.1341" "18.4627" "18.7178" "18.9609" "17.1819" "18.2690" "18.3238" "18.8094" "14.4790" "16.5602" "20.1183" "19.1235" "17.3847" "16.9111" "17.6385" "17.4196" "16.6016" "19.3421" "18.2005" "19.5273" "16.8236" "18.4795" "17.9070" "18.2657" "18.7026" "16.7883" "15.7328" "18.3742" "17.2922" "17.6281" "15.5276" "16.6693" "18.7457" "17.2073" "18.4270" "17.6478" "15.2309" "19.5590" "18.1210" "16.4324" "20.4952" "14.8720" "16.6867" "17.0588" "17.4872" "18.6576" "19.7632" "16.1486" "19.0979" "17.7999" "19.2329" "15.7255" "17.1811" "16.4166" "17.7915" "18.2067" "17.9075" "18.1258" "15.6471" "18.0277" "16.5058" "19.1852" "17.5113" "16.7932" "17.4803" "17.4599" "16.5567" "18.3355" "19.0483" "18.4406" "19.9275" "17.9436" "16.9188" "17.0802" "18.2486" "19.0636" "19.4747" "19.7140" "17.6636" "20.0350" "16.4272" "16.4064" "16.2713" "18.0364" "17.5216" "15.1341" "17.4621" "17.9502" "17.6835" "16.6060" "15.9239" "19.5079" "19.2322" "19.3467" "18.4479" "16.4965" "16.7679" "16.9100" "15.4577" "18.8476" "17.7891" "18.2442" "18.7497" "17.5271" "19.0005" "17.6391" "19.3180" "16.8545" "20.3873" "19.1505" "17.0945" "18.2674" "18.0397" "16.6415" "17.2770" "17.8165" "17.4168" "16.1797" "17.1173" "16.4214" "17.8016" "18.4812" "17.3299" "17.9400" "20.1641" "17.4031" "20.3762" "18.8938" "17.1402" "18.7642" "16.9410" "19.3995" "18.2759" "17.1922" "17.1965" "17.0109" "16.3634" "17.3253" "17.8730" "20.6855" "19.7107" "18.4461" "18.2436" "19.2062" "17.9456" "18.7522" "18.4893" "18.8012" "19.1175" "14.5074" "17.9164" "19.7500" "18.3301" "18.1971" "19.4566" "16.9080" "19.1130" "19.3925" "17.5219" "19.0701" "18.2921" "17.0233" "18.4587" "19.3780" "16.7066" "16.2293" "18.3970" "16.3467" "19.0386" "17.6076" "17.2319" "17.7826" "16.5961" "17.9592" "17.6742" "19.5763" "18.3833" "17.3330" "14.9495" "20.0388"
|
| 49 |
+
"S048" "Study_MET09_48" "Case" "Site_A" "46" "Male" "White" "Non-Hispanic" "16.5266" "17.6990" "16.4603" "18.2368" "18.5838" "18.2357" "16.2707" "18.8384" "20.1621" "18.4739" "17.6628" "18.6060" "19.8751" "15.0884" "18.6821" "17.3492" "20.5298" "16.6654" "19.6824" "17.3804" "18.6463" "18.9216" "17.1040" "17.1856" "18.1231" "16.4351" "14.9059" "17.3186" "17.6805" "21.1758" "18.4872" "17.6819" "17.1248" "19.9149" "21.4496" "18.3300" "16.6519" "18.4851" "16.6375" "16.7371" "18.4428" "18.6792" "18.7256" "16.4027" "19.5757" "18.9032" "16.3537" "15.1584" "18.0351" "18.1964" "17.1871" "17.9970" "20.0696" "17.9745" "19.8887" "18.3603" "16.9936" "16.1443" "17.9296" "17.0739" "16.7170" "18.4359" "18.8806" "17.1689" "17.7532" "17.3290" "15.7241" "17.0240" "20.1415" "15.9081" "21.2014" "17.7410" "18.8897" "17.3513" "18.8763" "13.4717" "19.3445" "17.9820" "17.3166" "18.1031" "18.1033" "16.6645" "17.0737" "18.3592" "18.3695" "16.6171" "16.8002" "18.5392" "16.9372" "16.5949" "18.5727" "18.4235" "18.3236" "20.0145" "18.4936" "16.5904" "17.9485" "16.4292" "17.8240" "17.2229" "18.1586" "17.8372" "18.3218" "17.0442" "17.5364" "18.2454" "18.3882" "18.6694" "15.6482" "16.6256" "17.7965" "19.2512" "19.2683" "17.7143" "18.4692" "15.8706" "17.7633" "19.0554" "16.9066" "17.9399" "18.1600" "17.8708" "18.2161" "19.4629" "17.1387" "17.9918" "16.4590" "19.8237" "19.3552" "18.4243" "16.7690" "17.7800" "18.8773" "15.8540" "16.9918" "18.4801" "17.5698" "18.6527" "17.5589" "18.2865" "19.1825" "16.3897" "15.8806" "19.2809" "16.3615" "20.4622" "19.4430" "18.8907" "18.0119" "15.1890" "17.9223" "18.1621" "17.8759" "18.5354" "19.4233" "18.2941" "19.3579" "18.8054" "15.4589" "18.4801" "18.5080" "16.1558" "21.1429" "18.9457" "18.4056" "17.9243" "17.2985" "18.3437" "18.1190" "16.0394" "18.3649" "16.2318" "20.4105" "18.5476" "17.7620" "19.9146" "18.5582" "18.6694" "17.4096" "16.1590"
|
src/statlens/data/examples/10_Continuous_limma_paired_or_repeated_synthetic.tsv
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"subject_id" "sample_id" "timepoint" "age" "sex" "race" "ethnicity" "prot_1" "prot_2" "prot_3" "prot_4" "prot_5" "prot_6" "prot_7" "prot_8" "prot_9" "prot_10" "prot_11" "prot_12" "prot_13" "prot_14" "prot_15" "prot_16" "prot_17" "prot_18" "prot_19" "prot_20" "prot_21" "prot_22" "prot_23" "prot_24" "prot_25" "prot_26" "prot_27" "prot_28" "prot_29" "prot_30" "prot_31" "prot_32" "prot_33" "prot_34" "prot_35" "prot_36" "prot_37" "prot_38" "prot_39" "prot_40" "prot_41" "prot_42" "prot_43" "prot_44" "prot_45" "prot_46" "prot_47" "prot_48" "prot_49" "prot_50" "prot_51" "prot_52" "prot_53" "prot_54" "prot_55" "prot_56" "prot_57" "prot_58" "prot_59" "prot_60" "prot_61" "prot_62" "prot_63" "prot_64" "prot_65" "prot_66" "prot_67" "prot_68" "prot_69" "prot_70" "prot_71" "prot_72" "prot_73" "prot_74" "prot_75" "prot_76" "prot_77" "prot_78" "prot_79" "prot_80" "prot_81" "prot_82" "prot_83" "prot_84" "prot_85" "prot_86" "prot_87" "prot_88" "prot_89" "prot_90" "prot_91" "prot_92" "prot_93" "prot_94" "prot_95" "prot_96" "prot_97" "prot_98" "prot_99" "prot_100" "prot_101" "prot_102" "prot_103" "prot_104" "prot_105" "prot_106" "prot_107" "prot_108" "prot_109" "prot_110" "prot_111" "prot_112" "prot_113" "prot_114" "prot_115" "prot_116" "prot_117" "prot_118" "prot_119" "prot_120" "prot_121" "prot_122" "prot_123" "prot_124" "prot_125" "prot_126" "prot_127" "prot_128" "prot_129" "prot_130" "prot_131" "prot_132" "prot_133" "prot_134" "prot_135" "prot_136" "prot_137" "prot_138" "prot_139" "prot_140" "prot_141" "prot_142" "prot_143" "prot_144" "prot_145" "prot_146" "prot_147" "prot_148" "prot_149" "prot_150" "prot_151" "prot_152" "prot_153" "prot_154" "prot_155" "prot_156" "prot_157" "prot_158" "prot_159" "prot_160" "prot_161" "prot_162" "prot_163" "prot_164" "prot_165" "prot_166" "prot_167" "prot_168" "prot_169" "prot_170" "prot_171" "prot_172" "prot_173" "prot_174" "prot_175" "prot_176" "prot_177" "prot_178" "prot_179" "prot_180" "prot_181" "prot_182" "prot_183" "prot_184" "prot_185" "prot_186" "prot_187" "prot_188" "prot_189" "prot_190" "prot_191" "prot_192" "prot_193" "prot_194" "prot_195" "prot_196" "prot_197" "prot_198" "prot_199" "prot_200" "prot_201" "prot_202" "prot_203" "prot_204" "prot_205" "prot_206" "prot_207" "prot_208" "prot_209" "prot_210" "prot_211" "prot_212" "prot_213" "prot_214" "prot_215" "prot_216" "prot_217" "prot_218" "prot_219" "prot_220"
|
| 2 |
+
"P001" "Study_PROT10_1" "Pre" "62" "Male" "Black" "Hispanic" "16.9912" "17.0202" "18.2091" "18.7410" "18.6917" "16.9900" "17.0448" "16.7555" "18.6636" "20.1217" "17.4390" "19.1245" "18.1190" "17.7241" "18.5834" "16.7194" "17.5995" "18.7720" "19.4209" "17.6760" "18.1858" "19.0834" "19.4715" "18.2508" "18.6714" "17.9343" "19.1033" "17.1464" "17.9585" "18.8015" "19.7214" "16.8696" "17.0532" "18.4897" "18.0644" "16.8220" "17.8147" "18.5823" "18.9871" "17.2110" "19.5089" "17.8354" "15.5767" "17.1372" "17.8635" "18.4977" "17.4993" "17.4913" "18.6706" "19.1435" "19.7226" "19.4671" "17.9883" "16.4139" "19.0814" "19.5490" "19.0680" "17.0881" "22.1138" "18.1110" "17.5813" "19.2648" "19.2826" "17.9107" "17.8057" "17.3012" "17.3706" "18.1470" "17.4431" "17.7622" "17.2801" "18.0789" "16.1918" "18.8283" "17.5625" "18.2025" "16.3456" "18.9508" "15.9623" "18.1549" "16.9274" "18.3090" "16.3490" "16.7994" "17.5565" "19.8535" "18.1938" "17.6003" "19.1371" "17.8800" "16.3087" "20.1554" "16.0430" "17.1498" "18.6146" "18.5245" "18.4158" "15.9519" "18.5307" "16.7209" "16.8399" "17.8335" "17.8443" "17.4933" "18.1612" "18.7055" "15.3243" "18.7390" "20.5139" "18.8893" "17.8758" "19.8562" "16.9762" "19.6935" "16.8836" "17.6419" "17.1517" "17.4772" "16.7602" "20.1752" "17.8618" "18.0447" "18.3043" "15.5013" "19.9945" "18.3204" "17.7866" "18.7061" "16.8764" "17.3187" "19.4882" "18.4852" "18.8994" "18.2052" "18.5493" "20.1760" "16.7614" "18.5364" "16.5754" "17.6651" "15.6294" "17.1566" "17.0213" "17.5506" "18.1478" "20.2801" "16.1075" "19.4812" "16.2132" "17.0620" "16.6509" "20.3219" "19.0207" "18.2380" "18.8629" "19.6099" "15.8812" "18.0118" "17.8396" "17.3161" "20.1223" "19.0892" "16.7848" "17.4558" "17.7383" "17.4776" "18.3959" "15.6360" "16.2694" "17.8055" "15.4571" "19.8419" "20.2521" "14.1784" "16.8259" "18.0052" "15.9919" "17.1301" "16.5122" "17.4667" "18.0547" "17.7451" "16.4805" "16.9263" "17.6807" "16.7540" "18.8244" "17.6153" "18.8011" "16.7422" "18.7772" "18.0482" "15.6782" "16.6523" "16.6912" "20.7320" "18.2592" "19.0772" "17.4921" "18.9317" "16.7450" "17.2991" "18.4834" "18.3983" "18.1390" "16.6771" "16.6390" "19.4804" "18.0179" "17.4444" "19.4373" "18.7275" "19.9037" "17.2959" "18.1182" "18.0663" "17.4961" "15.9702" "20.1855" "18.3893"
|
| 3 |
+
"P001" "Study_PROT10_2" "Post" "62" "Male" "Black" "Hispanic" "17.9515" "18.3156" "18.4959" "19.9166" "17.2162" "18.2237" "19.6461" "17.4732" "20.1322" "16.9775" "18.7702" "15.3847" "16.6876" "18.6525" "18.7337" "17.7914" "18.2893" "18.0660" "18.1167" "20.6477" "19.1608" "20.0314" "19.0243" "18.9187" "18.6167" "19.9753" "19.4044" "16.9110" "18.1651" "19.6004" "18.0637" "18.5582" "17.7028" "18.0630" "19.1478" "19.7922" "19.3695" "19.8074" "18.4217" "16.2047" "17.7894" "18.3812" "18.5154" "17.8216" "17.6803" "17.4606" "15.9317" "19.2898" "18.0991" "19.5386" "18.1148" "17.1000" "19.5686" "17.0470" "18.1131" "17.1207" "18.9617" "18.8203" "20.2330" "16.8718" "15.8758" "19.0046" "19.5401" "15.9974" "18.2348" "18.9103" "20.0220" "19.1079" "17.7888" "19.3232" "17.8390" "17.9278" "16.4766" "18.3659" "19.3888" "18.6432" "16.8033" "16.7371" "16.2927" "17.9082" "16.7722" "18.8449" "17.8895" "16.4069" "17.6233" "18.0038" "16.6091" "19.1973" "19.1356" "17.1541" "15.2362" "20.8992" "15.2813" "18.6142" "19.5722" "17.4050" "17.1777" "17.5645" "16.9746" "18.8778" "19.5866" "19.0217" "18.4145" "20.0981" "17.6799" "17.3930" "14.5206" "19.4347" "18.8256" "16.2892" "18.6229" "17.1492" "16.7105" "18.7080" "19.0181" "17.7937" "18.4778" "16.5797" "17.5738" "19.6944" "18.2836" "19.4995" "15.7015" "16.0455" "18.6523" "19.0343" "16.9138" "16.8827" "14.7168" "19.5828" "17.1129" "19.4518" "18.6821" "15.7978" "19.6548" "20.2695" "18.3805" "18.7301" "17.1552" "17.0346" "18.5243" "17.1771" "17.4537" "16.1062" "15.7589" "20.0331" "17.0171" "17.4772" "17.1173" "18.3690" "17.3443" "18.9739" "18.3356" "18.7195" "18.4245" "17.0107" "19.1435" "18.5134" "18.8050" "17.8515" "18.9037" "19.6388" "16.8374" "16.8274" "20.2072" "18.7855" "19.0663" "12.9378" "18.4493" "18.1081" "17.8754" "18.6026" "18.9825" "16.6107" "20.5075" "16.2568" "18.4725" "18.3222" "18.7872" "18.3043" "17.8435" "15.9239" "17.7102" "15.9074" "18.2435" "18.1881" "20.6894" "18.6359" "17.3613" "20.3195" "18.9135" "18.9494" "15.3771" "21.3695" "19.0545" "22.2420" "17.5219" "18.1762" "16.7954" "18.2624" "17.6036" "19.7384" "17.3525" "16.3810" "18.6696" "15.2862" "16.8540" "19.3481" "19.0770" "19.5805" "20.7080" "17.0940" "18.3908" "18.6228" "17.6196" "16.4169" "18.8254" "17.0821" "19.0592" "17.8266"
|
| 4 |
+
"P002" "Study_PROT10_3" "Pre" "57" "Male" "White" "Non-Hispanic" "18.4481" "14.2305" "17.5948" "19.5682" "19.0663" "16.8596" "17.1034" "17.2237" "16.3866" "16.7821" "18.1107" "17.4341" "18.9893" "18.4534" "18.2864" "14.7177" "17.2955" "17.9321" "16.8198" "19.8626" "18.6703" "17.8512" "17.7027" "18.6826" "18.8766" "16.7419" "19.1738" "16.7373" "17.5886" "20.8211" "18.7431" "15.8889" "19.6816" "17.5205" "19.0598" "20.1606" "19.0206" "18.0175" "18.9624" "17.0986" "20.2306" "16.4561" "16.1019" "17.2340" "18.0911" "17.6316" "16.7061" "17.7529" "17.0185" "19.0125" "19.2362" "18.0848" "17.6854" "19.2617" "19.4838" "17.0706" "16.5989" "20.7945" "20.3384" "19.2495" "17.3997" "20.1474" "16.7993" "16.3289" "17.4782" "18.8335" "20.0742" "18.2468" "18.4657" "17.0278" "18.4884" "16.2223" "19.8852" "17.3432" "17.8955" "15.3216" "17.0246" "15.8302" "16.1025" "18.0361" "19.3275" "19.1208" "16.3672" "20.3557" "18.3646" "20.1684" "18.0137" "18.1712" "17.7050" "16.9201" "16.8156" "18.5284" "17.2787" "19.5868" "16.6480" "19.7162" "17.9424" "17.1896" "17.8840" "19.1222" "18.1932" "18.1987" "17.9055" "20.7242" "18.1021" "17.8820" "17.0203" "17.0887" "18.5507" "17.0953" "17.8980" "18.5723" "17.3254" "19.2410" "17.1772" "15.9919" "17.8918" "18.2016" "17.4123" "19.1432" "19.6490" "18.5493" "16.6091" "17.4001" "17.7297" "15.9995" "18.8640" "17.3922" "17.3103" "17.4930" "18.1676" "16.9444" "19.2701" "17.8088" "17.3839" "17.8732" "18.3160" "17.9956" "16.2558" "19.4900" "15.3125" "17.3294" "17.1302" "13.9559" "17.2146" "19.3600" "18.6391" "18.6291" "18.8495" "16.8151" "15.1720" "17.9709" "18.3862" "20.5094" "17.5857" "19.0373" "17.3367" "16.0242" "19.1141" "19.2409" "17.7413" "16.3899" "16.9438" "16.6920" "17.1731" "18.5680" "17.8428" "16.6788" "16.0493" "17.8291" "17.3598" "17.5580" "20.0486" "19.3138" "17.3511" "16.1642" "16.0674" "19.6590" "17.0263" "16.8324" "17.5782" "17.4587" "18.1974" "18.1205" "16.8219" "19.7184" "19.6321" "19.1419" "17.3442" "16.8691" "17.0082" "19.4343" "16.4335" "17.5029" "18.9425" "19.9500" "16.9495" "18.6053" "16.7570" "15.8707" "17.2547" "18.5966" "18.3000" "16.3555" "16.8231" "18.1027" "16.5348" "20.3510" "18.0454" "18.1395" "18.8925" "19.6751" "17.1885" "17.8127" "19.0989" "17.7199" "17.9993" "16.4939" "20.5911" "15.7144"
|
| 5 |
+
"P002" "Study_PROT10_4" "Post" "57" "Male" "White" "Non-Hispanic" "16.5926" "15.9415" "18.5553" "17.6678" "18.3558" "19.0679" "20.0599" "17.6897" "18.8549" "17.6257" "20.7378" "15.7493" "15.0517" "18.4782" "19.1819" "18.1515" "16.0839" "17.8485" "17.5014" "19.0313" "18.8480" "18.7446" "17.4260" "18.8437" "18.5641" "18.5805" "19.0495" "17.6922" "17.9499" "20.6699" "15.2855" "18.3382" "19.9625" "16.7244" "16.0977" "18.0328" "16.5644" "21.0184" "18.1642" "16.7690" "17.6005" "16.1153" "18.1195" "16.7806" "19.4809" "17.0421" "16.4984" "16.9741" "16.7148" "18.9046" "18.8175" "17.8397" "18.3343" "17.5602" "19.1886" "15.4973" "18.4553" "15.8944" "20.2059" "17.6460" "18.6339" "19.3066" "19.1163" "19.1621" "16.8492" "18.9996" "18.2132" "17.0585" "17.6261" "19.8455" "18.5757" "17.9249" "18.8326" "18.1777" "17.7892" "17.0342" "18.7090" "17.1688" "16.6670" "17.7549" "18.2131" "18.5502" "17.6582" "20.6264" "17.7358" "18.4679" "18.1542" "18.4047" "18.8230" "18.2133" "15.8497" "19.1217" "18.1671" "17.6653" "19.1893" "17.1472" "18.6689" "16.6034" "17.6926" "18.8410" "19.6644" "16.8540" "16.8682" "18.7739" "17.2615" "18.0074" "15.6306" "17.6551" "17.8528" "18.2344" "17.2715" "17.1155" "18.4360" "17.4825" "17.1905" "19.8487" "18.8981" "20.1494" "20.0458" "21.5554" "20.6268" "19.2518" "16.5269" "18.3910" "18.5813" "17.7639" "17.3647" "17.8325" "15.9378" "18.2820" "19.5868" "19.0473" "18.6485" "16.5742" "17.7395" "18.4063" "17.5568" "15.9561" "18.2376" "18.1267" "16.6703" "19.6436" "16.5913" "16.9576" "17.3053" "18.1233" "18.5333" "17.8425" "17.7949" "16.1054" "17.3161" "17.1287" "16.2259" "18.8710" "15.9798" "18.6923" "18.5277" "17.4772" "17.2244" "18.7973" "19.3876" "15.3276" "18.1478" "15.2478" "18.9750" "16.4929" "18.3215" "17.5210" "16.7077" "18.4338" "15.7611" "17.1195" "18.4291" "18.8410" "19.2813" "17.2519" "17.2470" "19.8916" "19.3124" "16.9091" "17.8750" "18.4733" "18.2423" "16.9467" "17.7550" "16.8689" "17.7787" "19.0095" "17.3790" "20.1161" "19.5835" "16.3848" "17.0703" "22.5369" "18.4972" "18.6543" "16.6815" "20.2124" "16.8442" "16.5815" "19.2023" "18.6573" "18.3253" "17.7715" "15.2232" "16.9205" "17.8657" "18.9885" "18.7106" "18.0477" "17.8172" "17.5737" "15.9595" "18.0268" "19.1172" "18.8013" "17.4712" "17.4146" "19.1309" "15.7576"
|
| 6 |
+
"P003" "Study_PROT10_5" "Pre" "43" "Female" "White" "Non-Hispanic" "17.8629" "17.6056" "17.1322" "17.0484" "16.9459" "17.6251" "17.3516" "17.9467" "18.5884" "18.4606" "17.7566" "17.1421" "17.4883" "17.6883" "18.2257" "17.4691" "16.9344" "17.6183" "17.3386" "20.1290" "17.7556" "17.3849" "19.2545" "18.8444" "16.0562" "17.7743" "19.0177" "18.6257" "16.0010" "19.6406" "17.1584" "16.6028" "16.2436" "18.2748" "17.1075" "16.8348" "18.8381" "18.1231" "17.7015" "19.8397" "17.4908" "17.2545" "18.5102" "18.0958" "16.1668" "19.4229" "16.5921" "18.2559" "17.3121" "19.2364" "18.1270" "17.4637" "18.4734" "17.6256" "16.6437" "17.1490" "20.6191" "17.2707" "18.3507" "18.0537" "16.7607" "18.7208" "19.0902" "16.3995" "17.3017" "16.7878" "18.8616" "17.6239" "17.3671" "19.0199" "18.7845" "18.3882" "16.6144" "18.6385" "16.6198" "19.5024" "18.5248" "17.4648" "16.8620" "16.5610" "19.8123" "20.3027" "17.2056" "18.4374" "17.7127" "18.4660" "17.8658" "18.0664" "18.1513" "18.9422" "17.9725" "18.8209" "15.6351" "16.0802" "16.0113" "16.8486" "18.4056" "16.9241" "17.1126" "16.9653" "17.0229" "17.7406" "16.4675" "15.8882" "18.0887" "18.8952" "15.3954" "20.3737" "17.0339" "17.4942" "17.1600" "17.0317" "17.3809" "17.8853" "18.2333" "16.7939" "17.9112" "16.3711" "19.0423" "18.6324" "18.1084" "18.2593" "17.9190" "17.6629" "16.1840" "18.2210" "16.9204" "17.8453" "16.5746" "17.1379" "17.3511" "17.5261" "17.9834" "17.5385" "18.4559" "17.6504" "17.7635" "18.6531" "17.3433" "17.3672" "17.3255" "17.8907" "17.8558" "16.8276" "17.3000" "19.3377" "18.3687" "18.3021" "16.1936" "20.5307" "16.8551" "18.2369" "20.5041" "17.9704" "19.7439" "18.8948" "17.3848" "16.8284" "20.0595" "18.0484" "19.6156" "20.3063" "18.3573" "16.6174" "16.5622" "16.7554" "19.9028" "17.5224" "17.0680" "16.9983" "19.4061" "16.2877" "19.5737" "18.2964" "15.6544" "19.3493" "17.0509" "20.5652" "19.7649" "17.9967" "18.2122" "18.1353" "17.0387" "17.8317" "18.8005" "18.4910" "19.7037" "18.6125" "16.8526" "19.6009" "19.1618" "16.8246" "15.5872" "16.9988" "16.3819" "18.7374" "16.2571" "18.4928" "17.6988" "18.9196" "18.2260" "17.5880" "16.8353" "17.4412" "18.3731" "15.7299" "16.4003" "17.8508" "16.8127" "16.4647" "18.5785" "19.2305" "18.6141" "18.7180" "19.1060" "19.8896" "19.1536" "14.6246" "16.8648" "14.6514"
|
| 7 |
+
"P003" "Study_PROT10_6" "Post" "43" "Female" "White" "Non-Hispanic" "19.7102" "19.0859" "16.6471" "17.9914" "19.3526" "17.5176" "19.0408" "18.4208" "19.0759" "19.6722" "19.0488" "15.4536" "17.2628" "19.8270" "17.4985" "17.8453" "16.5472" "18.6802" "17.1448" "19.9734" "17.1873" "16.8153" "19.3697" "16.8154" "18.3489" "18.4753" "18.4772" "19.1705" "17.3909" "19.4911" "18.8587" "19.8121" "17.5331" "17.4650" "17.8762" "19.0734" "18.5410" "18.1713" "17.3286" "16.5963" "17.5795" "18.7019" "17.1271" "16.1489" "18.6625" "17.5469" "17.7675" "18.6433" "17.8380" "18.3324" "19.3094" "19.9209" "18.9795" "17.0089" "17.3195" "17.3521" "18.0537" "16.6487" "19.4684" "18.9081" "14.9736" "18.9653" "16.5853" "18.3948" "18.8006" "18.9819" "18.6580" "21.3671" "15.9901" "19.5797" "18.8293" "18.4988" "16.4186" "19.2972" "16.8272" "16.7260" "15.7942" "17.6691" "17.4050" "17.1611" "18.6269" "18.9202" "15.9755" "18.6796" "18.0661" "16.7561" "15.0322" "17.6515" "16.3903" "18.6255" "17.3014" "21.0245" "17.8086" "17.3042" "20.7906" "18.1020" "16.7424" "19.3164" "17.6663" "15.5272" "21.4241" "18.0290" "18.4469" "17.7803" "18.9359" "20.3667" "15.1773" "17.0378" "18.9271" "19.5665" "19.1665" "19.2366" "17.4014" "19.7680" "16.8739" "19.1322" "16.9825" "17.1980" "19.3413" "17.9908" "19.3212" "19.5313" "15.4781" "18.0330" "19.0677" "16.7092" "16.5136" "17.6526" "17.3199" "16.5374" "17.3397" "20.1959" "17.5118" "16.8905" "16.8662" "18.7361" "16.6639" "18.1731" "19.6062" "16.0290" "19.0074" "20.1415" "18.2882" "18.1880" "16.5229" "16.5084" "17.4121" "18.2363" "18.6783" "16.5783" "17.5593" "19.3984" "19.7570" "18.3384" "17.6189" "16.9014" "17.3503" "16.5986" "17.4709" "19.5978" "18.3894" "18.5488" "18.5630" "17.2036" "16.9092" "16.3996" "17.6728" "15.3902" "19.9251" "17.9738" "18.1756" "18.2700" "20.4334" "16.4568" "21.9944" "18.3474" "17.1236" "20.1859" "17.8629" "16.7649" "16.9751" "18.4598" "17.9105" "17.5529" "17.2137" "18.4152" "19.4417" "20.8510" "17.4467" "21.5423" "20.9349" "17.1299" "17.1486" "18.9382" "18.9230" "20.1583" "17.8930" "20.7318" "15.9940" "19.0083" "19.5700" "17.2460" "18.4407" "18.1347" "15.6488" "17.0934" "19.5386" "16.6953" "17.7796" "18.3669" "18.4243" "17.9997" "17.8674" "20.2291" "17.5720" "18.2106" "16.7822" "16.9319" "17.4736" "16.9375"
|
| 8 |
+
"P004" "Study_PROT10_7" "Pre" "74" "Female" "White" "Non-Hispanic" "19.5236" "18.3149" "18.5013" "18.7498" "19.1067" "17.0816" "18.9481" "17.8398" "18.4032" "16.6498" "17.4188" "18.1317" "15.4985" "16.8850" "18.7760" "18.0852" "16.0407" "19.1313" "18.5418" "17.5057" "18.6842" "16.2243" "16.7282" "18.2161" "17.5150" "17.6214" "16.6760" "17.4789" "19.3501" "20.7751" "17.3380" "16.7102" "17.7729" "17.5517" "17.1704" "18.3193" "18.1615" "17.4022" "16.9652" "17.8667" "19.1558" "18.1173" "17.2271" "18.0055" "17.9488" "18.6035" "16.9787" "17.5473" "17.0889" "20.2610" "20.7420" "20.2162" "18.9319" "18.2988" "17.6643" "16.8765" "17.6957" "17.4944" "19.1256" "18.9220" "17.1506" "17.7704" "16.9785" "20.1588" "15.7586" "15.1874" "17.5190" "19.3980" "17.7900" "17.8843" "17.4940" "19.0333" "18.7560" "19.3885" "18.8283" "16.4007" "17.9107" "18.9372" "17.3643" "17.6598" "17.7994" "18.5258" "17.2407" "18.7182" "19.0112" "16.9698" "16.8670" "20.5580" "18.8281" "17.9373" "17.9096" "17.7884" "17.0609" "18.1304" "20.5007" "16.8305" "18.5506" "18.9132" "19.5295" "19.6383" "18.0796" "17.9971" "18.1438" "19.1396" "17.0056" "19.5591" "18.8454" "19.7835" "18.6408" "18.4855" "18.5309" "18.6364" "18.4016" "19.6207" "17.4637" "17.6727" "20.5378" "17.1978" "18.5001" "17.9728" "19.7781" "18.3995" "18.6317" "18.6161" "19.6866" "19.6905" "19.2793" "17.9705" "18.2374" "17.7342" "18.4682" "18.8289" "18.8323" "18.0723" "18.6209" "17.9233" "17.8572" "18.9451" "18.4350" "17.7718" "19.2364" "18.9111" "16.3438" "16.6880" "18.3156" "18.8996" "18.4345" "16.9778" "18.2890" "16.7309" "17.7805" "17.3753" "17.8515" "17.8629" "17.4516" "18.8703" "16.9231" "16.3192" "18.3509" "17.2693" "19.4851" "20.0939" "19.5435" "17.5272" "16.6913" "15.2177" "19.1765" "17.4597" "18.2621" "17.8489" "17.3817" "19.2745" "18.4909" "19.0502" "17.8324" "16.9129" "19.2769" "18.2892" "17.1380" "18.1292" "18.8552" "16.6539" "17.9785" "19.5584" "17.2190" "17.2837" "17.8262" "17.1783" "16.7219" "17.1423" "17.9293" "17.8269" "18.1530" "19.2990" "17.3758" "19.9926" "18.2792" "18.8361" "19.2294" "18.5541" "17.8510" "16.1433" "19.4866" "17.1114" "18.4186" "17.1216" "15.5153" "18.9998" "17.9340" "18.5319" "19.2960" "18.6738" "18.9379" "19.5169" "20.6570" "18.3704" "14.8237" "16.3602" "20.2397" "17.1056"
|
| 9 |
+
"P004" "Study_PROT10_8" "Post" "74" "Female" "White" "Non-Hispanic" "17.4627" "17.0939" "16.9986" "17.9183" "16.3858" "19.4298" "20.0613" "18.8667" "19.4706" "18.1086" "17.2738" "12.9946" "15.3117" "19.2231" "16.8290" "18.6868" "15.7309" "17.9307" "18.1241" "19.6860" "18.1528" "17.1534" "17.2434" "18.1568" "17.5807" "18.6084" "16.3690" "18.5789" "18.8034" "18.6554" "16.5415" "18.7862" "16.9736" "17.0775" "16.3033" "17.9919" "17.8486" "17.9493" "17.1796" "19.0274" "19.7053" "19.0945" "14.9562" "17.2250" "17.5894" "17.4784" "18.8034" "18.2504" "18.4742" "17.6632" "17.6154" "19.3014" "18.6287" "16.6065" "17.6722" "15.6310" "19.4696" "19.0102" "19.8440" "18.6527" "16.6826" "17.2897" "18.2540" "17.2155" "17.4890" "14.6095" "17.9593" "20.2722" "18.2590" "18.2030" "19.4404" "17.9249" "18.0697" "18.2342" "19.1722" "18.4148" "17.2538" "17.9619" "18.5655" "17.8776" "18.0768" "17.5832" "15.1133" "18.9343" "18.5845" "18.9856" "17.1029" "18.4528" "18.0598" "16.2848" "18.8343" "18.8589" "18.3707" "17.2789" "19.9843" "15.4115" "19.4223" "17.0384" "19.3222" "18.3579" "21.5454" "18.2109" "19.0765" "18.1325" "15.8997" "18.4570" "16.0128" "17.4184" "20.1710" "18.8111" "18.7682" "17.4447" "16.9830" "18.1830" "17.1189" "16.9217" "17.5301" "17.9108" "18.5703" "20.2541" "19.9336" "18.1139" "19.3458" "17.6518" "18.6335" "20.1074" "19.5227" "19.4695" "17.3251" "21.1336" "17.8624" "20.0647" "17.6755" "15.7773" "19.9659" "17.9386" "17.1869" "18.1123" "18.2239" "16.8022" "16.3435" "19.9051" "15.6026" "16.1516" "17.2045" "18.7662" "17.2970" "15.3767" "17.8820" "16.5227" "16.6252" "17.8345" "20.3392" "17.8580" "18.0600" "17.8418" "19.8151" "19.4660" "17.7829" "20.3860" "19.0823" "19.3936" "16.7769" "17.7496" "16.1681" "17.8228" "18.6080" "16.8977" "18.2706" "19.0646" "16.3537" "16.4601" "19.0339" "17.8588" "19.0990" "17.4914" "19.3762" "17.1075" "18.9768" "18.1725" "16.4072" "16.0709" "17.6072" "19.5062" "16.5273" "17.8853" "19.5985" "18.1543" "17.6610" "19.5387" "20.1185" "18.0179" "17.6726" "18.6098" "16.1687" "22.1882" "19.3466" "17.8675" "15.9070" "18.1257" "18.0685" "18.9987" "19.6423" "18.2376" "19.9565" "16.2283" "16.7210" "16.3655" "18.3297" "17.6445" "18.7398" "18.6747" "19.3989" "19.8081" "18.2289" "18.2329" "18.1707" "16.9473" "20.0843" "17.5506"
|
| 10 |
+
"P005" "Study_PROT10_9" "Pre" "61" "Female" "White" "Non-Hispanic" "19.1856" "17.3192" "17.1014" "17.1503" "17.8885" "18.3210" "16.2075" "15.8629" "18.6343" "17.2656" "16.7085" "16.8970" "18.2529" "19.5380" "18.7254" "17.7880" "18.3945" "18.2076" "19.4082" "18.7358" "18.2986" "18.0287" "18.8517" "18.1326" "18.5816" "17.4775" "18.6248" "19.3941" "17.6668" "18.3208" "16.4686" "16.4694" "18.5678" "17.5078" "17.6935" "18.5852" "17.1766" "19.4023" "18.8361" "19.8786" "19.2339" "18.3855" "18.4661" "18.1522" "18.2453" "18.3489" "18.6316" "17.7748" "18.6344" "18.1793" "17.6851" "17.6095" "18.2353" "17.2491" "18.9573" "20.5346" "18.1602" "18.9008" "18.5451" "18.2997" "19.1784" "18.4881" "19.5316" "20.2083" "15.8920" "17.6169" "17.8704" "18.1683" "16.9995" "18.9833" "18.1689" "17.9702" "18.3567" "17.8161" "17.1367" "17.4741" "18.3075" "17.9156" "15.4780" "18.3972" "17.3503" "17.7981" "18.3251" "19.5121" "18.4855" "20.6884" "15.9215" "20.2523" "17.7960" "18.1200" "18.0246" "15.9962" "17.0937" "18.4436" "17.1771" "19.6124" "17.0716" "19.1170" "20.3536" "16.5350" "16.6016" "17.7289" "16.7800" "20.2549" "18.5552" "19.7202" "19.2847" "17.0259" "19.0951" "17.0227" "16.2188" "16.4693" "18.3891" "16.3308" "18.4323" "17.7793" "19.2355" "18.7944" "16.6257" "19.9786" "16.7793" "18.4705" "18.7486" "15.8616" "16.3446" "18.0899" "18.5711" "17.0151" "18.5118" "16.9575" "18.7989" "16.7976" "17.7006" "17.7832" "18.4802" "18.0403" "18.9567" "18.5767" "18.8781" "15.8128" "18.5302" "17.9566" "17.6985" "15.4899" "16.8494" "19.0371" "17.0159" "16.2471" "17.9420" "15.6858" "18.1451" "18.4082" "19.3159" "17.9315" "20.1537" "18.1555" "17.8002" "16.7541" "16.9595" "17.2158" "20.4857" "17.2600" "17.9202" "16.8294" "19.7838" "17.5893" "18.5878" "17.1353" "18.7607" "16.6368" "17.1246" "16.9295" "21.3981" "18.2959" "18.2013" "16.9640" "19.1104" "19.2479" "18.3405" "17.9764" "17.1346" "18.0416" "16.4328" "18.6905" "18.1792" "19.1488" "19.6121" "17.1631" "17.7416" "17.0817" "18.2893" "18.5665" "17.3524" "17.0167" "19.6360" "20.2316" "16.5156" "18.3169" "19.0460" "19.7881" "18.2739" "19.9745" "18.4461" "19.1411" "18.6429" "18.5672" "17.4463" "18.3779" "16.2657" "17.9974" "17.9491" "17.1983" "18.2170" "18.3883" "20.8204" "17.1802" "18.1090" "19.1427" "19.1827" "17.9891"
|
| 11 |
+
"P005" "Study_PROT10_10" "Post" "61" "Female" "White" "Non-Hispanic" "19.4158" "17.2629" "16.0729" "17.7543" "19.9075" "17.4185" "19.8454" "15.2588" "20.4620" "19.9113" "18.1640" "16.4095" "18.9675" "19.0680" "18.6840" "18.7345" "17.3077" "17.2238" "16.0597" "18.5478" "17.0945" "17.7271" "17.0552" "18.3192" "17.7406" "17.2468" "18.8238" "16.0496" "17.4430" "19.7443" "18.6104" "16.6057" "19.0856" "18.8430" "18.8341" "20.0402" "20.0096" "19.4523" "19.0679" "19.6421" "18.3241" "19.2569" "16.7926" "16.5719" "19.1294" "17.3523" "19.9288" "17.3194" "16.2948" "17.8482" "17.5542" "20.5689" "17.8506" "18.1088" "19.0159" "15.4954" "19.2940" "16.2870" "19.8764" "18.2206" "18.3099" "18.8320" "18.0969" "17.2180" "18.3676" "17.1704" "18.2240" "20.1412" "16.9443" "18.6413" "17.0584" "17.5958" "18.1098" "20.4530" "18.3698" "17.2589" "18.5322" "19.3133" "16.9669" "18.1076" "18.5103" "16.5369" "20.3430" "19.0841" "20.2532" "19.1707" "16.1418" "18.5323" "18.1458" "16.8860" "19.1007" "20.3333" "14.6406" "17.4519" "19.5258" "17.7573" "18.4929" "19.1428" "17.4650" "17.7182" "19.8677" "18.5273" "18.4589" "19.3183" "18.6203" "18.3246" "15.8268" "17.8697" "18.6274" "20.0527" "18.5431" "16.5977" "16.7725" "19.1223" "18.8137" "15.9667" "18.6907" "19.3978" "16.7978" "18.7713" "18.3082" "19.0290" "16.1758" "15.9234" "20.7766" "17.5980" "19.1174" "18.1512" "15.6323" "17.5612" "17.6061" "19.7654" "19.1669" "17.0518" "16.6372" "15.2647" "17.5382" "19.9873" "17.4058" "15.6062" "17.8926" "18.0356" "16.5180" "16.8912" "16.3720" "16.6957" "17.2591" "17.2369" "17.1022" "17.2863" "18.0929" "18.2003" "18.7085" "16.8262" "18.8303" "18.0452" "18.3827" "16.9155" "17.7050" "18.7105" "18.3668" "17.0649" "18.8458" "16.9370" "17.3731" "17.3843" "18.4918" "15.7469" "18.8225" "18.8679" "17.8802" "17.5429" "19.8214" "14.8423" "18.7577" "16.9905" "16.9193" "18.7900" "17.2037" "18.9183" "17.0868" "18.1916" "18.2063" "17.0510" "19.0112" "20.0023" "18.0290" "18.4181" "17.3802" "17.9979" "20.4012" "18.5048" "17.2845" "21.0973" "20.2724" "23.0270" "19.1116" "17.0746" "15.4202" "17.3349" "18.2726" "18.8253" "17.8229" "17.3972" "18.2287" "18.5373" "16.5943" "20.4646" "17.0161" "17.3138" "19.9747" "17.1106" "18.4810" "19.1705" "18.3669" "16.7710" "17.6427" "16.7117" "18.1065" "18.5356"
|
| 12 |
+
"P006" "Study_PROT10_11" "Pre" "63" "Female" "White" "Hispanic" "17.0028" "17.1030" "18.8509" "16.1177" "16.8321" "17.6017" "18.9900" "17.3028" "19.4409" "17.7738" "19.1879" "18.7201" "15.9751" "19.3911" "19.3356" "17.4864" "19.2819" "19.6276" "18.9801" "19.7879" "18.7087" "17.3193" "18.3805" "17.9536" "18.8064" "18.2277" "18.8829" "18.1488" "17.2045" "16.7627" "17.6041" "18.4325" "17.7129" "18.2094" "18.3358" "18.3682" "20.8268" "18.0642" "16.0865" "18.9720" "18.0842" "19.0222" "19.5565" "19.8697" "20.9195" "18.3947" "18.4057" "17.0061" "17.3747" "19.1062" "18.2741" "17.0290" "17.3384" "17.6873" "17.7865" "17.9745" "18.5187" "18.5486" "18.4102" "19.2796" "17.8059" "18.8388" "18.4613" "18.2883" "18.2039" "18.3569" "19.7632" "17.5978" "15.4700" "16.8763" "18.3269" "17.9599" "19.0284" "18.7005" "17.3399" "18.5152" "16.4840" "17.1798" "18.0694" "17.0784" "19.5383" "18.0051" "19.5249" "17.9734" "18.9745" "16.6003" "17.4871" "18.7141" "18.7638" "17.8374" "16.3863" "18.1471" "16.3286" "19.6237" "19.6356" "20.1495" "18.2942" "17.4755" "16.1400" "15.7651" "19.0067" "19.2367" "18.2355" "18.8021" "16.7733" "18.0273" "17.3822" "18.7188" "18.2420" "18.9168" "17.3928" "17.5990" "18.3442" "20.1183" "18.5175" "19.1709" "17.9163" "15.1741" "18.4255" "18.7842" "17.3594" "17.9866" "17.7850" "17.6107" "18.1110" "17.4667" "16.6619" "17.2447" "17.2813" "16.8018" "19.2127" "17.9594" "17.1106" "18.4918" "17.3319" "16.6359" "19.8266" "18.2898" "18.0976" "18.0957" "16.4265" "15.9389" "18.0006" "17.6945" "18.5342" "16.9226" "17.0292" "15.9279" "17.8756" "18.0324" "18.1631" "18.0545" "16.6471" "16.3412" "19.0883" "16.9824" "17.7149" "16.2572" "20.1100" "19.4238" "17.6729" "17.2042" "18.0486" "15.7240" "18.1435" "16.7367" "18.9147" "18.2031" "17.8148" "17.3201" "18.0218" "15.6321" "20.2745" "19.3055" "15.9486" "17.8686" "16.6819" "18.2500" "16.9447" "19.3805" "18.4432" "18.4494" "17.3788" "17.4507" "20.3546" "19.1703" "17.4561" "18.3049" "18.5812" "17.9824" "17.5707" "17.2734" "17.0449" "18.9106" "17.1850" "18.5550" "17.1547" "20.3683" "19.4130" "19.6004" "17.3109" "18.2702" "19.0791" "17.7414" "18.3025" "17.1347" "17.4952" "17.6053" "15.7583" "17.3915" "18.3277" "17.8592" "16.4707" "16.5095" "19.5282" "15.4615" "18.4182" "15.6838" "19.3559" "16.1940"
|
| 13 |
+
"P006" "Study_PROT10_12" "Post" "63" "Female" "White" "Hispanic" "18.1193" "17.1258" "17.9647" "18.3832" "17.3171" "15.9262" "21.1601" "15.2123" "20.6311" "18.3242" "16.7005" "16.5090" "17.9655" "19.1353" "19.3252" "19.3696" "19.2451" "18.7065" "18.6348" "21.0650" "19.2172" "16.5171" "18.7120" "16.4243" "21.1156" "16.4592" "17.8999" "17.4409" "17.8130" "19.1568" "18.2710" "19.3483" "17.6190" "15.5064" "17.4692" "19.4620" "19.2879" "18.3823" "16.8284" "18.3107" "17.8481" "20.0563" "18.6624" "19.0048" "18.1476" "17.1577" "19.0913" "18.0412" "15.7608" "17.5582" "18.5973" "16.4555" "17.2313" "17.8095" "18.0009" "17.8344" "19.1668" "17.8600" "20.0057" "18.9105" "17.8967" "19.1584" "18.7398" "18.6970" "17.8541" "17.6039" "18.4074" "20.8980" "17.6286" "17.4413" "17.8776" "19.1301" "18.2411" "18.4375" "18.4911" "17.6337" "17.4139" "17.7346" "16.8346" "19.0699" "18.9888" "19.3746" "17.4802" "16.3694" "19.0255" "19.1338" "17.8326" "17.7080" "20.1600" "17.8152" "19.4480" "19.2782" "16.4301" "17.4293" "19.5579" "16.3051" "17.4325" "16.1769" "18.9807" "16.3060" "18.1509" "16.7071" "18.6697" "19.5343" "20.6809" "19.6142" "14.5912" "18.7992" "19.0556" "20.3430" "19.8937" "18.5564" "16.9593" "19.8058" "20.1709" "17.7097" "18.8962" "16.2597" "19.4615" "17.0110" "17.4253" "17.6984" "17.2088" "18.0482" "17.7773" "19.8759" "17.8387" "17.9043" "15.1959" "18.6705" "16.9358" "18.2723" "17.5967" "15.5872" "18.9116" "15.6332" "16.6267" "16.0905" "18.3123" "17.8985" "15.9751" "15.6189" "16.8651" "17.5705" "17.7778" "18.3593" "17.8732" "18.5337" "16.2298" "18.4286" "17.7903" "19.0513" "17.1204" "17.0771" "17.9260" "17.9099" "18.1807" "15.7784" "20.3199" "19.7583" "18.9785" "19.6651" "17.2305" "19.7452" "17.9774" "20.8543" "19.7789" "15.6521" "17.7808" "19.5731" "17.2959" "18.0189" "21.8167" "17.1354" "21.1451" "18.6713" "17.1226" "18.1542" "18.3051" "17.7665" "18.2660" "16.5654" "16.1711" "19.1518" "17.4856" "18.9580" "17.4730" "16.5812" "18.8834" "19.0358" "20.7720" "17.4659" "14.7418" "18.6916" "19.7169" "22.9666" "17.4730" "18.6919" "17.3778" "17.5476" "18.5233" "19.0562" "18.8912" "18.9213" "17.8325" "18.1288" "17.9857" "19.4356" "17.0327" "17.5515" "18.1693" "15.9037" "18.4837" "19.5487" "19.7528" "18.4980" "15.8424" "17.4816" "16.6934" "17.2665"
|
| 14 |
+
"P007" "Study_PROT10_13" "Pre" "34" "Male" "White" "Non-Hispanic" "17.5379" "17.4211" "15.7905" "18.3172" "20.6982" "17.3021" "16.8865" "18.2252" "15.7100" "18.6436" "16.4201" "17.5928" "18.4145" "18.0035" "19.1229" "19.6182" "19.1543" "19.2923" "17.9823" "18.1821" "18.2359" "17.7965" "17.9237" "17.3882" "18.7648" "17.2983" "18.5556" "17.5687" "18.8388" "20.4670" "16.3237" "18.2640" "17.2986" "17.2699" "16.5100" "19.1874" "17.9940" "18.1016" "18.7146" "18.5528" "17.8935" "18.7040" "17.5139" "17.2162" "20.4469" "19.6699" "16.9307" "16.6222" "17.2004" "19.6365" "18.7303" "18.8951" "19.8128" "17.9149" "18.0328" "17.4320" "19.4136" "19.5601" "17.4549" "17.5951" "17.6142" "17.9111" "17.2548" "18.5519" "17.0397" "18.2280" "18.0685" "18.2679" "19.6833" "19.7043" "17.0743" "16.7620" "19.1530" "17.1713" "18.0470" "15.4750" "15.7891" "17.8260" "16.8514" "17.4376" "18.3762" "17.0709" "19.0922" "21.6847" "19.4703" "18.8215" "17.5823" "17.3284" "16.7797" "16.2468" "19.9164" "17.3558" "18.0428" "19.2612" "18.8571" "18.1526" "16.9796" "16.6198" "17.4724" "17.9545" "17.8097" "18.9775" "17.4093" "17.0264" "17.0734" "18.3656" "15.7790" "17.0766" "18.2418" "17.4116" "17.1334" "18.0865" "18.9960" "19.1499" "19.7953" "18.7878" "17.9829" "19.0681" "18.9807" "20.1666" "19.0947" "17.5564" "16.5764" "16.6880" "19.8379" "17.7979" "17.2591" "17.7646" "18.1712" "18.5693" "20.4862" "18.8652" "18.6718" "19.6756" "18.5128" "17.3328" "18.0010" "18.0486" "16.6406" "18.8695" "19.2320" "17.6386" "15.8433" "16.6474" "17.1247" "20.7241" "16.8349" "16.0228" "17.4481" "17.5996" "18.3348" "17.9584" "18.1995" "18.0495" "18.5351" "18.1819" "16.3722" "17.0237" "17.1292" "19.7791" "20.5145" "19.4387" "19.0600" "15.6204" "15.1377" "18.1226" "19.0433" "16.3732" "19.2090" "18.8595" "16.5311" "16.2511" "19.5163" "16.8785" "15.9503" "17.3730" "17.2689" "18.1806" "17.0595" "18.6457" "16.9875" "18.1383" "16.7319" "18.2358" "19.3017" "17.6804" "20.9953" "19.0152" "18.7091" "19.2873" "20.3579" "18.9923" "16.4142" "17.1191" "17.1736" "20.1715" "17.4017" "19.5875" "17.6093" "18.2510" "16.2643" "18.7228" "17.3681" "15.9071" "20.4201" "14.0520" "17.9533" "18.0021" "18.0966" "20.4407" "16.7863" "18.9957" "17.5788" "20.1266" "19.4838" "17.1979" "18.1880" "15.8378" "19.7499" "17.6823"
|
| 15 |
+
"P007" "Study_PROT10_14" "Post" "34" "Male" "White" "Non-Hispanic" "17.6363" "18.4944" "17.9592" "17.5433" "20.2029" "18.5927" "22.5854" "17.5924" "19.9538" "16.0309" "17.7715" "15.8774" "18.2726" "18.7005" "19.1912" "15.3652" "19.0477" "18.5728" "16.6712" "17.4756" "18.7470" "17.7981" "18.8350" "16.7602" "19.4542" "16.6473" "18.2576" "20.2753" "19.5530" "19.2329" "17.3028" "19.1468" "20.1848" "15.4701" "16.1930" "17.8837" "16.8241" "17.7105" "19.1328" "18.4102" "17.1304" "18.9730" "18.0546" "17.1754" "19.2731" "17.9171" "17.6142" "16.4979" "17.4237" "17.6190" "16.2517" "18.6483" "16.8436" "13.4616" "17.7065" "16.8622" "18.2796" "17.6329" "16.7152" "17.9551" "17.2471" "19.1845" "16.6994" "18.1526" "17.3339" "19.3928" "17.4866" "19.6254" "17.5131" "18.4603" "17.4574" "17.4206" "17.7776" "17.7681" "17.5328" "16.4162" "18.3363" "16.4144" "17.2130" "18.1605" "16.3715" "18.5276" "18.0092" "19.2400" "16.7333" "19.5232" "16.7513" "17.6898" "17.9907" "19.0120" "18.1963" "22.1414" "17.4284" "16.8877" "21.5205" "19.6054" "17.3847" "18.9734" "19.2707" "17.7565" "22.0472" "17.2431" "16.7454" "18.7190" "18.4055" "20.0856" "12.7466" "17.9058" "19.2345" "18.5161" "18.1409" "16.3716" "18.3120" "18.6340" "16.6996" "18.4458" "17.1870" "19.9053" "18.5838" "19.0968" "17.8696" "18.6354" "18.3738" "17.9816" "18.4930" "20.5913" "17.0012" "17.4884" "14.7462" "19.8655" "19.0427" "21.1557" "18.7430" "14.4243" "16.7107" "17.5595" "18.6074" "18.3906" "18.7263" "20.5315" "18.9215" "17.8125" "17.9634" "16.1239" "17.7447" "18.3551" "17.4482" "17.4534" "16.4559" "15.9762" "14.5399" "19.3231" "17.7094" "17.8501" "19.2537" "17.7341" "19.2590" "16.5457" "18.8355" "18.5703" "16.8720" "17.8407" "17.2123" "16.9643" "16.8896" "18.6864" "18.6805" "17.7319" "18.7282" "18.0005" "17.3030" "17.4287" "19.1839" "17.9360" "19.3332" "17.9901" "17.3616" "20.4014" "18.1548" "19.0598" "19.0767" "19.4540" "15.6528" "17.7925" "17.0852" "18.0636" "18.6275" "18.6442" "17.9281" "20.6586" "21.8500" "17.6705" "15.3268" "20.6122" "19.4549" "21.7879" "19.7166" "19.1947" "17.0561" "17.0043" "17.8825" "20.2842" "17.5362" "19.1742" "18.9083" "16.9036" "19.1341" "16.1341" "17.6939" "17.5545" "18.4016" "17.4671" "17.5744" "18.1200" "17.9806" "18.5660" "18.6422" "18.0308" "17.3267" "16.5582"
|
| 16 |
+
"P008" "Study_PROT10_15" "Pre" "48" "Female" "Asian" "Hispanic" "17.6600" "17.0940" "17.2251" "19.0068" "20.7762" "17.9601" "18.8158" "19.1616" "18.7903" "18.5193" "19.3217" "17.6835" "20.5077" "16.7305" "17.4142" "16.0331" "17.6774" "19.8758" "18.1027" "19.6774" "17.9126" "18.2747" "20.2599" "18.2581" "18.8904" "16.6052" "19.6328" "17.8078" "16.7020" "17.5742" "17.5876" "15.4681" "19.5650" "19.9053" "16.4183" "18.4605" "20.5488" "20.1010" "17.9526" "20.6699" "21.3372" "19.0967" "17.8635" "15.3276" "18.4104" "17.8443" "19.8739" "17.3178" "17.0102" "17.1764" "19.3297" "17.8124" "18.4592" "17.8549" "18.4811" "18.2234" "19.2142" "18.3368" "20.6974" "16.3556" "17.3854" "19.7082" "18.1572" "17.6652" "17.8908" "15.6940" "17.8088" "19.2493" "17.3121" "18.5735" "16.9334" "17.2762" "17.0848" "19.7172" "17.2180" "17.7503" "16.7828" "20.5319" "17.3668" "17.1330" "18.2026" "17.1005" "19.2901" "18.9160" "18.3304" "16.9621" "17.7631" "18.1044" "17.1438" "18.9968" "17.5412" "16.7350" "16.4973" "17.6165" "19.0316" "18.7807" "19.2933" "17.4089" "17.4374" "18.2611" "16.8671" "18.3706" "17.7370" "19.4503" "19.1041" "17.3794" "17.7313" "16.9985" "19.2842" "16.8539" "17.3237" "17.5772" "18.4550" "17.1182" "17.0393" "17.3585" "17.8359" "17.6877" "17.9729" "18.1082" "18.8683" "17.3662" "17.4068" "17.9514" "19.0602" "16.4232" "17.7803" "17.2434" "18.6390" "17.5173" "16.3785" "16.6426" "21.5212" "18.2210" "17.9813" "17.8799" "17.4815" "19.7902" "17.4723" "17.7295" "16.6578" "17.9397" "17.0168" "17.7219" "17.4567" "15.7091" "16.6912" "18.6000" "14.7150" "17.1166" "14.8632" "17.1937" "19.0989" "18.6821" "17.3196" "18.5006" "18.9524" "17.5121" "17.8276" "17.0876" "19.3868" "19.5579" "19.8330" "17.3077" "18.7938" "18.9658" "18.6754" "18.3117" "19.4337" "19.2362" "17.3846" "19.1628" "18.3660" "19.4613" "17.0267" "17.3760" "18.3406" "18.7701" "18.7634" "16.7655" "18.2207" "18.0851" "16.9941" "16.7811" "16.6674" "18.7538" "17.9260" "17.6608" "18.4011" "16.4684" "18.3077" "17.4787" "16.9664" "14.1634" "17.9999" "18.4309" "19.0766" "17.9376" "20.1171" "18.3440" "16.0082" "17.2763" "18.9133" "15.8982" "19.0679" "14.7324" "18.5032" "18.2713" "17.8845" "18.6753" "17.6740" "20.7025" "17.1147" "18.5166" "19.2349" "18.9773" "19.5407" "16.6313" "19.6638" "18.2431"
|
| 17 |
+
"P008" "Study_PROT10_16" "Post" "48" "Female" "Asian" "Hispanic" "16.8052" "17.9182" "19.5750" "17.6972" "18.7852" "17.8817" "21.0853" "16.3994" "18.5203" "18.0497" "21.0031" "13.9766" "17.3112" "16.1369" "16.0690" "18.7721" "18.4187" "18.2550" "17.5389" "19.0376" "17.4482" "19.1164" "17.5427" "18.2184" "18.7119" "17.8499" "18.2483" "18.2786" "17.2897" "18.8885" "17.5667" "19.2236" "19.7601" "18.5195" "17.6885" "16.9593" "18.0814" "18.2458" "17.0584" "17.6976" "18.2214" "19.8250" "19.0741" "17.0247" "18.1123" "14.1735" "20.1689" "17.2188" "17.0518" "17.5889" "18.1512" "19.2088" "19.8935" "16.7045" "18.6603" "16.9366" "18.6362" "17.7661" "18.4953" "19.7456" "17.7668" "20.8226" "18.8054" "17.2664" "17.3883" "18.9977" "16.6468" "18.6913" "17.6840" "18.5328" "15.9841" "19.8283" "15.9394" "18.0640" "16.7669" "16.1715" "16.3781" "19.0374" "17.0082" "17.3155" "18.1628" "18.7287" "18.7613" "17.1614" "19.5853" "17.1942" "15.4987" "19.1813" "17.8399" "17.3704" "15.5212" "20.7004" "17.1349" "16.6542" "20.3632" "18.7028" "19.8741" "14.5787" "19.9464" "17.5479" "20.7481" "18.7344" "16.9661" "19.6907" "17.6308" "17.2776" "16.8852" "17.9164" "18.8460" "19.3535" "18.0187" "15.2552" "16.8395" "17.4422" "17.1651" "18.1176" "17.7848" "18.1220" "19.4511" "20.2784" "17.6182" "19.3773" "17.2462" "17.3803" "17.8804" "17.0254" "17.9070" "16.9742" "15.9651" "20.0486" "18.7112" "18.5024" "19.0404" "15.8760" "16.7934" "19.2591" "16.7789" "19.1255" "16.8284" "18.3072" "18.7762" "18.6228" "18.7039" "17.1336" "16.7719" "18.7561" "16.3848" "17.2137" "14.9854" "16.2467" "15.7381" "17.3082" "18.0776" "18.9599" "18.7931" "18.4966" "18.2689" "14.9220" "15.9182" "16.1976" "18.2109" "20.3154" "18.5200" "17.5111" "18.7186" "18.0402" "16.8854" "18.8802" "18.7220" "18.4937" "17.4262" "18.9580" "17.8634" "17.2005" "20.6524" "19.3158" "18.4469" "18.9638" "18.4166" "18.7249" "15.8001" "18.3373" "18.4945" "17.2830" "18.5854" "17.9432" "17.4345" "17.0749" "17.0296" "17.7317" "18.9419" "19.4967" "16.7681" "17.6150" "19.0274" "19.2407" "20.1447" "19.4952" "18.1093" "20.6700" "16.2458" "18.6961" "17.6151" "15.7087" "19.1517" "15.7546" "17.5654" "17.2326" "17.3338" "16.6933" "17.2442" "16.8471" "18.2452" "20.1058" "18.7430" "17.5947" "16.7668" "18.5074" "19.1676" "17.7657"
|
| 18 |
+
"P009" "Study_PROT10_17" "Pre" "71" "Female" "White" "Non-Hispanic" "20.1653" "16.2730" "16.1988" "18.1387" "17.6132" "19.0022" "18.8807" "18.9674" "17.6817" "18.1444" "16.6897" "17.2957" "16.7756" "18.4782" "16.0918" "18.5887" "17.4961" "19.4089" "16.0377" "16.9954" "18.2531" "17.8336" "18.6221" "18.4184" "19.5702" "17.1635" "18.6180" "18.1243" "17.4560" "21.4242" "18.7847" "17.6873" "20.2158" "17.8770" "18.2006" "19.5093" "17.4693" "17.6558" "18.3483" "18.4713" "18.6121" "17.5116" "17.8654" "19.0138" "18.0973" "16.7536" "18.0379" "15.5406" "18.7890" "17.7400" "18.0308" "19.0912" "19.2963" "17.6843" "19.0798" "17.5102" "18.8775" "18.0163" "18.4486" "16.6869" "19.4497" "17.2346" "16.7004" "17.6543" "16.4097" "17.0471" "17.6397" "18.5552" "18.5896" "18.3747" "17.2271" "17.5672" "18.7570" "18.6273" "17.2617" "19.6701" "18.5800" "18.8752" "19.0843" "16.3554" "17.5888" "18.0604" "17.5036" "21.3707" "20.0314" "17.7546" "16.6556" "18.4556" "17.9356" "17.5760" "16.0398" "18.2118" "17.9133" "20.0680" "18.1415" "17.7677" "18.3758" "18.3030" "18.5999" "19.1423" "17.3495" "16.6083" "16.4974" "17.7175" "18.6635" "18.8282" "18.7054" "18.6379" "18.6034" "17.2177" "17.7342" "17.3353" "18.5486" "18.0868" "17.4276" "17.7225" "16.7758" "16.9606" "16.5908" "18.8079" "19.1841" "19.4000" "18.8131" "16.7523" "19.7199" "16.9343" "17.5715" "17.9002" "13.9156" "17.7008" "18.8111" "17.3145" "15.8824" "17.0197" "17.8532" "16.9666" "17.4929" "19.1312" "17.7685" "18.2695" "18.7296" "16.7182" "14.8470" "18.5479" "17.3429" "17.2223" "16.7799" "18.2051" "16.3539" "19.9363" "16.1122" "17.5684" "16.3979" "16.9427" "17.8027" "18.4464" "16.9413" "16.5455" "20.4302" "18.3474" "17.9663" "18.1916" "17.7564" "18.1220" "19.6747" "18.4146" "17.5677" "18.7065" "17.2596" "16.6888" "15.5784" "17.2422" "18.3572" "18.6882" "17.6240" "18.7768" "18.1939" "19.5536" "18.1461" "17.7913" "16.7540" "17.4606" "17.8488" "20.0126" "19.5864" "18.3828" "18.9064" "18.2735" "18.2469" "16.0239" "18.3232" "18.5942" "16.2829" "17.1426" "18.4456" "18.3213" "18.2791" "18.4905" "17.3953" "17.3087" "19.0186" "19.4670" "18.1097" "16.8449" "22.3880" "16.1746" "17.8649" "18.8809" "16.7988" "16.4551" "16.8208" "16.7238" "16.3695" "16.3714" "20.9508" "18.5943" "18.0756" "17.0903" "18.9363" "16.4854"
|
| 19 |
+
"P009" "Study_PROT10_18" "Post" "71" "Female" "White" "Non-Hispanic" "21.2460" "16.9684" "15.2829" "18.3976" "18.7738" "16.6887" "20.5379" "15.9515" "20.7828" "17.4960" "17.8101" "16.4547" "17.5681" "17.3424" "18.4742" "17.1193" "17.4362" "17.9202" "18.5511" "18.4441" "18.3256" "21.2190" "16.9135" "18.5726" "19.0680" "14.9430" "18.4834" "17.7707" "17.3553" "19.0901" "17.8259" "18.6384" "18.6822" "15.7759" "16.1428" "19.5126" "18.9414" "17.3218" "18.3874" "19.4451" "20.6458" "19.1976" "16.6395" "18.1757" "18.0280" "16.8906" "19.5271" "18.8154" "18.7650" "18.6216" "17.5974" "16.8653" "19.4019" "16.6306" "19.8186" "16.0393" "19.2899" "17.0548" "19.4700" "18.6301" "18.5469" "16.5081" "19.5441" "18.2462" "18.1626" "16.9080" "18.5985" "19.8992" "16.9195" "19.2145" "16.2451" "17.9489" "17.8139" "17.6510" "17.2247" "15.7258" "17.1203" "18.3395" "17.1903" "17.2042" "17.9817" "20.7891" "17.9458" "19.0804" "19.6262" "16.7311" "15.9969" "19.4670" "16.7191" "17.7936" "17.2777" "20.1686" "18.2325" "18.4178" "21.2922" "18.1588" "18.9108" "17.1802" "18.1821" "17.3988" "19.5058" "17.6959" "19.4682" "18.2151" "16.8429" "19.5860" "14.1326" "16.7524" "19.9870" "19.2917" "17.1917" "16.5470" "17.1800" "16.6246" "18.2584" "18.1839" "18.0767" "16.0166" "17.4775" "19.5080" "17.3066" "18.9888" "17.7158" "17.6759" "19.4029" "19.0364" "16.6883" "18.8593" "15.6788" "16.9937" "18.6169" "20.5065" "19.9824" "16.8229" "18.3136" "17.8659" "18.6802" "19.0047" "18.7730" "17.8746" "19.1545" "17.5241" "16.5158" "17.1259" "16.2221" "17.2818" "16.5121" "15.2923" "16.9119" "17.8163" "19.0153" "19.7049" "16.9339" "17.5950" "16.8594" "13.9005" "17.2819" "16.2686" "16.5356" "19.1361" "18.3570" "16.7222" "17.3239" "18.3045" "17.4047" "18.5580" "18.0113" "16.8654" "18.4287" "17.8337" "15.9606" "18.5352" "19.4127" "17.7673" "21.5112" "15.0666" "16.9353" "17.1217" "17.8374" "19.5471" "15.9115" "17.2873" "18.5382" "18.8559" "19.3998" "18.3504" "19.0781" "19.4376" "18.7865" "19.8601" "20.5322" "18.3544" "16.0102" "19.0994" "18.3403" "20.3185" "19.1256" "19.4155" "16.3416" "18.5397" "17.6401" "17.7707" "19.8563" "18.2279" "20.7143" "17.0912" "17.0033" "17.5172" "17.4012" "17.1367" "18.6713" "17.6473" "18.8350" "18.9774" "18.7042" "18.1435" "19.7775" "16.1613" "20.7003" "16.5577"
|
| 20 |
+
"P010" "Study_PROT10_19" "Pre" "45" "Male" "White" "Non-Hispanic" "18.6983" "17.1581" "17.4797" "16.9423" "17.3637" "17.3654" "18.7400" "17.7626" "18.7426" "18.9980" "18.1121" "19.9058" "17.0619" "19.7388" "17.2890" "17.4290" "17.9146" "18.6640" "17.7795" "20.9350" "17.8206" "18.3892" "19.4003" "17.1796" "19.0318" "17.1184" "18.7177" "14.9680" "17.2045" "18.0669" "16.6237" "17.4306" "18.2623" "18.7753" "19.1132" "17.4829" "20.4335" "20.0100" "17.7870" "21.0612" "17.7218" "17.7391" "16.3526" "18.1505" "19.4417" "20.1946" "17.6480" "18.0395" "16.5304" "17.8836" "16.7126" "16.5071" "19.8655" "15.8143" "17.5875" "18.3329" "17.3638" "16.9723" "18.7165" "18.2586" "19.0032" "18.8407" "18.2241" "18.2396" "18.0025" "16.2686" "19.4937" "17.9051" "16.3767" "18.3165" "17.5652" "18.7778" "17.4235" "18.1088" "16.4286" "17.2858" "16.6900" "18.0306" "18.4183" "18.3147" "18.0364" "17.3027" "17.6557" "18.2826" "20.0315" "18.9028" "15.9843" "16.8485" "17.5580" "18.6907" "18.4447" "18.7519" "16.7535" "18.0327" "18.6374" "17.7220" "17.4601" "19.9151" "17.6110" "20.1231" "18.6532" "17.9733" "19.2672" "19.3614" "19.0594" "19.2682" "17.1771" "16.2699" "18.7402" "18.7070" "20.0329" "18.0955" "19.7630" "18.0140" "18.0124" "17.2749" "18.9019" "18.1034" "20.3865" "17.9614" "16.4362" "17.1009" "15.0999" "16.1857" "19.3784" "19.8984" "18.0849" "17.2208" "16.5431" "16.4097" "17.0424" "19.2224" "18.2361" "20.1335" "16.1467" "14.8173" "17.9019" "19.5605" "18.8877" "18.8274" "17.6930" "18.1238" "17.7610" "17.7978" "18.6137" "17.0123" "17.6036" "16.4334" "16.9940" "17.9090" "18.3243" "16.4761" "18.4314" "17.8662" "18.3484" "16.9978" "18.4057" "15.5457" "18.2338" "17.9038" "20.1284" "19.3423" "18.1284" "19.3287" "16.7113" "19.5677" "19.3975" "18.9627" "15.5739" "17.1778" "17.2036" "19.6380" "21.4511" "18.6801" "15.5664" "16.5557" "18.4988" "17.6717" "17.8874" "18.5418" "14.9841" "18.6678" "18.1306" "18.6364" "17.4989" "19.1971" "19.6904" "18.3174" "18.7073" "17.4965" "19.2649" "19.6267" "17.4426" "16.8211" "19.4363" "18.8158" "17.8728" "18.1751" "18.8129" "18.3112" "17.3890" "18.3805" "16.9860" "16.3554" "18.2633" "17.9742" "17.2783" "17.3634" "17.6950" "19.2556" "18.6055" "18.2773" "17.0531" "17.4240" "19.5338" "18.4178" "16.8412" "17.0511" "18.2071" "16.7379"
|
| 21 |
+
"P010" "Study_PROT10_20" "Post" "45" "Male" "White" "Non-Hispanic" "17.4795" "17.9227" "18.0680" "18.1639" "18.2998" "17.3349" "20.5370" "17.5657" "20.4575" "19.7464" "18.2812" "16.2216" "17.5211" "19.7731" "18.7246" "16.8687" "16.3336" "19.3219" "17.3178" "20.8905" "17.4212" "18.7398" "18.3024" "16.7046" "17.5421" "19.2077" "17.5075" "17.0740" "20.7064" "18.7288" "17.1096" "17.0154" "19.4567" "19.5734" "16.8225" "17.6392" "19.5787" "19.7007" "16.3757" "19.8742" "18.2897" "17.3426" "15.7960" "18.4559" "19.9899" "17.5161" "18.9052" "17.6690" "17.4572" "17.5867" "17.8686" "17.0609" "18.0518" "17.9432" "17.6082" "16.2717" "18.2095" "16.1047" "19.7078" "18.3631" "18.6902" "17.7307" "18.2116" "19.6398" "16.3198" "15.5236" "19.2247" "19.0604" "17.2691" "19.1881" "17.3530" "17.9431" "18.4293" "19.2987" "17.9988" "16.5718" "20.0160" "17.5851" "19.0096" "17.6331" "17.1265" "17.4999" "17.8571" "18.3373" "21.3732" "17.5180" "17.4766" "18.2179" "18.9924" "17.8557" "17.1475" "21.8508" "18.3717" "18.6889" "22.9948" "21.0984" "17.8262" "15.9737" "19.3087" "18.6887" "21.1608" "18.5001" "18.6666" "17.7468" "18.5515" "18.4061" "13.9021" "18.4433" "18.4262" "19.2646" "18.3564" "17.8253" "18.7417" "18.0286" "17.3643" "18.1549" "17.7275" "17.0847" "17.5830" "19.2944" "17.9514" "16.7361" "17.9310" "17.7354" "18.0981" "19.3791" "16.7902" "18.6935" "17.1998" "17.1315" "17.4699" "20.3698" "18.3675" "15.2577" "16.8211" "16.0738" "17.1293" "19.5262" "18.3594" "20.7605" "18.1438" "19.4145" "17.6150" "16.9089" "16.8614" "18.1248" "17.0600" "16.5892" "15.9791" "19.1570" "15.6835" "17.1774" "17.5790" "16.7632" "17.8336" "17.3595" "18.9546" "16.4279" "18.8147" "18.5752" "19.0928" "20.1531" "17.2952" "18.1001" "17.7792" "17.0778" "17.1406" "17.2059" "18.6447" "17.2896" "16.3389" "19.8189" "20.0515" "19.3770" "21.6086" "15.7829" "19.0289" "19.7578" "19.4624" "19.0718" "17.6933" "17.9801" "18.5821" "19.0673" "18.0803" "18.4114" "18.6099" "19.4271" "18.9594" "19.5342" "21.2218" "18.6342" "16.2463" "18.7535" "19.0353" "20.0877" "19.2521" "19.9093" "15.3134" "19.1377" "15.8772" "18.0912" "19.5637" "15.3290" "16.4539" "17.0222" "17.6026" "19.5723" "16.8734" "18.8809" "17.4877" "18.6292" "19.2967" "18.2713" "19.4368" "19.3660" "16.4253" "16.8922" "18.4374" "17.6125"
|
| 22 |
+
"P011" "Study_PROT10_21" "Pre" "46" "Female" "White" "Non-Hispanic" "18.6471" "17.0664" "17.3541" "17.9951" "20.1072" "18.3022" "18.6090" "17.8228" "19.9349" "19.0229" "17.9420" "16.5233" "15.3845" "20.0158" "18.7687" "16.3935" "18.2744" "18.2951" "17.1989" "19.0413" "18.3857" "17.3631" "18.8311" "17.6277" "17.8639" "17.3394" "16.8567" "16.8480" "17.9852" "19.0945" "17.3167" "16.7067" "19.0054" "16.3511" "18.2727" "19.8517" "18.4502" "16.6624" "19.1488" "17.4538" "18.8586" "19.1931" "17.8235" "19.5201" "17.5906" "19.4498" "17.1959" "17.6373" "17.8469" "18.4998" "18.3635" "17.5615" "19.9595" "19.1474" "16.8910" "15.7496" "18.3239" "17.7381" "17.8362" "19.6013" "17.2485" "18.0310" "18.1089" "16.3196" "18.1848" "17.1698" "19.5171" "18.7703" "17.0917" "18.1679" "19.3143" "16.2394" "17.2622" "17.9133" "18.3665" "17.8540" "15.4226" "19.2637" "17.9233" "18.1212" "15.9248" "18.2813" "17.8815" "20.6618" "20.3067" "17.5108" "17.4923" "17.9725" "17.7734" "17.8105" "17.9404" "17.8706" "16.9686" "16.7591" "19.6434" "18.6320" "15.3434" "17.9374" "15.3734" "19.7153" "16.6191" "17.0913" "18.4337" "18.0341" "18.9218" "18.2394" "18.2957" "17.5905" "20.6834" "17.6054" "17.6099" "16.5631" "19.8122" "17.5559" "18.9109" "17.1561" "19.8440" "16.5275" "17.9162" "20.6904" "18.2325" "16.6165" "17.4110" "16.5439" "17.8062" "18.9524" "18.1762" "19.6117" "15.1400" "17.9522" "17.1674" "19.9059" "17.6225" "18.7150" "16.4664" "19.4073" "19.5754" "17.6474" "16.3602" "19.3222" "20.4504" "18.8312" "16.9756" "18.5334" "16.0912" "17.2168" "17.3939" "17.3062" "18.4223" "18.2732" "15.6306" "17.6089" "17.3401" "19.4299" "18.8226" "15.9586" "18.9898" "18.3103" "17.0888" "19.1081" "18.6843" "17.4557" "17.7888" "16.0506" "17.8585" "19.4571" "18.2047" "17.2126" "16.6456" "19.3917" "17.0608" "17.1524" "20.7200" "17.6372" "14.3808" "19.4771" "16.7137" "17.8981" "18.2525" "18.2067" "17.5118" "18.5175" "18.4782" "18.1532" "17.0576" "19.0722" "17.4825" "18.4195" "17.2242" "18.0200" "18.4587" "18.7793" "17.7950" "17.7860" "18.0094" "20.8498" "17.1590" "17.8392" "18.9617" "16.8265" "17.0942" "18.3894" "19.9251" "19.2837" "17.0215" "17.6353" "18.2889" "18.1080" "17.1819" "19.7932" "19.7963" "18.4457" "17.9531" "17.5072" "18.3882" "16.5676" "17.9692" "16.6442" "18.6865" "16.3815"
|
| 23 |
+
"P011" "Study_PROT10_22" "Post" "46" "Female" "White" "Non-Hispanic" "17.9408" "16.4853" "17.4068" "16.9000" "19.1342" "18.3023" "20.7843" "16.1050" "16.8203" "20.4451" "17.8948" "15.3491" "18.0422" "18.5735" "17.6925" "17.8717" "16.6438" "15.4030" "17.6875" "17.6785" "20.3902" "17.1591" "17.6609" "17.9991" "16.5940" "17.0683" "19.8153" "15.5992" "16.5651" "18.6556" "16.3288" "17.1259" "18.4340" "19.2907" "15.5271" "18.4029" "19.2184" "19.0255" "18.7068" "18.9403" "17.2592" "19.1379" "16.0385" "18.5071" "18.1213" "16.9705" "18.9214" "18.8815" "18.5704" "17.9517" "20.5335" "18.2626" "19.0338" "16.9013" "15.7558" "14.4972" "18.4308" "16.9835" "18.2687" "17.8261" "17.9178" "19.3389" "18.7038" "17.1312" "19.6680" "17.3806" "19.4942" "19.2952" "16.7891" "17.7302" "17.5181" "18.4418" "17.1726" "16.3887" "16.9891" "18.1045" "18.8103" "20.4426" "17.9223" "16.4100" "18.6732" "17.9168" "17.6611" "17.7391" "18.3287" "16.3783" "17.8397" "17.4793" "18.4494" "17.6212" "17.2557" "19.8428" "18.1953" "17.0958" "21.4561" "17.2342" "16.4353" "18.0167" "18.3168" "18.7607" "19.8929" "16.9479" "18.0061" "17.9204" "17.2706" "19.1264" "16.2368" "18.9392" "17.0147" "18.6139" "17.0210" "18.5552" "16.5054" "18.5508" "15.5903" "18.5453" "19.0517" "16.7186" "17.3283" "18.7124" "18.1410" "18.3671" "16.4811" "20.0028" "19.4385" "18.3171" "19.4696" "19.4889" "16.1831" "20.3534" "18.3760" "17.0133" "18.2524" "16.8638" "15.6767" "16.5734" "18.9814" "16.0927" "18.5702" "20.0469" "17.6604" "16.9653" "16.7477" "16.8356" "16.6178" "17.9716" "18.4025" "17.2402" "16.8743" "17.8491" "18.0080" "18.7437" "17.5569" "18.1122" "17.2597" "16.3220" "19.7701" "17.3930" "17.2598" "18.0095" "18.8286" "18.4857" "17.2088" "17.2533" "17.8774" "17.2687" "19.1036" "16.4460" "18.5388" "18.5328" "15.9859" "18.9286" "19.1051" "17.7499" "19.7382" "17.7657" "18.9833" "19.1767" "18.5067" "19.1592" "18.0575" "16.6023" "16.9117" "15.2032" "17.9463" "17.6426" "17.7344" "18.4645" "16.9959" "18.1859" "18.7742" "19.9996" "17.5190" "20.3174" "16.9000" "21.0094" "19.9923" "17.4166" "18.3627" "17.9129" "18.2279" "20.4209" "19.2302" "19.0512" "19.0862" "16.0069" "19.2757" "16.3750" "18.2647" "18.6179" "17.9022" "18.7310" "18.3748" "17.2165" "17.8996" "19.5262" "18.0976" "16.7467" "17.6029" "15.1009"
|
| 24 |
+
"P012" "Study_PROT10_23" "Pre" "30" "Male" "Black" "Non-Hispanic" "18.8700" "17.9274" "15.3641" "15.6595" "18.9420" "15.8657" "18.7846" "19.8457" "19.0413" "16.0747" "19.5347" "19.3933" "16.5171" "17.2769" "17.9955" "16.3758" "14.8169" "18.7258" "15.0734" "18.2283" "17.8527" "13.5653" "18.9115" "16.4000" "18.8961" "17.4366" "18.8908" "16.3258" "18.3343" "17.4662" "18.2672" "17.3299" "18.6787" "18.4982" "18.9368" "19.8985" "20.4316" "17.0184" "15.9410" "20.2934" "19.1207" "20.1557" "18.4433" "18.2877" "18.7760" "18.3976" "17.4198" "18.8740" "18.4605" "16.9655" "18.5812" "17.6297" "19.9695" "18.3032" "16.9541" "18.4045" "18.1663" "18.1552" "18.7660" "19.0626" "17.9389" "18.7501" "18.5301" "17.6902" "18.4668" "16.1293" "18.0354" "18.9990" "17.2438" "15.6790" "15.9441" "18.0546" "17.4402" "18.4381" "16.7150" "17.7758" "17.8948" "19.1963" "17.9071" "18.6474" "16.2925" "20.0093" "17.8637" "18.2611" "18.0753" "19.0559" "17.8299" "20.1630" "19.6552" "19.3163" "15.4552" "18.1770" "17.5997" "18.2332" "20.2167" "16.2024" "17.0425" "18.0197" "19.0921" "19.6454" "18.4997" "17.7451" "17.6422" "18.9601" "16.5985" "18.1413" "16.8563" "18.5074" "19.3561" "16.5109" "16.0768" "18.4629" "17.2081" "16.8385" "18.3339" "18.9920" "16.5694" "17.4649" "18.0171" "19.3873" "18.2918" "19.6009" "16.6722" "17.5901" "19.1452" "17.5288" "15.8776" "19.8919" "17.7864" "18.0075" "19.2081" "20.1646" "17.0091" "19.4887" "17.0121" "16.6052" "16.5685" "17.7288" "17.9808" "15.9407" "15.9143" "18.6272" "17.1965" "19.7115" "17.0063" "17.9001" "19.8302" "16.5766" "16.5659" "17.6273" "16.8281" "20.9123" "19.9917" "19.5520" "17.7980" "17.6732" "15.5107" "16.5882" "19.3864" "18.8902" "19.8595" "18.0297" "16.5976" "17.5506" "16.3296" "18.4281" "18.3348" "16.2658" "15.2349" "16.0270" "15.5040" "17.9096" "18.2302" "18.0261" "15.7888" "18.6217" "17.3203" "17.6861" "16.6987" "20.4428" "17.0131" "19.4293" "18.3782" "19.3518" "18.0189" "17.4738" "17.3032" "17.5651" "17.1172" "15.4874" "17.3677" "17.2207" "16.4985" "16.7647" "19.6284" "20.7515" "18.2940" "19.0681" "18.7845" "18.0741" "17.4512" "18.9602" "18.2835" "17.6577" "21.0891" "17.5308" "16.2865" "20.1836" "19.6108" "18.3640" "17.1219" "18.3079" "18.0899" "18.9610" "18.6208" "17.1881" "17.3025" "15.6681" "17.9970" "18.4927"
|
| 25 |
+
"P012" "Study_PROT10_24" "Post" "30" "Male" "Black" "Non-Hispanic" "18.1779" "17.0556" "15.6486" "17.9770" "18.6326" "17.5817" "20.4301" "17.3776" "18.2088" "16.8613" "17.8155" "15.2747" "17.3419" "18.2886" "17.5628" "18.2121" "16.2795" "18.9452" "15.0028" "18.1616" "19.2543" "17.6808" "18.1918" "16.7493" "18.7988" "16.0610" "17.7374" "17.9918" "16.6949" "18.3030" "19.9181" "18.5726" "17.2940" "19.3228" "16.4716" "19.0611" "19.1073" "16.3753" "17.6724" "18.3658" "18.4709" "17.5305" "16.8461" "17.8329" "18.8985" "17.3702" "18.2701" "17.0030" "19.1254" "17.3123" "17.9645" "16.9953" "17.8116" "17.4295" "17.3369" "17.4804" "18.8330" "17.5694" "21.9886" "19.1342" "17.1918" "19.6434" "18.2122" "17.8203" "19.6188" "18.7387" "18.9210" "19.4411" "16.8948" "16.4152" "18.3812" "17.7693" "18.1755" "18.2019" "15.5410" "17.4065" "16.6007" "16.6346" "17.0868" "19.4831" "18.1038" "19.1174" "17.1621" "17.2016" "18.2030" "17.8550" "16.8270" "18.4431" "17.0184" "19.3508" "15.8962" "19.8541" "17.5208" "17.5324" "21.0390" "19.2110" "18.2051" "18.9387" "18.9907" "18.8967" "21.6263" "20.0566" "16.3796" "18.5094" "18.3656" "19.0630" "16.1024" "18.6687" "19.0891" "20.6297" "19.4174" "18.7882" "18.7848" "16.3540" "16.5285" "18.0042" "17.3375" "17.5657" "17.5906" "18.5811" "17.4356" "16.6118" "16.1414" "16.5185" "18.1503" "19.6654" "16.8780" "20.0310" "17.5964" "19.2874" "19.2526" "19.9726" "18.3263" "16.5409" "17.2269" "15.9985" "16.7093" "18.7068" "17.5759" "16.5505" "18.4939" "19.3666" "17.3826" "18.1737" "17.5262" "17.5146" "17.2827" "17.0913" "16.0100" "16.5288" "18.2510" "17.5604" "18.4022" "17.8322" "19.1697" "16.5376" "18.9873" "16.7250" "17.9056" "18.8258" "19.1300" "18.7631" "19.1771" "17.7375" "15.6324" "17.8543" "19.1197" "16.0991" "19.5576" "16.8136" "18.9728" "17.9564" "19.8463" "16.5299" "18.4552" "16.9510" "17.8255" "17.2716" "15.8178" "17.8648" "16.8548" "17.6799" "19.0973" "17.2752" "17.6605" "18.4471" "18.2891" "18.5927" "19.2198" "16.7254" "22.1041" "18.6114" "18.0734" "19.5329" "17.3819" "22.7460" "16.3032" "19.3177" "16.8970" "16.9099" "17.9249" "16.9046" "16.6583" "18.2798" "18.8574" "18.7102" "16.3378" "19.3074" "17.2634" "19.5423" "17.0429" "17.7547" "17.8567" "18.0076" "18.9518" "17.0491" "16.0963" "16.8380" "18.6554" "16.1880"
|
| 26 |
+
"P013" "Study_PROT10_25" "Pre" "39" "Female" "White" "Non-Hispanic" "20.4261" "16.5545" "18.0888" "18.5230" "16.8808" "18.6908" "17.0065" "18.0030" "18.5181" "18.6632" "19.7089" "18.2905" "16.5975" "17.8008" "18.8154" "19.7750" "17.7198" "16.4673" "17.0230" "20.7930" "17.1405" "17.8453" "18.6265" "16.3059" "18.9978" "16.8096" "17.6456" "18.9367" "19.1073" "22.2216" "17.2578" "15.9409" "22.3225" "16.9287" "17.3628" "18.2222" "17.7437" "15.6694" "17.2105" "18.2101" "18.5430" "14.9373" "16.1882" "16.7997" "17.9245" "17.2475" "14.7742" "15.0832" "17.8339" "16.9142" "19.5850" "18.1617" "19.4533" "16.0774" "20.2842" "17.5481" "17.5748" "18.7147" "19.7225" "19.3400" "16.3925" "17.3992" "17.9348" "18.4746" "17.4511" "16.1694" "16.8557" "18.7372" "17.3291" "18.5533" "17.5537" "18.0457" "16.9177" "18.5634" "18.5180" "15.7652" "20.1853" "16.2495" "15.7231" "16.2891" "17.4211" "16.8797" "17.5120" "18.6911" "18.3252" "18.9810" "15.9430" "20.2466" "18.4185" "17.2432" "18.1203" "16.3383" "17.1230" "17.3328" "18.1562" "17.5666" "18.4582" "15.8968" "18.7895" "19.6257" "15.7471" "19.6322" "19.1511" "18.8270" "18.1402" "18.2666" "17.8097" "18.2199" "19.7147" "18.6352" "17.5446" "17.4520" "16.3045" "18.9690" "17.6812" "19.3866" "18.8584" "15.7365" "18.7516" "16.7552" "17.2556" "16.5724" "18.3470" "18.7094" "19.5124" "17.4877" "17.0719" "18.6326" "16.6892" "16.9843" "18.0208" "18.2572" "20.3092" "17.1468" "18.4649" "18.1839" "17.5901" "17.7874" "19.9023" "17.8796" "18.2677" "17.3903" "17.6986" "17.4895" "16.4859" "18.4268" "19.1582" "17.2477" "18.1856" "20.4602" "17.9618" "19.0477" "20.1934" "18.3593" "18.4544" "20.2615" "16.7626" "17.7387" "17.8369" "16.5552" "20.9686" "17.4575" "19.1584" "17.4947" "17.7629" "18.0311" "17.4711" "16.2106" "18.5297" "19.2317" "16.7354" "18.0720" "19.4190" "18.0708" "18.7545" "17.8238" "17.3179" "19.1285" "18.5113" "19.2384" "19.4990" "17.8002" "18.6393" "19.9907" "18.1058" "18.2891" "19.9874" "19.0583" "17.9957" "15.6790" "18.1234" "18.8503" "15.1893" "17.0011" "19.4291" "19.4146" "18.0005" "17.0780" "18.8307" "16.6791" "16.3672" "17.9859" "18.7995" "18.7340" "17.8936" "18.0107" "17.5231" "18.4601" "17.9746" "18.7588" "17.7723" "18.0426" "18.0194" "17.9751" "19.5594" "20.3021" "19.1658" "16.9647" "18.5579" "17.9378"
|
| 27 |
+
"P013" "Study_PROT10_26" "Post" "39" "Female" "White" "Non-Hispanic" "16.2893" "18.2533" "19.8603" "19.7325" "17.2207" "18.9697" "18.8926" "17.8734" "19.9776" "19.3449" "17.6149" "15.4121" "18.1094" "18.0371" "18.7021" "18.9118" "17.2129" "17.1722" "16.0571" "21.8357" "16.2952" "15.8282" "17.4631" "16.9845" "18.2952" "17.2243" "17.2865" "18.5183" "17.7823" "21.4819" "14.0489" "19.2159" "18.5859" "17.1609" "16.7699" "18.6853" "19.9268" "20.5874" "17.7591" "16.2345" "17.8243" "19.1945" "17.1033" "20.3083" "16.1594" "15.8142" "17.5388" "17.6212" "18.0563" "18.3030" "18.5996" "19.6802" "16.8717" "18.0299" "17.4048" "15.4380" "20.6311" "18.1230" "19.4557" "18.5907" "17.1081" "18.0190" "19.0676" "17.9112" "15.9719" "16.2929" "18.6041" "18.9799" "17.3391" "19.0248" "18.1311" "17.7103" "18.2487" "17.6961" "17.8834" "16.5824" "18.1390" "17.2738" "17.3872" "17.3405" "18.2764" "17.4683" "17.5614" "19.8394" "18.1247" "21.2451" "17.5513" "17.7569" "18.3657" "16.5876" "18.3809" "19.1000" "19.2967" "17.5589" "20.5557" "18.7750" "19.1274" "16.3742" "17.4567" "19.4977" "20.2359" "17.7343" "18.3618" "20.3824" "17.7631" "18.6681" "15.1991" "18.3926" "19.2523" "19.5413" "15.5697" "16.8536" "17.6445" "19.2484" "17.9182" "17.8622" "18.7985" "17.5797" "16.7606" "16.6451" "18.3718" "18.0034" "16.7701" "17.7763" "17.5503" "18.8145" "16.7976" "18.9537" "16.1743" "18.7375" "17.3834" "18.9580" "18.5546" "14.9820" "17.8674" "17.1418" "15.9391" "16.1306" "18.4521" "19.6228" "17.9143" "17.3998" "19.0577" "16.8729" "15.3051" "17.6476" "18.6755" "16.2127" "17.0037" "18.6991" "18.8868" "18.0337" "18.2181" "19.2691" "17.0136" "16.1775" "19.1484" "18.1557" "16.8699" "18.0683" "20.2144" "17.0599" "18.1158" "15.4853" "16.0792" "17.0943" "18.5695" "17.5524" "19.4239" "18.7713" "15.4529" "17.2565" "18.0116" "17.6587" "18.6908" "17.1931" "17.2360" "18.9222" "17.6041" "18.1413" "17.7769" "17.3064" "17.7930" "19.1312" "18.4497" "18.8674" "16.9116" "17.4159" "19.5961" "19.8568" "20.2170" "17.8837" "15.8716" "20.7898" "18.5685" "21.1000" "18.6777" "18.3172" "16.6586" "17.0565" "17.3390" "18.4693" "17.2370" "18.9059" "17.5295" "16.1125" "19.8180" "18.2359" "18.7532" "18.5433" "16.5070" "16.3798" "16.4681" "17.8326" "18.0757" "18.3861" "17.7601" "19.0822" "17.7587" "19.8747"
|
| 28 |
+
"P014" "Study_PROT10_27" "Pre" "67" "Male" "Other" "Hispanic" "19.3606" "17.0700" "15.4936" "19.1289" "19.0335" "18.9486" "18.2757" "18.2046" "18.1341" "17.7080" "18.6843" "18.1286" "16.7845" "17.7091" "16.5463" "17.3135" "19.4669" "15.2733" "18.2390" "18.4518" "16.3595" "18.1485" "20.8652" "15.7231" "17.1194" "17.4405" "18.8908" "17.6003" "20.2184" "20.4481" "18.4607" "16.6043" "17.9172" "17.7937" "18.9708" "16.8300" "20.2409" "16.9619" "19.5577" "16.5140" "17.0813" "18.7589" "15.4280" "17.1631" "18.3356" "18.9566" "17.7803" "17.3499" "17.6138" "19.7473" "18.0612" "17.6571" "17.2048" "18.5471" "17.0877" "19.3945" "18.0795" "18.1526" "20.6052" "19.4078" "18.1054" "17.5979" "18.9858" "19.5218" "16.4959" "17.6723" "18.1183" "18.0579" "19.9529" "17.5827" "18.7266" "19.9860" "18.1323" "18.0699" "17.5219" "18.5954" "17.7336" "18.8008" "17.2491" "18.3877" "18.4766" "17.4650" "18.1753" "18.2423" "20.2855" "18.1162" "18.1112" "19.1259" "17.7051" "18.5310" "18.0041" "18.1741" "16.9567" "18.8791" "18.7185" "19.5743" "18.9955" "16.2529" "18.6590" "18.1668" "18.0304" "17.1231" "18.2349" "19.8121" "17.3141" "19.0894" "15.8331" "19.0081" "18.4969" "19.7727" "17.2808" "18.7125" "18.2854" "17.8320" "18.3866" "19.2565" "16.9415" "17.0773" "16.4889" "17.8618" "18.6627" "19.1866" "17.5803" "17.7282" "17.5888" "18.3121" "17.5966" "17.8656" "19.1742" "17.0428" "19.1101" "15.9537" "18.6288" "18.7347" "18.7867" "17.1879" "16.6127" "18.1376" "18.6629" "19.4423" "17.4294" "17.0640" "16.6488" "16.7275" "17.8387" "18.6150" "17.1238" "17.9312" "16.9637" "17.8269" "17.6980" "18.1625" "17.6286" "17.7161" "19.1158" "17.9236" "15.7547" "17.0069" "18.7993" "19.0356" "20.7157" "19.4068" "15.4833" "16.3707" "17.2947" "17.3218" "18.6288" "16.6787" "20.2478" "17.1247" "16.3975" "18.0456" "20.6885" "17.3784" "17.0525" "18.3802" "17.4207" "18.2576" "17.1515" "17.8176" "16.7764" "17.3579" "18.0180" "17.7040" "18.0097" "19.2733" "19.0007" "20.9887" "18.0420" "16.6164" "20.1163" "18.2162" "15.5780" "18.5769" "19.1537" "19.2366" "16.9713" "16.7285" "17.7145" "18.6891" "19.3078" "19.4384" "17.4968" "18.3711" "17.3002" "17.7814" "17.5909" "17.7620" "20.4449" "17.2855" "19.5480" "19.2484" "16.2181" "19.2131" "19.1868" "18.3896" "18.0750" "19.5449" "19.9042" "17.2050"
|
| 29 |
+
"P014" "Study_PROT10_28" "Post" "67" "Male" "Other" "Hispanic" "18.0883" "16.5540" "18.1764" "18.2312" "18.8727" "18.1115" "20.9613" "18.8983" "19.2446" "17.8133" "18.5425" "15.9615" "17.0322" "17.5867" "19.6769" "18.0286" "18.2730" "19.6084" "18.2804" "19.3775" "17.4873" "17.5934" "19.7587" "18.7670" "19.5808" "16.6139" "19.5281" "16.6823" "19.2716" "19.7818" "17.1731" "17.9102" "17.7519" "15.6362" "17.7130" "19.3643" "17.8381" "17.9530" "16.9992" "17.0787" "18.3331" "20.1692" "15.8989" "17.7134" "18.4948" "17.1786" "18.2495" "17.4184" "16.4864" "17.5713" "17.7964" "19.3422" "19.3858" "16.4593" "18.8038" "16.9520" "16.8792" "18.5530" "20.0214" "16.6806" "17.1147" "17.2359" "20.7886" "18.6641" "17.9555" "15.6838" "17.3985" "17.6619" "17.1027" "16.3795" "16.9668" "18.4907" "17.2037" "17.0013" "16.7451" "18.5991" "17.3987" "17.6635" "16.8723" "16.2433" "17.4833" "16.7622" "18.6029" "18.3246" "19.1096" "19.1850" "16.6553" "18.9921" "17.7576" "18.1908" "16.1184" "20.9881" "16.4399" "18.0411" "22.0055" "19.0162" "18.9434" "16.1904" "18.7012" "17.6125" "20.2080" "18.3462" "18.8552" "18.2325" "18.8872" "17.6715" "15.2484" "16.9807" "19.7738" "17.4177" "19.0443" "19.3920" "15.7644" "17.8527" "19.6848" "16.0845" "17.4019" "18.5241" "17.0925" "19.7138" "19.9529" "16.3902" "17.5571" "18.3197" "17.9775" "19.0829" "17.8139" "16.8758" "17.9725" "20.1358" "19.2116" "19.4595" "18.7654" "18.9399" "17.1932" "17.8795" "18.8048" "18.6429" "18.4557" "17.8342" "19.4766" "17.4127" "17.8606" "16.7742" "16.2723" "16.3544" "15.6013" "17.6919" "17.5840" "18.6355" "18.0080" "18.1395" "15.8618" "18.2740" "19.5058" "14.6661" "18.1215" "17.8745" "16.3038" "19.4368" "21.0239" "19.5667" "17.4375" "19.9265" "19.5007" "18.6300" "18.0294" "17.6175" "15.4567" "20.6320" "16.5395" "16.8063" "21.9923" "17.7308" "18.8854" "19.7825" "17.0188" "17.8827" "18.3290" "17.7279" "19.1389" "18.2170" "18.2950" "17.8947" "18.7869" "18.9100" "18.0705" "17.4894" "19.1620" "18.3747" "20.4469" "19.6533" "17.3266" "20.2332" "18.0995" "21.9157" "18.5559" "19.9012" "17.9876" "19.8850" "19.8777" "18.7541" "17.1524" "17.3406" "17.7542" "18.5324" "16.4866" "17.9413" "18.5352" "19.9686" "18.4230" "16.5730" "18.1417" "18.5788" "18.5939" "17.9214" "17.3507" "17.2380" "18.7232" "15.5109"
|
| 30 |
+
"P015" "Study_PROT10_29" "Pre" "45" "Male" "White" "Hispanic" "17.5691" "16.3824" "17.1100" "18.2546" "19.3435" "17.3769" "19.7459" "17.7697" "17.0410" "19.1135" "18.5977" "18.5650" "16.9100" "18.6669" "16.9742" "17.8649" "17.8792" "17.7145" "17.2858" "19.2591" "19.4869" "18.0745" "18.8211" "18.2252" "17.6365" "17.4946" "18.7864" "19.8480" "18.7427" "18.6595" "18.1611" "18.3124" "17.6191" "17.7211" "18.2787" "17.5453" "19.6397" "17.6915" "18.0966" "17.9132" "18.4897" "18.1773" "16.9493" "18.4103" "19.7866" "19.3131" "18.2018" "17.2841" "17.5329" "17.6291" "19.5311" "18.4886" "19.0939" "15.7587" "16.0508" "16.0752" "18.3615" "18.1028" "19.2720" "18.9181" "18.3441" "18.2141" "21.0443" "17.6010" "17.4343" "18.3794" "20.0175" "16.1970" "17.1834" "17.6352" "18.0498" "18.5854" "18.2709" "19.4695" "18.5235" "17.3720" "19.3509" "18.2611" "19.4631" "16.5667" "18.6107" "18.7273" "19.3255" "18.7412" "19.5388" "18.1276" "17.2346" "17.8963" "16.6261" "16.8000" "17.6920" "19.4923" "16.5204" "18.0036" "19.5251" "16.9013" "19.1769" "17.3065" "16.5586" "19.5008" "19.4642" "18.1202" "16.9238" "17.9615" "16.3262" "19.3271" "17.9743" "19.3049" "18.9990" "18.8051" "18.9476" "17.5203" "18.8887" "17.3842" "17.6297" "16.8879" "19.1982" "17.9875" "17.5781" "19.3877" "19.9274" "17.4822" "18.2366" "18.3154" "18.3776" "19.6167" "17.2064" "17.2376" "17.3357" "16.7520" "17.6121" "17.7403" "17.5880" "18.3265" "17.4447" "18.5413" "19.4621" "16.7501" "19.3482" "15.7066" "17.3400" "19.4736" "17.3816" "17.4531" "17.0222" "19.4457" "17.5220" "15.8824" "16.0433" "19.6165" "18.0567" "19.3510" "18.3078" "19.0834" "19.5064" "16.5151" "17.7820" "17.6805" "18.3130" "19.9919" "20.0349" "17.8744" "18.3469" "17.9637" "18.0065" "15.7262" "19.9870" "17.7120" "17.8050" "18.1139" "17.7857" "16.3192" "20.9269" "16.9257" "17.1071" "18.4208" "17.8136" "19.9873" "17.0840" "18.0134" "19.3562" "17.1315" "16.2721" "18.6622" "17.0663" "17.7141" "19.4006" "18.1312" "15.9726" "16.6749" "17.3391" "17.0951" "15.6760" "16.5538" "18.5392" "19.1689" "17.5799" "18.4839" "15.3027" "19.5758" "17.2852" "18.7105" "18.1736" "18.9847" "16.7421" "17.9480" "16.8198" "18.9123" "18.2776" "17.2120" "17.5823" "16.5535" "18.1488" "18.1091" "19.6578" "16.9174" "17.1571" "18.9530" "18.5059" "16.4940"
|
| 31 |
+
"P015" "Study_PROT10_30" "Post" "45" "Male" "White" "Hispanic" "18.1756" "16.7930" "16.4583" "18.7154" "18.4137" "17.3021" "20.8693" "16.3798" "18.8826" "16.8314" "20.0295" "15.9673" "15.7336" "17.7073" "17.8394" "18.9182" "16.7057" "17.7587" "18.1308" "19.8644" "17.4000" "16.9477" "17.7974" "19.3571" "20.0930" "16.4926" "18.5965" "16.7134" "15.6259" "19.1877" "17.1429" "17.7801" "19.5653" "17.2254" "17.9114" "16.7125" "18.4513" "18.9722" "17.1854" "17.9829" "19.6798" "18.6909" "18.5883" "19.0708" "19.8607" "16.5547" "19.8927" "17.4642" "18.1375" "19.9492" "17.7558" "16.2535" "17.3621" "14.7212" "16.4024" "15.3438" "19.2705" "16.9216" "18.2876" "18.0943" "17.3283" "17.4231" "21.0822" "17.4248" "14.7921" "16.8166" "17.5377" "18.4745" "18.6846" "18.7749" "17.4117" "16.5118" "19.1033" "20.4723" "17.4027" "16.5538" "15.3973" "17.8942" "16.6946" "17.5700" "18.7459" "19.1029" "16.7398" "18.5815" "19.4488" "16.8661" "16.6941" "19.0249" "17.4621" "18.2985" "18.0312" "20.7576" "15.7665" "17.8268" "21.3128" "17.8935" "16.1277" "17.9459" "17.4848" "18.3020" "21.7149" "17.2719" "16.4156" "18.0088" "18.7477" "19.0454" "15.6167" "18.2428" "18.8269" "17.4111" "18.7876" "17.0057" "18.4449" "19.6486" "19.6303" "19.7011" "18.1301" "16.9401" "19.2610" "17.9976" "19.7565" "17.4255" "15.2192" "20.1605" "19.6913" "19.2067" "17.0981" "18.3129" "16.7695" "20.6283" "15.7704" "19.1312" "17.1719" "16.5396" "16.3930" "17.1755" "19.1389" "17.8118" "17.7211" "16.9624" "18.4221" "18.1576" "17.2497" "15.2439" "17.1977" "16.3675" "15.1277" "17.6194" "17.3118" "19.3355" "17.4150" "18.6561" "19.0277" "18.7515" "18.5404" "18.0984" "19.1834" "17.1028" "16.3788" "18.6752" "18.0186" "18.0330" "16.8788" "14.4711" "17.9554" "17.8917" "18.1562" "17.0540" "18.8963" "18.2869" "14.2282" "19.4484" "19.8304" "19.3076" "19.4619" "17.9119" "17.0549" "18.3003" "17.0458" "18.7533" "18.4720" "15.7016" "16.9070" "19.4256" "18.3034" "17.3789" "18.5565" "18.7762" "15.5857" "18.4531" "21.9545" "19.6310" "16.1284" "20.6367" "18.3505" "19.8615" "17.3748" "19.3745" "14.9992" "18.3254" "15.3317" "19.6485" "18.3670" "18.7714" "17.2394" "17.9939" "16.1694" "19.2537" "18.5888" "18.0578" "17.5938" "19.1574" "19.1792" "16.7150" "20.6507" "17.8424" "16.9630" "16.9135" "17.2639" "17.2120"
|
| 32 |
+
"P016" "Study_PROT10_31" "Pre" "68" "Male" "White" "Non-Hispanic" "18.1054" "16.9262" "16.9325" "18.1166" "19.0266" "19.7131" "19.8044" "16.7358" "17.5377" "18.8841" "18.3289" "18.5107" "15.3404" "18.2652" "17.5168" "15.8709" "16.2699" "18.3318" "17.0067" "16.4098" "18.4825" "18.9904" "17.9852" "16.7448" "16.6305" "15.7923" "21.2066" "19.0763" "18.6138" "18.2918" "17.2984" "16.4732" "18.0979" "17.8718" "17.2307" "18.7243" "20.7162" "17.5761" "17.4075" "20.8216" "19.0527" "16.5253" "18.6538" "19.6234" "17.9893" "16.7776" "18.5782" "15.9462" "19.3531" "18.7283" "17.9565" "18.7052" "18.4522" "19.5341" "16.6431" "18.9184" "18.0322" "18.9878" "18.6411" "17.1756" "17.3420" "16.6151" "19.1518" "18.1707" "17.7880" "18.4011" "17.9675" "19.1326" "16.1019" "19.1643" "18.2724" "15.9697" "17.8074" "17.7836" "17.4832" "16.6615" "17.4360" "16.6453" "16.8725" "16.2876" "17.6117" "18.0513" "18.3434" "19.3874" "17.8574" "18.8161" "17.4416" "18.3335" "16.9987" "18.6278" "17.1009" "16.4396" "18.7603" "16.4814" "20.1580" "17.0113" "19.2945" "18.0570" "19.9628" "17.3686" "17.6685" "17.8198" "16.3795" "19.3958" "17.8953" "17.1653" "17.5022" "15.7271" "20.1263" "20.6752" "18.9575" "18.3267" "18.4081" "18.8448" "18.8332" "17.1893" "17.7555" "15.5869" "18.3182" "18.2561" "17.6494" "17.9859" "19.3580" "17.7595" "19.4861" "18.2795" "17.0854" "19.7572" "17.4784" "19.1183" "16.2452" "17.4496" "16.9054" "17.6882" "19.0196" "16.8337" "18.0768" "18.2109" "17.2829" "17.8246" "16.7134" "20.0956" "17.4263" "15.3914" "19.5733" "19.2294" "18.2688" "17.6982" "16.0688" "17.6430" "17.3538" "17.3293" "17.1996" "16.9151" "19.7986" "15.8662" "16.3358" "16.2935" "16.4734" "18.6748" "20.3059" "18.8044" "17.4452" "18.3669" "17.9060" "17.8864" "19.4317" "16.6958" "18.5187" "16.1082" "19.2101" "19.8230" "21.3277" "16.0722" "18.4781" "18.9861" "14.6895" "18.8513" "17.1463" "17.2593" "18.9046" "18.6587" "18.1377" "19.4472" "16.7067" "19.8490" "19.3278" "20.5387" "18.8841" "14.9896" "20.8225" "15.4974" "18.7202" "15.3584" "20.4042" "19.4937" "17.7284" "17.8719" "18.2752" "18.8715" "17.7211" "18.1999" "19.6288" "18.3276" "18.1060" "17.5134" "16.5859" "17.9183" "17.7532" "19.4383" "18.4344" "18.3748" "17.1319" "17.4873" "20.0684" "18.6038" "19.1413" "17.5010" "19.6664" "18.1832"
|
| 33 |
+
"P016" "Study_PROT10_32" "Post" "68" "Male" "White" "Non-Hispanic" "17.8684" "15.3765" "18.9732" "18.7317" "17.3853" "16.3955" "21.6891" "18.3460" "18.9999" "18.0175" "19.0702" "14.5824" "17.3542" "17.3892" "16.9054" "15.2902" "17.3000" "17.7796" "16.8514" "18.3798" "18.8087" "18.6625" "18.4481" "17.6230" "17.7920" "14.3385" "18.5014" "16.3817" "17.7798" "17.3333" "16.7606" "18.9069" "18.2865" "16.7454" "16.1344" "18.9281" "18.3738" "18.2989" "15.9591" "19.0109" "18.6613" "19.9621" "18.3686" "19.1904" "18.5887" "17.3716" "19.2578" "16.7181" "18.0923" "17.7616" "17.8430" "16.9059" "19.4457" "20.3872" "19.2236" "15.5514" "17.5102" "17.5658" "20.4785" "18.4493" "17.1105" "18.0963" "17.3564" "17.1843" "18.6861" "17.6219" "18.5276" "21.4639" "16.9780" "18.1646" "20.9673" "18.5824" "17.1662" "19.4653" "17.5597" "16.2527" "18.2227" "15.6701" "18.2043" "18.1956" "16.5238" "18.1698" "19.2696" "18.4558" "17.9983" "19.6730" "18.1142" "19.3018" "15.8503" "18.6703" "17.8101" "21.6221" "15.7634" "15.9628" "21.3197" "18.1891" "17.9266" "15.6670" "18.1450" "16.7661" "17.8411" "17.2088" "16.2654" "19.8911" "18.8214" "16.6889" "14.7705" "17.8325" "20.8336" "17.0657" "19.1598" "17.3253" "17.9158" "19.4242" "18.7467" "16.9637" "18.8634" "17.9684" "17.9857" "20.4661" "17.0536" "17.4358" "16.7651" "18.1246" "20.0476" "17.7249" "17.8121" "18.1765" "15.9217" "18.3967" "18.3145" "19.1631" "17.0499" "17.5990" "16.3824" "19.0413" "16.7726" "17.8937" "16.7989" "17.2640" "17.1970" "17.9192" "17.0013" "17.6939" "18.6319" "18.5457" "17.0432" "15.1629" "17.2588" "17.2432" "16.9531" "19.3770" "17.9691" "17.3267" "18.6808" "16.5070" "19.8576" "16.9877" "17.7711" "17.2745" "18.9439" "19.3174" "18.7233" "17.9782" "17.4829" "18.1935" "16.9957" "17.3745" "17.5353" "17.0882" "19.2561" "17.1676" "18.6374" "18.2505" "20.3208" "17.5081" "16.6220" "20.2321" "19.3009" "18.6253" "19.2211" "18.2663" "16.8220" "17.5611" "19.1357" "18.0987" "18.9342" "17.6558" "19.8429" "16.3158" "21.0914" "18.4840" "18.3144" "18.7104" "18.7222" "20.8117" "19.0089" "19.6029" "14.3146" "19.1111" "18.1865" "17.7242" "18.8923" "18.6084" "15.6329" "17.5405" "17.0938" "18.7574" "18.2739" "17.6089" "16.9213" "16.0574" "16.7518" "19.6111" "19.1428" "17.0153" "16.1693" "15.2870" "18.0305" "16.1906"
|
| 34 |
+
"P017" "Study_PROT10_33" "Pre" "53" "Female" "White" "Non-Hispanic" "18.8164" "16.5224" "18.4880" "18.6472" "18.9857" "18.6508" "17.9357" "17.7654" "17.4712" "18.8584" "18.5158" "17.6607" "15.2483" "19.8618" "16.9951" "16.5989" "17.9213" "17.3538" "16.3022" "17.5008" "17.8364" "16.9765" "19.1523" "17.5786" "19.7730" "17.8523" "18.6759" "18.1154" "17.0982" "19.7810" "17.9819" "16.3404" "17.5670" "16.4052" "17.7419" "19.8486" "16.7073" "19.0952" "17.9438" "18.6657" "19.3714" "17.4091" "16.2369" "19.3060" "17.0882" "18.0132" "18.9271" "18.6539" "18.8941" "18.6806" "19.4140" "18.2214" "18.8093" "17.6128" "17.6453" "16.9366" "17.5723" "18.6425" "18.0723" "19.0110" "19.8387" "14.8882" "19.4528" "16.4348" "19.0758" "17.6381" "16.9857" "17.4864" "18.1484" "17.8534" "18.3307" "18.3118" "17.6120" "19.5745" "15.9158" "18.0111" "16.4201" "17.3777" "18.1391" "16.7705" "19.6365" "18.4957" "18.2846" "17.8526" "18.0984" "17.8425" "17.4309" "17.9167" "18.7052" "18.2867" "17.0634" "18.5670" "17.3634" "17.7724" "18.2719" "20.3297" "19.3587" "16.9590" "17.5525" "17.9067" "19.8269" "18.2729" "16.6814" "17.5857" "19.7538" "16.8488" "17.7937" "19.1010" "17.6706" "17.5844" "18.6312" "18.2666" "16.6523" "17.6987" "18.1208" "19.0250" "18.9700" "17.5516" "18.4188" "17.9250" "16.9658" "19.5551" "19.1883" "16.9763" "17.7328" "16.7582" "17.5950" "18.3439" "15.4752" "18.7192" "19.2982" "18.4303" "18.6019" "21.0829" "16.6952" "18.2505" "17.6902" "18.3669" "18.4859" "17.5615" "17.4836" "20.0230" "15.4276" "17.3295" "20.4054" "16.0048" "16.1497" "17.4313" "17.8302" "15.9535" "18.4210" "20.1773" "17.8251" "17.2007" "17.1135" "16.6738" "17.9517" "16.6091" "16.6499" "18.9881" "18.9405" "19.8129" "17.9459" "17.8704" "18.0029" "17.7134" "18.1673" "17.4881" "17.6434" "18.1145" "18.0492" "18.0317" "18.5125" "19.2374" "17.7376" "18.0589" "18.7853" "20.4345" "16.6563" "18.5135" "17.6169" "18.0966" "18.2574" "18.7415" "17.1756" "19.7567" "18.6641" "17.5949" "16.5761" "18.7146" "19.6937" "17.6662" "15.6172" "18.2798" "17.2285" "18.9405" "19.1468" "16.5459" "19.1703" "16.5263" "19.5320" "18.0642" "18.8236" "18.9173" "17.5861" "17.0897" "16.2300" "18.9109" "18.1985" "17.1447" "17.8066" "18.6443" "17.6022" "17.9505" "19.1898" "18.8086" "17.1096" "17.3947" "18.0344" "16.6458"
|
| 35 |
+
"P017" "Study_PROT10_34" "Post" "53" "Female" "White" "Non-Hispanic" "18.6256" "18.1735" "17.9296" "16.9687" "19.1713" "17.7487" "20.9178" "17.3160" "19.6390" "17.6050" "16.6570" "14.0243" "16.3371" "20.0358" "19.2185" "18.8298" "15.5606" "17.9588" "18.1027" "18.0815" "19.2307" "16.9408" "19.6537" "18.5198" "17.0230" "17.6039" "17.0614" "17.8534" "19.5859" "20.1083" "18.2261" "19.0031" "18.5510" "17.5454" "18.2646" "18.4289" "18.5228" "17.3415" "16.4956" "18.8519" "18.5602" "17.5348" "17.5010" "18.2672" "17.9204" "19.1412" "17.0620" "16.4472" "17.8755" "17.6116" "17.7948" "20.9622" "19.0942" "17.8939" "19.0589" "15.7192" "18.9801" "15.7033" "18.1595" "18.5423" "19.4222" "17.7515" "16.9031" "17.4290" "19.3272" "19.5208" "16.9811" "19.4104" "19.0659" "17.7329" "16.8509" "18.4041" "16.7547" "17.7279" "18.1464" "16.8500" "16.8951" "17.0728" "16.1416" "17.7112" "17.1417" "18.7769" "16.7895" "18.6789" "19.1328" "18.1120" "17.0284" "15.2329" "18.0099" "19.4920" "17.2979" "22.0840" "17.9731" "18.8811" "20.1761" "18.0377" "20.2254" "17.0198" "17.2678" "18.0311" "20.2395" "15.8701" "17.4881" "19.5060" "17.5809" "19.9190" "13.2100" "17.0783" "17.4254" "18.8444" "18.3195" "18.7878" "16.8683" "17.8958" "17.4405" "18.5599" "17.8860" "17.1459" "17.2782" "18.5379" "17.2238" "17.8052" "15.7081" "15.4945" "19.1353" "16.9274" "16.7469" "18.0226" "15.8252" "18.6762" "16.4983" "17.1021" "18.0035" "18.0176" "17.1514" "15.4666" "17.2733" "17.7267" "17.7100" "15.9520" "17.2872" "18.0208" "16.8310" "14.9217" "16.8981" "16.0071" "16.8200" "16.0015" "17.3749" "17.1368" "20.8730" "15.1644" "17.8172" "18.9203" "17.9916" "17.2281" "19.2195" "15.5758" "19.2266" "16.4858" "18.4580" "19.9349" "15.5937" "17.6629" "17.4798" "17.7457" "16.8815" "18.2044" "18.4473" "18.3615" "16.3142" "16.9182" "20.3905" "17.9027" "20.2697" "17.9968" "18.5511" "19.8634" "17.5840" "17.0116" "16.7865" "19.9029" "18.1118" "19.2466" "19.3622" "16.3320" "17.4621" "19.0802" "16.3954" "17.3226" "21.2094" "17.5338" "18.0973" "20.8175" "18.4037" "20.2760" "18.9783" "18.2478" "17.4345" "17.9327" "19.1461" "17.3653" "18.5190" "19.1366" "17.4681" "18.9253" "17.5244" "17.3033" "16.9718" "19.3723" "17.9654" "17.3642" "20.4640" "18.0120" "20.5314" "19.4763" "18.4071" "16.3181" "17.7312" "16.9272"
|
| 36 |
+
"P018" "Study_PROT10_35" "Pre" "35" "Female" "White" "Non-Hispanic" "19.2047" "17.9626" "17.2450" "18.2865" "19.4810" "16.6948" "17.4675" "17.3198" "20.1307" "18.0650" "17.8022" "15.3667" "16.1651" "17.3395" "15.4796" "17.8123" "15.5529" "18.6354" "17.9987" "21.2615" "18.9339" "18.1952" "18.9528" "18.5998" "20.4495" "16.6373" "18.4087" "19.5975" "19.4735" "20.2071" "16.1273" "16.5210" "19.1398" "18.4975" "17.4878" "17.4357" "17.9136" "17.2675" "15.0629" "17.9420" "20.1981" "17.4443" "15.5028" "18.7606" "18.9751" "18.2260" "17.2355" "17.7066" "17.6140" "17.6494" "18.7267" "17.8614" "17.7447" "16.9068" "17.9203" "17.3575" "18.7050" "18.0807" "19.4958" "17.9565" "15.2057" "18.5953" "19.1549" "17.7071" "17.8878" "17.2077" "16.6442" "15.7775" "16.2557" "19.1573" "17.3022" "17.6660" "17.7388" "20.0264" "16.0646" "16.7535" "17.9097" "18.8213" "18.6187" "17.2709" "18.8113" "18.2443" "18.4757" "17.4269" "18.2153" "17.1355" "15.0482" "19.2314" "16.9300" "18.4146" "18.3936" "17.9497" "17.9377" "16.6627" "19.2734" "18.2882" "17.5814" "15.6782" "20.4934" "19.6674" "18.6468" "18.4270" "17.7932" "19.2317" "18.5746" "19.5228" "16.5513" "16.1274" "18.1265" "19.8655" "18.2317" "18.0477" "19.7468" "18.6579" "18.6217" "20.8258" "18.3515" "18.2152" "18.2031" "17.3852" "18.0535" "16.9028" "18.9531" "18.0276" "18.5997" "17.9176" "18.6536" "19.1679" "17.5661" "17.0327" "17.6975" "16.9637" "17.8079" "19.3697" "18.7909" "18.3800" "20.1348" "18.5272" "17.5445" "19.0495" "17.5836" "19.1737" "16.2913" "17.0710" "17.0389" "17.8171" "17.7735" "16.8899" "15.5478" "19.9835" "16.5748" "17.8478" "20.7624" "19.0261" "18.9868" "17.6289" "16.1332" "17.7530" "17.5535" "18.6369" "20.3833" "17.3214" "17.9851" "17.1282" "15.4160" "17.0040" "18.3561" "17.5514" "16.6305" "18.8551" "17.5784" "18.2098" "20.9261" "19.1023" "17.6089" "19.7932" "16.1427" "19.2948" "17.2623" "17.3897" "16.8789" "18.7556" "16.8518" "17.5726" "18.2467" "16.9462" "18.0525" "19.0981" "20.3143" "16.4290" "18.4241" "19.6721" "18.8200" "16.7211" "17.5736" "17.9562" "19.3918" "18.5893" "18.6541" "18.1262" "18.9221" "19.4921" "18.2365" "18.2800" "16.5698" "16.4271" "16.3424" "16.9357" "18.8931" "16.3840" "18.3180" "17.7528" "18.4905" "17.0796" "20.7674" "16.3349" "20.6042" "18.6319" "19.0408" "18.6009"
|
| 37 |
+
"P018" "Study_PROT10_36" "Post" "35" "Female" "White" "Non-Hispanic" "17.8349" "17.3512" "15.3529" "17.1889" "18.8466" "16.4464" "21.4239" "18.4461" "19.9269" "18.8719" "16.8369" "14.7072" "17.3526" "19.7429" "17.8711" "18.6556" "18.3413" "18.3424" "19.4563" "19.8511" "17.7022" "17.4073" "19.5607" "17.8952" "18.8922" "18.2042" "17.0240" "19.2839" "20.7311" "17.9662" "17.4923" "17.7466" "17.5946" "18.9871" "16.7733" "19.2993" "20.9314" "18.5650" "15.8653" "15.7256" "18.9587" "17.4225" "16.8822" "16.7748" "18.9416" "17.7333" "17.1066" "18.9068" "17.4452" "16.3597" "19.0642" "20.9547" "18.4812" "17.1088" "17.8590" "15.3340" "17.5011" "17.3777" "18.6208" "18.1725" "17.6927" "17.9664" "18.1133" "17.6263" "17.8573" "17.1430" "17.3518" "21.4447" "20.0590" "18.4783" "18.8286" "18.0504" "17.0841" "17.9911" "18.1645" "17.0834" "18.5695" "18.0445" "19.6650" "16.2264" "16.3689" "18.2783" "17.5951" "19.9601" "19.2445" "16.3411" "15.8318" "17.0044" "15.1509" "17.4941" "19.5737" "20.8434" "16.1031" "17.2424" "18.8666" "17.7676" "17.2264" "15.9795" "17.7728" "18.7896" "20.0323" "17.5096" "17.9078" "19.2998" "18.2019" "17.8446" "14.0579" "16.0518" "18.4416" "19.5154" "17.8664" "18.2319" "17.8109" "16.3975" "17.3038" "19.6415" "20.7196" "18.3176" "18.1034" "19.3378" "16.6528" "18.3756" "16.2979" "16.7940" "18.4997" "18.0883" "18.3356" "17.5744" "17.8352" "19.4925" "17.3672" "17.0568" "16.6756" "16.3929" "19.3875" "19.7324" "18.9551" "19.0997" "17.9439" "19.0320" "18.8514" "18.1372" "17.4343" "18.1950" "17.1219" "17.8818" "17.8631" "15.5907" "17.0990" "17.9552" "19.8614" "19.0216" "18.2955" "19.1656" "16.5903" "18.4985" "19.6225" "17.3641" "19.1445" "17.5398" "19.5513" "17.5861" "17.2148" "17.3110" "16.0318" "16.7638" "17.9287" "15.4141" "19.4808" "18.9662" "14.6375" "17.7815" "19.4268" "19.8919" "19.7667" "16.9651" "18.5893" "20.1639" "16.9525" "18.6666" "18.6133" "16.0181" "18.0264" "16.1139" "18.8170" "18.8479" "18.4068" "18.1112" "18.5877" "20.5039" "19.4580" "17.2094" "16.2035" "21.1683" "17.2013" "21.2655" "18.6208" "19.4872" "16.8225" "18.0272" "18.2869" "18.3197" "19.0253" "19.5386" "15.9074" "18.4999" "15.9016" "18.1587" "17.6230" "17.8271" "19.9599" "20.1398" "17.2216" "17.5284" "18.6953" "16.9859" "18.6316" "16.0267" "18.9529" "19.1262"
|
| 38 |
+
"P019" "Study_PROT10_37" "Pre" "47" "Male" "Asian" "Non-Hispanic" "17.9465" "17.4460" "18.8896" "18.1331" "18.3591" "16.8870" "17.0057" "16.9008" "18.9849" "19.8480" "16.4972" "15.6723" "15.7974" "18.9755" "18.1400" "16.7418" "17.3863" "17.0827" "18.1411" "18.5081" "16.3033" "17.4393" "19.3273" "16.7135" "19.1907" "17.3371" "18.6380" "20.4537" "16.7566" "17.1690" "18.5473" "16.9016" "19.4786" "18.4328" "17.7141" "17.6961" "16.5520" "17.9170" "19.2361" "18.0785" "20.0470" "17.1207" "17.6908" "17.7879" "18.1193" "17.7070" "16.7762" "17.9635" "16.3209" "18.2961" "17.9399" "16.8621" "19.1550" "16.2323" "17.8883" "18.4402" "17.9567" "19.4348" "21.4607" "16.3079" "18.5089" "18.1903" "18.0634" "18.3575" "16.7736" "14.6430" "18.2979" "18.1889" "16.5362" "18.1815" "18.2793" "16.8045" "16.2808" "19.4589" "17.0541" "16.9128" "17.8226" "17.8262" "17.2523" "18.2502" "16.9002" "17.7204" "18.2608" "19.0514" "19.5383" "16.4879" "19.0308" "18.1631" "17.8136" "18.7739" "17.5628" "18.5995" "16.0299" "18.9118" "19.0380" "20.5229" "18.1649" "15.2493" "18.1340" "16.8140" "15.8473" "17.5609" "17.8736" "18.0936" "17.9542" "19.3986" "16.4339" "16.9799" "20.1727" "18.9030" "19.9420" "16.5529" "18.4230" "17.9681" "17.9360" "17.4617" "20.7393" "18.2198" "19.2283" "16.7871" "19.6277" "18.1530" "18.9549" "19.1408" "18.5310" "17.4142" "17.7246" "19.1152" "17.2923" "18.5785" "18.7485" "16.7565" "17.4588" "18.1848" "17.0467" "16.5301" "19.0006" "19.5589" "17.4599" "19.3266" "17.4939" "16.5320" "18.8960" "17.9792" "17.4434" "18.3320" "18.0464" "18.9945" "18.9964" "19.1345" "15.8522" "16.5845" "18.1699" "17.0832" "19.5299" "16.7449" "16.2796" "18.0923" "17.7895" "20.6184" "19.6473" "18.6218" "18.1235" "19.5283" "19.1004" "17.9246" "16.4352" "16.9611" "17.1561" "17.5178" "19.8563" "17.9606" "21.6546" "17.3798" "17.4472" "17.8377" "17.3775" "18.9829" "15.2532" "17.3810" "17.9489" "17.8042" "18.2909" "17.8931" "18.7674" "18.8790" "17.9992" "19.0390" "17.7519" "17.2571" "18.7159" "18.5929" "18.2015" "17.5858" "18.9912" "18.3155" "17.8627" "18.4251" "17.6088" "19.0303" "18.5133" "18.9840" "17.3082" "16.2298" "18.6401" "18.4955" "16.2113" "18.3519" "17.0731" "17.0794" "17.3733" "18.2900" "16.8852" "16.6321" "17.9140" "18.0102" "18.3834" "17.3953" "18.5962" "16.6467"
|
| 39 |
+
"P019" "Study_PROT10_38" "Post" "47" "Male" "Asian" "Non-Hispanic" "18.7218" "16.8077" "18.4236" "19.1322" "17.7696" "17.1017" "19.1046" "16.7162" "20.9447" "16.2354" "17.7005" "14.7495" "16.0512" "18.5775" "19.0339" "17.7820" "15.1561" "19.0263" "16.1215" "20.4012" "18.0085" "18.1035" "16.9345" "17.7061" "18.2416" "18.3618" "17.8162" "19.4914" "17.6499" "17.9220" "17.6189" "18.1353" "17.9843" "16.6206" "17.6105" "18.1895" "17.0969" "19.3462" "15.9442" "18.7461" "19.9689" "18.2422" "18.6342" "19.7224" "18.3554" "17.3642" "18.7255" "18.5852" "17.2273" "19.9944" "16.7466" "18.9513" "18.2285" "17.3560" "20.3050" "16.3093" "18.8449" "16.9217" "18.9219" "18.0249" "18.9776" "19.5658" "16.9547" "19.8028" "17.9047" "17.0052" "18.0348" "18.0985" "16.2682" "20.0993" "17.0971" "16.4507" "18.4494" "18.7600" "17.4321" "16.3724" "19.8839" "17.0634" "17.1939" "19.2537" "17.1879" "16.6037" "18.6917" "18.4492" "20.6890" "19.3139" "17.4933" "18.4354" "17.4060" "19.1791" "17.1251" "20.2197" "16.6035" "16.4925" "20.2622" "20.1069" "18.8753" "18.9378" "18.7490" "20.0913" "20.8102" "18.9263" "18.8687" "19.2064" "17.7084" "20.3877" "16.2395" "18.2248" "20.7831" "16.6174" "17.9989" "16.7639" "17.0358" "19.7460" "17.9014" "16.3172" "18.1715" "17.0625" "17.6019" "19.7726" "17.8927" "17.0436" "16.6410" "17.1221" "18.6808" "17.9893" "17.3205" "17.5745" "14.9759" "18.4519" "18.2617" "19.7516" "18.6556" "15.8909" "16.7972" "17.0974" "17.6052" "19.9420" "16.3990" "18.9950" "18.6556" "19.8307" "16.3292" "16.3894" "17.7293" "16.1489" "18.0685" "15.3308" "16.0543" "16.4367" "18.9647" "16.9072" "19.3116" "17.6885" "17.6495" "17.2008" "19.2339" "17.4999" "19.4403" "17.0424" "19.8419" "19.7043" "17.4365" "17.9636" "17.6817" "18.6855" "17.8540" "16.9132" "18.8016" "17.1972" "17.6019" "17.1447" "18.6065" "19.1732" "18.0414" "18.1003" "18.3845" "18.7967" "16.7606" "17.1222" "18.4898" "19.3463" "14.8852" "17.2479" "19.4063" "19.2810" "17.8179" "19.2806" "18.9847" "18.7683" "19.0903" "19.5968" "17.4585" "19.0506" "19.4493" "22.1450" "18.5537" "19.9145" "15.0148" "19.2619" "18.7250" "18.5026" "19.5271" "17.1272" "18.2038" "16.9438" "17.7644" "19.1858" "18.0256" "18.1134" "17.3332" "17.5551" "18.6063" "18.5230" "17.2848" "16.6404" "18.3709" "17.5465" "16.3797" "18.9892"
|
| 40 |
+
"P020" "Study_PROT10_39" "Pre" "31" "Female" "Other" "Hispanic" "18.5455" "16.9678" "18.4545" "15.7993" "16.9261" "16.7308" "18.2276" "19.0087" "17.7838" "17.8123" "19.7883" "15.5633" "17.0189" "16.4707" "18.8886" "18.4716" "18.7015" "19.3581" "18.0019" "20.1792" "18.8078" "16.3097" "18.8725" "18.2008" "18.4434" "15.1715" "19.6423" "18.2297" "18.0951" "18.2647" "17.0542" "17.4927" "19.3862" "17.5764" "16.0654" "18.3456" "18.2070" "16.7018" "18.3946" "18.7788" "19.3678" "17.0723" "17.1066" "17.9832" "17.9267" "17.2418" "16.4248" "18.3966" "17.5507" "18.0997" "18.6745" "19.9551" "17.1677" "17.6537" "17.1050" "18.1917" "19.6782" "17.6332" "19.7671" "19.3195" "17.5720" "17.5982" "19.0202" "17.1744" "19.6513" "17.2018" "16.0332" "17.2041" "16.7295" "17.3500" "16.3197" "18.8855" "15.6616" "17.3362" "16.4348" "17.6120" "19.9049" "17.9853" "17.9256" "17.9163" "18.5830" "19.1855" "16.0080" "16.5195" "17.8593" "17.1677" "19.7906" "18.3233" "16.7826" "18.9182" "18.0083" "15.6934" "19.2015" "18.6300" "18.9966" "20.0674" "16.2010" "17.5863" "19.6819" "16.7208" "16.7959" "17.5195" "18.1722" "18.4723" "18.7162" "19.2730" "16.3029" "17.8739" "18.9078" "17.1630" "17.3908" "17.2283" "18.3543" "19.1599" "18.2735" "17.1096" "16.7581" "15.6632" "17.7489" "17.8708" "17.7249" "18.2743" "17.5108" "18.2468" "20.3340" "16.6556" "17.2147" "20.8890" "18.0392" "15.9309" "19.8647" "18.3911" "17.3801" "19.1172" "17.0761" "17.9253" "15.4979" "19.8751" "18.2654" "18.0687" "18.9483" "20.5532" "18.3245" "16.2633" "19.6000" "16.1770" "18.1302" "16.2179" "16.9382" "16.7861" "17.4445" "19.1823" "19.2513" "18.5389" "15.9212" "17.4422" "18.2942" "13.7636" "19.6402" "18.8843" "19.7739" "16.3544" "16.5851" "17.6426" "17.7819" "19.1184" "16.4525" "17.3540" "18.1165" "19.0407" "16.3468" "18.1176" "18.6082" "16.2743" "16.5850" "17.1818" "16.8555" "16.3460" "17.6649" "18.5524" "17.7055" "17.3105" "18.1476" "16.6422" "18.6528" "17.3627" "18.9078" "17.8479" "17.7055" "16.0131" "17.7818" "18.1796" "16.2851" "16.3518" "17.1009" "20.2693" "16.1192" "19.1580" "19.5400" "17.8770" "17.9241" "20.0065" "17.4837" "17.3404" "18.7826" "17.9214" "18.0503" "16.6251" "18.8476" "17.1863" "16.6652" "21.1945" "17.2522" "20.4808" "18.2273" "19.0543" "17.0697" "17.9672" "19.4742" "17.6507"
|
| 41 |
+
"P020" "Study_PROT10_40" "Post" "31" "Female" "Other" "Hispanic" "17.7677" "18.5023" "16.9388" "17.1246" "17.3212" "19.1815" "21.4729" "19.4794" "19.8577" "17.3123" "17.0766" "14.5320" "18.1940" "18.4377" "18.4302" "17.4170" "18.6611" "20.0392" "17.1637" "20.2477" "16.0279" "18.1240" "19.3890" "16.3980" "18.2588" "16.7236" "19.5471" "17.1732" "16.9764" "16.9271" "17.2536" "18.4651" "18.7114" "17.2457" "16.8296" "19.4322" "17.7822" "18.4137" "16.0022" "19.2469" "18.2801" "18.3921" "17.0117" "17.4170" "20.6585" "19.0173" "18.0689" "17.2756" "18.8948" "15.9499" "17.5805" "18.1366" "18.1599" "16.5007" "17.2655" "17.0532" "17.5005" "15.7434" "19.5733" "17.3344" "18.3282" "19.0167" "16.8588" "18.5477" "18.0105" "17.0928" "18.1181" "19.1492" "19.5321" "18.7491" "17.1666" "18.4259" "16.2648" "16.4778" "18.0860" "17.6857" "18.2188" "19.1740" "18.6485" "17.0905" "17.5341" "19.9188" "16.9875" "18.0314" "16.9210" "17.4041" "18.2309" "17.0196" "18.6141" "18.7341" "16.2946" "19.6207" "18.1163" "17.5827" "20.8255" "18.5073" "18.7130" "17.9412" "17.0796" "19.9109" "19.7550" "19.8071" "18.6635" "19.5086" "18.0172" "18.3866" "14.4786" "17.6179" "20.3233" "17.5259" "17.9105" "16.5871" "18.0300" "19.2408" "17.6661" "18.5243" "16.5789" "18.2595" "17.6889" "17.2333" "17.5196" "16.5942" "17.7323" "18.6925" "17.5510" "17.5340" "17.8601" "19.9523" "15.2471" "19.4642" "18.1749" "19.0416" "18.0485" "17.4988" "16.4410" "17.1408" "18.0398" "17.0451" "19.9873" "19.4912" "17.7050" "18.5005" "18.5294" "16.2995" "17.0399" "18.7691" "17.0601" "16.7318" "14.0768" "17.7749" "16.8845" "17.6933" "18.3515" "16.2997" "18.8672" "16.3338" "17.7261" "16.2875" "20.4645" "20.2206" "20.1749" "19.8675" "17.1265" "18.3100" "18.7006" "18.4442" "18.7508" "14.3692" "17.8649" "21.2380" "17.1185" "17.3423" "17.5931" "17.3030" "22.0062" "18.4885" "17.2438" "18.0250" "19.0175" "17.8317" "16.4691" "16.0044" "17.5071" "19.7297" "18.6943" "16.5889" "20.4456" "18.8695" "18.2250" "18.6726" "20.1455" "16.8970" "18.2504" "20.2407" "20.2688" "21.5166" "17.7822" "18.6025" "14.7932" "16.8655" "17.9443" "18.3071" "19.1592" "17.4506" "17.5537" "18.2438" "16.1671" "18.0108" "17.4857" "16.0468" "18.3849" "18.2664" "17.2851" "21.0840" "20.5601" "19.4126" "17.5735" "18.3663" "15.9488" "16.8221"
|
src/statlens/data/examples/11_Continuous_limma_multi_group_synthetic.tsv
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"subject_id" "sample_id" "subtype" "age" "sex" "race" "ethnicity" "metab_1" "metab_2" "metab_3" "metab_4" "metab_5" "metab_6" "metab_7" "metab_8" "metab_9" "metab_10" "metab_11" "metab_12" "metab_13" "metab_14" "metab_15" "metab_16" "metab_17" "metab_18" "metab_19" "metab_20" "metab_21" "metab_22" "metab_23" "metab_24" "metab_25" "metab_26" "metab_27" "metab_28" "metab_29" "metab_30" "metab_31" "metab_32" "metab_33" "metab_34" "metab_35" "metab_36" "metab_37" "metab_38" "metab_39" "metab_40" "metab_41" "metab_42" "metab_43" "metab_44" "metab_45" "metab_46" "metab_47" "metab_48" "metab_49" "metab_50" "metab_51" "metab_52" "metab_53" "metab_54" "metab_55" "metab_56" "metab_57" "metab_58" "metab_59" "metab_60" "metab_61" "metab_62" "metab_63" "metab_64" "metab_65" "metab_66" "metab_67" "metab_68" "metab_69" "metab_70" "metab_71" "metab_72" "metab_73" "metab_74" "metab_75" "metab_76" "metab_77" "metab_78" "metab_79" "metab_80" "metab_81" "metab_82" "metab_83" "metab_84" "metab_85" "metab_86" "metab_87" "metab_88" "metab_89" "metab_90" "metab_91" "metab_92" "metab_93" "metab_94" "metab_95" "metab_96" "metab_97" "metab_98" "metab_99" "metab_100" "metab_101" "metab_102" "metab_103" "metab_104" "metab_105" "metab_106" "metab_107" "metab_108" "metab_109" "metab_110" "metab_111" "metab_112" "metab_113" "metab_114" "metab_115" "metab_116" "metab_117" "metab_118" "metab_119" "metab_120" "metab_121" "metab_122" "metab_123" "metab_124" "metab_125" "metab_126" "metab_127" "metab_128" "metab_129" "metab_130" "metab_131" "metab_132" "metab_133" "metab_134" "metab_135" "metab_136" "metab_137" "metab_138" "metab_139" "metab_140" "metab_141" "metab_142" "metab_143" "metab_144" "metab_145" "metab_146" "metab_147" "metab_148" "metab_149" "metab_150" "metab_151" "metab_152" "metab_153" "metab_154" "metab_155" "metab_156" "metab_157" "metab_158" "metab_159" "metab_160"
|
| 2 |
+
"S001" "Study_MET11_1" "Subtype_C" "47" "Female" "White" "Non-Hispanic" "17.2362" "17.7608" "16.7967" "18.2323" "18.3734" "19.3641" "18.7469" "17.8702" "19.8167" "17.6433" "16.6129" "18.1211" "17.5556" "18.1962" "17.9143" "17.8955" "18.2622" "17.0140" "18.6414" "18.1063" "19.1339" "19.2350" "18.9948" "18.6130" "16.9463" "16.8005" "19.9900" "18.2746" "18.0095" "16.3919" "19.0459" "20.2976" "17.9523" "18.7504" "18.5341" "18.0042" "19.8940" "17.3297" "18.2850" "19.3755" "20.0726" "15.7518" "17.4483" "16.6752" "18.6814" "19.0932" "18.9911" "18.0275" "18.0856" "19.9664" "17.8938" "19.5789" "19.2491" "18.1799" "17.4843" "17.6879" "19.1986" "18.0636" "17.0458" "17.1986" "16.7571" "18.7566" "17.6019" "15.0118" "19.5287" "17.5550" "17.4853" "16.7204" "18.3895" "17.0683" "17.0714" "16.6443" "15.2981" "17.7614" "16.5677" "18.9669" "19.1661" "18.5093" "18.5125" "16.4410" "17.2132" "17.3653" "19.0943" "19.8614" "17.8518" "15.2987" "20.1482" "17.4366" "17.6534" "17.8040" "18.1509" "17.5344" "18.0309" "19.7036" "16.9317" "18.7320" "18.6767" "17.4440" "19.2682" "18.9549" "18.0923" "18.0704" "17.8813" "16.8075" "17.5622" "17.9545" "19.2109" "17.3299" "19.0540" "17.9899" "18.6758" "17.0684" "17.4311" "17.9994" "17.0564" "18.9187" "17.5538" "16.6412" "18.3377" "17.6498" "18.6759" "18.7246" "19.1255" "15.6485" "17.3435" "19.6212" "19.6489" "17.8145" "18.5588" "18.2137" "17.6534" "17.0895" "15.8103" "18.7480" "18.0591" "18.5939" "18.1571" "19.5869" "16.2142" "17.1185" "18.7416" "19.0337" "17.9594" "17.1382" "18.4042" "17.4976" "19.7613" "19.5782" "18.5474" "18.2813" "18.3336" "19.8839" "16.9362" "16.3834" "19.0114" "19.8582" "20.1577" "18.7426" "16.3208" "18.0930"
|
| 3 |
+
"S002" "Study_MET11_2" "Subtype_B" "50" "Male" "White" "Hispanic" "17.5798" "17.1281" "19.9988" "17.4988" "16.7648" "18.0554" "18.4622" "19.5477" "17.7056" "19.6648" "19.1779" "18.4460" "16.5530" "18.4689" "17.6466" "16.9231" "17.9581" "19.7900" "20.5723" "19.7919" "17.2069" "20.1461" "17.5315" "19.1010" "16.5015" "18.3021" "20.0346" "17.9126" "18.3193" "17.2338" "17.9180" "17.7784" "18.7938" "19.1807" "18.5275" "18.5604" "16.0065" "16.3652" "18.5692" "18.6269" "18.0633" "17.2723" "16.1395" "19.3022" "17.7839" "18.8308" "17.7865" "16.4145" "18.6392" "16.4838" "18.3773" "18.5532" "19.2680" "19.6191" "17.9971" "19.6164" "19.7498" "18.8064" "18.7826" "14.3639" "15.5189" "20.4707" "18.6091" "16.2076" "18.8662" "19.1393" "17.4270" "19.8902" "18.3529" "19.2491" "17.1860" "17.4919" "19.4067" "19.8459" "16.9384" "19.2708" "17.5649" "15.8185" "17.6619" "15.9529" "18.6711" "17.5641" "16.0986" "17.9123" "17.2323" "17.0067" "18.0188" "18.3243" "18.5805" "18.6888" "18.5896" "17.8070" "18.2996" "17.4311" "18.9098" "19.4055" "19.3093" "19.0344" "18.1703" "17.3011" "17.6956" "19.4057" "18.3089" "18.4237" "16.7973" "18.4092" "17.6031" "18.5379" "17.2858" "17.4546" "16.8924" "17.6135" "18.2000" "16.4316" "20.3440" "17.4642" "19.5927" "16.6574" "17.1657" "18.4368" "19.8808" "18.3260" "18.7668" "16.3649" "17.3296" "19.3491" "19.6662" "18.9281" "18.8326" "16.7488" "19.6558" "16.3352" "16.8642" "17.1169" "21.0339" "17.5203" "20.2994" "18.7639" "17.1620" "17.4313" "17.2961" "18.4473" "18.2268" "17.6170" "20.6614" "17.5826" "18.8975" "18.1266" "16.8587" "17.5420" "17.0580" "17.9638" "17.3763" "17.1092" "15.4991" "16.2798" "16.7167" "16.2319" "20.1324" "19.1400"
|
| 4 |
+
"S003" "Study_MET11_3" "Subtype_C" "55" "Female" "White" "Hispanic" "18.9772" "16.9462" "16.6381" "18.0513" "16.3297" "18.5474" "17.8339" "19.0798" "18.0702" "17.9490" "18.1740" "18.6906" "17.7058" "17.0374" "18.3205" "18.0059" "18.3833" "17.2479" "16.5269" "16.9560" "18.4290" "20.0378" "18.3433" "17.6282" "17.7529" "17.3701" "19.3919" "18.7464" "14.9105" "19.1081" "19.8672" "17.8194" "18.3063" "19.0367" "17.0569" "19.5203" "18.5570" "15.7466" "17.9234" "18.3687" "19.3525" "17.3534" "14.5549" "16.9755" "18.1838" "19.0537" "17.5561" "16.9328" "17.2460" "16.8783" "15.2639" "17.7753" "18.5547" "18.9708" "18.2122" "17.2570" "17.9947" "18.8239" "19.6523" "17.0348" "18.7037" "15.6293" "18.1332" "16.8998" "17.5929" "17.5073" "16.3052" "18.8657" "18.8832" "17.6571" "17.5853" "18.6585" "17.7088" "17.8564" "18.0179" "18.4151" "18.0953" "18.9127" "17.3893" "16.2518" "17.8211" "18.8383" "18.5384" "18.7548" "17.7674" "18.0736" "18.4156" "17.1748" "17.0262" "16.2637" "18.5020" "17.3236" "18.2376" "18.4724" "17.0909" "17.6913" "18.7404" "19.0859" "18.4512" "19.5982" "17.2293" "18.8084" "15.8539" "17.6194" "16.3040" "16.0008" "17.1094" "19.0096" "16.5423" "17.1156" "19.6003" "17.7162" "17.7341" "15.5021" "17.4342" "18.6976" "16.1703" "18.6959" "17.4169" "18.3513" "17.1337" "19.1899" "17.3234" "17.7324" "16.7628" "17.7821" "18.1983" "16.5585" "17.5338" "18.6676" "18.1331" "17.8267" "18.6500" "18.1055" "20.1641" "17.2244" "18.9705" "18.2722" "19.0441" "15.8157" "17.6036" "19.0249" "18.7896" "16.0511" "18.6321" "17.8884" "20.1558" "18.0353" "17.0093" "16.4480" "15.7019" "17.8656" "18.3130" "15.2028" "16.0626" "18.6062" "16.2727" "18.4238" "17.2228" "17.4700"
|
| 5 |
+
"S004" "Study_MET11_4" "Subtype_B" "29" "Female" "White" "Non-Hispanic" "18.6434" "18.1953" "18.1989" "18.2141" "16.5917" "17.4086" "18.1310" "17.1959" "15.9651" "17.8477" "18.1379" "17.5253" "18.3991" "18.5354" "18.3676" "17.2298" "19.3748" "16.6768" "17.7037" "18.3102" "18.0961" "19.5836" "18.9078" "19.9693" "16.1406" "19.4889" "19.7076" "17.7777" "19.3652" "17.4480" "19.8762" "17.5965" "17.4641" "21.1057" "17.6042" "18.1319" "19.6188" "16.1804" "18.6412" "18.6415" "17.3654" "17.2091" "16.8864" "17.4236" "17.3918" "16.2950" "19.7295" "17.9359" "17.4517" "16.4811" "17.1195" "17.2535" "18.6795" "17.5759" "19.0712" "17.2576" "19.8111" "17.6864" "16.9730" "16.6385" "16.2031" "17.2778" "18.4429" "17.8220" "19.2349" "17.5671" "18.9330" "17.8467" "18.6528" "18.1790" "17.5252" "18.3731" "17.7198" "17.5898" "16.8467" "18.3377" "17.9807" "14.4217" "20.0958" "18.3500" "19.0239" "18.9742" "16.5157" "18.7022" "19.6565" "16.2683" "20.3014" "18.0283" "17.4483" "17.5562" "17.9637" "17.0539" "18.7374" "19.0019" "17.6816" "19.7112" "17.4309" "18.0702" "20.1871" "19.4530" "17.7384" "17.6111" "19.0692" "18.9070" "17.0912" "19.2646" "19.8888" "19.3427" "18.9092" "17.9128" "19.0420" "18.6502" "18.0770" "18.4867" "20.2722" "19.5830" "18.7057" "16.9596" "17.8117" "18.0271" "19.9287" "17.9231" "18.5445" "16.2256" "17.6621" "18.7077" "20.0546" "17.0845" "18.7264" "17.9818" "17.5575" "17.4277" "17.3051" "18.2829" "18.3314" "18.5387" "18.7253" "19.3810" "17.0168" "17.6070" "17.9076" "17.4824" "19.2352" "16.5189" "18.8156" "17.8109" "19.2188" "18.8694" "17.0015" "16.8939" "17.3171" "18.9748" "16.8297" "17.2731" "15.7126" "15.7837" "17.7685" "18.2593" "17.8059" "19.3881"
|
| 6 |
+
"S005" "Study_MET11_5" "Subtype_C" "66" "Male" "White" "Non-Hispanic" "19.3862" "16.0751" "16.6893" "17.1860" "16.9451" "17.8777" "16.5749" "16.8929" "18.6085" "16.8565" "17.0705" "18.7432" "18.2260" "16.8393" "17.0032" "17.2361" "18.1878" "16.1851" "17.6161" "18.8280" "16.6901" "17.8280" "17.6402" "19.3186" "18.0074" "20.0311" "20.4769" "19.2465" "18.0861" "17.7072" "17.6894" "17.8980" "17.5079" "19.1915" "20.2700" "17.1647" "18.8030" "18.3447" "17.0128" "19.2413" "19.9963" "16.8392" "15.2414" "18.9272" "19.2576" "17.7718" "16.8795" "16.1302" "16.4754" "16.5546" "15.0729" "18.0610" "18.6684" "17.3267" "17.7504" "20.2584" "19.2566" "17.7434" "18.6647" "15.1257" "18.5635" "17.8300" "16.7266" "16.2853" "18.2130" "18.1871" "15.9167" "19.7378" "15.9730" "19.4974" "19.2678" "18.9652" "17.1681" "19.4665" "15.6110" "17.6025" "19.6083" "20.1401" "19.2793" "17.5699" "18.1687" "16.6956" "18.8242" "20.1790" "19.6935" "17.5530" "19.1303" "17.9398" "17.7949" "17.5558" "19.6173" "18.6359" "17.3860" "19.0209" "19.2281" "19.3636" "20.3432" "17.1827" "18.7947" "18.3136" "18.0479" "19.6459" "18.4340" "15.9539" "18.4706" "19.5209" "16.2651" "18.8218" "17.4206" "16.5058" "16.7335" "17.9761" "17.7775" "18.9462" "18.3379" "18.0716" "17.3763" "16.1022" "17.0528" "18.6928" "17.8696" "18.1459" "17.8769" "18.9084" "17.9821" "18.2831" "16.8610" "17.1225" "18.4808" "17.4720" "19.6740" "18.6116" "17.8916" "20.5824" "20.2711" "17.5960" "17.7817" "21.0137" "17.8629" "17.8934" "16.9139" "19.5970" "18.3365" "17.8461" "18.3381" "18.5505" "20.6890" "20.0128" "18.2723" "18.8062" "17.3661" "17.6621" "16.3809" "15.9748" "19.1641" "18.8998" "16.7273" "18.4290" "19.9519" "19.1812"
|
| 7 |
+
"S006" "Study_MET11_6" "Subtype_D" "63" "Female" "White" "Non-Hispanic" "17.4657" "18.3956" "17.5060" "17.2364" "18.0289" "19.1123" "19.2752" "18.6200" "16.1198" "15.7378" "16.4336" "19.3754" "16.9765" "17.2898" "17.7220" "18.7430" "17.4937" "17.4941" "17.5762" "18.1385" "17.6873" "17.9300" "18.9082" "20.4273" "18.7601" "18.3311" "19.8944" "18.1697" "17.4370" "17.4763" "18.4982" "18.3391" "17.8696" "18.6054" "17.2855" "19.6136" "19.2189" "17.8959" "18.1321" "18.9539" "20.8710" "18.6570" "16.8666" "18.1940" "20.8392" "19.8796" "20.4725" "15.4844" "15.4476" "17.0339" "15.9653" "19.3264" "19.3253" "19.3332" "16.9689" "19.4416" "20.7112" "18.2066" "18.4924" "16.4690" "15.2928" "17.4189" "17.2399" "17.3972" "18.9048" "17.7587" "15.1087" "18.4171" "19.0656" "19.6873" "16.5963" "18.1676" "18.3549" "18.2729" "16.4780" "17.0151" "18.7036" "20.5383" "19.8850" "15.3407" "17.3916" "16.8380" "19.2790" "18.5563" "19.1154" "17.5055" "18.9375" "19.0411" "18.3827" "17.8302" "19.4519" "19.6036" "17.4575" "17.8092" "15.3157" "16.4499" "17.0595" "17.3394" "17.9485" "18.9216" "17.1352" "20.3755" "17.8104" "16.7846" "16.9034" "16.7240" "18.6612" "19.3744" "18.7977" "17.3774" "16.8256" "18.9192" "17.0100" "18.6274" "15.9590" "16.9676" "17.7565" "17.9621" "18.4705" "18.7525" "19.5605" "15.5050" "17.7824" "17.9784" "19.1311" "19.4292" "19.3871" "17.2575" "19.2403" "17.8121" "17.1040" "19.4569" "18.7360" "18.9524" "20.0798" "18.6273" "15.9919" "19.6754" "17.2466" "18.0019" "18.3633" "17.6715" "16.0776" "18.1165" "18.8862" "15.3576" "17.7982" "18.3761" "19.1993" "16.8733" "18.2558" "15.7144" "18.5540" "17.1292" "16.9026" "21.9135" "17.2217" "16.2595" "15.8669" "18.8691"
|
| 8 |
+
"S007" "Study_MET11_7" "Subtype_A" "59" "Male" "Black" "Non-Hispanic" "19.4464" "14.9982" "17.2562" "16.9664" "18.5635" "18.5224" "18.5879" "18.3235" "17.5609" "19.4078" "15.8442" "18.2154" "18.6154" "18.2078" "18.5529" "17.8205" "18.4390" "17.8015" "18.2652" "20.6676" "17.8911" "19.3405" "19.4937" "20.2363" "16.5759" "20.2073" "18.5573" "18.1748" "18.7044" "19.3288" "19.2148" "15.9837" "17.2245" "20.8174" "17.9009" "16.2886" "16.3197" "18.7027" "16.2652" "18.7025" "19.1221" "17.4991" "16.2857" "17.5931" "19.4802" "17.2189" "18.6225" "14.6847" "16.9390" "16.9703" "16.6255" "17.6059" "19.9594" "17.9198" "17.2964" "16.5669" "18.9073" "18.0185" "17.7184" "16.4529" "19.4200" "19.1905" "17.5293" "16.1449" "17.8632" "17.3185" "19.1286" "18.5373" "17.6843" "18.9137" "16.6831" "19.8562" "17.2403" "17.8243" "15.8456" "17.2115" "18.6257" "17.6266" "17.4865" "17.4372" "17.3866" "17.7429" "17.4293" "18.4246" "18.0707" "17.0966" "18.8169" "18.0657" "18.7627" "19.5621" "20.6137" "18.5263" "15.7877" "17.3531" "16.4617" "19.5452" "19.5773" "17.2915" "18.7800" "19.3202" "18.4227" "21.2030" "17.7545" "18.2983" "17.8046" "17.8556" "16.4369" "19.4649" "17.5844" "16.2754" "17.0196" "17.3184" "19.0491" "18.8361" "20.2420" "18.0686" "17.6349" "15.8849" "17.5911" "16.0836" "18.3543" "18.4141" "18.0290" "18.1561" "18.4612" "19.3049" "18.9583" "17.6917" "17.1040" "17.6534" "19.0394" "19.3832" "17.9545" "19.0701" "20.9466" "18.7091" "20.6361" "18.3972" "17.0787" "18.5217" "17.7444" "19.8359" "20.7959" "18.4769" "18.1098" "18.9466" "19.4929" "18.5762" "18.1495" "16.1332" "17.3116" "18.6614" "18.8447" "17.9366" "19.5249" "15.8084" "19.4044" "17.8146" "18.7929" "18.4302"
|
| 9 |
+
"S008" "Study_MET11_8" "Subtype_A" "63" "Female" "White" "Non-Hispanic" "17.4495" "15.6443" "16.4315" "17.0386" "17.2159" "19.6933" "18.2009" "20.9491" "18.2787" "18.6110" "16.4286" "17.6496" "18.2451" "18.6801" "17.8576" "17.9244" "17.8650" "18.7888" "16.9473" "18.0158" "18.8521" "17.5565" "17.7629" "19.5095" "17.6834" "16.8135" "15.1070" "17.6778" "20.0377" "19.1142" "18.2536" "19.1737" "16.4483" "19.7388" "21.1368" "17.6315" "17.4818" "16.2954" "16.7350" "18.7345" "19.0464" "17.8680" "16.9471" "16.7582" "16.1383" "17.0237" "17.6611" "16.9875" "15.5715" "18.0577" "16.6033" "17.3382" "18.8785" "19.0133" "18.6318" "16.3758" "17.6036" "18.7210" "20.9536" "15.3730" "17.2808" "16.5004" "17.3149" "17.9169" "18.7551" "19.7515" "18.0470" "16.0910" "18.8377" "17.0717" "17.5121" "18.0970" "16.1887" "18.7888" "16.4561" "17.9810" "19.5487" "17.0980" "19.3471" "17.0686" "19.6870" "19.0923" "18.9865" "18.9111" "16.8576" "17.1520" "18.8496" "19.4637" "17.7672" "19.4017" "18.5637" "17.7268" "15.9307" "16.9901" "17.8647" "20.2000" "19.8508" "18.2085" "17.9747" "18.9315" "17.8860" "19.8880" "18.0333" "16.7402" "17.3968" "18.6423" "17.1135" "18.1070" "17.7051" "17.4476" "19.4725" "17.8665" "18.3829" "16.9047" "19.8305" "18.4177" "17.8755" "16.8563" "17.6904" "19.2182" "20.7777" "16.7932" "19.1141" "15.9798" "18.4618" "17.4239" "18.4394" "18.9454" "17.8737" "18.4363" "17.6850" "16.8015" "18.4425" "16.0720" "18.4966" "17.8783" "21.4740" "16.8659" "20.6792" "18.1773" "16.3986" "18.1670" "19.0405" "18.2512" "17.4397" "19.0818" "17.7497" "18.6367" "16.9551" "18.1502" "17.0310" "19.4356" "20.6541" "17.7512" "17.8172" "15.4814" "17.7055" "15.6413" "19.8208" "18.9763"
|
| 10 |
+
"S009" "Study_MET11_9" "Subtype_A" "48" "Female" "White" "Non-Hispanic" "17.8098" "16.6777" "15.0692" "16.8949" "16.8371" "20.1556" "17.9978" "17.4385" "20.3109" "19.9512" "16.3673" "18.4684" "18.8102" "17.5627" "17.3439" "18.2782" "16.6913" "17.3397" "19.2848" "16.9957" "17.3528" "17.1881" "17.6934" "18.0394" "17.1689" "19.4528" "18.1202" "16.5142" "17.4431" "18.2379" "17.5149" "17.6943" "17.8008" "17.6999" "19.9120" "17.4490" "17.3385" "15.5212" "17.0803" "18.1243" "17.6090" "17.4517" "18.0869" "16.1103" "18.6017" "17.3552" "19.0308" "16.8823" "16.5820" "18.8947" "18.7500" "17.6887" "18.5894" "18.4976" "18.2534" "15.7651" "17.9983" "18.4041" "18.8085" "16.2571" "17.7666" "18.2908" "16.9555" "16.7685" "18.2871" "16.1046" "17.6151" "19.5583" "17.7992" "18.5355" "17.1664" "18.8438" "17.9661" "18.7614" "15.6217" "17.8777" "19.8032" "14.8805" "18.5435" "17.3534" "17.8538" "17.5191" "18.3720" "18.6724" "17.2403" "18.9565" "17.2399" "18.1465" "18.3139" "18.4461" "18.1529" "17.1976" "18.6878" "17.3747" "17.5309" "18.3657" "17.8420" "17.3425" "18.8635" "17.1430" "18.0197" "17.8330" "19.3373" "16.4617" "15.3946" "17.9036" "16.4991" "17.7238" "17.5861" "16.5515" "19.1659" "17.7051" "18.7607" "17.2643" "18.5813" "16.5406" "17.2460" "17.8050" "18.0731" "18.6815" "19.5810" "17.8213" "19.8457" "17.9920" "16.4708" "18.7578" "18.2009" "17.0750" "16.8628" "16.7614" "18.1544" "18.7581" "18.9552" "17.3288" "18.9060" "18.7369" "19.9956" "16.5726" "17.9078" "18.1699" "17.8837" "18.5051" "21.5525" "16.7596" "20.7390" "17.0518" "19.3844" "19.0717" "16.1280" "17.3485" "18.1032" "18.0560" "17.3928" "16.6016" "16.8455" "16.3168" "19.5562" "17.0371" "20.5112" "17.9759"
|
| 11 |
+
"S010" "Study_MET11_10" "Subtype_D" "56" "Female" "White" "Non-Hispanic" "19.2738" "18.1920" "17.6275" "17.1067" "17.7675" "17.3951" "19.2727" "17.4182" "18.7117" "15.2753" "15.8415" "19.5095" "18.8567" "17.0450" "18.3641" "17.7349" "18.1207" "16.9096" "17.2145" "18.8606" "16.0839" "18.0087" "19.0501" "18.0084" "19.7873" "16.8321" "18.6955" "17.1330" "17.8900" "18.3675" "20.1384" "18.5603" "17.0583" "18.8310" "17.6468" "18.7913" "20.9001" "17.8079" "18.5713" "17.6673" "19.3759" "17.8350" "18.0797" "18.1414" "19.5602" "17.7278" "20.0011" "17.0426" "16.9929" "18.2860" "16.8012" "20.0814" "20.0078" "17.9634" "18.4729" "19.6741" "18.7598" "17.2786" "20.2951" "15.7870" "17.7252" "18.5262" "16.8244" "15.2172" "18.6275" "16.7732" "16.6908" "19.9399" "17.9186" "19.5921" "18.2317" "18.6584" "17.2988" "18.3298" "18.0806" "18.4220" "17.8107" "19.1511" "19.4716" "16.4576" "17.0398" "17.5986" "17.7367" "19.0040" "19.4203" "20.8662" "17.5007" "16.9267" "19.8756" "17.6649" "18.7613" "19.1747" "18.6969" "18.4929" "16.9144" "18.1881" "19.0019" "18.3374" "19.5110" "18.3507" "17.6645" "19.6556" "19.1308" "18.5684" "17.3863" "17.4381" "18.4543" "16.0373" "18.8769" "18.3240" "18.7491" "19.8947" "18.4762" "17.4491" "17.0578" "18.1431" "18.5702" "17.5898" "18.3229" "18.2619" "19.4730" "16.0500" "16.7793" "18.7275" "16.5598" "17.9774" "19.5219" "15.3979" "18.1205" "17.1544" "18.3490" "19.1596" "18.4913" "17.9585" "17.8876" "17.9139" "16.1068" "19.7941" "18.6865" "18.0617" "17.7206" "18.4160" "18.7552" "17.9826" "19.9462" "17.2935" "17.6195" "19.3476" "18.1811" "17.8983" "18.5434" "17.5520" "17.8464" "20.1572" "15.5334" "19.3606" "17.1311" "17.8676" "19.1082" "17.5705"
|
| 12 |
+
"S011" "Study_MET11_11" "Subtype_D" "29" "Male" "Black" "Non-Hispanic" "19.0111" "16.5341" "17.8302" "16.7337" "16.0914" "19.8272" "18.7544" "18.7841" "19.3158" "16.1156" "16.7327" "17.9044" "18.4004" "19.0745" "17.5808" "17.4848" "19.0275" "18.0785" "16.9918" "18.9626" "17.6352" "18.2562" "18.5963" "18.3189" "16.2247" "19.2606" "19.3667" "17.4021" "17.9689" "17.6515" "18.2098" "18.2841" "17.8451" "19.1727" "18.3315" "17.1451" "20.6196" "16.2992" "16.9209" "18.1821" "19.2296" "14.2785" "18.0977" "18.1583" "17.3093" "19.0729" "19.6830" "18.0739" "17.6738" "15.8377" "17.7076" "19.0870" "18.9672" "17.1836" "16.0782" "20.2387" "17.6053" "20.0271" "17.5285" "16.9268" "19.0106" "18.3333" "17.1016" "16.7470" "18.8045" "17.6773" "14.8838" "19.4750" "18.0787" "20.9106" "18.0534" "17.7773" "18.5492" "18.7188" "16.6682" "19.4741" "19.6966" "20.2513" "17.7632" "19.9223" "17.5311" "19.9567" "19.8448" "18.7905" "18.2404" "17.5934" "17.4751" "17.0866" "19.1169" "18.5854" "17.2660" "18.6082" "18.4987" "17.1042" "16.7217" "17.7831" "17.0411" "18.1934" "18.8408" "15.7002" "17.9007" "17.5161" "18.0877" "18.3120" "17.0416" "16.8158" "19.5328" "19.7207" "18.0802" "15.3355" "17.2793" "17.4190" "18.4304" "17.7985" "16.4150" "15.2147" "19.3410" "16.0587" "16.3080" "19.6748" "18.7815" "16.4253" "18.0329" "15.2966" "18.6057" "18.7934" "16.6509" "18.0385" "19.9425" "18.5477" "18.2392" "19.7329" "16.9351" "18.6335" "19.4954" "18.3970" "16.5320" "19.8779" "16.7234" "19.1372" "19.7416" "19.7978" "16.4939" "17.0167" "19.3407" "17.4089" "17.8986" "18.9057" "19.5903" "14.7288" "19.2558" "19.3883" "17.5180" "16.0578" "17.2151" "20.1954" "17.9560" "17.4527" "17.9386" "17.3664"
|
| 13 |
+
"S012" "Study_MET11_12" "Subtype_D" "72" "Male" "Asian" "Non-Hispanic" "19.0956" "16.9063" "16.9895" "15.9635" "18.3049" "19.1731" "17.5768" "19.6424" "16.7559" "15.0264" "16.4987" "17.5467" "18.2920" "18.9098" "16.9960" "17.0609" "18.5500" "18.4776" "18.5459" "16.7221" "18.4359" "19.9933" "18.4325" "19.4680" "16.5462" "19.4433" "18.5604" "17.1320" "16.8361" "19.1734" "19.8852" "17.8761" "16.5341" "19.5660" "16.4927" "19.5619" "19.7957" "18.0087" "15.2259" "16.8509" "18.4529" "18.4039" "15.9800" "18.7505" "19.2630" "19.5356" "18.5042" "18.0020" "19.1108" "14.8366" "16.2932" "19.0329" "18.5413" "19.4648" "17.3372" "18.8749" "17.6608" "16.9427" "19.3401" "17.5273" "17.7477" "17.6793" "17.4562" "16.3663" "19.0158" "18.5999" "16.4376" "18.9171" "17.9038" "17.2477" "15.0737" "18.1913" "16.9941" "19.6300" "16.7050" "19.3552" "16.9613" "20.5396" "18.7285" "17.3083" "16.6261" "17.8423" "19.6736" "19.8738" "19.8154" "16.3405" "16.5788" "17.3381" "17.7341" "18.1938" "18.3899" "19.0453" "17.1380" "18.3861" "19.2598" "18.2740" "18.3185" "16.4566" "18.1547" "18.7078" "17.8222" "19.4868" "17.8216" "16.5727" "15.8887" "17.1154" "17.9321" "17.5991" "16.5505" "17.2590" "17.4954" "17.1048" "17.0838" "19.8353" "15.6391" "16.6158" "20.3554" "14.7204" "17.7021" "17.6737" "19.4515" "16.7934" "18.4705" "16.5992" "18.7624" "19.6639" "17.2525" "15.4988" "18.2240" "16.6543" "21.7111" "17.5835" "18.7365" "17.6439" "20.2610" "18.2053" "17.2366" "19.3909" "17.7613" "18.0696" "18.8621" "17.3536" "19.1816" "16.3311" "17.5200" "18.4792" "18.9937" "18.2142" "18.7912" "15.9129" "18.8372" "18.8437" "17.3631" "16.9731" "17.5773" "20.2621" "18.8251" "17.9628" "17.8993" "19.8827"
|
| 14 |
+
"S013" "Study_MET11_13" "Subtype_D" "32" "Male" "White" "Non-Hispanic" "17.4765" "16.2682" "16.8290" "16.4893" "16.6899" "17.3875" "19.3655" "18.7780" "18.7557" "17.1629" "17.6600" "17.6490" "18.5956" "15.7993" "17.7913" "16.3965" "16.9677" "16.4898" "18.5317" "17.7039" "18.8209" "17.3776" "17.4908" "20.5504" "18.8371" "17.3847" "17.5237" "17.8488" "17.3733" "17.1630" "19.4278" "17.6956" "18.3250" "20.9703" "18.1065" "18.0173" "19.1884" "17.0497" "17.4660" "19.2183" "19.1187" "16.9645" "18.0039" "17.9563" "19.8630" "18.5254" "18.2571" "16.4556" "16.6527" "15.7607" "17.1994" "18.0455" "18.2611" "19.1170" "18.6464" "19.7391" "19.2042" "19.2725" "19.9448" "17.2925" "17.3513" "15.2987" "17.2628" "18.4255" "18.3416" "16.7566" "15.3160" "19.0044" "17.0216" "18.3237" "17.2665" "17.4085" "17.7014" "19.0762" "17.4529" "16.7997" "16.4353" "19.6000" "19.1275" "18.0642" "15.7458" "18.3592" "17.8071" "18.4030" "17.5863" "17.2041" "18.1752" "18.9779" "17.4978" "20.0334" "20.5006" "19.9298" "17.0491" "18.7068" "18.7780" "15.7879" "17.7536" "18.9917" "18.3908" "17.4455" "18.3030" "18.7107" "17.6553" "17.9107" "16.5517" "19.3184" "17.7639" "20.0239" "17.6202" "18.3568" "17.0110" "17.8457" "19.0476" "17.4729" "18.6454" "18.2857" "15.8103" "18.8436" "18.7381" "18.4602" "20.1621" "17.0246" "16.1765" "18.7699" "16.8765" "19.7181" "19.5091" "16.4829" "17.4273" "17.9545" "20.0762" "19.4682" "18.7464" "16.6670" "20.7776" "17.3448" "18.7387" "20.1028" "17.6628" "18.8459" "18.5998" "18.8021" "17.2104" "17.8670" "18.8043" "15.6810" "19.3418" "15.6096" "17.6648" "16.1935" "17.2654" "17.9744" "15.6083" "16.2782" "16.8341" "19.3817" "16.6683" "17.4502" "19.0776" "17.1676"
|
| 15 |
+
"S014" "Study_MET11_14" "Subtype_A" "43" "Female" "White" "Non-Hispanic" "17.9887" "16.9726" "16.2660" "17.3287" "16.3626" "18.1395" "15.9734" "18.8913" "19.2023" "19.7376" "17.4870" "18.0823" "18.0445" "14.7560" "15.8164" "17.2152" "17.2774" "17.1280" "19.6834" "19.4525" "17.3581" "18.6406" "18.5584" "18.5005" "16.4107" "20.1326" "19.5374" "18.0208" "14.8986" "17.5062" "18.1344" "18.9338" "19.0008" "19.9917" "18.9083" "16.5507" "16.4514" "16.7222" "16.6267" "19.9759" "16.9356" "15.7841" "16.7096" "17.5122" "17.0664" "17.9087" "17.7907" "18.4266" "18.3423" "16.4059" "17.6343" "17.5850" "19.5747" "16.7644" "17.5815" "17.0610" "17.7753" "17.7093" "19.3025" "15.9193" "17.6767" "19.1267" "17.9140" "17.7290" "18.0786" "19.2329" "18.1816" "18.9118" "17.1082" "19.9057" "18.1841" "18.6788" "17.5885" "19.7408" "15.5792" "17.5163" "17.2600" "15.5022" "20.4081" "18.6927" "19.2473" "19.1576" "19.6871" "18.2978" "18.8729" "17.0493" "18.1920" "19.4261" "15.0026" "18.9054" "17.4606" "17.2937" "17.0986" "17.7476" "16.4598" "18.5018" "16.6288" "17.4327" "18.2904" "18.9891" "17.2532" "18.0426" "18.7412" "17.8340" "16.9466" "18.8127" "18.2967" "19.2155" "16.5826" "18.2548" "17.7729" "16.1590" "17.7141" "18.2898" "20.8785" "17.4814" "18.3566" "16.7328" "17.9207" "17.9547" "18.3027" "19.1804" "17.8968" "18.2876" "17.2980" "18.1429" "17.0999" "17.2405" "17.8096" "18.4344" "18.5333" "17.0623" "17.8685" "18.0978" "18.5874" "18.3296" "20.8234" "16.3769" "17.4411" "17.2670" "19.1667" "18.3200" "19.5314" "16.7115" "16.8603" "20.7715" "17.1684" "17.5178" "18.0025" "16.2051" "18.3696" "18.5589" "17.6222" "16.3329" "19.0365" "14.5649" "18.7963" "18.1367" "18.8103" "18.3164"
|
| 16 |
+
"S015" "Study_MET11_15" "Subtype_D" "68" "Male" "White" "Hispanic" "18.2873" "16.4831" "17.3452" "18.4925" "16.5922" "17.8458" "18.4219" "17.5650" "19.9368" "14.4638" "17.5570" "19.0660" "16.9190" "17.7869" "17.7753" "19.8814" "17.8467" "16.9350" "16.4258" "17.4992" "17.4336" "18.0444" "19.9000" "19.2241" "17.9291" "17.3268" "19.3736" "16.8889" "18.5677" "18.5356" "19.1100" "17.7129" "17.4000" "19.5010" "17.7589" "19.9359" "19.8318" "16.7350" "17.0785" "17.0864" "20.2321" "17.0591" "15.6977" "19.0989" "19.5793" "17.8183" "19.2424" "17.6440" "17.2719" "17.8709" "18.6565" "18.4106" "18.7960" "17.9436" "17.5618" "21.7188" "18.6290" "20.1241" "18.5760" "17.3733" "16.5442" "17.2638" "18.2214" "17.4535" "19.4739" "18.6156" "14.3893" "17.9923" "18.3363" "16.2563" "16.8917" "18.1938" "17.2007" "17.9124" "19.3561" "18.8590" "17.9306" "20.9565" "18.0042" "19.3912" "17.2562" "18.0353" "18.1815" "18.0630" "16.9610" "18.3309" "18.6109" "16.9022" "17.1847" "18.6313" "18.1628" "18.3740" "19.5096" "18.2286" "19.6223" "17.4509" "19.0270" "16.3708" "17.8175" "17.8197" "18.4159" "19.5888" "18.9657" "17.5347" "15.8288" "17.4096" "17.4626" "18.1195" "17.1015" "17.9891" "17.6541" "17.5800" "17.3457" "17.1144" "17.0982" "18.1072" "18.1213" "17.9366" "18.8080" "19.9439" "19.7417" "17.1358" "17.5489" "17.0608" "18.3236" "18.4114" "19.0540" "14.2790" "16.7808" "17.9035" "19.9570" "18.4324" "16.6600" "18.6342" "19.3367" "18.8061" "16.9281" "20.4007" "19.7328" "17.6616" "18.0889" "16.7880" "19.8126" "16.3487" "17.7887" "17.9102" "18.6447" "18.1132" "19.9040" "16.9316" "17.6540" "18.9735" "17.2778" "17.2643" "18.5768" "21.5519" "17.0055" "17.1773" "17.8166" "19.8353"
|
| 17 |
+
"S016" "Study_MET11_16" "Subtype_D" "43" "Female" "White" "Non-Hispanic" "16.8994" "15.6231" "16.3232" "18.7996" "17.6048" "19.8884" "18.4540" "19.0953" "18.8108" "16.5017" "18.8414" "17.4332" "18.3186" "18.1170" "16.4761" "16.6335" "18.2244" "16.4749" "17.7807" "17.1240" "17.0066" "18.7673" "19.4545" "19.2925" "17.3807" "19.7953" "20.5227" "19.8236" "17.6034" "16.9574" "19.6982" "16.6038" "18.7569" "19.9278" "18.6667" "19.0454" "19.3230" "16.9902" "16.9916" "18.4487" "19.5104" "16.1472" "17.2216" "17.4980" "17.7423" "19.1777" "19.5854" "16.8965" "17.3469" "16.7965" "17.1831" "17.4880" "18.2100" "19.2751" "18.2166" "18.8447" "18.5632" "18.3721" "18.0176" "16.2844" "16.9737" "17.8788" "17.0655" "16.0240" "18.9205" "18.8786" "16.1177" "18.4097" "17.5855" "18.2412" "18.7044" "18.3488" "18.1082" "17.7118" "16.5323" "18.7421" "16.7960" "18.5430" "17.5143" "15.5402" "17.6220" "17.9352" "17.0620" "18.5480" "17.3742" "17.1540" "18.1908" "18.9303" "19.0316" "17.3180" "18.1001" "16.5095" "17.3155" "16.2918" "16.9040" "16.2706" "17.8276" "18.2080" "18.1935" "18.6797" "16.1612" "20.2854" "18.4619" "18.1078" "17.5019" "17.2563" "17.6515" "18.1800" "17.0676" "17.8684" "18.6386" "18.0148" "17.8275" "17.6341" "16.2621" "17.4034" "16.8681" "17.8808" "17.2895" "16.2849" "19.7027" "15.4752" "17.3058" "17.3269" "18.1635" "16.7662" "18.3711" "16.4442" "18.2994" "18.0965" "18.8081" "18.0568" "17.2699" "15.9248" "20.1908" "17.7295" "17.7936" "20.5972" "19.7794" "17.6465" "19.3678" "17.6384" "14.9349" "18.4967" "20.1267" "16.4298" "17.5899" "18.2199" "19.4826" "15.5899" "18.0038" "16.3622" "18.1074" "16.8818" "16.9201" "19.8578" "17.9331" "19.2088" "17.0853" "16.0890"
|
| 18 |
+
"S017" "Study_MET11_17" "Subtype_C" "42" "Male" "White" "Non-Hispanic" "18.4087" "15.7285" "17.6973" "17.3982" "16.1577" "19.1567" "17.8198" "18.7971" "15.3447" "17.7314" "18.8304" "18.1634" "18.6208" "17.0978" "18.9778" "17.9485" "19.1281" "17.8931" "18.8467" "17.5161" "17.5564" "17.9213" "18.9710" "17.6547" "16.8764" "18.1978" "18.0829" "17.6107" "17.8283" "19.6594" "20.0975" "16.8721" "17.2657" "19.8342" "18.0567" "16.3786" "17.1439" "16.5367" "16.4002" "18.2481" "17.9985" "17.8562" "17.1892" "17.6603" "17.3246" "18.1859" "17.0634" "19.1287" "16.6848" "16.5499" "17.3977" "17.4175" "19.0801" "17.8420" "19.3210" "17.5968" "17.9767" "17.4113" "19.3968" "16.6188" "16.7821" "18.0472" "18.0431" "18.4750" "18.4527" "17.0235" "15.5946" "20.7581" "17.5710" "18.2742" "17.6263" "17.0705" "17.1894" "17.7199" "17.1079" "19.0460" "16.4688" "18.3505" "17.4637" "16.6574" "17.9447" "18.4312" "18.1068" "19.1042" "20.3643" "17.4257" "18.3347" "17.9991" "18.4127" "17.2805" "17.3578" "18.8830" "17.7982" "18.7489" "15.8395" "17.4825" "19.1124" "15.8540" "17.6934" "17.8864" "17.4194" "18.3709" "18.6632" "18.9548" "17.7572" "15.8790" "17.9798" "18.1351" "16.9020" "17.1385" "17.4433" "18.8511" "19.0138" "17.3784" "18.7875" "17.5608" "17.6900" "18.2338" "19.1238" "19.7281" "17.2760" "17.5373" "18.6386" "17.3058" "18.5567" "20.3869" "16.3765" "18.4719" "18.2388" "19.0578" "17.3898" "17.3580" "17.1663" "17.2558" "19.3700" "17.0111" "16.5980" "19.4889" "18.1431" "18.9497" "21.0824" "17.6814" "18.3524" "17.3995" "20.0146" "16.4968" "18.4722" "19.5314" "18.8252" "17.2927" "18.1705" "18.6145" "19.5351" "17.4707" "17.3884" "20.5700" "18.9945" "16.5415" "17.3262" "18.6487"
|
| 19 |
+
"S018" "Study_MET11_18" "Subtype_D" "47" "Male" "Other" "Hispanic" "20.0452" "16.6740" "17.1758" "17.4090" "17.5373" "17.9542" "16.4665" "19.0198" "17.8240" "14.3646" "18.1581" "19.8180" "17.1423" "18.1039" "19.0882" "18.3835" "18.0274" "16.0557" "18.3806" "17.8304" "19.4541" "19.4740" "18.7161" "19.7597" "17.9928" "19.3716" "18.5419" "19.8112" "18.0256" "19.4648" "19.7789" "17.5597" "18.5171" "21.1542" "17.6884" "18.6337" "20.8256" "18.0878" "17.2219" "17.2782" "20.2649" "15.6440" "16.9626" "19.0052" "18.9621" "17.6381" "19.6489" "17.9373" "17.7081" "15.4449" "16.3485" "19.3709" "19.6290" "17.1901" "18.5378" "18.9616" "19.8623" "17.9881" "18.3009" "17.3141" "19.2859" "18.2934" "18.5926" "18.5024" "18.7711" "20.0472" "15.6375" "17.5821" "17.8600" "17.9848" "17.1095" "17.6550" "18.3844" "18.3758" "16.8736" "18.8307" "17.6861" "18.6287" "19.6116" "17.0407" "15.9378" "18.0678" "17.4973" "17.9337" "19.1405" "18.5889" "18.9171" "17.7328" "17.8082" "17.9806" "17.1792" "17.5978" "17.2888" "16.9837" "17.4866" "17.5212" "18.2562" "17.9581" "18.9774" "17.1866" "16.1928" "19.3110" "17.4959" "17.4060" "16.6501" "18.4107" "16.2208" "18.5294" "18.2256" "17.6441" "16.5175" "18.9196" "18.9398" "17.4744" "16.2769" "14.9506" "16.6299" "18.6652" "17.4197" "19.1913" "16.9392" "16.2130" "18.5155" "15.7175" "19.2079" "18.9867" "19.0937" "17.3406" "17.4347" "18.3919" "19.9442" "19.2344" "17.4266" "17.4752" "20.3889" "17.0567" "16.2047" "19.2859" "19.5836" "18.8864" "19.5442" "17.7804" "17.6143" "17.3009" "19.6397" "17.1717" "20.2879" "19.5452" "18.9270" "17.8013" "19.0971" "19.5305" "19.1733" "17.5019" "18.3912" "20.4560" "18.3403" "17.7694" "17.9624" "16.7028"
|
| 20 |
+
"S019" "Study_MET11_19" "Subtype_C" "74" "Female" "Other" "Non-Hispanic" "17.9630" "15.2518" "17.9203" "17.2064" "18.8034" "19.2841" "16.7482" "16.9349" "16.8209" "15.8643" "16.3083" "19.4056" "18.7528" "18.0048" "16.4645" "17.9883" "16.0387" "17.5298" "17.6161" "18.3703" "18.0711" "18.5336" "17.8185" "16.6384" "18.8421" "18.7944" "19.5147" "19.4687" "17.8730" "18.2683" "18.8353" "17.9190" "17.1360" "19.2069" "18.8781" "16.2991" "19.4940" "16.8887" "18.6575" "18.6099" "17.2111" "18.1108" "16.9929" "17.0547" "16.5809" "18.0624" "17.3766" "18.9770" "16.8551" "16.1590" "16.3469" "18.3502" "15.5147" "16.9415" "17.5857" "19.7616" "18.0973" "18.8461" "20.0930" "14.9814" "18.6630" "19.1906" "18.8825" "16.0496" "17.6856" "15.3241" "15.4991" "18.4045" "18.8202" "19.1471" "17.9223" "17.3250" "18.4796" "19.4641" "13.5953" "19.5576" "17.5080" "18.9342" "16.7355" "17.9952" "17.6144" "18.9962" "17.8922" "19.0996" "18.7848" "16.1128" "17.1077" "17.6330" "18.9199" "18.8841" "18.7485" "17.8258" "15.8217" "19.7358" "17.4762" "18.5011" "17.1095" "19.6802" "18.7846" "17.4372" "16.9606" "18.8914" "16.5941" "17.0707" "17.2867" "18.1011" "17.7177" "16.0764" "18.7853" "15.7534" "18.9759" "18.3121" "17.4321" "19.5162" "17.1686" "18.1684" "18.0678" "17.6614" "16.9540" "15.5484" "18.3883" "16.7794" "17.8919" "17.9024" "19.0474" "18.7232" "17.4001" "17.7762" "18.3370" "17.1255" "18.4443" "20.0003" "17.4925" "15.7066" "20.5496" "17.9059" "17.4142" "20.0289" "18.8891" "18.4224" "18.2636" "15.6090" "20.0279" "18.6997" "18.2680" "18.8287" "17.1831" "18.1681" "18.7194" "15.8835" "17.9639" "19.1554" "17.9230" "15.3203" "17.3741" "17.5454" "19.1372" "17.2298" "16.2863" "19.9096"
|
| 21 |
+
"S020" "Study_MET11_20" "Subtype_C" "47" "Female" "White" "Hispanic" "19.8234" "15.8372" "17.9281" "16.9224" "17.9713" "18.6009" "18.2228" "18.4172" "19.2565" "17.6708" "18.3635" "19.9716" "18.3570" "18.4522" "15.7907" "18.3731" "16.8356" "17.4702" "17.6889" "17.6574" "16.7583" "18.1698" "18.2479" "19.4815" "17.2580" "17.3339" "18.5652" "17.9024" "17.7683" "19.0505" "19.4435" "17.5106" "17.4209" "18.3940" "20.0065" "17.3770" "17.5977" "15.8579" "17.5787" "18.8277" "19.0191" "15.8354" "17.7896" "18.0235" "18.0661" "18.6107" "16.9495" "19.0609" "18.6632" "17.5006" "16.9335" "19.8997" "19.2982" "16.6385" "17.5164" "17.4190" "18.3346" "19.6793" "18.9490" "15.7759" "18.6820" "17.7311" "16.0350" "16.0054" "17.5533" "16.5250" "17.5322" "19.1885" "19.8689" "20.6520" "18.3272" "19.9541" "20.0249" "18.5317" "16.0162" "18.9179" "17.2140" "19.6123" "19.3751" "18.1340" "17.3237" "19.5590" "16.8159" "17.5485" "17.1884" "18.2334" "19.6331" "19.3781" "17.7210" "18.6255" "18.2581" "18.8241" "18.2909" "17.3316" "17.5209" "19.9971" "17.2156" "19.0642" "18.5860" "16.6294" "17.5650" "20.0663" "18.6292" "15.8774" "18.2041" "18.0897" "17.7242" "18.2688" "15.5646" "17.9485" "18.4412" "16.6774" "17.7462" "16.8869" "18.9087" "17.2767" "19.0759" "17.3305" "16.9105" "18.2638" "18.6338" "14.6501" "18.5593" "17.8429" "17.1967" "19.1381" "19.4930" "18.3697" "19.2125" "18.7369" "19.3354" "15.5980" "16.2727" "18.1712" "18.9730" "16.5911" "17.7259" "19.3117" "19.1822" "16.5165" "17.8630" "17.9074" "19.5152" "18.0368" "17.9189" "16.9569" "18.7078" "18.1655" "18.8567" "15.7926" "18.0891" "18.4594" "17.5712" "18.5690" "17.9706" "20.3271" "15.0498" "16.9177" "18.7142" "18.8344"
|
| 22 |
+
"S021" "Study_MET11_21" "Subtype_C" "67" "Male" "White" "Non-Hispanic" "19.9100" "17.5195" "18.1667" "18.1003" "18.4343" "18.5270" "17.6524" "19.4874" "17.8126" "16.8414" "17.0472" "17.4654" "18.2279" "18.4447" "17.1316" "17.0216" "19.7967" "15.7446" "16.2781" "18.1609" "16.2339" "17.5210" "18.0916" "19.6868" "17.6426" "17.6008" "20.0120" "18.2188" "16.9144" "19.0722" "20.2658" "17.6696" "16.8001" "20.8475" "18.8372" "18.7361" "19.7183" "16.9243" "15.9352" "20.4225" "16.8810" "18.1994" "15.6644" "16.6489" "16.9632" "18.1019" "17.4681" "14.8492" "15.6829" "16.8125" "18.3401" "17.9286" "19.4930" "18.5220" "17.4795" "18.2493" "18.0708" "20.9055" "19.0686" "16.3381" "17.9794" "17.6879" "16.5347" "16.3884" "19.0974" "17.7723" "17.6812" "18.7244" "17.9227" "17.6987" "16.6785" "17.3967" "17.3535" "17.9449" "16.4971" "17.1696" "17.1469" "18.2075" "17.5326" "14.6675" "17.6114" "18.9633" "18.3887" "18.0987" "20.5360" "18.7728" "21.2605" "18.3673" "16.6832" "18.5476" "18.2812" "18.3837" "18.8712" "20.4628" "19.6524" "18.5529" "17.8060" "17.1360" "18.2967" "19.8898" "17.9203" "18.4507" "18.6905" "17.4996" "16.4039" "17.5696" "17.8717" "18.8256" "18.3278" "16.7589" "18.2009" "17.2289" "18.7206" "16.0205" "17.8382" "17.2819" "17.5194" "18.1243" "19.3153" "16.8587" "18.7154" "16.2178" "18.6656" "18.5538" "18.1360" "19.5865" "16.8897" "17.3564" "18.1170" "16.6528" "17.3456" "18.9265" "17.1555" "17.6907" "18.4058" "16.5457" "18.5426" "19.1076" "18.6552" "18.0890" "18.5766" "17.3978" "18.4854" "16.5498" "19.2348" "18.3420" "20.1567" "19.4555" "18.1217" "16.4961" "18.9865" "19.1506" "18.5611" "16.5346" "18.3660" "18.5772" "16.6491" "17.6535" "19.0340" "20.2241"
|
| 23 |
+
"S022" "Study_MET11_22" "Subtype_B" "64" "Female" "Asian" "Non-Hispanic" "17.6487" "16.9721" "17.8024" "16.4083" "16.9188" "19.0979" "17.3790" "18.4352" "17.1589" "20.4693" "18.5302" "18.4731" "17.7615" "16.6296" "16.9014" "17.4540" "18.4100" "17.7503" "18.1933" "17.2244" "19.6938" "19.4057" "16.3800" "18.2570" "17.2446" "19.2812" "19.9734" "17.9614" "16.0061" "18.5997" "16.2869" "17.9383" "17.1584" "18.4875" "19.8484" "18.5544" "17.4418" "16.3832" "16.2490" "18.6149" "17.7553" "17.3068" "15.8595" "16.9943" "16.6268" "16.9535" "18.9590" "17.0623" "17.0360" "16.6659" "18.3300" "19.7310" "19.3014" "18.1340" "18.4086" "17.8359" "18.6733" "17.6934" "19.5445" "16.5285" "17.1657" "17.7580" "17.4583" "15.8069" "19.1260" "17.8691" "16.8252" "18.1240" "18.4872" "18.1117" "17.2288" "17.9074" "18.9037" "18.3659" "16.7159" "19.3084" "16.7991" "15.9084" "19.7978" "18.3808" "18.9481" "18.5237" "17.8915" "18.5709" "19.0655" "19.4005" "18.3985" "17.7171" "17.2264" "19.5763" "18.9188" "20.0148" "18.9735" "16.5759" "18.2050" "19.0711" "18.4355" "17.9246" "16.9156" "17.6194" "18.5039" "19.3089" "18.9569" "16.6495" "16.2818" "17.5847" "18.7619" "18.7976" "16.4275" "17.1815" "18.6989" "19.6511" "18.3807" "16.7185" "18.9504" "17.0571" "18.6808" "17.1487" "18.0205" "18.4432" "17.5694" "17.5221" "16.8961" "19.2554" "18.4351" "17.4687" "18.7687" "17.5066" "20.0958" "19.3932" "18.4516" "17.9863" "17.9818" "16.2824" "18.4196" "17.5056" "19.5057" "18.7363" "16.9045" "18.7295" "17.2878" "18.0761" "17.9936" "17.0164" "19.4830" "18.5097" "19.8549" "17.7685" "18.2990" "17.6571" "18.7336" "18.9746" "16.5295" "18.0200" "17.4625" "19.2412" "18.1959" "17.1315" "16.1876" "18.4903"
|
| 24 |
+
"S023" "Study_MET11_23" "Subtype_B" "51" "Male" "Other" "Hispanic" "18.1407" "15.2217" "17.8042" "18.0120" "17.9552" "17.5788" "18.0097" "17.2110" "17.4124" "18.5603" "17.9087" "19.2177" "18.7217" "18.1226" "19.5835" "17.3952" "18.5024" "18.9998" "18.6528" "17.7264" "18.3625" "18.4370" "17.5864" "18.1652" "15.5706" "19.2454" "21.0545" "17.4439" "19.2235" "16.9461" "19.6222" "18.0336" "16.0550" "19.8881" "16.7609" "16.3856" "17.9513" "17.0126" "17.3531" "19.2933" "18.0192" "17.1546" "15.7237" "16.9808" "17.3871" "18.0667" "17.5042" "15.7627" "18.4213" "16.1244" "15.7468" "17.8548" "19.6744" "17.4455" "17.6784" "17.3332" "18.8498" "18.2887" "16.7374" "16.4486" "16.0024" "17.7133" "16.6728" "16.6145" "17.8817" "17.9230" "17.7472" "18.1535" "16.2064" "17.8898" "17.0391" "17.6002" "18.3272" "16.3870" "14.8581" "19.0807" "18.5831" "16.7699" "20.2881" "16.8100" "18.8167" "19.1277" "17.6043" "19.3463" "19.0558" "18.6020" "18.7867" "15.9920" "18.2838" "17.8717" "20.4380" "17.6176" "17.3290" "16.6567" "19.7417" "18.5980" "17.6264" "18.3312" "16.9704" "17.0825" "19.6888" "17.9329" "19.9022" "18.6535" "14.9036" "18.8848" "16.8580" "17.1529" "16.1204" "18.5354" "17.6257" "16.0728" "16.1948" "17.8020" "18.4909" "17.8314" "18.1895" "17.3317" "17.7816" "18.0574" "17.5444" "16.4622" "18.2667" "18.0896" "17.9073" "19.1781" "17.7032" "17.4448" "17.5126" "18.8699" "18.1857" "16.3139" "16.4844" "17.4712" "19.5213" "17.9059" "19.2186" "16.5027" "16.7160" "18.9556" "17.5285" "18.2167" "16.4812" "17.6866" "17.5016" "17.8011" "19.6918" "18.3620" "18.0490" "17.1422" "19.0705" "20.5245" "19.2063" "17.8911" "17.8506" "15.8099" "15.8979" "18.5155" "17.1831" "18.2580"
|
| 25 |
+
"S024" "Study_MET11_24" "Subtype_B" "54" "Female" "White" "Non-Hispanic" "18.1309" "16.8508" "16.0437" "16.1664" "16.7341" "17.7821" "17.6487" "17.9426" "18.2428" "18.7390" "17.3703" "18.7200" "17.8236" "18.7133" "15.6635" "17.0648" "17.2384" "17.5323" "18.2458" "19.4145" "19.3866" "16.3568" "18.1912" "19.1379" "17.1656" "19.0260" "19.5436" "17.5756" "18.4584" "17.9872" "15.9067" "17.0600" "16.9839" "19.4212" "17.5796" "18.0910" "16.9037" "17.4749" "17.4964" "17.0380" "18.3936" "15.5463" "19.8568" "17.5190" "18.0474" "18.6549" "20.2999" "16.4436" "15.9995" "18.8652" "17.5028" "15.7828" "19.2741" "17.7906" "17.1823" "17.3462" "18.7887" "18.5763" "19.4148" "14.4853" "17.6171" "16.9703" "18.1000" "16.2632" "20.3781" "18.2463" "14.2045" "18.2816" "18.5728" "18.2466" "16.4040" "18.0121" "16.1490" "18.2538" "16.5518" "17.9248" "18.2942" "19.1744" "20.3273" "16.1746" "19.2438" "16.4833" "17.1662" "18.4698" "18.2703" "17.8805" "18.3873" "17.9184" "17.2960" "17.6738" "18.0466" "16.8233" "16.7224" "16.7743" "18.6975" "17.6766" "17.9740" "17.0015" "18.2727" "18.5446" "16.7753" "19.0550" "17.4993" "16.8090" "18.2079" "18.3865" "17.3589" "17.8920" "18.4689" "17.0094" "17.8162" "17.0338" "19.9732" "16.9410" "19.5505" "16.9480" "19.1041" "16.6253" "20.9065" "18.0890" "20.3559" "18.7599" "16.8234" "18.3768" "19.2069" "18.1735" "19.2060" "19.0837" "17.0415" "17.3038" "17.6335" "18.9884" "17.7973" "18.0719" "19.6560" "17.6044" "18.9959" "16.5476" "17.6248" "18.3266" "17.2101" "16.9711" "20.9906" "18.2992" "19.7383" "17.7064" "19.5773" "17.2767" "17.4634" "17.1391" "18.8308" "19.4754" "17.3879" "17.1969" "16.0943" "17.6247" "16.8561" "18.3612" "19.6885" "20.0901"
|
| 26 |
+
"S025" "Study_MET11_25" "Subtype_B" "50" "Female" "White" "Non-Hispanic" "15.6993" "16.7661" "19.7854" "17.4785" "18.2202" "18.2232" "17.8666" "17.5416" "18.3634" "19.9812" "18.8277" "19.4326" "18.6147" "18.7814" "18.7484" "15.8117" "17.2170" "18.9566" "18.9151" "18.5403" "17.1502" "19.2679" "17.8149" "18.9494" "17.6063" "16.1320" "17.9741" "17.6920" "17.0289" "15.9730" "17.5416" "18.7090" "17.9728" "18.1985" "17.1302" "18.4205" "17.5144" "16.3232" "16.9738" "17.4892" "17.4274" "15.9417" "17.8846" "17.8775" "17.6543" "20.0907" "18.6030" "16.7870" "17.9193" "18.0738" "16.9468" "18.3494" "21.2091" "17.1659" "20.3862" "18.1557" "18.6445" "19.2612" "16.8737" "16.4438" "17.1451" "17.3893" "17.2910" "17.8552" "17.9434" "17.4305" "17.0704" "18.3555" "18.7357" "18.2515" "20.1200" "18.0118" "18.3777" "18.9495" "17.3859" "18.8988" "20.7498" "16.0265" "17.9360" "17.0287" "18.0558" "17.5792" "16.7439" "19.2302" "17.2619" "18.4039" "17.9229" "18.5010" "17.3124" "18.2033" "19.1280" "18.1180" "17.9391" "18.4052" "16.8124" "19.6130" "16.9351" "18.0274" "18.4808" "18.5654" "16.7405" "17.9131" "16.5240" "15.5305" "16.2100" "17.3503" "19.0966" "19.6723" "16.9737" "14.2836" "19.1341" "19.6194" "18.1064" "18.0868" "19.7408" "17.6353" "17.0975" "16.5701" "16.5681" "19.3057" "18.4916" "17.9862" "19.3008" "17.5064" "18.0523" "17.8253" "19.0807" "16.7444" "18.4691" "18.7635" "19.2261" "18.5827" "17.2123" "18.1393" "19.4777" "17.5770" "19.6883" "17.0943" "18.7525" "17.7268" "18.6991" "19.4866" "18.2421" "18.2812" "17.8124" "18.2246" "19.9382" "16.9558" "18.2710" "15.7395" "16.8530" "18.3166" "17.1365" "16.3319" "17.4031" "18.1676" "18.7921" "17.0065" "19.6982" "18.0550"
|
| 27 |
+
"S026" "Study_MET11_26" "Subtype_A" "75" "Male" "Other" "Non-Hispanic" "17.8603" "16.3509" "17.4263" "16.9844" "16.9913" "18.4712" "18.1734" "17.6589" "17.7516" "18.9814" "18.1302" "18.0189" "17.8732" "18.2334" "19.2210" "17.4518" "18.0170" "18.1005" "18.5344" "18.5314" "20.7750" "18.4541" "17.8644" "19.6217" "18.1146" "17.3260" "18.3782" "15.9229" "18.2998" "19.9863" "17.6858" "17.9759" "18.5967" "18.8974" "19.2141" "18.0046" "16.0932" "16.8357" "16.6344" "17.5889" "17.1083" "16.8857" "17.0367" "17.5020" "20.0987" "17.6131" "18.4612" "18.0665" "18.3525" "18.5704" "17.6178" "19.3769" "20.1539" "19.0317" "18.4432" "15.2143" "17.9979" "18.5973" "19.9000" "16.0643" "17.1977" "17.0645" "18.9468" "16.5536" "18.2822" "18.6019" "17.5330" "18.3735" "18.5857" "19.2137" "17.0917" "16.9545" "17.2289" "17.5144" "14.4073" "17.8765" "17.9230" "17.5596" "16.9719" "19.5161" "19.2634" "18.6817" "17.7795" "19.6175" "17.4798" "19.0058" "19.4217" "18.7804" "18.0855" "16.4244" "19.1570" "17.9029" "18.2486" "17.7620" "19.9625" "19.1867" "17.8913" "18.1327" "19.0546" "17.3441" "17.5913" "17.6204" "18.5008" "16.7707" "17.1828" "17.2489" "16.8884" "19.1643" "16.6532" "16.7174" "19.6295" "17.4034" "18.5871" "17.5079" "22.2282" "17.6266" "17.8619" "18.4812" "16.7463" "17.2182" "19.3287" "17.7446" "17.9547" "16.7933" "17.5912" "19.4592" "19.5653" "15.1714" "18.0594" "19.1947" "18.6015" "17.6202" "17.7814" "18.1499" "20.2405" "17.2649" "19.9889" "17.3187" "19.0494" "18.1000" "18.0655" "17.8560" "21.7549" "16.9615" "17.8636" "19.1111" "18.0868" "19.3774" "16.5349" "18.8495" "18.8095" "18.9043" "16.5915" "17.4808" "18.1144" "16.9273" "16.0124" "17.1483" "19.2754" "18.9096"
|
| 28 |
+
"S027" "Study_MET11_27" "Subtype_B" "44" "Male" "Asian" "Hispanic" "18.4114" "16.7284" "17.2044" "18.3441" "18.9640" "18.4933" "18.9548" "18.0902" "19.9208" "20.0862" "16.9959" "18.8195" "17.6057" "18.8179" "18.6852" "18.8348" "18.4266" "19.1771" "18.1211" "18.6797" "17.5136" "16.8614" "18.6068" "18.1335" "17.2602" "19.9918" "18.5066" "19.5531" "20.4830" "19.6484" "21.1006" "17.6723" "17.8223" "18.9859" "17.8256" "18.2417" "16.8904" "17.7207" "17.2324" "18.5569" "18.3047" "16.2409" "18.3216" "17.7697" "18.1829" "17.7457" "17.5246" "17.7993" "18.6857" "18.9469" "19.0424" "18.8789" "19.2210" "17.2562" "18.7827" "16.6378" "18.2241" "20.4222" "18.2758" "17.3177" "17.0397" "16.9881" "17.3625" "16.7703" "17.1341" "17.3568" "17.4164" "18.7016" "19.7427" "18.7389" "18.3879" "18.1924" "18.4844" "18.4764" "16.7073" "18.6446" "17.8907" "17.7784" "19.5077" "16.7451" "15.9731" "19.0210" "19.5244" "17.0871" "18.2331" "17.4160" "18.4012" "17.4190" "19.2555" "16.9491" "19.3243" "18.3065" "17.9967" "19.3621" "17.1368" "19.5158" "17.5821" "18.6471" "17.9804" "17.0349" "17.4405" "18.6896" "18.8126" "18.0430" "18.0505" "17.3837" "16.6576" "17.1213" "16.4954" "17.7120" "16.8719" "18.8164" "16.5147" "17.1755" "20.4044" "18.3572" "17.4235" "17.7617" "17.7529" "18.2827" "19.4280" "18.2808" "18.2766" "16.6976" "17.3922" "18.5827" "19.1289" "18.0770" "18.7430" "19.3571" "19.0651" "16.2356" "18.3220" "19.0751" "20.7340" "16.8730" "18.9139" "17.1133" "16.2333" "16.5440" "16.7206" "19.2204" "21.0017" "16.8479" "18.7780" "18.2130" "19.7739" "19.9849" "17.9321" "16.0092" "18.3116" "18.7893" "17.8291" "17.2327" "16.3139" "18.8939" "17.5188" "18.4060" "20.1046" "17.8442"
|
| 29 |
+
"S028" "Study_MET11_28" "Subtype_A" "62" "Male" "Other" "Non-Hispanic" "16.8600" "17.2744" "15.2547" "16.1485" "14.0424" "18.4606" "17.8362" "18.7226" "18.7902" "20.2048" "18.2474" "19.8143" "18.0030" "19.8107" "16.3636" "17.8857" "18.3923" "16.1651" "17.1460" "18.6413" "19.0096" "18.3500" "16.9263" "19.7511" "18.4572" "17.0608" "21.7202" "15.9573" "18.5302" "18.0640" "17.0701" "18.0072" "16.4843" "21.1336" "19.1150" "17.4847" "14.9603" "16.4015" "16.1599" "18.0766" "18.4795" "16.7995" "18.0824" "17.3594" "14.8149" "18.4853" "17.2043" "17.4663" "16.8926" "20.1085" "16.4990" "18.4844" "19.1871" "18.0871" "16.5028" "16.7788" "18.7262" "20.4367" "18.8503" "17.4389" "17.1916" "16.8305" "17.1648" "16.5092" "19.6522" "18.5192" "18.6475" "18.5415" "18.4937" "17.6392" "16.9562" "17.6805" "17.5456" "18.1665" "16.1596" "17.6422" "19.0275" "16.9958" "20.6731" "16.9912" "19.3238" "17.2298" "18.2086" "18.6968" "17.9194" "20.4590" "19.3896" "16.3617" "17.1095" "18.2560" "18.3453" "18.4533" "17.7876" "17.4673" "17.2964" "20.8225" "18.1047" "17.7532" "17.8904" "17.0165" "17.3803" "19.4698" "17.0622" "17.0160" "16.6004" "18.4382" "17.7595" "18.3397" "18.2954" "17.5910" "19.3609" "17.3765" "18.2297" "18.3689" "20.1670" "17.1162" "19.3898" "17.0417" "19.4374" "18.3418" "17.6723" "18.0590" "18.4606" "17.9074" "18.7281" "20.2546" "18.9202" "17.8677" "16.6235" "20.8632" "19.8325" "16.9910" "16.9956" "17.3605" "17.7220" "17.0018" "19.7305" "18.3370" "19.1157" "17.2149" "18.6212" "19.7670" "20.4662" "19.9117" "17.5532" "20.3895" "17.3014" "17.8593" "16.7423" "18.9354" "18.3738" "16.9973" "18.7931" "18.4206" "18.2033" "15.6467" "15.4078" "16.4750" "19.0941" "17.6040"
|
| 30 |
+
"S029" "Study_MET11_29" "Subtype_A" "65" "Female" "White" "Non-Hispanic" "17.9236" "19.4796" "17.2305" "16.8691" "16.8801" "20.6582" "16.3211" "16.4430" "16.2362" "18.8300" "19.3475" "19.2150" "17.6773" "18.3591" "15.9809" "17.7461" "18.6912" "16.5224" "16.6817" "20.9264" "18.3814" "17.3069" "18.2173" "19.7604" "18.1793" "17.5036" "17.5507" "19.6968" "17.5508" "20.0319" "18.7605" "17.2741" "17.1799" "19.7046" "19.5627" "17.3610" "18.4099" "17.3797" "15.7152" "18.5385" "16.9261" "14.6119" "15.7180" "17.1278" "17.0574" "17.3360" "18.2205" "16.7304" "17.8758" "19.2418" "16.9729" "16.6123" "20.0641" "17.7796" "15.7505" "15.9686" "17.9629" "15.9602" "18.7343" "16.6872" "16.9182" "16.7209" "18.2234" "18.3619" "17.6904" "17.2157" "20.2602" "18.5435" "19.6776" "19.3087" "17.3607" "18.6564" "19.0717" "17.4009" "15.1823" "18.8179" "18.2269" "15.2339" "17.9287" "17.0033" "19.3410" "17.3730" "17.0482" "18.3214" "17.3856" "17.6778" "17.8675" "16.7743" "17.9040" "19.0650" "17.0468" "18.0883" "20.1530" "16.6749" "17.1801" "20.0153" "19.9954" "17.4045" "17.8989" "19.0622" "15.4791" "17.0302" "19.5326" "18.8170" "17.8836" "17.6343" "19.4049" "17.4485" "16.6599" "17.7126" "19.6877" "19.1773" "18.2975" "18.6224" "18.3441" "16.4665" "15.7251" "17.4585" "15.8032" "19.5294" "17.9630" "17.5344" "19.5057" "18.3413" "18.8780" "18.9367" "18.0738" "17.8998" "16.2255" "19.9865" "17.5692" "18.0647" "18.4026" "18.3844" "19.5526" "17.5594" "20.4907" "17.5528" "19.3540" "16.8930" "18.1626" "20.0744" "20.8520" "18.1294" "18.3252" "18.0258" "17.7313" "16.3321" "16.7354" "17.1280" "18.5906" "17.9792" "17.5487" "17.6730" "15.5953" "16.8435" "18.0543" "17.8453" "17.6975" "18.9663"
|
| 31 |
+
"S030" "Study_MET11_30" "Subtype_A" "61" "Female" "White" "Non-Hispanic" "19.1709" "18.0591" "17.7592" "17.8861" "17.3281" "17.9505" "17.0302" "18.7402" "18.7190" "20.4310" "18.7820" "18.9277" "18.1066" "16.7087" "17.8690" "15.8349" "17.3017" "18.4585" "16.8774" "17.9992" "17.8496" "16.6418" "18.0876" "20.7804" "16.8033" "17.2568" "19.5814" "19.8236" "18.1408" "19.4207" "18.8294" "16.9178" "16.1801" "17.7435" "17.7560" "16.8179" "16.9726" "17.9862" "15.2058" "20.5620" "20.5338" "17.2094" "15.6854" "19.8317" "17.2227" "17.1942" "16.9008" "18.3227" "19.2344" "17.6482" "15.7499" "18.8846" "21.1642" "18.5398" "17.9166" "16.6426" "18.0014" "18.2579" "19.1082" "16.3901" "16.4709" "19.6322" "17.7873" "16.7506" "16.6719" "16.4344" "19.3481" "17.3754" "18.7951" "17.8349" "18.7817" "18.2013" "18.4181" "17.7717" "16.3467" "18.0616" "16.9238" "17.1419" "19.1692" "17.3104" "17.7695" "19.2425" "20.1868" "19.6389" "17.7071" "17.9525" "17.1072" "18.0154" "17.8854" "17.5609" "19.4055" "16.3235" "16.2726" "17.4837" "18.1320" "18.8493" "19.5223" "17.4690" "17.8914" "19.2572" "17.2475" "20.4159" "17.5809" "17.6268" "16.7698" "16.9419" "18.0902" "18.8799" "16.1901" "16.6355" "16.9208" "16.8879" "18.9445" "17.1577" "20.4960" "17.6143" "16.0165" "17.8270" "17.3718" "16.5259" "18.3479" "18.1950" "18.3558" "17.2688" "18.0455" "18.9014" "18.9357" "16.9446" "17.8861" "17.8488" "16.9942" "18.5653" "17.4919" "19.1120" "19.1993" "16.7589" "19.4258" "17.3718" "17.4070" "17.7727" "18.3642" "19.6781" "20.8969" "17.6207" "16.4902" "20.9106" "19.7065" "18.3345" "16.5396" "18.1335" "20.1965" "19.7059" "16.4331" "16.1362" "16.5401" "18.0330" "17.8994" "18.4638" "20.2547" "18.5793"
|
| 32 |
+
"S031" "Study_MET11_31" "Subtype_B" "64" "Male" "Black" "Non-Hispanic" "17.8324" "17.8540" "16.8757" "17.9133" "17.3438" "18.7053" "17.2411" "18.1243" "16.7958" "17.4170" "18.0296" "19.4365" "17.1815" "17.7838" "19.0839" "17.0220" "17.7947" "16.4158" "19.8909" "19.4135" "17.7940" "17.2921" "18.7530" "18.9754" "18.8141" "20.2716" "17.6921" "19.7440" "17.0340" "18.9068" "19.0851" "19.3326" "16.7966" "21.0343" "18.0482" "16.3987" "16.9046" "19.1395" "16.1971" "19.1972" "17.2972" "17.4181" "17.2703" "18.3087" "17.1176" "19.1344" "17.0028" "15.8952" "17.6176" "17.3821" "17.1606" "18.6603" "19.2980" "17.4886" "16.9409" "18.4440" "19.1417" "19.4253" "17.2983" "17.5129" "16.6531" "17.8003" "18.5171" "17.0666" "17.5292" "16.4430" "18.0293" "18.6922" "17.4247" "19.2082" "18.7880" "17.2886" "18.0460" "18.7058" "15.5698" "19.8994" "19.0617" "17.5573" "17.6744" "18.2050" "18.2761" "18.6375" "18.2340" "20.5529" "18.8205" "17.8998" "17.5474" "18.3882" "17.8683" "17.9137" "18.5054" "16.9851" "17.0320" "17.2814" "17.7020" "16.2068" "20.7375" "17.4887" "16.8864" "17.9598" "18.1015" "19.9528" "18.6410" "17.9634" "16.2928" "19.7508" "18.7167" "19.4048" "16.9563" "18.8724" "16.9467" "18.6409" "20.0156" "18.2821" "18.9431" "18.5518" "17.5489" "19.1903" "18.1012" "16.8537" "17.4547" "17.8056" "18.4591" "14.9011" "18.3186" "19.0665" "17.8490" "14.6916" "18.2640" "19.5948" "17.8883" "17.4491" "17.0406" "17.4737" "19.3797" "16.9615" "17.3589" "18.7741" "15.4974" "19.6134" "18.2203" "18.7772" "19.0692" "18.3833" "18.5546" "17.7424" "18.6337" "20.0424" "15.2926" "19.1347" "17.6822" "18.9471" "17.5580" "16.8488" "18.0983" "17.2551" "16.6028" "17.6377" "18.1647" "19.7354"
|
| 33 |
+
"S032" "Study_MET11_32" "Subtype_A" "28" "Female" "Black" "Non-Hispanic" "18.2086" "16.1930" "17.1693" "17.2484" "16.2469" "18.0232" "16.7876" "18.4389" "17.7758" "19.6391" "15.0661" "17.1323" "16.6569" "18.3539" "17.5307" "17.2865" "18.7683" "18.0629" "17.8903" "18.2424" "17.8761" "19.1823" "18.7497" "18.1293" "17.0627" "19.2565" "19.0732" "19.2115" "17.7038" "17.2285" "17.6041" "18.0650" "19.1056" "19.9263" "18.4832" "16.4979" "17.8193" "17.3041" "16.1036" "18.1718" "18.2830" "16.8969" "17.0300" "17.1540" "15.0703" "17.4726" "18.2992" "16.0839" "15.8318" "17.3140" "17.2880" "17.9661" "19.1993" "18.3019" "18.2436" "14.4365" "18.7521" "20.6532" "19.6364" "15.9380" "17.2776" "16.2089" "17.4584" "17.7251" "18.4828" "19.3402" "17.6633" "20.6774" "18.4346" "17.5846" "18.9260" "18.6154" "17.6471" "18.6165" "15.0656" "19.1088" "18.0231" "15.1408" "18.2795" "17.6847" "18.1441" "16.9748" "18.4392" "19.6165" "18.4314" "20.4824" "16.7885" "19.6991" "18.5585" "17.0075" "18.4682" "16.2876" "17.8595" "18.2654" "16.7204" "17.9829" "18.1246" "17.6728" "16.5033" "18.7990" "17.0720" "19.3740" "18.1920" "17.6166" "17.8614" "18.1732" "19.0356" "18.8525" "15.4918" "14.9368" "17.7053" "17.1549" "19.3193" "17.3163" "20.0026" "18.8620" "18.1479" "17.0885" "19.3095" "18.8626" "18.2798" "18.1616" "17.6476" "18.2698" "18.6591" "17.6611" "17.2995" "18.2695" "19.5715" "18.2713" "18.8431" "15.1367" "17.6903" "16.9514" "21.2508" "19.2209" "20.7256" "17.9720" "16.2745" "19.4836" "17.9027" "16.1391" "19.6950" "17.0598" "18.3039" "18.1574" "18.3059" "19.0944" "16.9807" "19.0096" "19.0804" "19.2389" "17.6379" "16.5897" "17.1138" "16.3433" "18.8548" "17.4925" "19.4994" "18.5535"
|
| 34 |
+
"S033" "Study_MET11_33" "Subtype_C" "65" "Female" "White" "Non-Hispanic" "17.1465" "17.5804" "16.0985" "18.7995" "17.2764" "18.0167" "19.1574" "19.1364" "17.4852" "17.2355" "18.0227" "17.0969" "18.2374" "17.4801" "17.2696" "16.8549" "17.4731" "16.7080" "18.2132" "19.1119" "17.0094" "17.4921" "19.4759" "16.6954" "18.5387" "21.1199" "18.2784" "18.2446" "17.9326" "17.9022" "20.1578" "18.3395" "16.3054" "18.4832" "20.1049" "19.4585" "19.1906" "15.8429" "18.6099" "19.5043" "17.7178" "16.6020" "17.2847" "19.9786" "18.8636" "18.0947" "19.1714" "16.7109" "18.0279" "16.4392" "19.5355" "17.4112" "19.1181" "17.7877" "17.6849" "18.6917" "19.5984" "18.7942" "17.5248" "16.0595" "17.1074" "16.6478" "16.3234" "17.3910" "19.0294" "18.0000" "16.4871" "18.0640" "19.4429" "18.4937" "16.7707" "18.4991" "18.4944" "18.5389" "16.6515" "18.5685" "17.7994" "18.2142" "15.2513" "16.3053" "19.3155" "17.5195" "18.5529" "18.9827" "18.8915" "17.7577" "16.6141" "17.8782" "18.9403" "17.7555" "18.8213" "19.4475" "17.2841" "17.4688" "15.3448" "18.0043" "17.0996" "18.0015" "17.9880" "17.4080" "15.9366" "20.9068" "17.4874" "17.4122" "16.4802" "19.0126" "18.1901" "19.0934" "18.2614" "17.6657" "20.2191" "16.2402" "17.3379" "17.4169" "16.0491" "18.5012" "17.4725" "16.0718" "18.5151" "18.7335" "18.0745" "17.6846" "18.9598" "17.5997" "19.4390" "17.5507" "18.7500" "16.7541" "18.0348" "19.1916" "18.6413" "16.5624" "17.4090" "17.6223" "18.6206" "17.2577" "17.7197" "19.7531" "18.8979" "17.6589" "17.5539" "19.3671" "18.8617" "17.9379" "17.2407" "17.8464" "19.8045" "17.2861" "17.4763" "17.2338" "16.8657" "18.7869" "17.2799" "19.0087" "16.3918" "20.5057" "16.8960" "18.7361" "19.7334" "18.4477"
|
| 35 |
+
"S034" "Study_MET11_34" "Subtype_C" "67" "Female" "White" "Hispanic" "19.4223" "18.0424" "15.8901" "18.9600" "17.8062" "18.8137" "16.7507" "18.1104" "18.9415" "19.1681" "17.5469" "19.2680" "18.2329" "18.9559" "16.6296" "17.7002" "20.2828" "20.0146" "17.9701" "19.3639" "18.0930" "19.0330" "18.8935" "16.7930" "18.2746" "19.6053" "18.7806" "17.1847" "18.7608" "17.8912" "18.3652" "16.9994" "16.9180" "18.4706" "18.7607" "18.4520" "17.5629" "16.7757" "14.6110" "17.9567" "16.5676" "18.2343" "18.5758" "18.3038" "17.1177" "17.8897" "18.0628" "17.4261" "17.2145" "16.7834" "14.2037" "17.5582" "19.6461" "17.4937" "17.3157" "19.7348" "19.8847" "17.9230" "18.8747" "15.9253" "17.1211" "16.7821" "17.2415" "15.5465" "19.1585" "17.6912" "16.5366" "19.0344" "19.1238" "19.1388" "16.0626" "16.6907" "17.3998" "17.2257" "17.0870" "19.0158" "17.3041" "18.6561" "19.1980" "18.4985" "17.8765" "16.6102" "18.2862" "19.3022" "19.6260" "16.7516" "19.3921" "18.6840" "19.2487" "16.0952" "18.3784" "17.4670" "16.5392" "18.0830" "18.5411" "19.2768" "17.5310" "16.4816" "17.3709" "21.7165" "19.5833" "18.3468" "18.8779" "18.4349" "16.3133" "19.4326" "16.4335" "18.0968" "16.7871" "17.0113" "18.4991" "16.9674" "17.9678" "18.1413" "17.7698" "19.2002" "18.2482" "16.0326" "16.4008" "17.8429" "17.7847" "17.9151" "17.4183" "16.7951" "18.8866" "17.9270" "21.9399" "16.5721" "19.1846" "17.5424" "18.1721" "17.2543" "17.6452" "15.6280" "17.2300" "16.5469" "17.5183" "18.0702" "18.4875" "18.6564" "16.4145" "18.0752" "18.4465" "16.5908" "16.7865" "14.8588" "17.6120" "20.6255" "16.5272" "16.9514" "17.6486" "19.7264" "15.3922" "17.3197" "17.3178" "19.6792" "18.5735" "16.1631" "17.9966" "17.9809"
|
| 36 |
+
"S035" "Study_MET11_35" "Subtype_B" "51" "Female" "Asian" "Non-Hispanic" "19.2709" "15.8997" "16.9360" "16.6803" "16.2619" "17.9972" "17.9403" "20.0400" "17.8412" "18.1301" "17.9535" "17.4601" "16.8420" "15.5194" "18.4163" "18.1060" "16.6804" "18.3133" "18.7129" "18.5084" "19.0317" "19.5059" "17.3410" "18.7454" "18.4027" "20.7139" "18.2505" "16.5213" "18.5876" "19.8803" "16.9324" "16.9250" "17.3073" "21.1441" "16.8232" "17.1675" "17.2323" "16.7350" "17.1832" "18.5031" "20.3197" "15.5185" "16.9835" "17.5902" "17.8612" "16.7519" "17.9320" "19.3722" "19.4974" "16.3308" "19.6107" "19.3158" "17.9608" "17.7398" "17.6911" "16.3665" "18.0523" "19.3625" "18.6189" "15.1558" "17.2513" "18.2256" "17.4122" "17.3581" "16.6002" "18.2232" "18.3039" "20.8087" "18.3476" "19.0176" "17.3806" "17.7542" "18.0646" "18.4642" "16.4830" "17.9587" "19.0781" "17.1978" "17.1976" "19.7748" "18.7685" "18.2860" "19.7570" "18.6945" "18.1333" "19.5825" "18.9075" "18.3464" "19.9443" "20.4168" "17.9534" "18.8576" "16.2587" "18.0003" "19.5251" "16.1388" "18.2472" "16.2844" "20.3518" "18.8607" "17.5134" "18.6837" "18.5774" "18.5095" "15.3888" "19.4855" "17.4529" "16.8743" "17.3365" "18.1493" "19.1990" "19.5015" "17.8634" "18.7168" "17.3361" "19.2962" "16.6529" "18.9090" "18.3206" "19.7398" "17.9789" "17.8791" "17.2281" "17.2013" "20.0145" "15.8517" "17.1363" "17.9617" "17.7838" "19.1226" "18.7575" "18.1762" "18.4171" "16.3244" "18.2085" "16.6671" "19.3835" "16.9732" "18.7999" "16.0814" "19.5070" "16.6724" "20.7041" "18.2251" "18.6983" "16.8763" "20.5071" "18.2878" "17.6429" "18.3855" "19.0076" "17.3691" "16.2875" "16.5264" "20.2462" "17.4761" "17.6535" "16.5105" "18.6055" "17.7696"
|
| 37 |
+
"S036" "Study_MET11_36" "Subtype_D" "37" "Female" "White" "Non-Hispanic" "18.8266" "16.8182" "19.3193" "17.5943" "16.9802" "19.1429" "16.5123" "18.4286" "16.2653" "17.7033" "15.9698" "17.9960" "18.5855" "17.9087" "17.6319" "17.5697" "19.0308" "15.9046" "16.7999" "19.2905" "19.1401" "17.0985" "18.4895" "20.0212" "17.5751" "18.8790" "18.8600" "17.1093" "19.1888" "18.3677" "19.1000" "17.6261" "17.6764" "19.8916" "18.1373" "18.2317" "19.8479" "17.8072" "17.2469" "19.0293" "19.9890" "16.6423" "16.8583" "18.8017" "19.5484" "17.3188" "18.8672" "17.9991" "18.0824" "16.4360" "15.7911" "18.9583" "19.2426" "19.3494" "17.8415" "22.1095" "17.1889" "19.7642" "19.3930" "16.0542" "17.4578" "17.2230" "17.2889" "15.6689" "19.7592" "18.5641" "14.4395" "17.9118" "17.2816" "19.1309" "16.7145" "18.5066" "18.3249" "18.7117" "17.5893" "20.2478" "17.1738" "19.7286" "18.0505" "19.3791" "14.7696" "19.5214" "17.1938" "17.6144" "17.8383" "16.7670" "16.9792" "18.8000" "18.1468" "18.1921" "20.4309" "18.8588" "18.7319" "18.3495" "16.4374" "16.0267" "19.6446" "17.6781" "17.6630" "18.8281" "18.4301" "18.9445" "16.9425" "17.0201" "16.2209" "18.6830" "18.2993" "15.8882" "16.4575" "17.3684" "18.4373" "17.7657" "18.4090" "17.0682" "16.5434" "18.2693" "17.5059" "17.1750" "18.9719" "17.1723" "16.8842" "16.1551" "16.9434" "17.7114" "17.7418" "17.8898" "18.7179" "16.9847" "20.7513" "19.6417" "18.0766" "17.5928" "17.0885" "16.4725" "18.0369" "17.1764" "16.8916" "19.2122" "19.2517" "17.4825" "18.7915" "19.1741" "16.2760" "19.0836" "19.2162" "16.1229" "18.6903" "18.9570" "16.9173" "15.7278" "19.6283" "18.5038" "15.0608" "18.4850" "17.6228" "21.7933" "19.6523" "19.0462" "19.3821" "17.8497"
|
| 38 |
+
"S037" "Study_MET11_37" "Subtype_B" "73" "Male" "Other" "Non-Hispanic" "18.4755" "18.9185" "18.7016" "17.1419" "17.9327" "18.4668" "19.1464" "19.3440" "19.2453" "18.8764" "16.4006" "18.1986" "18.5505" "18.2736" "17.7509" "18.8500" "17.6928" "17.8215" "18.9608" "18.0057" "17.2425" "18.8338" "19.5110" "17.1867" "16.4873" "18.7271" "19.5899" "18.2199" "18.8207" "17.9553" "19.9266" "17.4693" "18.7467" "19.5330" "17.8632" "17.9730" "18.8209" "17.0815" "18.0912" "18.2023" "19.4475" "16.9015" "17.7839" "19.0580" "19.0973" "18.0103" "17.6708" "18.1096" "18.4493" "16.5122" "18.2592" "19.0146" "19.3475" "17.3069" "19.4369" "17.4327" "20.1852" "16.7815" "18.1849" "16.7053" "18.2081" "15.6310" "17.9871" "16.9056" "17.6253" "18.2654" "16.8147" "20.7512" "17.5919" "19.7019" "18.2094" "17.8229" "17.9898" "19.7453" "16.8770" "18.0675" "17.2889" "16.8196" "17.9033" "16.6384" "16.7727" "18.6121" "17.8123" "16.1920" "20.4869" "19.0574" "19.7129" "18.2769" "16.2119" "17.3413" "16.4024" "17.7521" "17.3972" "18.2197" "19.7242" "18.4134" "18.4476" "19.1969" "17.4519" "19.2402" "17.2230" "19.7426" "16.4927" "16.3312" "16.6260" "17.8520" "16.7362" "18.0172" "19.3153" "17.8407" "19.4021" "18.1180" "17.8077" "17.4983" "17.6401" "19.0385" "18.4073" "16.1451" "18.7214" "18.7025" "17.8826" "16.6324" "17.7665" "18.3212" "18.4117" "17.4025" "19.8758" "16.9704" "18.4804" "19.0040" "17.3559" "19.0377" "17.8535" "17.6676" "20.4017" "19.4990" "18.8187" "16.2434" "16.9300" "18.3184" "18.4673" "18.6784" "19.2502" "16.6581" "19.6129" "17.4787" "19.5896" "19.1474" "17.0244" "17.0558" "17.9403" "18.0828" "17.2558" "17.8183" "17.3122" "18.0423" "17.4383" "16.7945" "18.6792" "18.2401"
|
| 39 |
+
"S038" "Study_MET11_38" "Subtype_D" "43" "Female" "Black" "Non-Hispanic" "19.9570" "17.8164" "17.0143" "18.6029" "18.2387" "17.7513" "18.3980" "18.7407" "17.1994" "15.2568" "19.0858" "18.9463" "18.7381" "18.0484" "17.8600" "16.9516" "18.9311" "18.3419" "17.8610" "19.0494" "18.4187" "18.8168" "18.8655" "18.4927" "17.7463" "18.0878" "19.0092" "17.2018" "17.8202" "17.7463" "19.6040" "17.2109" "16.7725" "19.4277" "17.5640" "18.6182" "18.8734" "17.6951" "18.4104" "18.7364" "18.4375" "18.1778" "17.4599" "18.6453" "18.1416" "16.8664" "20.0377" "16.6357" "15.2520" "16.5851" "17.2881" "19.5070" "18.9087" "17.4735" "18.0876" "19.9325" "18.2551" "18.3222" "18.4441" "17.0330" "16.8317" "17.2465" "16.1933" "18.2249" "19.1951" "16.2385" "16.4178" "17.9733" "18.4496" "18.2433" "18.4671" "18.8936" "17.7881" "21.6411" "15.5271" "18.7201" "19.4358" "20.4020" "17.1124" "19.4677" "17.2014" "20.3783" "16.7216" "17.2268" "19.0933" "17.4590" "17.6624" "17.8970" "17.6675" "16.9815" "17.4288" "17.2523" "18.4431" "19.5431" "19.0906" "16.1418" "19.5261" "15.5651" "17.7471" "19.4275" "19.0863" "18.0106" "17.0662" "16.7953" "15.4101" "17.8031" "16.8955" "17.8648" "17.2530" "16.7846" "19.5095" "16.7933" "18.7605" "18.2249" "17.0724" "18.0810" "18.3356" "18.6400" "17.0367" "16.8609" "18.3864" "16.7926" "18.7595" "17.8611" "18.1008" "19.1790" "17.7156" "16.0572" "19.2534" "16.8977" "18.0919" "18.6762" "16.6389" "15.5599" "19.2438" "18.4461" "16.4328" "19.6459" "17.8624" "16.3038" "19.1806" "18.8076" "17.0875" "18.2489" "18.7943" "15.6662" "20.6289" "19.1361" "18.2760" "16.2730" "18.6951" "17.6730" "19.6402" "17.8296" "16.8712" "20.3313" "17.0325" "16.7854" "17.4809" "18.2510"
|
| 40 |
+
"S039" "Study_MET11_39" "Subtype_C" "64" "Male" "White" "Non-Hispanic" "18.0439" "17.1262" "17.5707" "17.9414" "17.2848" "18.7485" "18.2400" "20.0571" "17.6226" "18.8882" "18.9165" "18.6925" "16.5148" "16.8289" "17.1855" "17.4160" "20.0566" "19.7043" "18.0302" "18.8231" "17.5980" "17.4746" "18.2594" "19.5044" "18.2961" "19.2852" "18.1814" "18.6205" "18.7011" "19.1747" "17.4334" "16.9761" "19.1968" "19.9161" "17.4061" "17.0512" "19.9492" "15.4893" "16.3200" "17.4137" "20.1384" "17.3659" "15.5268" "17.7756" "19.5450" "17.1602" "19.4588" "18.2437" "17.0920" "17.7770" "17.5317" "17.8876" "18.2087" "17.7865" "17.8322" "19.1957" "18.3356" "18.4582" "21.4885" "16.9269" "15.9718" "17.2134" "17.6751" "17.6588" "19.5340" "16.2358" "15.1760" "17.4285" "18.6058" "18.9350" "18.3612" "17.9650" "15.6501" "18.3449" "16.4389" "18.6685" "15.8057" "17.3525" "19.3576" "18.9774" "18.1895" "16.7412" "18.1260" "20.3891" "16.3953" "18.9101" "18.1028" "19.6736" "18.5170" "18.6285" "17.8064" "16.4843" "17.8166" "17.1481" "18.9314" "16.6274" "18.9643" "18.5993" "18.5848" "18.5020" "16.9917" "19.0292" "16.2598" "16.9235" "16.6025" "18.3682" "17.0222" "18.7418" "17.6016" "16.5895" "18.7724" "18.0309" "18.9230" "18.0175" "18.9203" "17.3659" "19.0713" "17.0352" "17.0194" "17.0278" "19.0536" "16.3196" "17.1095" "16.4218" "16.6488" "16.4349" "20.2467" "17.0917" "18.6869" "16.6190" "18.4164" "18.0353" "18.5021" "17.2965" "17.6098" "18.1911" "17.7864" "17.4471" "17.8520" "16.1274" "20.8623" "18.8985" "17.4278" "17.5105" "18.5134" "17.1251" "18.0599" "18.3430" "16.8740" "15.8465" "19.7252" "17.8337" "16.8880" "18.0176" "18.3548" "18.3036" "16.5767" "19.6757" "15.4568" "19.2951"
|
| 41 |
+
"S040" "Study_MET11_40" "Subtype_A" "58" "Male" "White" "Hispanic" "18.4588" "16.1311" "17.8003" "17.4349" "19.1886" "17.9107" "19.5874" "18.5678" "18.1110" "19.4825" "16.4457" "19.3693" "16.6129" "17.5672" "18.4473" "17.6353" "17.0538" "18.0010" "18.0443" "20.7222" "16.6733" "17.2294" "18.0294" "19.2338" "18.7033" "19.9607" "18.7264" "17.9513" "18.8597" "17.9274" "17.2221" "17.1836" "17.7891" "18.9361" "18.6544" "17.3845" "17.0236" "17.4751" "17.5041" "17.6811" "20.7715" "16.6265" "16.9595" "19.4246" "17.1917" "17.7957" "17.6613" "17.4505" "18.4671" "18.1333" "18.2043" "17.1682" "20.0405" "18.5768" "17.4949" "15.5596" "18.9818" "18.2653" "18.3849" "16.8754" "18.6041" "17.7306" "17.7643" "15.4247" "19.1821" "16.6776" "17.1691" "18.2612" "17.9729" "19.6016" "19.0029" "18.8850" "18.1524" "19.2749" "14.9914" "19.3158" "16.2559" "17.1212" "18.0844" "16.8533" "21.1499" "17.1200" "17.8848" "19.3178" "18.2564" "17.9423" "19.2195" "16.1116" "16.4777" "18.1362" "18.7099" "18.0073" "17.4166" "15.0818" "17.5271" "19.8079" "17.6029" "16.8071" "18.9727" "18.0355" "18.8982" "20.1849" "17.7081" "16.5093" "16.5124" "19.0292" "16.3576" "17.9003" "17.4556" "17.4321" "18.6467" "17.5246" "16.9899" "17.4107" "20.4297" "18.2299" "18.2616" "17.7738" "17.3056" "19.4740" "17.6910" "17.6539" "18.2926" "17.0730" "17.1870" "17.8704" "19.9669" "18.6507" "18.3286" "17.7516" "17.8997" "17.0244" "18.8168" "16.0086" "17.9795" "16.0187" "19.4827" "17.4322" "17.0173" "19.6860" "17.5182" "19.0464" "21.5787" "18.3540" "19.4951" "18.7830" "19.2036" "17.5142" "16.8389" "17.9729" "18.6001" "17.5719" "16.7106" "17.5405" "17.2762" "16.7859" "18.3815" "17.0472" "20.0287" "19.5046"
|
src/statlens/data/examples/12_Continuous_limma_time_course_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/examples/13_Continuous_limma_group_time_interaction_synthetic.tsv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/statlens/data/index.html
ADDED
|
@@ -0,0 +1,846 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8" />
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 6 |
+
<title>statLens — DEA Method Selector</title>
|
| 7 |
+
<meta
|
| 8 |
+
name="description"
|
| 9 |
+
content="Upload a TSV and a study description; statLens picks the right differential expression analysis method and runs the full pipeline."
|
| 10 |
+
/>
|
| 11 |
+
<link
|
| 12 |
+
href="https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"
|
| 13 |
+
rel="stylesheet"
|
| 14 |
+
/>
|
| 15 |
+
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet" />
|
| 16 |
+
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
| 17 |
+
<style type="text/tailwindcss">
|
| 18 |
+
@layer base {
|
| 19 |
+
:root {
|
| 20 |
+
--brand-green: #16a34a;
|
| 21 |
+
--accent-gold: #bbf7d0;
|
| 22 |
+
--ivory: #f0fdf4;
|
| 23 |
+
--ink: #14532d;
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
.material-symbols-outlined {
|
| 27 |
+
font-variation-settings: 'FILL' 0, 'wght' 300, 'GRAD' 0, 'opsz' 24;
|
| 28 |
+
}
|
| 29 |
+
html { scroll-behavior: smooth; }
|
| 30 |
+
.hero-grad { background: linear-gradient(180deg, #f0fdf4, #dcfce7); }
|
| 31 |
+
.glass { background: rgba(255, 255, 255, 0.72); backdrop-filter: blur(10px); }
|
| 32 |
+
</style>
|
| 33 |
+
<script>
|
| 34 |
+
tailwind.config = {
|
| 35 |
+
theme: {
|
| 36 |
+
extend: {
|
| 37 |
+
colors: {
|
| 38 |
+
brand: { green: 'var(--brand-green)' },
|
| 39 |
+
accent: { gold: 'var(--accent-gold)' },
|
| 40 |
+
ivory: 'var(--ivory)' },
|
| 41 |
+
fontFamily: {
|
| 42 |
+
sans: ['Inter', 'ui-sans-serif', 'system-ui'],
|
| 43 |
+
serif: ['Lora', 'serif'],
|
| 44 |
+
mono: ['JetBrains Mono', 'ui-monospace', 'monospace'],
|
| 45 |
+
},
|
| 46 |
+
boxShadow: {
|
| 47 |
+
card: '0 14px 36px rgba(0,0,0,.12)',
|
| 48 |
+
subtle: '0 6px 20px rgba(0,0,0,.08)',
|
| 49 |
+
},
|
| 50 |
+
borderRadius: { xl: '1rem', '2xl': '1.5rem' },
|
| 51 |
+
},
|
| 52 |
+
},
|
| 53 |
+
};
|
| 54 |
+
</script>
|
| 55 |
+
<style>
|
| 56 |
+
html, body { height: 100%; }
|
| 57 |
+
body { min-height: 100vh; display: flex; flex-direction: column; }
|
| 58 |
+
header.hero-grad { flex: 0 0 auto; }
|
| 59 |
+
main { flex: 1 0 auto; }
|
| 60 |
+
footer { flex: 0 0 auto; }
|
| 61 |
+
|
| 62 |
+
/* --- form premium look (carried over from the design source) --- */
|
| 63 |
+
textarea, input[type="text"] {
|
| 64 |
+
background: #F9FAFB !important;
|
| 65 |
+
border: 1px solid #E5E7EB !important;
|
| 66 |
+
border-radius: 8px !important;
|
| 67 |
+
padding: 10px 12px !important;
|
| 68 |
+
font-size: 14px !important;
|
| 69 |
+
color: #111827 !important;
|
| 70 |
+
transition: border-color 0.15s, box-shadow 0.15s !important;
|
| 71 |
+
outline: none !important;
|
| 72 |
+
}
|
| 73 |
+
textarea:focus, input[type="text"]:focus {
|
| 74 |
+
border-color: #86EFAC !important;
|
| 75 |
+
box-shadow: 0 0 0 3px rgba(22,163,74,0.10) !important;
|
| 76 |
+
background: #fff !important;
|
| 77 |
+
}
|
| 78 |
+
.field-label {
|
| 79 |
+
font-size: 11px;
|
| 80 |
+
font-weight: 600;
|
| 81 |
+
text-transform: uppercase;
|
| 82 |
+
letter-spacing: 0.06em;
|
| 83 |
+
color: #6B7280;
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
/* drop zone */
|
| 87 |
+
.dropzone {
|
| 88 |
+
border: 2px dashed #d1d5db;
|
| 89 |
+
border-radius: 14px;
|
| 90 |
+
padding: 28px;
|
| 91 |
+
text-align: center;
|
| 92 |
+
background: #fafafa;
|
| 93 |
+
transition: border-color 0.15s, background 0.15s;
|
| 94 |
+
cursor: pointer;
|
| 95 |
+
}
|
| 96 |
+
.dropzone:hover, .dropzone.drag {
|
| 97 |
+
border-color: var(--brand-green);
|
| 98 |
+
background: #f0fdf4;
|
| 99 |
+
}
|
| 100 |
+
.dropzone.has-file {
|
| 101 |
+
border-style: solid;
|
| 102 |
+
border-color: var(--brand-green);
|
| 103 |
+
background: #f0fdf4;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
/* loading spinner */
|
| 107 |
+
.spinner {
|
| 108 |
+
width: 40px; height: 40px;
|
| 109 |
+
border: 3px solid #e5e7eb;
|
| 110 |
+
border-top-color: var(--brand-green);
|
| 111 |
+
border-radius: 50%;
|
| 112 |
+
animation: spin 0.8s linear infinite;
|
| 113 |
+
}
|
| 114 |
+
@keyframes spin { to { transform: rotate(360deg); } }
|
| 115 |
+
|
| 116 |
+
.step-line { display: flex; align-items: center; gap: 10px; padding: 6px 0; font-size: 13px; color: #6B7280; }
|
| 117 |
+
.step-line.active { color: #14532d; font-weight: 500; }
|
| 118 |
+
.step-line.done { color: #16a34a; }
|
| 119 |
+
.step-icon {
|
| 120 |
+
width: 18px; height: 18px; border-radius: 50%;
|
| 121 |
+
display: inline-grid; place-items: center;
|
| 122 |
+
background: #e5e7eb; color: #9ca3af;
|
| 123 |
+
font-size: 11px;
|
| 124 |
+
}
|
| 125 |
+
.step-line.active .step-icon { background: var(--brand-green); color: white; }
|
| 126 |
+
.step-line.done .step-icon { background: var(--brand-green); color: white; }
|
| 127 |
+
|
| 128 |
+
/* image grid lightbox style */
|
| 129 |
+
.img-thumb {
|
| 130 |
+
cursor: zoom-in;
|
| 131 |
+
transition: transform 0.15s, box-shadow 0.15s;
|
| 132 |
+
border: 1px solid rgba(0,0,0,0.06);
|
| 133 |
+
}
|
| 134 |
+
.img-thumb:hover {
|
| 135 |
+
transform: translateY(-2px);
|
| 136 |
+
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
/* table */
|
| 140 |
+
.preview-table {
|
| 141 |
+
font-family: 'JetBrains Mono', monospace;
|
| 142 |
+
font-size: 11.5px;
|
| 143 |
+
border-collapse: collapse;
|
| 144 |
+
width: 100%;
|
| 145 |
+
}
|
| 146 |
+
.preview-table th, .preview-table td {
|
| 147 |
+
padding: 6px 10px;
|
| 148 |
+
border-bottom: 1px solid #f1f5f9;
|
| 149 |
+
text-align: left;
|
| 150 |
+
white-space: nowrap;
|
| 151 |
+
}
|
| 152 |
+
.preview-table th {
|
| 153 |
+
background: #f8fafc;
|
| 154 |
+
font-weight: 600;
|
| 155 |
+
color: #475569;
|
| 156 |
+
position: sticky; top: 0;
|
| 157 |
+
}
|
| 158 |
+
.preview-table tr:hover td { background: #f0fdf4; }
|
| 159 |
+
|
| 160 |
+
/* label badge huge */
|
| 161 |
+
.label-badge {
|
| 162 |
+
display: inline-flex; align-items: center; gap: 8px;
|
| 163 |
+
background: linear-gradient(90deg, #16a34a, #22c55e);
|
| 164 |
+
color: white; font-weight: 600; font-size: 14px;
|
| 165 |
+
padding: 8px 16px; border-radius: 999px;
|
| 166 |
+
box-shadow: 0 4px 14px rgba(22,163,74,0.35);
|
| 167 |
+
}
|
| 168 |
+
.label-badge.decline {
|
| 169 |
+
background: linear-gradient(90deg, #dc2626, #ef4444);
|
| 170 |
+
box-shadow: 0 4px 14px rgba(220,38,38,0.35);
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
/* lightbox modal */
|
| 174 |
+
#lightbox {
|
| 175 |
+
position: fixed; inset: 0;
|
| 176 |
+
background: rgba(0,0,0,0.85);
|
| 177 |
+
display: none; align-items: center; justify-content: center;
|
| 178 |
+
z-index: 100; cursor: zoom-out;
|
| 179 |
+
}
|
| 180 |
+
#lightbox.open { display: flex; }
|
| 181 |
+
#lightbox img { max-width: 92vw; max-height: 92vh; box-shadow: 0 0 60px rgba(0,0,0,0.5); }
|
| 182 |
+
</style>
|
| 183 |
+
</head>
|
| 184 |
+
|
| 185 |
+
<body class="font-sans text-slate-800 bg-white">
|
| 186 |
+
<!-- ───────────────────────── HERO ───────────────────────── -->
|
| 187 |
+
<header class="hero-grad relative overflow-hidden">
|
| 188 |
+
<nav class="relative max-w-6xl mx-auto px-6 py-3 flex items-center justify-between">
|
| 189 |
+
<div class="flex items-center gap-3">
|
| 190 |
+
<span class="inline-grid place-items-center w-9 h-9 rounded-full overflow-hidden ring-1 ring-slate-200 bg-white">
|
| 191 |
+
<span class="text-xs font-semibold text-[var(--brand-green)]">stat</span>
|
| 192 |
+
</span>
|
| 193 |
+
<div>
|
| 194 |
+
<p class="font-semibold tracking-tight text-slate-900">statLens</p>
|
| 195 |
+
<p class="text-xs text-slate-500">DEA method selector for biomedical / omics studies</p>
|
| 196 |
+
</div>
|
| 197 |
+
</div>
|
| 198 |
+
<a href="#run" class="inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-white/80 border border-slate-200 text-xs hover:bg-white transition">
|
| 199 |
+
<span class="material-symbols-outlined !text-base text-[var(--brand-green)]">arrow_downward</span>
|
| 200 |
+
Get started
|
| 201 |
+
</a>
|
| 202 |
+
</nav>
|
| 203 |
+
|
| 204 |
+
<section class="relative max-w-6xl mx-auto px-6 pb-12 pt-6 grid md:grid-cols-[minmax(0,1.5fr),minmax(0,1fr)] gap-10 items-center">
|
| 205 |
+
<div class="space-y-4">
|
| 206 |
+
<p class="inline-flex items-center gap-2 text-xs font-semibold text-[var(--brand-green)] bg-white/70 px-3 py-1 rounded-full border border-[var(--accent-gold)] shadow-sm">
|
| 207 |
+
<span class="material-symbols-outlined !text-base">auto_awesome</span>
|
| 208 |
+
Qwen3-32B + statLens LoRA · 14-way classifier
|
| 209 |
+
</p>
|
| 210 |
+
<h1 class="font-serif text-3xl md:text-4xl font-semibold tracking-tight text-[var(--ink)]">
|
| 211 |
+
One TSV. One question. One answer.
|
| 212 |
+
</h1>
|
| 213 |
+
<p class="text-[15px] leading-relaxed text-slate-700 max-w-xl">
|
| 214 |
+
Upload your wide-format data and a few sentences of study context.
|
| 215 |
+
statLens picks one of 13 differential-expression methods (or
|
| 216 |
+
declines if your study sits outside its training space) and runs
|
| 217 |
+
the full pipeline — DESeq2 / limma + volcano · MA · PCA · heatmap
|
| 218 |
+
· top genes — in about 25 seconds.
|
| 219 |
+
</p>
|
| 220 |
+
<ul class="text-sm text-slate-700 space-y-1">
|
| 221 |
+
<li class="flex items-start gap-2">
|
| 222 |
+
<span class="material-symbols-outlined !text-base text-[var(--brand-green)] mt-[1px]">check_circle</span>
|
| 223 |
+
<span><span class="font-semibold">Schema-aware ·</span> reads the entire TSV (not the first 50 rows) before classifying.</span>
|
| 224 |
+
</li>
|
| 225 |
+
<li class="flex items-start gap-2">
|
| 226 |
+
<span class="material-symbols-outlined !text-base text-[var(--brand-green)] mt-[1px]">check_circle</span>
|
| 227 |
+
<span><span class="font-semibold">14-way decision ·</span> 13 DEA scenarios + a “none of these” kill-switch — no forced fits.</span>
|
| 228 |
+
</li>
|
| 229 |
+
<li class="flex items-start gap-2">
|
| 230 |
+
<span class="material-symbols-outlined !text-base text-[var(--brand-green)] mt-[1px]">check_circle</span>
|
| 231 |
+
<span><span class="font-semibold">Reproducible ·</span> each run is a self-contained folder you can download.</span>
|
| 232 |
+
</li>
|
| 233 |
+
</ul>
|
| 234 |
+
<div class="pt-3">
|
| 235 |
+
<a href="#run" class="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--brand-green)] text-white text-sm shadow-subtle hover:bg-emerald-800/90 transition">
|
| 236 |
+
<span class="material-symbols-outlined !text-base">play_arrow</span>
|
| 237 |
+
<span>Run on your data ���</span>
|
| 238 |
+
</a>
|
| 239 |
+
</div>
|
| 240 |
+
</div>
|
| 241 |
+
|
| 242 |
+
<div class="hidden md:flex items-center justify-end">
|
| 243 |
+
<div class="glass border border-slate-200/80 rounded-3xl shadow-card p-4 w-full max-w-xs">
|
| 244 |
+
<div class="flex items-center justify-between mb-3">
|
| 245 |
+
<p class="text-xs font-semibold tracking-wide text-slate-600 uppercase">14 candidate labels</p>
|
| 246 |
+
<span class="inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-[var(--brand-green)]/10 text-[10px] text-[var(--brand-green)]">
|
| 247 |
+
<span class="material-symbols-outlined !text-sm">verified</span>
|
| 248 |
+
trained
|
| 249 |
+
</span>
|
| 250 |
+
</div>
|
| 251 |
+
<div class="border border-[rgba(0,0,0,0.05)] rounded-2xl overflow-hidden bg-white/90">
|
| 252 |
+
<div class="px-3 py-2 bg-[#16a34a] text-white text-[11px] font-serif font-medium">DEA scenarios</div>
|
| 253 |
+
<div class="divide-y divide-slate-100 text-[11px]">
|
| 254 |
+
<div class="px-3 py-1.5"><span class="text-slate-500">Count · </span>basic / batch / paired / multi-group / time / interaction / ZINB</div>
|
| 255 |
+
<div class="px-3 py-1.5"><span class="text-slate-500">Continuous · </span>basic / batch / paired / multi-group / time / interaction</div>
|
| 256 |
+
<div class="px-3 py-1.5 bg-gradient-to-b from-white to-slate-50 text-slate-500 italic">
|
| 257 |
+
+ <span class="font-semibold not-italic text-rose-600">none_of_these</span> — kill-switch when nothing fits.
|
| 258 |
+
</div>
|
| 259 |
+
</div>
|
| 260 |
+
</div>
|
| 261 |
+
</div>
|
| 262 |
+
</div>
|
| 263 |
+
</section>
|
| 264 |
+
</header>
|
| 265 |
+
|
| 266 |
+
<!-- ───────────────────────── RUN FORM ───────────────────────── -->
|
| 267 |
+
<main id="run" class="max-w-6xl mx-auto w-full px-6 py-10 space-y-6">
|
| 268 |
+
<section id="formCard" class="bg-white border border-slate-200 rounded-2xl shadow-subtle p-6 md:p-8">
|
| 269 |
+
<div class="flex items-center gap-3 mb-5">
|
| 270 |
+
<span class="inline-grid place-items-center w-9 h-9 rounded-xl bg-[var(--ivory)]">
|
| 271 |
+
<span class="material-symbols-outlined !text-lg text-[var(--brand-green)]">upload_file</span>
|
| 272 |
+
</span>
|
| 273 |
+
<div>
|
| 274 |
+
<h2 class="font-serif text-xl font-semibold text-[var(--ink)]">New analysis</h2>
|
| 275 |
+
<p class="text-xs text-slate-500">Two inputs, one click. Result in ~25 seconds.</p>
|
| 276 |
+
</div>
|
| 277 |
+
</div>
|
| 278 |
+
|
| 279 |
+
<form id="runForm" class="space-y-5">
|
| 280 |
+
<!-- file dropzone -->
|
| 281 |
+
<div>
|
| 282 |
+
<label class="field-label block mb-2">Wide-format TSV</label>
|
| 283 |
+
<div id="dropzone" class="dropzone">
|
| 284 |
+
<input type="file" id="fileInput" accept=".tsv,.txt" hidden />
|
| 285 |
+
<span class="material-symbols-outlined !text-3xl text-slate-400">cloud_upload</span>
|
| 286 |
+
<p id="dzLabel" class="mt-1 text-sm text-slate-600">
|
| 287 |
+
Drag & drop your <span class="font-mono">.tsv</span> here, or click to browse
|
| 288 |
+
</p>
|
| 289 |
+
<p class="text-[11px] text-slate-400 mt-1">
|
| 290 |
+
Expected columns: <span class="font-mono">subject_id</span>, <span class="font-mono">sample_id</span>,
|
| 291 |
+
a design column, and feature columns prefixed
|
| 292 |
+
<span class="font-mono">gene_/asv_/prot_/metab_</span>.
|
| 293 |
+
</p>
|
| 294 |
+
</div>
|
| 295 |
+
</div>
|
| 296 |
+
|
| 297 |
+
<!-- context textarea -->
|
| 298 |
+
<div>
|
| 299 |
+
<label class="field-label block mb-2" for="ctxInput">Study context</label>
|
| 300 |
+
<textarea id="ctxInput" rows="6" class="block w-full resize-y" placeholder="Free-text description of your study. e.g., 'We collected matched tumor and adjacent-normal biopsies from 20 colorectal cancer patients, RNA-seq, looking for paired tumor-vs-normal differentially expressed genes.'"></textarea>
|
| 301 |
+
</div>
|
| 302 |
+
|
| 303 |
+
<div class="flex items-center justify-between gap-4 pt-2">
|
| 304 |
+
<p id="formHint" class="text-xs text-slate-500">Both inputs required.</p>
|
| 305 |
+
<button id="submitBtn" type="submit"
|
| 306 |
+
class="inline-flex items-center gap-2 px-5 py-2.5 rounded-full bg-[var(--brand-green)] text-white text-sm shadow-subtle hover:bg-emerald-800/90 transition disabled:opacity-50 disabled:cursor-not-allowed">
|
| 307 |
+
<span class="material-symbols-outlined !text-base">bolt</span>
|
| 308 |
+
<span>Classify & run</span>
|
| 309 |
+
</button>
|
| 310 |
+
</div>
|
| 311 |
+
</form>
|
| 312 |
+
</section>
|
| 313 |
+
|
| 314 |
+
<!-- ───────── LOADING ───────── -->
|
| 315 |
+
<section id="loadingCard" class="bg-white border border-slate-200 rounded-2xl shadow-subtle p-6 md:p-8 hidden">
|
| 316 |
+
<div class="flex items-center gap-4">
|
| 317 |
+
<div class="spinner"></div>
|
| 318 |
+
<div>
|
| 319 |
+
<h3 class="font-serif text-lg font-semibold text-[var(--ink)]">Working…</h3>
|
| 320 |
+
<p class="text-xs text-slate-500">Typical end-to-end ~25 s. Don't refresh the page.</p>
|
| 321 |
+
</div>
|
| 322 |
+
</div>
|
| 323 |
+
<div class="mt-4 grid gap-1">
|
| 324 |
+
<div class="step-line" data-step="upload"><span class="step-icon">1</span> Upload received</div>
|
| 325 |
+
<div class="step-line" data-step="schema"><span class="step-icon">2</span> Building schema summary from full TSV</div>
|
| 326 |
+
<div class="step-line" data-step="classify"><span class="step-icon">3</span> Asking the SFT classifier (14-way)</div>
|
| 327 |
+
<div class="step-line" data-step="pipeline"><span class="step-icon">4</span> Running matched DEA pipeline (DESeq2 / limma + plots)</div>
|
| 328 |
+
<div class="step-line" data-step="package"><span class="step-icon">5</span> Packaging result folder</div>
|
| 329 |
+
</div>
|
| 330 |
+
</section>
|
| 331 |
+
|
| 332 |
+
<!-- ───────── SCHEMA ───────── -->
|
| 333 |
+
<section id="schemaCard" class="bg-white border border-slate-200 rounded-2xl shadow-subtle p-6 md:p-8 hidden">
|
| 334 |
+
<div class="flex items-center gap-3 mb-4">
|
| 335 |
+
<span class="inline-grid place-items-center w-9 h-9 rounded-xl bg-[var(--ivory)]">
|
| 336 |
+
<span class="material-symbols-outlined !text-lg text-[var(--brand-green)]">tune</span>
|
| 337 |
+
</span>
|
| 338 |
+
<div class="flex-1">
|
| 339 |
+
<h2 class="font-serif text-xl font-semibold text-[var(--ink)]">Schema we extracted</h2>
|
| 340 |
+
<p class="text-xs text-slate-500">Review and edit before running the pipeline. Green = decision-driving fields.</p>
|
| 341 |
+
</div>
|
| 342 |
+
<button type="button" data-action="reset"
|
| 343 |
+
class="reset-btn inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-slate-200 text-xs text-slate-700 hover:bg-slate-50 transition">
|
| 344 |
+
<span class="material-symbols-outlined !text-base">close</span>
|
| 345 |
+
Cancel
|
| 346 |
+
</button>
|
| 347 |
+
</div>
|
| 348 |
+
|
| 349 |
+
<div id="schemaFields" class="grid md:grid-cols-2 gap-x-6 gap-y-2"></div>
|
| 350 |
+
|
| 351 |
+
<div class="flex items-center justify-end gap-3 mt-5">
|
| 352 |
+
<button id="runPipelineBtn" type="button"
|
| 353 |
+
class="inline-flex items-center gap-2 px-5 py-2.5 rounded-full bg-[var(--brand-green)] text-white text-sm shadow-subtle hover:bg-emerald-800/90 transition disabled:opacity-50 disabled:cursor-not-allowed">
|
| 354 |
+
<span class="material-symbols-outlined !text-base">play_arrow</span>
|
| 355 |
+
<span>Run pipeline →</span>
|
| 356 |
+
</button>
|
| 357 |
+
</div>
|
| 358 |
+
</section>
|
| 359 |
+
|
| 360 |
+
<!-- ───────── ERROR ───────── -->
|
| 361 |
+
<section id="errorCard" class="bg-white border border-rose-200 rounded-2xl shadow-subtle p-6 md:p-8 hidden">
|
| 362 |
+
<div class="flex items-start gap-3">
|
| 363 |
+
<span class="material-symbols-outlined !text-2xl text-rose-600 mt-1">error</span>
|
| 364 |
+
<div class="flex-1">
|
| 365 |
+
<div class="flex items-start justify-between gap-3 mb-2">
|
| 366 |
+
<h3 class="font-serif text-lg font-semibold text-rose-700">Run failed</h3>
|
| 367 |
+
<button type="button" data-action="reset"
|
| 368 |
+
class="reset-btn inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-slate-200 text-xs text-slate-700 hover:bg-slate-50 transition">
|
| 369 |
+
<span class="material-symbols-outlined !text-base">refresh</span>
|
| 370 |
+
New analysis
|
| 371 |
+
</button>
|
| 372 |
+
</div>
|
| 373 |
+
<pre id="errorMsg" class="text-xs text-rose-700 bg-rose-50 mt-2 p-3 rounded-md whitespace-pre-wrap font-mono"></pre>
|
| 374 |
+
</div>
|
| 375 |
+
</div>
|
| 376 |
+
</section>
|
| 377 |
+
|
| 378 |
+
<!-- ───────── DECLINE ───────── -->
|
| 379 |
+
<section id="declineCard" class="bg-white border border-slate-200 rounded-2xl shadow-subtle p-6 md:p-8 hidden">
|
| 380 |
+
<div class="flex items-center gap-3 mb-4">
|
| 381 |
+
<span class="label-badge decline">
|
| 382 |
+
<span class="material-symbols-outlined !text-base">block</span>
|
| 383 |
+
none_of_these
|
| 384 |
+
</span>
|
| 385 |
+
<p class="text-xs text-slate-500">statLens declined to run a pipeline.</p>
|
| 386 |
+
<button type="button" data-action="reset"
|
| 387 |
+
class="reset-btn ml-auto inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-slate-200 text-xs text-slate-700 hover:bg-slate-50 transition">
|
| 388 |
+
<span class="material-symbols-outlined !text-base">refresh</span>
|
| 389 |
+
New analysis
|
| 390 |
+
</button>
|
| 391 |
+
</div>
|
| 392 |
+
<p class="text-sm text-slate-700 mb-2 font-semibold">Model reasoning</p>
|
| 393 |
+
<p id="declineReason" class="text-sm text-slate-600 leading-relaxed bg-slate-50 p-3 rounded-md"></p>
|
| 394 |
+
<p class="text-[12px] text-slate-500 mt-3">
|
| 395 |
+
The model's 14 options cover only the <em>differential expression</em> scenarios listed in the hero card.
|
| 396 |
+
For survival, single-sample, network inference or other questions, you'll need a different tool.
|
| 397 |
+
</p>
|
| 398 |
+
</section>
|
| 399 |
+
|
| 400 |
+
<!-- ───────── RESULT ───────── -->
|
| 401 |
+
<section id="resultCard" class="bg-white border border-slate-200 rounded-2xl shadow-subtle p-6 md:p-8 hidden">
|
| 402 |
+
<div class="flex flex-wrap items-center gap-3 mb-2">
|
| 403 |
+
<span class="label-badge">
|
| 404 |
+
<span class="material-symbols-outlined !text-base">verified</span>
|
| 405 |
+
<span id="resLabel">label_here</span>
|
| 406 |
+
</span>
|
| 407 |
+
<span id="resPipeline" class="text-xs text-slate-500"></span>
|
| 408 |
+
<span id="resElapsed" class="text-xs text-slate-400"></span>
|
| 409 |
+
<a id="dlZip" href="#" class="ml-auto inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-[var(--ivory)] border border-[var(--accent-gold)] text-xs text-[var(--ink)] hover:bg-emerald-100 transition">
|
| 410 |
+
<span class="material-symbols-outlined !text-base">download</span>
|
| 411 |
+
Download all
|
| 412 |
+
</a>
|
| 413 |
+
<button type="button" data-action="reset"
|
| 414 |
+
class="reset-btn inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-slate-200 text-xs text-slate-700 hover:bg-slate-50 transition">
|
| 415 |
+
<span class="material-symbols-outlined !text-base">refresh</span>
|
| 416 |
+
New analysis
|
| 417 |
+
</button>
|
| 418 |
+
</div>
|
| 419 |
+
|
| 420 |
+
<div class="mt-4">
|
| 421 |
+
<p class="field-label mb-1">Why this label</p>
|
| 422 |
+
<p id="resReason" class="text-sm text-slate-700 leading-relaxed bg-slate-50 p-3 rounded-md"></p>
|
| 423 |
+
</div>
|
| 424 |
+
|
| 425 |
+
<div class="mt-6">
|
| 426 |
+
<p class="field-label mb-2">Plots</p>
|
| 427 |
+
<div id="imgGrid" class="grid grid-cols-2 md:grid-cols-3 gap-3"></div>
|
| 428 |
+
</div>
|
| 429 |
+
|
| 430 |
+
<div class="mt-6">
|
| 431 |
+
<p class="field-label mb-2">Top results <span id="tableTotal" class="ml-2 text-slate-400 normal-case font-normal text-[11px]"></span></p>
|
| 432 |
+
<div class="flex items-center gap-2 mb-2 flex-wrap" id="tableTabs"></div>
|
| 433 |
+
<div id="tableBox" class="border border-slate-200 rounded-lg overflow-x-auto max-h-[420px]"></div>
|
| 434 |
+
</div>
|
| 435 |
+
</section>
|
| 436 |
+
</main>
|
| 437 |
+
|
| 438 |
+
<!-- ───────────────────────── FOOTER ───────────────────────── -->
|
| 439 |
+
<footer class="border-t border-slate-200 mt-10 py-6">
|
| 440 |
+
<div class="max-w-6xl mx-auto px-6 flex items-center justify-between text-xs text-slate-500">
|
| 441 |
+
<span>statLens v1 · Qwen3-32B + statLens LoRA → DESeq2/limma pipelines</span>
|
| 442 |
+
<span class="font-mono">localhost:7860</span>
|
| 443 |
+
</div>
|
| 444 |
+
</footer>
|
| 445 |
+
|
| 446 |
+
<!-- lightbox -->
|
| 447 |
+
<div id="lightbox"><img id="lightboxImg" src="" alt="" /></div>
|
| 448 |
+
|
| 449 |
+
<!-- ───────────────────────── JS ───────────────────────── -->
|
| 450 |
+
<script>
|
| 451 |
+
// ── DOM refs ──
|
| 452 |
+
const $ = (id) => document.getElementById(id);
|
| 453 |
+
const dz = $('dropzone'), fileInput = $('fileInput'), dzLabel = $('dzLabel');
|
| 454 |
+
const ctxInput = $('ctxInput'), submitBtn = $('submitBtn'), formHint = $('formHint');
|
| 455 |
+
const formCard = $('formCard'), loadingCard = $('loadingCard');
|
| 456 |
+
const resultCard = $('resultCard'), declineCard = $('declineCard'), errorCard = $('errorCard');
|
| 457 |
+
const schemaCard = $('schemaCard');
|
| 458 |
+
const lightbox = $('lightbox'), lightboxImg = $('lightboxImg');
|
| 459 |
+
|
| 460 |
+
let chosenFile = null;
|
| 461 |
+
let currentRunId = null;
|
| 462 |
+
let currentSchema = null;
|
| 463 |
+
|
| 464 |
+
// ── SchemaSummary spec (mirror of schema_spec.py) ──
|
| 465 |
+
const PLATFORMS = ['bulk_RNA-seq','16S','scRNA_pseudobulk','proteomics','metabolomics','microarray','other'];
|
| 466 |
+
const DATA_TYPES = ['count','continuous'];
|
| 467 |
+
const SCHEMA_FIELDS = [
|
| 468 |
+
// group A = decision-driving (highlighted green)
|
| 469 |
+
{ name:'omics_data_type', type:'enum', values:DATA_TYPES, label:'Data type', group:'A' },
|
| 470 |
+
{ name:'zero_fraction', type:'float', label:'Zero rate', group:'A', readonly:true },
|
| 471 |
+
{ name:'number_of_groups', type:'int', label:'# of groups', group:'A' },
|
| 472 |
+
{ name:'paired_or_repeated', type:'bool', label:'Paired/repeated?', group:'A' },
|
| 473 |
+
{ name:'time_variable_available', type:'bool', label:'Time variable?', group:'A' },
|
| 474 |
+
{ name:'number_of_timepoints', type:'int', label:'# of timepoints', group:'A' },
|
| 475 |
+
{ name:'explicit_group_time_interaction_question', type:'bool', label:'Group×time interaction Q?', group:'A' },
|
| 476 |
+
{ name:'batch_variable_available', type:'bool', label:'Batch variable?', group:'A' },
|
| 477 |
+
// group B = context (subtle)
|
| 478 |
+
{ name:'omics_platform', type:'enum', values:PLATFORMS, label:'Platform', group:'B' },
|
| 479 |
+
{ name:'is_raw_count', type:'bool', label:'Raw counts?', group:'B' },
|
| 480 |
+
{ name:'is_log_or_normalized', type:'bool', label:'Log/normalized?', group:'B' },
|
| 481 |
+
{ name:'primary_group_variable', type:'str', label:'Group column', group:'B' },
|
| 482 |
+
{ name:'group_levels', type:'list', label:'Group levels', group:'B' },
|
| 483 |
+
{ name:'reference_level', type:'str', label:'Reference (control) level', group:'B' },
|
| 484 |
+
{ name:'is_cross_sectional', type:'bool', label:'Cross-sectional?', group:'B' },
|
| 485 |
+
{ name:'subject_id_available', type:'bool', label:'Subject IDs?', group:'B' },
|
| 486 |
+
{ name:'subject_id_column', type:'str', label:'Subject ID column', group:'B' },
|
| 487 |
+
{ name:'time_variable_column', type:'str', label:'Time column', group:'B' },
|
| 488 |
+
{ name:'explicit_time_course_question', type:'bool', label:'Time-course Q?', group:'B' },
|
| 489 |
+
{ name:'batch_variables', type:'list', label:'Batch columns', group:'B' },
|
| 490 |
+
{ name:'primary_analysis_goal', type:'str', label:'Goal (free text)', group:'B' },
|
| 491 |
+
];
|
| 492 |
+
|
| 493 |
+
// (0.1.6: schemaCard is purely informational here — no client-side
|
| 494 |
+
// label prediction. The LLM picks the label in stage 3 when the user
|
| 495 |
+
// clicks "Run pipeline →".)
|
| 496 |
+
|
| 497 |
+
// ── dropzone wiring ──
|
| 498 |
+
dz.addEventListener('click', () => fileInput.click());
|
| 499 |
+
fileInput.addEventListener('change', (e) => {
|
| 500 |
+
if (e.target.files && e.target.files[0]) attachFile(e.target.files[0]);
|
| 501 |
+
});
|
| 502 |
+
['dragenter','dragover'].forEach(ev => dz.addEventListener(ev, (e) => {
|
| 503 |
+
e.preventDefault(); dz.classList.add('drag');
|
| 504 |
+
}));
|
| 505 |
+
['dragleave','drop'].forEach(ev => dz.addEventListener(ev, (e) => {
|
| 506 |
+
e.preventDefault(); dz.classList.remove('drag');
|
| 507 |
+
}));
|
| 508 |
+
dz.addEventListener('drop', (e) => {
|
| 509 |
+
if (e.dataTransfer.files && e.dataTransfer.files[0]) attachFile(e.dataTransfer.files[0]);
|
| 510 |
+
});
|
| 511 |
+
|
| 512 |
+
function attachFile(f) {
|
| 513 |
+
chosenFile = f;
|
| 514 |
+
dz.classList.add('has-file');
|
| 515 |
+
const sizeMB = (f.size/1024/1024).toFixed(2);
|
| 516 |
+
dzLabel.innerHTML = `<span class="material-symbols-outlined !text-base align-bottom text-[var(--brand-green)]">check_circle</span>
|
| 517 |
+
<span class="font-semibold">${escapeHtml(f.name)}</span> · ${sizeMB} MB
|
| 518 |
+
<span class="ml-2 text-xs text-slate-500">(click to replace)</span>`;
|
| 519 |
+
}
|
| 520 |
+
|
| 521 |
+
// ── lightbox ──
|
| 522 |
+
lightbox.addEventListener('click', () => lightbox.classList.remove('open'));
|
| 523 |
+
|
| 524 |
+
// ── reset (any "+ New analysis" button) ──
|
| 525 |
+
function resetForm() {
|
| 526 |
+
chosenFile = null;
|
| 527 |
+
fileInput.value = '';
|
| 528 |
+
dz.classList.remove('has-file', 'drag');
|
| 529 |
+
dzLabel.innerHTML =
|
| 530 |
+
'Drag & drop your <span class="font-mono">.tsv</span> here, or click to browse';
|
| 531 |
+
ctxInput.value = '';
|
| 532 |
+
formHint.textContent = 'Both inputs required.';
|
| 533 |
+
for (const c of [loadingCard, schemaCard, resultCard, declineCard, errorCard]) {
|
| 534 |
+
c.classList.add('hidden');
|
| 535 |
+
}
|
| 536 |
+
currentRunId = null;
|
| 537 |
+
currentSchema = null;
|
| 538 |
+
// clear previously-rendered tables / images so the cards don't flash old data
|
| 539 |
+
$('imgGrid').innerHTML = '';
|
| 540 |
+
$('tableTabs').innerHTML = '';
|
| 541 |
+
$('tableBox').innerHTML = '';
|
| 542 |
+
document.getElementById('run').scrollIntoView({ behavior: 'smooth', block: 'start' });
|
| 543 |
+
}
|
| 544 |
+
document.body.addEventListener('click', (e) => {
|
| 545 |
+
const btn = e.target.closest('[data-action="reset"]');
|
| 546 |
+
if (btn) resetForm();
|
| 547 |
+
});
|
| 548 |
+
|
| 549 |
+
// ── form submit ──
|
| 550 |
+
$('runForm').addEventListener('submit', async (e) => {
|
| 551 |
+
e.preventDefault();
|
| 552 |
+
const ctx = ctxInput.value.trim();
|
| 553 |
+
if (!chosenFile) { formHint.textContent = 'Please attach a TSV file.'; return; }
|
| 554 |
+
if (!ctx) { formHint.textContent = 'Please write a study context.'; return; }
|
| 555 |
+
submitBtn.disabled = true;
|
| 556 |
+
formHint.textContent = '';
|
| 557 |
+
showOnly(loadingCard);
|
| 558 |
+
markStep('upload', 'done');
|
| 559 |
+
markStep('schema', 'active');
|
| 560 |
+
|
| 561 |
+
// step animation timer (cosmetic — driven by typical timings)
|
| 562 |
+
const stepTimer = animateSteps();
|
| 563 |
+
|
| 564 |
+
const fd = new FormData();
|
| 565 |
+
fd.append('tsv', chosenFile);
|
| 566 |
+
fd.append('context', ctx);
|
| 567 |
+
|
| 568 |
+
try {
|
| 569 |
+
const r = await fetch('/api/extract', { method: 'POST', body: fd });
|
| 570 |
+
clearInterval(stepTimer);
|
| 571 |
+
const data = await r.json();
|
| 572 |
+
if (!r.ok || !data.ok) {
|
| 573 |
+
renderError(data.error || `HTTP ${r.status}`);
|
| 574 |
+
return;
|
| 575 |
+
}
|
| 576 |
+
markStep('classify', 'done');
|
| 577 |
+
renderSchemaCard(data);
|
| 578 |
+
} catch (err) {
|
| 579 |
+
clearInterval(stepTimer);
|
| 580 |
+
renderError(String(err));
|
| 581 |
+
} finally {
|
| 582 |
+
submitBtn.disabled = false;
|
| 583 |
+
}
|
| 584 |
+
});
|
| 585 |
+
|
| 586 |
+
// ── stage 2 — pipeline run after the user reviews / edits the schema ──
|
| 587 |
+
$('runPipelineBtn').addEventListener('click', async () => {
|
| 588 |
+
if (!currentRunId || !currentSchema) return;
|
| 589 |
+
const btn = $('runPipelineBtn');
|
| 590 |
+
btn.disabled = true;
|
| 591 |
+
showOnly(loadingCard);
|
| 592 |
+
markStep('upload', 'done'); markStep('schema', 'done');
|
| 593 |
+
markStep('classify', 'done'); markStep('pipeline', 'active');
|
| 594 |
+
|
| 595 |
+
const fd = new FormData();
|
| 596 |
+
fd.append('run_id', currentRunId);
|
| 597 |
+
fd.append('schema', JSON.stringify(currentSchema));
|
| 598 |
+
|
| 599 |
+
try {
|
| 600 |
+
const r = await fetch('/api/run_pipeline', { method: 'POST', body: fd });
|
| 601 |
+
const data = await r.json();
|
| 602 |
+
if (!r.ok || !data.ok) {
|
| 603 |
+
renderError(data.error || `HTTP ${r.status}`);
|
| 604 |
+
return;
|
| 605 |
+
}
|
| 606 |
+
markStep('package', 'done');
|
| 607 |
+
if (!data.valid || data.label === 'none_of_these') renderDecline(data);
|
| 608 |
+
else renderResult(data);
|
| 609 |
+
} catch (err) {
|
| 610 |
+
renderError(String(err));
|
| 611 |
+
} finally {
|
| 612 |
+
btn.disabled = false;
|
| 613 |
+
}
|
| 614 |
+
});
|
| 615 |
+
|
| 616 |
+
// ── render: schema card ──
|
| 617 |
+
function renderSchemaCard(d) {
|
| 618 |
+
showOnly(schemaCard);
|
| 619 |
+
currentRunId = d.run_id;
|
| 620 |
+
currentSchema = { ...d.schema };
|
| 621 |
+
|
| 622 |
+
const root = $('schemaFields');
|
| 623 |
+
root.innerHTML = '';
|
| 624 |
+
const groups = { A: [], B: [] };
|
| 625 |
+
for (const f of SCHEMA_FIELDS) groups[f.group].push(f);
|
| 626 |
+
|
| 627 |
+
function addGroup(items, header) {
|
| 628 |
+
if (!items.length) return;
|
| 629 |
+
const h = document.createElement('div');
|
| 630 |
+
h.className = 'md:col-span-2 mt-3 first:mt-0 text-[10px] font-semibold uppercase tracking-wider text-slate-400';
|
| 631 |
+
h.textContent = header;
|
| 632 |
+
root.appendChild(h);
|
| 633 |
+
for (const f of items) root.appendChild(makeRow(f));
|
| 634 |
+
}
|
| 635 |
+
addGroup(groups.A, 'Decision-driving fields');
|
| 636 |
+
addGroup(groups.B, 'Context fields');
|
| 637 |
+
}
|
| 638 |
+
|
| 639 |
+
function makeRow(f) {
|
| 640 |
+
const row = document.createElement('div');
|
| 641 |
+
row.className = 'flex items-center gap-2 py-1';
|
| 642 |
+
const lbl = document.createElement('label');
|
| 643 |
+
lbl.className = 'text-xs w-44 shrink-0 ' + (f.group === 'A' ? 'text-[var(--brand-green)] font-semibold' : 'text-slate-500');
|
| 644 |
+
lbl.textContent = f.label;
|
| 645 |
+
row.appendChild(lbl);
|
| 646 |
+
row.appendChild(makeControl(f, currentSchema[f.name]));
|
| 647 |
+
return row;
|
| 648 |
+
}
|
| 649 |
+
|
| 650 |
+
function makeControl(f, v) {
|
| 651 |
+
if (f.type === 'bool') {
|
| 652 |
+
const wrap = document.createElement('div');
|
| 653 |
+
wrap.className = 'flex items-center gap-3 text-xs text-slate-700';
|
| 654 |
+
wrap.innerHTML = `
|
| 655 |
+
<label class="cursor-pointer"><input type="radio" name="${f.name}" data-field="${f.name}" data-bool="true" ${v===true?'checked':''}> Yes</label>
|
| 656 |
+
<label class="cursor-pointer"><input type="radio" name="${f.name}" data-field="${f.name}" data-bool="false" ${v===false?'checked':''}> No</label>
|
| 657 |
+
`;
|
| 658 |
+
wrap.querySelectorAll('input').forEach(i => i.addEventListener('change', onSchemaEdit));
|
| 659 |
+
return wrap;
|
| 660 |
+
}
|
| 661 |
+
if (f.type === 'enum') {
|
| 662 |
+
const sel = document.createElement('select');
|
| 663 |
+
sel.dataset.field = f.name;
|
| 664 |
+
sel.className = 'text-xs border border-slate-200 rounded px-2 py-1 bg-white';
|
| 665 |
+
for (const opt of f.values) {
|
| 666 |
+
const o = document.createElement('option');
|
| 667 |
+
o.value = opt; o.textContent = opt;
|
| 668 |
+
if (v === opt) o.selected = true;
|
| 669 |
+
sel.appendChild(o);
|
| 670 |
+
}
|
| 671 |
+
sel.addEventListener('change', onSchemaEdit);
|
| 672 |
+
return sel;
|
| 673 |
+
}
|
| 674 |
+
if (f.type === 'int' || f.type === 'float') {
|
| 675 |
+
const inp = document.createElement('input');
|
| 676 |
+
inp.type = 'number';
|
| 677 |
+
if (f.type === 'float') inp.step = '0.01';
|
| 678 |
+
inp.value = v ?? 0;
|
| 679 |
+
inp.dataset.field = f.name;
|
| 680 |
+
inp.className = 'text-xs border border-slate-200 rounded px-2 py-1 w-24 bg-white';
|
| 681 |
+
if (f.readonly) inp.disabled = true;
|
| 682 |
+
inp.addEventListener('input', onSchemaEdit);
|
| 683 |
+
return inp;
|
| 684 |
+
}
|
| 685 |
+
if (f.type === 'list') {
|
| 686 |
+
const inp = document.createElement('input');
|
| 687 |
+
inp.type = 'text';
|
| 688 |
+
inp.value = (v || []).join(', ');
|
| 689 |
+
inp.dataset.field = f.name;
|
| 690 |
+
inp.dataset.list = 'true';
|
| 691 |
+
inp.className = 'text-xs border border-slate-200 rounded px-2 py-1 flex-1 bg-white';
|
| 692 |
+
inp.placeholder = 'comma-separated';
|
| 693 |
+
inp.addEventListener('input', onSchemaEdit);
|
| 694 |
+
return inp;
|
| 695 |
+
}
|
| 696 |
+
const inp = document.createElement('input');
|
| 697 |
+
inp.type = 'text';
|
| 698 |
+
inp.value = v ?? '';
|
| 699 |
+
inp.dataset.field = f.name;
|
| 700 |
+
inp.className = 'text-xs border border-slate-200 rounded px-2 py-1 flex-1 bg-white';
|
| 701 |
+
inp.addEventListener('input', onSchemaEdit);
|
| 702 |
+
return inp;
|
| 703 |
+
}
|
| 704 |
+
|
| 705 |
+
function readSchemaFromUI() {
|
| 706 |
+
const out = { ...currentSchema };
|
| 707 |
+
for (const f of SCHEMA_FIELDS) {
|
| 708 |
+
if (f.type === 'bool') {
|
| 709 |
+
const checked = document.querySelector(`#schemaFields input[name="${f.name}"]:checked`);
|
| 710 |
+
if (checked) out[f.name] = checked.dataset.bool === 'true';
|
| 711 |
+
} else {
|
| 712 |
+
const el = document.querySelector(`#schemaFields [data-field="${f.name}"]`);
|
| 713 |
+
if (!el) continue;
|
| 714 |
+
if (el.dataset.list === 'true') {
|
| 715 |
+
out[f.name] = el.value.split(',').map(s => s.trim()).filter(Boolean);
|
| 716 |
+
} else if (f.type === 'int') {
|
| 717 |
+
out[f.name] = parseInt(el.value || '0', 10);
|
| 718 |
+
} else if (f.type === 'float') {
|
| 719 |
+
out[f.name] = parseFloat(el.value || '0');
|
| 720 |
+
} else {
|
| 721 |
+
out[f.name] = el.value;
|
| 722 |
+
}
|
| 723 |
+
}
|
| 724 |
+
}
|
| 725 |
+
return out;
|
| 726 |
+
}
|
| 727 |
+
|
| 728 |
+
function onSchemaEdit() {
|
| 729 |
+
// 0.1.6: edits update currentSchema only. No live label prediction —
|
| 730 |
+
// the LLM picks the label when the user clicks "Run pipeline →".
|
| 731 |
+
currentSchema = readSchemaFromUI();
|
| 732 |
+
}
|
| 733 |
+
|
| 734 |
+
// step pacing (rough, falls back to "active" until reply arrives)
|
| 735 |
+
function animateSteps() {
|
| 736 |
+
const sequence = ['schema','classify','pipeline','package'];
|
| 737 |
+
let i = 0;
|
| 738 |
+
return setInterval(() => {
|
| 739 |
+
if (i < sequence.length - 1) {
|
| 740 |
+
markStep(sequence[i], 'done');
|
| 741 |
+
markStep(sequence[i+1], 'active');
|
| 742 |
+
}
|
| 743 |
+
i++;
|
| 744 |
+
}, 6000);
|
| 745 |
+
}
|
| 746 |
+
|
| 747 |
+
function markStep(name, klass) {
|
| 748 |
+
const el = document.querySelector(`.step-line[data-step="${name}"]`);
|
| 749 |
+
if (!el) return;
|
| 750 |
+
el.classList.remove('active','done');
|
| 751 |
+
el.classList.add(klass);
|
| 752 |
+
const icon = el.querySelector('.step-icon');
|
| 753 |
+
if (klass === 'done') icon.textContent = '✓';
|
| 754 |
+
}
|
| 755 |
+
|
| 756 |
+
function showOnly(card) {
|
| 757 |
+
for (const c of [loadingCard, schemaCard, resultCard, declineCard, errorCard]) {
|
| 758 |
+
c.classList.toggle('hidden', c !== card);
|
| 759 |
+
}
|
| 760 |
+
// never hide formCard — user keeps it as reference / for next run
|
| 761 |
+
}
|
| 762 |
+
|
| 763 |
+
// ── render: result ──
|
| 764 |
+
async function renderResult(d) {
|
| 765 |
+
showOnly(resultCard);
|
| 766 |
+
$('resLabel').textContent = d.label;
|
| 767 |
+
$('resPipeline').textContent = `pipeline: ${d.pipeline}`;
|
| 768 |
+
$('resElapsed').textContent = `· ${d.elapsed}s`;
|
| 769 |
+
$('resReason').textContent = d.reasoning || '(no reasoning)';
|
| 770 |
+
$('dlZip').href = `/api/zip/${d.run_id}`;
|
| 771 |
+
|
| 772 |
+
// images
|
| 773 |
+
const grid = $('imgGrid'); grid.innerHTML = '';
|
| 774 |
+
for (const name of d.images) {
|
| 775 |
+
const url = `/api/artifact/${d.run_id}/${encodeURIComponent(name)}`;
|
| 776 |
+
const wrap = document.createElement('div');
|
| 777 |
+
wrap.className = 'img-thumb rounded-lg overflow-hidden bg-white';
|
| 778 |
+
wrap.innerHTML = `<img src="${url}" alt="${escapeHtml(name)}" class="w-full h-44 object-cover" />
|
| 779 |
+
<p class="px-2 py-1 text-[11px] text-slate-500 font-mono truncate">${escapeHtml(name)}</p>`;
|
| 780 |
+
wrap.querySelector('img').addEventListener('click', () => {
|
| 781 |
+
lightboxImg.src = url; lightbox.classList.add('open');
|
| 782 |
+
});
|
| 783 |
+
grid.appendChild(wrap);
|
| 784 |
+
}
|
| 785 |
+
|
| 786 |
+
// tables — render tabs then load first one
|
| 787 |
+
const tabs = $('tableTabs'); tabs.innerHTML = '';
|
| 788 |
+
const tableBox = $('tableBox'); tableBox.innerHTML = '';
|
| 789 |
+
$('tableTotal').textContent = '';
|
| 790 |
+
if (!d.tables.length) {
|
| 791 |
+
tableBox.innerHTML = '<p class="text-xs text-slate-400 p-4">No tables produced.</p>';
|
| 792 |
+
return;
|
| 793 |
+
}
|
| 794 |
+
d.tables.forEach((name, i) => {
|
| 795 |
+
const btn = document.createElement('button');
|
| 796 |
+
btn.className = 'px-3 py-1.5 rounded-full text-xs border border-slate-200 hover:bg-slate-50 transition';
|
| 797 |
+
btn.dataset.idx = i;
|
| 798 |
+
btn.textContent = name;
|
| 799 |
+
btn.addEventListener('click', () => loadTable(d.run_id, name, btn));
|
| 800 |
+
tabs.appendChild(btn);
|
| 801 |
+
});
|
| 802 |
+
loadTable(d.run_id, d.tables[0], tabs.children[0]);
|
| 803 |
+
}
|
| 804 |
+
|
| 805 |
+
async function loadTable(run, name, btnEl) {
|
| 806 |
+
for (const b of $('tableTabs').children) {
|
| 807 |
+
b.classList.remove('bg-[var(--brand-green)]','text-white','border-transparent');
|
| 808 |
+
}
|
| 809 |
+
if (btnEl) btnEl.classList.add('bg-[var(--brand-green)]','text-white','border-transparent');
|
| 810 |
+
|
| 811 |
+
const r = await fetch(`/api/csv_preview/${run}/${encodeURIComponent(name)}?limit=20`);
|
| 812 |
+
const data = await r.json();
|
| 813 |
+
const total = data.total || 0;
|
| 814 |
+
$('tableTotal').textContent = `· ${name} · showing ${data.shown} of ${total} rows`;
|
| 815 |
+
|
| 816 |
+
let html = '<table class="preview-table"><thead><tr>';
|
| 817 |
+
for (const h of data.headers) html += `<th>${escapeHtml(h)}</th>`;
|
| 818 |
+
html += '</tr></thead><tbody>';
|
| 819 |
+
for (const row of data.rows) {
|
| 820 |
+
html += '<tr>' + row.map(c => `<td>${escapeHtml(c)}</td>`).join('') + '</tr>';
|
| 821 |
+
}
|
| 822 |
+
html += '</tbody></table>';
|
| 823 |
+
$('tableBox').innerHTML = html;
|
| 824 |
+
}
|
| 825 |
+
|
| 826 |
+
// ── render: decline ──
|
| 827 |
+
function renderDecline(d) {
|
| 828 |
+
showOnly(declineCard);
|
| 829 |
+
$('declineReason').textContent = d.reasoning || '(no reasoning)';
|
| 830 |
+
}
|
| 831 |
+
|
| 832 |
+
// ── render: error ──
|
| 833 |
+
function renderError(msg) {
|
| 834 |
+
showOnly(errorCard);
|
| 835 |
+
$('errorMsg').textContent = msg;
|
| 836 |
+
}
|
| 837 |
+
|
| 838 |
+
// ── helpers ──
|
| 839 |
+
function escapeHtml(s) {
|
| 840 |
+
return String(s ?? '').replace(/[&<>"']/g, (m) => ({
|
| 841 |
+
'&':'&','<':'<','>':'>','"':'"',"'":'''
|
| 842 |
+
}[m]));
|
| 843 |
+
}
|
| 844 |
+
</script>
|
| 845 |
+
</body>
|
| 846 |
+
</html>
|
src/statlens/pipelines/deseq2_basic_pipeline/01_deseq2_basic_analysis.py
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
01_deseq2_basic_analysis.py
|
| 3 |
+
|
| 4 |
+
Count_DESeq2_basic workflow: two independent groups, cross-sectional design, no batch effect.
|
| 5 |
+
|
| 6 |
+
Input:
|
| 7 |
+
metadata.csv: samples x annotations; must contain a condition column with exactly two groups.
|
| 8 |
+
counts.csv: genes/features x samples; raw non-negative integer counts.
|
| 9 |
+
|
| 10 |
+
Output:
|
| 11 |
+
DESeq2_basic_results_case_vs_control.csv
|
| 12 |
+
DESeq2_basic_significant_genes.csv
|
| 13 |
+
normalized_counts.csv
|
| 14 |
+
log_normalized_counts.csv
|
| 15 |
+
metadata_used_for_analysis.csv
|
| 16 |
+
"""
|
| 17 |
+
|
| 18 |
+
import argparse
|
| 19 |
+
import os
|
| 20 |
+
import numpy as np
|
| 21 |
+
import pandas as pd
|
| 22 |
+
from pydeseq2.dds import DeseqDataSet
|
| 23 |
+
from pydeseq2.ds import DeseqStats
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def parse_args():
|
| 27 |
+
parser = argparse.ArgumentParser(description="Run Count_DESeq2_basic analysis using PyDESeq2.")
|
| 28 |
+
parser.add_argument("--metadata", default="metadata.csv", help="Path to metadata CSV file.")
|
| 29 |
+
parser.add_argument("--counts", default="counts.csv", help="Path to raw count matrix CSV file.")
|
| 30 |
+
parser.add_argument("--condition_col", default="condition", help="Condition column in metadata.")
|
| 31 |
+
parser.add_argument("--ref_level", default="control", help="Reference condition level.")
|
| 32 |
+
parser.add_argument("--test_level", default="case", help="Test condition level.")
|
| 33 |
+
parser.add_argument("--min_total_count", type=int, default=10, help="Minimum total count required to keep a gene.")
|
| 34 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05, help="Adjusted p-value cutoff.")
|
| 35 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0, help="Absolute log2 fold-change cutoff.")
|
| 36 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 37 |
+
return parser.parse_args()
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def main():
|
| 41 |
+
args = parse_args()
|
| 42 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 43 |
+
|
| 44 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 45 |
+
counts = pd.read_csv(args.counts, index_col=0)
|
| 46 |
+
|
| 47 |
+
if args.condition_col not in metadata.columns:
|
| 48 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 49 |
+
|
| 50 |
+
shared_samples = metadata.index.intersection(counts.columns)
|
| 51 |
+
if len(shared_samples) == 0:
|
| 52 |
+
raise ValueError("No shared sample IDs between metadata index and count matrix columns.")
|
| 53 |
+
|
| 54 |
+
metadata = metadata.loc[shared_samples].copy()
|
| 55 |
+
counts = counts.loc[:, shared_samples].copy()
|
| 56 |
+
|
| 57 |
+
metadata = metadata.dropna(subset=[args.condition_col])
|
| 58 |
+
counts = counts.loc[:, metadata.index]
|
| 59 |
+
|
| 60 |
+
observed_groups = metadata[args.condition_col].astype(str).unique().tolist()
|
| 61 |
+
expected_groups = {args.ref_level, args.test_level}
|
| 62 |
+
if set(observed_groups) != expected_groups:
|
| 63 |
+
raise ValueError(
|
| 64 |
+
f"Count_DESeq2_basic requires exactly two groups: {expected_groups}. "
|
| 65 |
+
f"Observed groups: {observed_groups}"
|
| 66 |
+
)
|
| 67 |
+
|
| 68 |
+
group_counts = metadata[args.condition_col].value_counts()
|
| 69 |
+
print("Sample counts by condition:")
|
| 70 |
+
print(group_counts)
|
| 71 |
+
|
| 72 |
+
if (group_counts < 2).any():
|
| 73 |
+
raise ValueError("Each group should contain at least two biological replicates.")
|
| 74 |
+
|
| 75 |
+
metadata[args.condition_col] = pd.Categorical(
|
| 76 |
+
metadata[args.condition_col],
|
| 77 |
+
categories=[args.ref_level, args.test_level],
|
| 78 |
+
ordered=False,
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
if (counts < 0).any().any():
|
| 82 |
+
raise ValueError("Count matrix contains negative values.")
|
| 83 |
+
|
| 84 |
+
if not np.all(np.equal(counts.values, np.floor(counts.values))):
|
| 85 |
+
raise ValueError("Counts must be raw integer counts, not TPM/FPKM/CPM/log-normalized values.")
|
| 86 |
+
|
| 87 |
+
counts = counts.astype(int)
|
| 88 |
+
|
| 89 |
+
keep_genes = counts.sum(axis=1) >= args.min_total_count
|
| 90 |
+
counts = counts.loc[keep_genes].copy()
|
| 91 |
+
if counts.shape[0] == 0:
|
| 92 |
+
raise ValueError("No genes remain after low-count filtering.")
|
| 93 |
+
|
| 94 |
+
print(f"Genes retained after filtering: {counts.shape[0]}")
|
| 95 |
+
|
| 96 |
+
counts_for_deseq = counts.T
|
| 97 |
+
metadata = metadata.loc[counts_for_deseq.index]
|
| 98 |
+
|
| 99 |
+
dds = DeseqDataSet(
|
| 100 |
+
counts=counts_for_deseq,
|
| 101 |
+
metadata=metadata,
|
| 102 |
+
design_factors=args.condition_col,
|
| 103 |
+
refit_cooks=True,
|
| 104 |
+
)
|
| 105 |
+
dds.deseq2()
|
| 106 |
+
|
| 107 |
+
stat_res = DeseqStats(
|
| 108 |
+
dds,
|
| 109 |
+
contrast=[args.condition_col, args.test_level, args.ref_level],
|
| 110 |
+
alpha=args.padj_cutoff,
|
| 111 |
+
)
|
| 112 |
+
stat_res.summary()
|
| 113 |
+
|
| 114 |
+
# LFC shrinkage stabilizes fold-change estimates for lowly expressed genes
|
| 115 |
+
coeff = f"{args.condition_col}_{args.test_level}_vs_{args.ref_level}"
|
| 116 |
+
try:
|
| 117 |
+
stat_res.lfc_shrink(coeff=coeff)
|
| 118 |
+
print(f"LFC shrinkage applied (coeff: {coeff}).")
|
| 119 |
+
except Exception as e:
|
| 120 |
+
print(f"Warning: LFC shrinkage failed ({e}). Using unshrunken LFC.")
|
| 121 |
+
|
| 122 |
+
res = stat_res.results_df.copy().sort_values("padj")
|
| 123 |
+
res["significant"] = (res["padj"] < args.padj_cutoff) & (res["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 124 |
+
res["direction"] = "not_significant"
|
| 125 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] > 0), "direction"] = f"up_in_{args.test_level}"
|
| 126 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] < 0), "direction"] = f"down_in_{args.test_level}"
|
| 127 |
+
|
| 128 |
+
res.to_csv(os.path.join(args.output_dir, "DESeq2_basic_results_case_vs_control.csv"))
|
| 129 |
+
res[res["significant"]].to_csv(os.path.join(args.output_dir, "DESeq2_basic_significant_genes.csv"))
|
| 130 |
+
|
| 131 |
+
normalized_counts = pd.DataFrame(dds.layers["normed_counts"], index=dds.obs_names, columns=dds.var_names)
|
| 132 |
+
normalized_counts.to_csv(os.path.join(args.output_dir, "normalized_counts.csv"))
|
| 133 |
+
np.log2(normalized_counts + 1).to_csv(os.path.join(args.output_dir, "log_normalized_counts.csv"))
|
| 134 |
+
metadata.to_csv(os.path.join(args.output_dir, "metadata_used_for_analysis.csv"))
|
| 135 |
+
|
| 136 |
+
print("Analysis complete.")
|
| 137 |
+
print(f"Full result table: {os.path.join(args.output_dir, 'DESeq2_basic_results_case_vs_control.csv')}")
|
| 138 |
+
print(f"Significant result table: {os.path.join(args.output_dir, 'DESeq2_basic_significant_genes.csv')}")
|
| 139 |
+
print(f"Normalized counts: {os.path.join(args.output_dir, 'normalized_counts.csv')}")
|
| 140 |
+
print(f"Log-normalized counts: {os.path.join(args.output_dir, 'log_normalized_counts.csv')}")
|
| 141 |
+
print(f"Number of significant genes: {int(res['significant'].sum())}")
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
if __name__ == "__main__":
|
| 145 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/02_volcano_plot.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a volcano plot from DESeq2 results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create a volcano plot from DESeq2 results.")
|
| 12 |
+
parser.add_argument("--results", default="DESeq2_basic_results_case_vs_control.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="volcano_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df["safe_padj"] = plot_df["padj"].replace(0, np.nextafter(0, 1))
|
| 27 |
+
plot_df["neg_log10_padj"] = -np.log10(plot_df["safe_padj"])
|
| 28 |
+
plot_df["category"] = "Not significant"
|
| 29 |
+
plot_df.loc[
|
| 30 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] >= args.lfc_cutoff),
|
| 31 |
+
"category",
|
| 32 |
+
] = "Up in test group"
|
| 33 |
+
plot_df.loc[
|
| 34 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] <= -args.lfc_cutoff),
|
| 35 |
+
"category",
|
| 36 |
+
] = "Down in test group"
|
| 37 |
+
|
| 38 |
+
color_map = {
|
| 39 |
+
"Not significant": "#AAAAAA",
|
| 40 |
+
"Up in test group": "#D62728",
|
| 41 |
+
"Down in test group": "#1F77B4",
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
plt.figure(figsize=(7, 6))
|
| 45 |
+
for category in ["Not significant", "Up in test group", "Down in test group"]:
|
| 46 |
+
subset = plot_df[plot_df["category"] == category]
|
| 47 |
+
plt.scatter(
|
| 48 |
+
subset["log2FoldChange"],
|
| 49 |
+
subset["neg_log10_padj"],
|
| 50 |
+
s=8,
|
| 51 |
+
alpha=0.6,
|
| 52 |
+
label=f"{category} (n={len(subset)})",
|
| 53 |
+
color=color_map[category],
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
+
plt.axvline(args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 57 |
+
plt.axvline(-args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 58 |
+
plt.axhline(-np.log10(args.padj_cutoff), linestyle="--", linewidth=1, color="black")
|
| 59 |
+
plt.xlabel("log2 fold change")
|
| 60 |
+
plt.ylabel("-log10 adjusted p-value")
|
| 61 |
+
plt.title("Volcano plot")
|
| 62 |
+
plt.legend(fontsize=8)
|
| 63 |
+
plt.tight_layout()
|
| 64 |
+
|
| 65 |
+
out_path = os.path.join(args.output_dir, args.output)
|
| 66 |
+
plt.savefig(out_path, dpi=300)
|
| 67 |
+
plt.close()
|
| 68 |
+
print(f"Saved: {out_path}")
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
if __name__ == "__main__":
|
| 72 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/03_ma_plot.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create an MA plot from DESeq2 results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create an MA plot from DESeq2 results.")
|
| 12 |
+
parser.add_argument("--results", default="DESeq2_basic_results_case_vs_control.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="MA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["baseMean", "log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df = plot_df[plot_df["baseMean"] > 0].copy()
|
| 27 |
+
|
| 28 |
+
# Consistent with script 01: significant requires both padj and |LFC| cutoffs
|
| 29 |
+
plot_df["significant"] = (
|
| 30 |
+
(plot_df["padj"] < args.padj_cutoff) &
|
| 31 |
+
(plot_df["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 32 |
+
)
|
| 33 |
+
|
| 34 |
+
plt.figure(figsize=(7, 6))
|
| 35 |
+
nonsig = plot_df[~plot_df["significant"]]
|
| 36 |
+
sig = plot_df[plot_df["significant"]]
|
| 37 |
+
plt.scatter(
|
| 38 |
+
np.log10(nonsig["baseMean"]),
|
| 39 |
+
nonsig["log2FoldChange"],
|
| 40 |
+
s=8,
|
| 41 |
+
alpha=0.4,
|
| 42 |
+
label=f"Not significant (n={len(nonsig)})",
|
| 43 |
+
color="#AAAAAA",
|
| 44 |
+
)
|
| 45 |
+
plt.scatter(
|
| 46 |
+
np.log10(sig["baseMean"]),
|
| 47 |
+
sig["log2FoldChange"],
|
| 48 |
+
s=8,
|
| 49 |
+
alpha=0.8,
|
| 50 |
+
label=f"Significant (n={len(sig)})",
|
| 51 |
+
color="#D62728",
|
| 52 |
+
)
|
| 53 |
+
plt.axhline(0, linestyle="--", linewidth=1, color="black")
|
| 54 |
+
plt.xlabel("log10 mean normalized expression")
|
| 55 |
+
plt.ylabel("log2 fold change")
|
| 56 |
+
plt.title("MA plot")
|
| 57 |
+
plt.legend(fontsize=8)
|
| 58 |
+
plt.tight_layout()
|
| 59 |
+
|
| 60 |
+
out_path = os.path.join(args.output_dir, args.output)
|
| 61 |
+
plt.savefig(out_path, dpi=300)
|
| 62 |
+
plt.close()
|
| 63 |
+
print(f"Saved: {out_path}")
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
if __name__ == "__main__":
|
| 67 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/04_pca_plot.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a PCA plot from log-normalized counts."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from sklearn.decomposition import PCA
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create a PCA plot from log-normalized counts.")
|
| 12 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 13 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 14 |
+
parser.add_argument("--condition_col", default="condition")
|
| 15 |
+
parser.add_argument("--output", default="PCA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 25 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 26 |
+
shared_samples = log_counts.index.intersection(metadata.index)
|
| 27 |
+
log_counts = log_counts.loc[shared_samples]
|
| 28 |
+
metadata = metadata.loc[shared_samples]
|
| 29 |
+
|
| 30 |
+
if args.condition_col not in metadata.columns:
|
| 31 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 32 |
+
|
| 33 |
+
# No per-gene scaling: let naturally variable genes drive separation,
|
| 34 |
+
# which is standard for log-normalized RNA-seq PCA.
|
| 35 |
+
pca = PCA(n_components=2)
|
| 36 |
+
pcs = pca.fit_transform(log_counts)
|
| 37 |
+
pca_df = pd.DataFrame(pcs, index=log_counts.index, columns=["PC1", "PC2"])
|
| 38 |
+
pca_df = pca_df.join(metadata[[args.condition_col]])
|
| 39 |
+
|
| 40 |
+
plt.figure(figsize=(6, 5))
|
| 41 |
+
groups = sorted(pca_df[args.condition_col].astype(str).unique())
|
| 42 |
+
colors = plt.cm.Set1.colors
|
| 43 |
+
for i, group in enumerate(groups):
|
| 44 |
+
subset = pca_df[pca_df[args.condition_col].astype(str) == group]
|
| 45 |
+
plt.scatter(
|
| 46 |
+
subset["PC1"],
|
| 47 |
+
subset["PC2"],
|
| 48 |
+
s=60,
|
| 49 |
+
alpha=0.85,
|
| 50 |
+
label=group,
|
| 51 |
+
color=colors[i % len(colors)],
|
| 52 |
+
edgecolors="white",
|
| 53 |
+
linewidths=0.5,
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
+
for sample in pca_df.index:
|
| 57 |
+
plt.annotate(
|
| 58 |
+
sample,
|
| 59 |
+
(pca_df.loc[sample, "PC1"], pca_df.loc[sample, "PC2"]),
|
| 60 |
+
fontsize=6,
|
| 61 |
+
alpha=0.7,
|
| 62 |
+
xytext=(3, 3),
|
| 63 |
+
textcoords="offset points",
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
plt.xlabel(f"PC1 ({pca.explained_variance_ratio_[0] * 100:.1f}%)")
|
| 67 |
+
plt.ylabel(f"PC2 ({pca.explained_variance_ratio_[1] * 100:.1f}%)")
|
| 68 |
+
plt.title("PCA of log-normalized counts")
|
| 69 |
+
plt.legend(title=args.condition_col)
|
| 70 |
+
plt.tight_layout()
|
| 71 |
+
|
| 72 |
+
out_path = os.path.join(args.output_dir, args.output)
|
| 73 |
+
plt.savefig(out_path, dpi=300)
|
| 74 |
+
plt.close()
|
| 75 |
+
print(f"Saved: {out_path}")
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
if __name__ == "__main__":
|
| 79 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/05_heatmap_top_de_genes.py
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a heatmap of the top differentially expressed genes."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import seaborn as sns
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
import matplotlib.patches as mpatches
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def parse_args():
|
| 12 |
+
parser = argparse.ArgumentParser(description="Create a heatmap of top DE genes.")
|
| 13 |
+
parser.add_argument("--results", default="DESeq2_basic_results_case_vs_control.csv")
|
| 14 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 15 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 16 |
+
parser.add_argument("--condition_col", default="condition")
|
| 17 |
+
parser.add_argument("--top_n", type=int, default=50)
|
| 18 |
+
parser.add_argument("--output", default="top_DE_genes_heatmap.png")
|
| 19 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 20 |
+
return parser.parse_args()
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def zscore_by_gene(df):
|
| 24 |
+
gene_means = df.mean(axis=1)
|
| 25 |
+
gene_stds = df.std(axis=1).replace(0, 1)
|
| 26 |
+
return df.sub(gene_means, axis=0).div(gene_stds, axis=0)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def main():
|
| 30 |
+
args = parse_args()
|
| 31 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 32 |
+
|
| 33 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 34 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 35 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 36 |
+
|
| 37 |
+
# Prefer significant genes; fall back to top N by padj if not enough
|
| 38 |
+
if "significant" in res.columns:
|
| 39 |
+
sig_res = res[res["significant"] == True].dropna(subset=["padj"]).sort_values("padj")
|
| 40 |
+
else:
|
| 41 |
+
sig_res = res.dropna(subset=["padj"]).sort_values("padj")
|
| 42 |
+
|
| 43 |
+
if len(sig_res) >= args.top_n:
|
| 44 |
+
top_genes = sig_res.head(args.top_n).index
|
| 45 |
+
elif len(sig_res) > 0:
|
| 46 |
+
print(f"Only {len(sig_res)} significant genes found; using all of them.")
|
| 47 |
+
top_genes = sig_res.index
|
| 48 |
+
else:
|
| 49 |
+
print("No significant genes found; falling back to top genes by padj.")
|
| 50 |
+
top_genes = res.dropna(subset=["padj"]).sort_values("padj").head(args.top_n).index
|
| 51 |
+
|
| 52 |
+
available_genes = [gene for gene in top_genes if gene in log_counts.columns]
|
| 53 |
+
if len(available_genes) == 0:
|
| 54 |
+
raise ValueError("None of the selected top genes are present in log_normalized_counts.csv.")
|
| 55 |
+
|
| 56 |
+
shared_samples = log_counts.index.intersection(metadata.index)
|
| 57 |
+
log_counts = log_counts.loc[shared_samples]
|
| 58 |
+
metadata = metadata.loc[shared_samples]
|
| 59 |
+
|
| 60 |
+
# Condition color bar for columns
|
| 61 |
+
groups = sorted(metadata[args.condition_col].astype(str).unique())
|
| 62 |
+
palette_colors = [plt.cm.Set1.colors[i % 9] for i in range(len(groups))]
|
| 63 |
+
condition_palette = dict(zip(groups, palette_colors))
|
| 64 |
+
col_colors = metadata[args.condition_col].astype(str).map(condition_palette)
|
| 65 |
+
|
| 66 |
+
heatmap_data = log_counts[available_genes].T
|
| 67 |
+
heatmap_data_z = zscore_by_gene(heatmap_data)
|
| 68 |
+
|
| 69 |
+
cluster = sns.clustermap(
|
| 70 |
+
heatmap_data_z,
|
| 71 |
+
figsize=(max(8, len(shared_samples) * 0.4 + 4), max(10, len(available_genes) * 0.2 + 2)),
|
| 72 |
+
col_cluster=True,
|
| 73 |
+
row_cluster=True,
|
| 74 |
+
col_colors=col_colors,
|
| 75 |
+
xticklabels=True,
|
| 76 |
+
yticklabels=True,
|
| 77 |
+
cmap="vlag",
|
| 78 |
+
)
|
| 79 |
+
|
| 80 |
+
# Rotate sample labels for readability
|
| 81 |
+
plt.setp(cluster.ax_heatmap.get_xticklabels(), rotation=45, ha="right", fontsize=8)
|
| 82 |
+
plt.setp(cluster.ax_heatmap.get_yticklabels(), fontsize=7)
|
| 83 |
+
|
| 84 |
+
# Add condition legend
|
| 85 |
+
legend_patches = [
|
| 86 |
+
mpatches.Patch(color=condition_palette[g], label=g) for g in groups
|
| 87 |
+
]
|
| 88 |
+
cluster.ax_heatmap.legend(
|
| 89 |
+
handles=legend_patches,
|
| 90 |
+
title=args.condition_col,
|
| 91 |
+
loc="upper right",
|
| 92 |
+
bbox_to_anchor=(1.25, 1.1),
|
| 93 |
+
fontsize=8,
|
| 94 |
+
)
|
| 95 |
+
|
| 96 |
+
cluster.fig.suptitle(f"Top {len(available_genes)} differentially expressed genes", y=1.02)
|
| 97 |
+
|
| 98 |
+
out_path = os.path.join(args.output_dir, args.output)
|
| 99 |
+
cluster.savefig(out_path, dpi=300, bbox_inches="tight")
|
| 100 |
+
plt.close(cluster.fig)
|
| 101 |
+
print(f"Saved: {out_path}")
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
if __name__ == "__main__":
|
| 105 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/06_top_genes_barplot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a horizontal bar plot of top differentially expressed genes."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
def parse_args():
|
| 10 |
+
parser = argparse.ArgumentParser(description="Create a bar plot of top DE genes.")
|
| 11 |
+
parser.add_argument("--results", default="DESeq2_basic_results_case_vs_control.csv")
|
| 12 |
+
parser.add_argument("--top_n", type=int, default=20)
|
| 13 |
+
parser.add_argument("--output", default="top20_DE_genes_barplot.png")
|
| 14 |
+
parser.add_argument("--output_dir", default=".", help="Directory for output files.")
|
| 15 |
+
return parser.parse_args()
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def main():
|
| 19 |
+
args = parse_args()
|
| 20 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 21 |
+
|
| 22 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 23 |
+
top_df = (
|
| 24 |
+
res.dropna(subset=["padj", "log2FoldChange"])
|
| 25 |
+
.sort_values("padj")
|
| 26 |
+
.head(args.top_n)
|
| 27 |
+
.copy()
|
| 28 |
+
)
|
| 29 |
+
if top_df.empty:
|
| 30 |
+
raise ValueError("No genes available for plotting after removing missing padj/log2FoldChange values.")
|
| 31 |
+
|
| 32 |
+
top_df = top_df.iloc[::-1]
|
| 33 |
+
colors = ["#D62728" if v > 0 else "#1F77B4" for v in top_df["log2FoldChange"]]
|
| 34 |
+
|
| 35 |
+
plt.figure(figsize=(8, max(6, len(top_df) * 0.3)))
|
| 36 |
+
bars = plt.barh(top_df.index, top_df["log2FoldChange"], color=colors)
|
| 37 |
+
plt.axvline(0, linestyle="--", linewidth=1, color="black")
|
| 38 |
+
plt.xlabel("log2 fold change")
|
| 39 |
+
plt.ylabel("Gene")
|
| 40 |
+
plt.title(f"Top {args.top_n} differentially expressed genes")
|
| 41 |
+
|
| 42 |
+
from matplotlib.patches import Patch
|
| 43 |
+
legend_elements = [
|
| 44 |
+
Patch(facecolor="#D62728", label="Up in test group"),
|
| 45 |
+
Patch(facecolor="#1F77B4", label="Down in test group"),
|
| 46 |
+
]
|
| 47 |
+
plt.legend(handles=legend_elements, fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out_path = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out_path, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out_path}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_basic_pipeline/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Count_DESeq2_basic Python Pipeline
|
| 2 |
+
|
| 3 |
+
This folder contains six Python scripts for two-group differential expression analysis.
|
| 4 |
+
|
| 5 |
+
1. `01_deseq2_basic_analysis.py`
|
| 6 |
+
2. `02_volcano_plot.py`
|
| 7 |
+
3. `03_ma_plot.py`
|
| 8 |
+
4. `04_pca_plot.py`
|
| 9 |
+
5. `05_heatmap_top_de_genes.py`
|
| 10 |
+
6. `06_top_genes_barplot.py`
|
| 11 |
+
|
| 12 |
+
## Expected input
|
| 13 |
+
|
| 14 |
+
`metadata.csv`
|
| 15 |
+
|
| 16 |
+
- Rows: samples
|
| 17 |
+
- Must contain a column named `condition`
|
| 18 |
+
- Example values: `control`, `case`
|
| 19 |
+
|
| 20 |
+
`counts.csv`
|
| 21 |
+
|
| 22 |
+
- Rows: genes or features
|
| 23 |
+
- Columns: samples
|
| 24 |
+
- Values: raw non-negative integer counts
|
| 25 |
+
|
| 26 |
+
## Quick start (recommended)
|
| 27 |
+
|
| 28 |
+
```bash
|
| 29 |
+
bash run_pipeline.sh metadata.csv counts.csv output/
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
All outputs (CSVs and plots) will be written to the `output/` directory.
|
| 33 |
+
|
| 34 |
+
## Manual run order
|
| 35 |
+
|
| 36 |
+
```bash
|
| 37 |
+
python 01_deseq2_basic_analysis.py \
|
| 38 |
+
--metadata metadata.csv \
|
| 39 |
+
--counts counts.csv \
|
| 40 |
+
--condition_col condition \
|
| 41 |
+
--ref_level control \
|
| 42 |
+
--test_level case \
|
| 43 |
+
--output_dir output/
|
| 44 |
+
|
| 45 |
+
python 02_volcano_plot.py --results output/DESeq2_basic_results_case_vs_control.csv --output_dir output/
|
| 46 |
+
python 03_ma_plot.py --results output/DESeq2_basic_results_case_vs_control.csv --output_dir output/
|
| 47 |
+
python 04_pca_plot.py --log_counts output/log_normalized_counts.csv --metadata output/metadata_used_for_analysis.csv --output_dir output/
|
| 48 |
+
python 05_heatmap_top_de_genes.py --results output/DESeq2_basic_results_case_vs_control.csv --log_counts output/log_normalized_counts.csv --metadata output/metadata_used_for_analysis.csv --output_dir output/
|
| 49 |
+
python 06_top_genes_barplot.py --results output/DESeq2_basic_results_case_vs_control.csv --output_dir output/
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
## Required packages
|
| 53 |
+
|
| 54 |
+
```bash
|
| 55 |
+
pip install pandas numpy matplotlib seaborn scikit-learn pydeseq2
|
| 56 |
+
```
|
src/statlens/pipelines/deseq2_basic_pipeline/run_pipeline.sh
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Run the full DESeq2 basic pipeline in order.
|
| 3 |
+
#
|
| 4 |
+
# Usage:
|
| 5 |
+
# bash run_pipeline.sh [metadata.csv] [counts.csv] [output_dir]
|
| 6 |
+
#
|
| 7 |
+
# Defaults: metadata.csv, counts.csv, ./output
|
| 8 |
+
|
| 9 |
+
set -euo pipefail
|
| 10 |
+
|
| 11 |
+
METADATA=${1:-metadata.csv}
|
| 12 |
+
COUNTS=${2:-counts.csv}
|
| 13 |
+
OUTPUT_DIR=${3:-output}
|
| 14 |
+
|
| 15 |
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 16 |
+
|
| 17 |
+
echo "=== Step 1: DESeq2 analysis ==="
|
| 18 |
+
python "$SCRIPT_DIR/01_deseq2_basic_analysis.py" \
|
| 19 |
+
--metadata "$METADATA" \
|
| 20 |
+
--counts "$COUNTS" \
|
| 21 |
+
--output_dir "$OUTPUT_DIR"
|
| 22 |
+
|
| 23 |
+
RESULTS="$OUTPUT_DIR/DESeq2_basic_results_case_vs_control.csv"
|
| 24 |
+
LOG_COUNTS="$OUTPUT_DIR/log_normalized_counts.csv"
|
| 25 |
+
METADATA_OUT="$OUTPUT_DIR/metadata_used_for_analysis.csv"
|
| 26 |
+
|
| 27 |
+
echo "=== Step 2: Volcano plot ==="
|
| 28 |
+
python "$SCRIPT_DIR/02_volcano_plot.py" \
|
| 29 |
+
--results "$RESULTS" \
|
| 30 |
+
--output_dir "$OUTPUT_DIR"
|
| 31 |
+
|
| 32 |
+
echo "=== Step 3: MA plot ==="
|
| 33 |
+
python "$SCRIPT_DIR/03_ma_plot.py" \
|
| 34 |
+
--results "$RESULTS" \
|
| 35 |
+
--output_dir "$OUTPUT_DIR"
|
| 36 |
+
|
| 37 |
+
echo "=== Step 4: PCA plot ==="
|
| 38 |
+
python "$SCRIPT_DIR/04_pca_plot.py" \
|
| 39 |
+
--log_counts "$LOG_COUNTS" \
|
| 40 |
+
--metadata "$METADATA_OUT" \
|
| 41 |
+
--output_dir "$OUTPUT_DIR"
|
| 42 |
+
|
| 43 |
+
echo "=== Step 5: Heatmap ==="
|
| 44 |
+
python "$SCRIPT_DIR/05_heatmap_top_de_genes.py" \
|
| 45 |
+
--results "$RESULTS" \
|
| 46 |
+
--log_counts "$LOG_COUNTS" \
|
| 47 |
+
--metadata "$METADATA_OUT" \
|
| 48 |
+
--output_dir "$OUTPUT_DIR"
|
| 49 |
+
|
| 50 |
+
echo "=== Step 6: Top genes bar plot ==="
|
| 51 |
+
python "$SCRIPT_DIR/06_top_genes_barplot.py" \
|
| 52 |
+
--results "$RESULTS" \
|
| 53 |
+
--output_dir "$OUTPUT_DIR"
|
| 54 |
+
|
| 55 |
+
echo ""
|
| 56 |
+
echo "Pipeline complete. All outputs written to: $OUTPUT_DIR"
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/01_deseq2_group_time_interaction_analysis.py
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
01_deseq2_group_time_interaction_analysis.py
|
| 3 |
+
|
| 4 |
+
Count_DESeq2_group_time_interaction workflow: ≥2 groups × ≥2 time points,
|
| 5 |
+
where the PRIMARY question is whether the time trajectory DIFFERS between groups
|
| 6 |
+
(i.e., the group × time interaction effect).
|
| 7 |
+
|
| 8 |
+
Strategy:
|
| 9 |
+
- A combined factor group_time is created (e.g. "control_T0", "case_T0", …).
|
| 10 |
+
- Design: ~ group_time (equivalent to full factorial ~ group + time + group:time).
|
| 11 |
+
- The interaction contrast is built from the fitted coefficient vector:
|
| 12 |
+
interaction_LFC = LFC(test@T_end vs test@T_start)
|
| 13 |
+
- LFC(ref@T_end vs ref@T_start)
|
| 14 |
+
- The contrast is expressed as a numpy coefficient array applied via DeseqStats.
|
| 15 |
+
- For ≥3 time points the interaction is computed for every adjacent pair and
|
| 16 |
+
the minimum-padj contrast is reported as the primary result.
|
| 17 |
+
- Individual pairwise and delta-LFC files are also saved.
|
| 18 |
+
|
| 19 |
+
Input:
|
| 20 |
+
metadata.csv – samples × annotations with condition and time columns.
|
| 21 |
+
counts.csv – genes/features × samples; raw non-negative integer counts.
|
| 22 |
+
|
| 23 |
+
Output:
|
| 24 |
+
results.csv (interaction effect, primary)
|
| 25 |
+
significant_genes.csv
|
| 26 |
+
interaction_{T1}_to_{T2}.csv (one file per adjacent time-step)
|
| 27 |
+
normalized_counts.csv
|
| 28 |
+
log_normalized_counts.csv
|
| 29 |
+
metadata_used_for_analysis.csv
|
| 30 |
+
"""
|
| 31 |
+
|
| 32 |
+
import argparse
|
| 33 |
+
import os
|
| 34 |
+
import warnings
|
| 35 |
+
import numpy as np
|
| 36 |
+
import pandas as pd
|
| 37 |
+
from pydeseq2.dds import DeseqDataSet
|
| 38 |
+
from pydeseq2.ds import DeseqStats
|
| 39 |
+
from statsmodels.stats.multitest import multipletests
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
def parse_args():
|
| 43 |
+
parser = argparse.ArgumentParser(
|
| 44 |
+
description="DESeq2 group × time interaction analysis."
|
| 45 |
+
)
|
| 46 |
+
parser.add_argument("--metadata", default="metadata.csv")
|
| 47 |
+
parser.add_argument("--counts", default="counts.csv")
|
| 48 |
+
parser.add_argument("--condition_col", default="condition")
|
| 49 |
+
parser.add_argument("--time_col", default="time")
|
| 50 |
+
parser.add_argument("--ref_level", default="control")
|
| 51 |
+
parser.add_argument("--test_level", default="case")
|
| 52 |
+
parser.add_argument("--min_total_count", type=int, default=10)
|
| 53 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 54 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 55 |
+
parser.add_argument("--output_dir", default=".")
|
| 56 |
+
return parser.parse_args()
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
def build_interaction_contrast(dds, comb_col, ref_grp, test_grp, t_start, t_end):
|
| 60 |
+
"""
|
| 61 |
+
Return a numpy contrast vector for the interaction effect:
|
| 62 |
+
LFC(test@t_end vs test@t_start) - LFC(ref@t_end vs ref@t_start)
|
| 63 |
+
= coef[test_t_end] - coef[test_t_start] - coef[ref_t_end]
|
| 64 |
+
(all relative to the reference level ref_t_start which is absorbed in the intercept)
|
| 65 |
+
"""
|
| 66 |
+
design_cols = dds.obsm["design_matrix"].columns.tolist()
|
| 67 |
+
contrast = np.zeros(len(design_cols))
|
| 68 |
+
|
| 69 |
+
# pydeseq2 names non-reference factor levels as "{factor}_{level}"
|
| 70 |
+
targets = {
|
| 71 |
+
f"{comb_col}_{test_grp}_{t_end}": +1.0,
|
| 72 |
+
f"{comb_col}_{test_grp}_{t_start}": -1.0,
|
| 73 |
+
f"{comb_col}_{ref_grp}_{t_end}": -1.0,
|
| 74 |
+
}
|
| 75 |
+
# [statLens-V4-patch-0424] support both pydeseq2<0.5 ('{c}_{l}') and
|
| 76 |
+
# pydeseq2>=0.5 formulaic ('{c}[T.{l}]') column naming.
|
| 77 |
+
missing = []
|
| 78 |
+
for col, val in targets.items():
|
| 79 |
+
# primary name (legacy)
|
| 80 |
+
candidates = [col]
|
| 81 |
+
# formulaic alt: 'group_time_case_14' -> 'group_time[T.case_14]'
|
| 82 |
+
# split once on comb_col prefix
|
| 83 |
+
if col.startswith(comb_col + '_'):
|
| 84 |
+
level = col[len(comb_col) + 1:]
|
| 85 |
+
candidates.append(f'{comb_col}[T.{level}]')
|
| 86 |
+
found = False
|
| 87 |
+
for cand in candidates:
|
| 88 |
+
if cand in design_cols:
|
| 89 |
+
contrast[design_cols.index(cand)] = val
|
| 90 |
+
found = True
|
| 91 |
+
break
|
| 92 |
+
if not found:
|
| 93 |
+
missing.append(col)
|
| 94 |
+
|
| 95 |
+
if missing:
|
| 96 |
+
raise ValueError(
|
| 97 |
+
f"Expected design matrix columns not found: {missing}.\n"
|
| 98 |
+
f"Available columns: {design_cols}\n"
|
| 99 |
+
f"Hint: check that --ref_level, --test_level, and time labels match "
|
| 100 |
+
f"the metadata exactly (case-sensitive)."
|
| 101 |
+
)
|
| 102 |
+
return contrast
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
def main():
|
| 106 |
+
args = parse_args()
|
| 107 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 108 |
+
|
| 109 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 110 |
+
counts = pd.read_csv(args.counts, index_col=0)
|
| 111 |
+
|
| 112 |
+
for col in [args.condition_col, args.time_col]:
|
| 113 |
+
if col not in metadata.columns:
|
| 114 |
+
raise ValueError(f"Metadata must contain column: {col}")
|
| 115 |
+
|
| 116 |
+
shared = metadata.index.intersection(counts.columns)
|
| 117 |
+
if len(shared) == 0:
|
| 118 |
+
raise ValueError("No shared sample IDs.")
|
| 119 |
+
metadata = metadata.loc[shared].copy()
|
| 120 |
+
counts = counts.loc[:, shared].copy()
|
| 121 |
+
|
| 122 |
+
metadata = metadata.dropna(subset=[args.condition_col, args.time_col])
|
| 123 |
+
counts = counts.loc[:, metadata.index]
|
| 124 |
+
|
| 125 |
+
observed_cond = set(metadata[args.condition_col].astype(str).unique())
|
| 126 |
+
if {args.ref_level, args.test_level} != observed_cond:
|
| 127 |
+
raise ValueError(
|
| 128 |
+
f"Condition column must have exactly two levels "
|
| 129 |
+
f"{{{args.ref_level}, {args.test_level}}}; found {observed_cond}."
|
| 130 |
+
)
|
| 131 |
+
|
| 132 |
+
time_points = sorted(metadata[args.time_col].astype(str).unique())
|
| 133 |
+
if len(time_points) < 2:
|
| 134 |
+
raise ValueError("Need at least 2 time points for an interaction analysis.")
|
| 135 |
+
print(f"Groups: ref='{args.ref_level}', test='{args.test_level}'")
|
| 136 |
+
print(f"Time points (sorted): {time_points}")
|
| 137 |
+
|
| 138 |
+
if (counts < 0).any().any():
|
| 139 |
+
raise ValueError("Count matrix contains negative values.")
|
| 140 |
+
if not np.all(np.equal(counts.values, np.floor(counts.values))):
|
| 141 |
+
raise ValueError("Counts must be raw integers.")
|
| 142 |
+
counts = counts.astype(int)
|
| 143 |
+
|
| 144 |
+
counts = counts.loc[counts.sum(axis=1) >= args.min_total_count].copy()
|
| 145 |
+
if counts.shape[0] == 0:
|
| 146 |
+
raise ValueError("No genes remain after low-count filtering.")
|
| 147 |
+
print(f"Genes retained after filtering: {counts.shape[0]}")
|
| 148 |
+
|
| 149 |
+
# Create combined group_time factor; reference = ref_level + first time point
|
| 150 |
+
comb_col = "group_time"
|
| 151 |
+
metadata[comb_col] = (
|
| 152 |
+
metadata[args.condition_col].astype(str) + "_" +
|
| 153 |
+
metadata[args.time_col].astype(str)
|
| 154 |
+
)
|
| 155 |
+
ref_combo = f"{args.ref_level}_{time_points[0]}"
|
| 156 |
+
all_combos = sorted(metadata[comb_col].unique())
|
| 157 |
+
if ref_combo not in all_combos:
|
| 158 |
+
raise ValueError(
|
| 159 |
+
f"Reference combo '{ref_combo}' not found in data. "
|
| 160 |
+
f"Available combos: {all_combos}"
|
| 161 |
+
)
|
| 162 |
+
# Put reference first so it becomes the baseline in the design matrix
|
| 163 |
+
non_ref = [c for c in all_combos if c != ref_combo]
|
| 164 |
+
metadata[comb_col] = pd.Categorical(
|
| 165 |
+
metadata[comb_col],
|
| 166 |
+
categories=[ref_combo] + non_ref,
|
| 167 |
+
ordered=False,
|
| 168 |
+
)
|
| 169 |
+
|
| 170 |
+
counts_t = counts.T
|
| 171 |
+
metadata = metadata.loc[counts_t.index]
|
| 172 |
+
|
| 173 |
+
dds = DeseqDataSet(
|
| 174 |
+
counts=counts_t,
|
| 175 |
+
metadata=metadata,
|
| 176 |
+
design_factors=comb_col,
|
| 177 |
+
refit_cooks=True,
|
| 178 |
+
)
|
| 179 |
+
dds.deseq2()
|
| 180 |
+
|
| 181 |
+
# Compute interaction for each adjacent time pair
|
| 182 |
+
adjacent_pairs = list(zip(time_points[:-1], time_points[1:]))
|
| 183 |
+
interaction_results = {}
|
| 184 |
+
|
| 185 |
+
for t_start, t_end in adjacent_pairs:
|
| 186 |
+
label = f"{t_start}_to_{t_end}"
|
| 187 |
+
try:
|
| 188 |
+
contrast_vec = build_interaction_contrast(
|
| 189 |
+
dds, comb_col, args.ref_level, args.test_level,
|
| 190 |
+
str(t_start), str(t_end)
|
| 191 |
+
)
|
| 192 |
+
except ValueError as e:
|
| 193 |
+
warnings.warn(str(e))
|
| 194 |
+
continue
|
| 195 |
+
|
| 196 |
+
stat_res = DeseqStats(dds, contrast=contrast_vec, alpha=args.padj_cutoff)
|
| 197 |
+
stat_res.summary()
|
| 198 |
+
iw = stat_res.results_df.copy()
|
| 199 |
+
iw.to_csv(os.path.join(args.output_dir, f"interaction_{label}.csv"))
|
| 200 |
+
interaction_results[label] = iw
|
| 201 |
+
print(f"Interaction {label}: done.")
|
| 202 |
+
|
| 203 |
+
if not interaction_results:
|
| 204 |
+
raise RuntimeError(
|
| 205 |
+
"No interaction contrasts could be computed. "
|
| 206 |
+
"Check that group and time labels in metadata match the arguments exactly."
|
| 207 |
+
)
|
| 208 |
+
|
| 209 |
+
# Combine: minimum padj across adjacent-pair interactions
|
| 210 |
+
all_pvals = pd.concat({k: v["pvalue"] for k, v in interaction_results.items()}, axis=1)
|
| 211 |
+
all_lfc = pd.concat({k: v["log2FoldChange"] for k, v in interaction_results.items()}, axis=1)
|
| 212 |
+
|
| 213 |
+
min_pval = all_pvals.min(axis=1)
|
| 214 |
+
valid = min_pval.notna()
|
| 215 |
+
global_padj = pd.Series(np.nan, index=min_pval.index)
|
| 216 |
+
_, padj_vals, _, _ = multipletests(min_pval[valid], method="fdr_bh")
|
| 217 |
+
global_padj[valid] = padj_vals
|
| 218 |
+
|
| 219 |
+
best_pair = all_pvals.idxmin(axis=1)
|
| 220 |
+
rep_lfc = pd.Series(
|
| 221 |
+
[all_lfc.loc[g, best_pair[g]] if pd.notna(best_pair[g]) else np.nan
|
| 222 |
+
for g in all_lfc.index],
|
| 223 |
+
index=all_lfc.index,
|
| 224 |
+
)
|
| 225 |
+
base_mean = list(interaction_results.values())[0]["baseMean"]
|
| 226 |
+
|
| 227 |
+
res = pd.DataFrame({
|
| 228 |
+
"baseMean": base_mean,
|
| 229 |
+
"log2FoldChange": rep_lfc, # interaction LFC
|
| 230 |
+
"padj": global_padj,
|
| 231 |
+
"peak_interaction_window": best_pair,
|
| 232 |
+
}).sort_values("padj")
|
| 233 |
+
|
| 234 |
+
res["significant"] = (res["padj"] < args.padj_cutoff) & (res["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 235 |
+
res["direction"] = "not_significant"
|
| 236 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] > 0), "direction"] = "interaction_up"
|
| 237 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] < 0), "direction"] = "interaction_down"
|
| 238 |
+
|
| 239 |
+
res.to_csv(os.path.join(args.output_dir, "results.csv"))
|
| 240 |
+
res[res["significant"]].to_csv(os.path.join(args.output_dir, "significant_genes.csv"))
|
| 241 |
+
|
| 242 |
+
norm = pd.DataFrame(dds.layers["normed_counts"], index=dds.obs_names, columns=dds.var_names)
|
| 243 |
+
norm.to_csv(os.path.join(args.output_dir, "normalized_counts.csv"))
|
| 244 |
+
np.log2(norm + 1).to_csv(os.path.join(args.output_dir, "log_normalized_counts.csv"))
|
| 245 |
+
metadata[[args.condition_col, args.time_col]].to_csv(
|
| 246 |
+
os.path.join(args.output_dir, "metadata_used_for_analysis.csv")
|
| 247 |
+
)
|
| 248 |
+
|
| 249 |
+
print(f"Significant interaction genes: {int(res['significant'].sum())}")
|
| 250 |
+
print("Done.")
|
| 251 |
+
|
| 252 |
+
|
| 253 |
+
if __name__ == "__main__":
|
| 254 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/02_volcano_plot.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a volcano plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create a volcano plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="volcano_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df["safe_padj"] = plot_df["padj"].replace(0, np.nextafter(0, 1))
|
| 27 |
+
plot_df["neg_log10_padj"] = -np.log10(plot_df["safe_padj"])
|
| 28 |
+
plot_df["category"] = "Not significant"
|
| 29 |
+
plot_df.loc[
|
| 30 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] >= args.lfc_cutoff),
|
| 31 |
+
"category",
|
| 32 |
+
] = "Up"
|
| 33 |
+
plot_df.loc[
|
| 34 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] <= -args.lfc_cutoff),
|
| 35 |
+
"category",
|
| 36 |
+
] = "Down"
|
| 37 |
+
|
| 38 |
+
color_map = {"Not significant": "#AAAAAA", "Up": "#D62728", "Down": "#1F77B4"}
|
| 39 |
+
|
| 40 |
+
plt.figure(figsize=(7, 6))
|
| 41 |
+
for cat in ["Not significant", "Up", "Down"]:
|
| 42 |
+
sub = plot_df[plot_df["category"] == cat]
|
| 43 |
+
plt.scatter(
|
| 44 |
+
sub["log2FoldChange"], sub["neg_log10_padj"],
|
| 45 |
+
s=8, alpha=0.6,
|
| 46 |
+
label=f"{cat} (n={len(sub)})",
|
| 47 |
+
color=color_map[cat],
|
| 48 |
+
)
|
| 49 |
+
|
| 50 |
+
plt.axvline(args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 51 |
+
plt.axvline(-args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 52 |
+
plt.axhline(-np.log10(args.padj_cutoff), linestyle="--", linewidth=1, color="black")
|
| 53 |
+
plt.xlabel("log2 fold change")
|
| 54 |
+
plt.ylabel("-log10 adjusted p-value")
|
| 55 |
+
plt.title("Volcano plot")
|
| 56 |
+
plt.legend(fontsize=8)
|
| 57 |
+
plt.tight_layout()
|
| 58 |
+
|
| 59 |
+
out = os.path.join(args.output_dir, args.output)
|
| 60 |
+
plt.savefig(out, dpi=300)
|
| 61 |
+
plt.close()
|
| 62 |
+
print(f"Saved: {out}")
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
if __name__ == "__main__":
|
| 66 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/03_ma_plot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create an MA plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create an MA plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="MA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["baseMean", "log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df = plot_df[plot_df["baseMean"] > 0].copy()
|
| 27 |
+
plot_df["significant"] = (
|
| 28 |
+
(plot_df["padj"] < args.padj_cutoff) &
|
| 29 |
+
(plot_df["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
plt.figure(figsize=(7, 6))
|
| 33 |
+
nonsig = plot_df[~plot_df["significant"]]
|
| 34 |
+
sig = plot_df[plot_df["significant"]]
|
| 35 |
+
plt.scatter(
|
| 36 |
+
np.log10(nonsig["baseMean"]), nonsig["log2FoldChange"],
|
| 37 |
+
s=8, alpha=0.4, label=f"Not significant (n={len(nonsig)})", color="#AAAAAA",
|
| 38 |
+
)
|
| 39 |
+
plt.scatter(
|
| 40 |
+
np.log10(sig["baseMean"]), sig["log2FoldChange"],
|
| 41 |
+
s=8, alpha=0.8, label=f"Significant (n={len(sig)})", color="#D62728",
|
| 42 |
+
)
|
| 43 |
+
plt.axhline(0, linestyle="--", linewidth=1, color="black")
|
| 44 |
+
plt.xlabel("log10 mean expression")
|
| 45 |
+
plt.ylabel("log2 fold change")
|
| 46 |
+
plt.title("MA plot")
|
| 47 |
+
plt.legend(fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/04_pca_plot.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a PCA plot from log-normalised expression / count data."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from sklearn.decomposition import PCA
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="PCA plot from log-normalised data.")
|
| 12 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 13 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 14 |
+
parser.add_argument("--condition_col", default="condition")
|
| 15 |
+
parser.add_argument("--output", default="PCA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 25 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 26 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 27 |
+
log_counts = log_counts.loc[shared]
|
| 28 |
+
metadata = metadata.loc[shared]
|
| 29 |
+
|
| 30 |
+
if args.condition_col not in metadata.columns:
|
| 31 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 32 |
+
|
| 33 |
+
pca = PCA(n_components=2)
|
| 34 |
+
pcs = pca.fit_transform(log_counts)
|
| 35 |
+
pca_df = pd.DataFrame(pcs, index=log_counts.index, columns=["PC1", "PC2"])
|
| 36 |
+
pca_df = pca_df.join(metadata[[args.condition_col]])
|
| 37 |
+
|
| 38 |
+
plt.figure(figsize=(6, 5))
|
| 39 |
+
groups = sorted(pca_df[args.condition_col].astype(str).unique())
|
| 40 |
+
colors = plt.cm.Set1.colors
|
| 41 |
+
for i, grp in enumerate(groups):
|
| 42 |
+
sub = pca_df[pca_df[args.condition_col].astype(str) == grp]
|
| 43 |
+
plt.scatter(sub["PC1"], sub["PC2"], s=60, alpha=0.85,
|
| 44 |
+
label=grp, color=colors[i % len(colors)],
|
| 45 |
+
edgecolors="white", linewidths=0.5)
|
| 46 |
+
|
| 47 |
+
for sample in pca_df.index:
|
| 48 |
+
plt.annotate(sample, (pca_df.loc[sample, "PC1"], pca_df.loc[sample, "PC2"]),
|
| 49 |
+
fontsize=6, alpha=0.7, xytext=(3, 3), textcoords="offset points")
|
| 50 |
+
|
| 51 |
+
plt.xlabel(f"PC1 ({pca.explained_variance_ratio_[0]*100:.1f}%)")
|
| 52 |
+
plt.ylabel(f"PC2 ({pca.explained_variance_ratio_[1]*100:.1f}%)")
|
| 53 |
+
plt.title("PCA")
|
| 54 |
+
plt.legend(title=args.condition_col)
|
| 55 |
+
plt.tight_layout()
|
| 56 |
+
|
| 57 |
+
out = os.path.join(args.output_dir, args.output)
|
| 58 |
+
plt.savefig(out, dpi=300)
|
| 59 |
+
plt.close()
|
| 60 |
+
print(f"Saved: {out}")
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/05_heatmap_top_de_genes.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a heatmap of the top differentially expressed genes/features."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import seaborn as sns
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
import matplotlib.patches as mpatches
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def parse_args():
|
| 12 |
+
parser = argparse.ArgumentParser(description="Heatmap of top DE genes.")
|
| 13 |
+
parser.add_argument("--results", default="results.csv")
|
| 14 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 15 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 16 |
+
parser.add_argument("--condition_col", default="condition")
|
| 17 |
+
parser.add_argument("--top_n", type=int, default=50)
|
| 18 |
+
parser.add_argument("--output", default="top_DE_genes_heatmap.png")
|
| 19 |
+
parser.add_argument("--output_dir", default=".")
|
| 20 |
+
return parser.parse_args()
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def zscore_by_gene(df):
|
| 24 |
+
means = df.mean(axis=1)
|
| 25 |
+
stds = df.std(axis=1).replace(0, 1)
|
| 26 |
+
return df.sub(means, axis=0).div(stds, axis=0)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def main():
|
| 30 |
+
args = parse_args()
|
| 31 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 32 |
+
|
| 33 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 34 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 35 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 36 |
+
|
| 37 |
+
# Select top genes: prefer significant ones
|
| 38 |
+
if "significant" in res.columns:
|
| 39 |
+
sig_res = res[res["significant"] == True].dropna(subset=["padj"]).sort_values("padj")
|
| 40 |
+
else:
|
| 41 |
+
sig_res = res.dropna(subset=["padj"]).sort_values("padj")
|
| 42 |
+
|
| 43 |
+
if len(sig_res) >= args.top_n:
|
| 44 |
+
top_genes = sig_res.head(args.top_n).index
|
| 45 |
+
elif len(sig_res) > 0:
|
| 46 |
+
print(f"Only {len(sig_res)} significant features; using all.")
|
| 47 |
+
top_genes = sig_res.index
|
| 48 |
+
else:
|
| 49 |
+
print("No significant features; falling back to top N by padj.")
|
| 50 |
+
top_genes = res.dropna(subset=["padj"]).sort_values("padj").head(args.top_n).index
|
| 51 |
+
|
| 52 |
+
available = [g for g in top_genes if g in log_counts.columns]
|
| 53 |
+
if not available:
|
| 54 |
+
raise ValueError("None of the top features are in log_normalized_counts.csv.")
|
| 55 |
+
|
| 56 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 57 |
+
log_counts = log_counts.loc[shared]
|
| 58 |
+
metadata = metadata.loc[shared]
|
| 59 |
+
|
| 60 |
+
if args.condition_col not in metadata.columns:
|
| 61 |
+
col_colors = None
|
| 62 |
+
legend_patches = []
|
| 63 |
+
else:
|
| 64 |
+
groups = sorted(metadata[args.condition_col].astype(str).unique())
|
| 65 |
+
palette = [plt.cm.Set1.colors[i % 9] for i in range(len(groups))]
|
| 66 |
+
cond_pal = dict(zip(groups, palette))
|
| 67 |
+
col_colors = metadata[args.condition_col].astype(str).map(cond_pal)
|
| 68 |
+
legend_patches = [mpatches.Patch(color=cond_pal[g], label=g) for g in groups]
|
| 69 |
+
|
| 70 |
+
hm = log_counts[available].T
|
| 71 |
+
hm_z = zscore_by_gene(hm)
|
| 72 |
+
|
| 73 |
+
cluster = sns.clustermap(
|
| 74 |
+
hm_z,
|
| 75 |
+
figsize=(max(8, len(shared) * 0.4 + 4), max(10, len(available) * 0.2 + 2)),
|
| 76 |
+
col_cluster=True,
|
| 77 |
+
row_cluster=True,
|
| 78 |
+
col_colors=col_colors,
|
| 79 |
+
xticklabels=True,
|
| 80 |
+
yticklabels=True,
|
| 81 |
+
cmap="vlag",
|
| 82 |
+
)
|
| 83 |
+
plt.setp(cluster.ax_heatmap.get_xticklabels(), rotation=45, ha="right", fontsize=8)
|
| 84 |
+
plt.setp(cluster.ax_heatmap.get_yticklabels(), fontsize=7)
|
| 85 |
+
|
| 86 |
+
if legend_patches:
|
| 87 |
+
cluster.ax_heatmap.legend(
|
| 88 |
+
handles=legend_patches, title=args.condition_col,
|
| 89 |
+
loc="upper right", bbox_to_anchor=(1.25, 1.1), fontsize=8,
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
cluster.fig.suptitle(f"Top {len(available)} DE features", y=1.02)
|
| 93 |
+
|
| 94 |
+
out = os.path.join(args.output_dir, args.output)
|
| 95 |
+
cluster.savefig(out, dpi=300, bbox_inches="tight")
|
| 96 |
+
plt.close(cluster.fig)
|
| 97 |
+
print(f"Saved: {out}")
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
if __name__ == "__main__":
|
| 101 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/06_top_genes_barplot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a horizontal bar plot of top differentially expressed genes/features."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from matplotlib.patches import Patch
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Bar plot of top DE genes.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--top_n", type=int, default=20)
|
| 14 |
+
parser.add_argument("--output", default="top_DE_genes_barplot.png")
|
| 15 |
+
parser.add_argument("--output_dir", default=".")
|
| 16 |
+
return parser.parse_args()
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def main():
|
| 20 |
+
args = parse_args()
|
| 21 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 22 |
+
|
| 23 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 24 |
+
top_df = (
|
| 25 |
+
res.dropna(subset=["padj", "log2FoldChange"])
|
| 26 |
+
.sort_values("padj")
|
| 27 |
+
.head(args.top_n)
|
| 28 |
+
.copy()
|
| 29 |
+
)
|
| 30 |
+
if top_df.empty:
|
| 31 |
+
raise ValueError("No features available for plotting.")
|
| 32 |
+
|
| 33 |
+
top_df = top_df.iloc[::-1]
|
| 34 |
+
colors = ["#D62728" if v > 0 else "#1F77B4" for v in top_df["log2FoldChange"]]
|
| 35 |
+
|
| 36 |
+
plt.figure(figsize=(8, max(6, len(top_df) * 0.3)))
|
| 37 |
+
plt.barh(top_df.index, top_df["log2FoldChange"], color=colors)
|
| 38 |
+
plt.axvline(0, linestyle="--", linewidth=1, color="black")
|
| 39 |
+
plt.xlabel("log2 fold change")
|
| 40 |
+
plt.ylabel("Feature")
|
| 41 |
+
plt.title(f"Top {args.top_n} differentially expressed features")
|
| 42 |
+
|
| 43 |
+
legend_elements = [
|
| 44 |
+
Patch(facecolor="#D62728", label="Up"),
|
| 45 |
+
Patch(facecolor="#1F77B4", label="Down"),
|
| 46 |
+
]
|
| 47 |
+
plt.legend(handles=legend_elements, fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Count_DESeq2_group_time_interaction
|
| 2 |
+
|
| 3 |
+
**Decision rule:** Two groups x two or more time points, group x time interaction is the primary question
|
| 4 |
+
|
| 5 |
+
## Required input files
|
| 6 |
+
|
| 7 |
+
`metadata.csv counts.csv [output_dir] [time_col]`
|
| 8 |
+
|
| 9 |
+
## Quick start
|
| 10 |
+
|
| 11 |
+
```bash
|
| 12 |
+
bash run_pipeline.sh metadata.csv counts.csv [output_dir] [time_col] output/
|
| 13 |
+
```
|
| 14 |
+
|
| 15 |
+
## Key design notes
|
| 16 |
+
|
| 17 |
+
Full factorial via combined group_time factor; numpy contrast vector for interaction term. Saves interaction_T1_to_T2.csv per adjacent window.
|
| 18 |
+
|
| 19 |
+
## Standardised output columns
|
| 20 |
+
|
| 21 |
+
All pipelines write `results.csv` with: `log2FoldChange`, `baseMean`, `padj`, `significant`, `direction`.
|
| 22 |
+
|
| 23 |
+
## Required packages
|
| 24 |
+
|
| 25 |
+
```bash
|
| 26 |
+
pip install pandas numpy matplotlib seaborn scikit-learn scipy statsmodels pydeseq2
|
| 27 |
+
```
|
src/statlens/pipelines/deseq2_group_time_interaction_pipeline/run_pipeline.sh
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Count_DESeq2_group_time_interaction pipeline — group × time interaction.
|
| 3 |
+
# Usage: bash run_pipeline.sh [metadata.csv] [counts.csv] [output_dir] [time_col]
|
| 4 |
+
set -euo pipefail
|
| 5 |
+
METADATA=${1:-metadata.csv}; COUNTS=${2:-counts.csv}; OUTPUT_DIR=${3:-output}; TIME_COL=${4:-time}
|
| 6 |
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 7 |
+
|
| 8 |
+
echo "=== Step 1: DESeq2 group×time interaction ==="
|
| 9 |
+
python "$SCRIPT_DIR/01_deseq2_group_time_interaction_analysis.py" \
|
| 10 |
+
--metadata "$METADATA" --counts "$COUNTS" --time_col "$TIME_COL" --output_dir "$OUTPUT_DIR"
|
| 11 |
+
|
| 12 |
+
R="$OUTPUT_DIR/results.csv"; L="$OUTPUT_DIR/log_normalized_counts.csv"; M="$OUTPUT_DIR/metadata_used_for_analysis.csv"
|
| 13 |
+
echo "=== Step 2: Volcano ===" && python "$SCRIPT_DIR/02_volcano_plot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 14 |
+
echo "=== Step 3: MA ===" && python "$SCRIPT_DIR/03_ma_plot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 15 |
+
echo "=== Step 4: PCA ===" && python "$SCRIPT_DIR/04_pca_plot.py" --log_counts "$L" --metadata "$M" --output_dir "$OUTPUT_DIR"
|
| 16 |
+
echo "=== Step 5: Heatmap ===" && python "$SCRIPT_DIR/05_heatmap_top_de_genes.py" --results "$R" --log_counts "$L" --metadata "$M" --output_dir "$OUTPUT_DIR"
|
| 17 |
+
echo "=== Step 6: Barplot ===" && python "$SCRIPT_DIR/06_top_genes_barplot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 18 |
+
echo "" && echo "Pipeline complete. Outputs: $OUTPUT_DIR"
|
src/statlens/pipelines/deseq2_multi_group_pipeline/01_deseq2_multi_group_analysis.py
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
01_deseq2_multi_group_analysis.py
|
| 3 |
+
|
| 4 |
+
Count_DESeq2_multi_group workflow: three or more independent groups in a
|
| 5 |
+
cross-sectional design.
|
| 6 |
+
|
| 7 |
+
Strategy:
|
| 8 |
+
1. Fit a single DESeq2 model with condition as the sole factor.
|
| 9 |
+
2. Run all pairwise comparisons (each non-reference group vs the reference).
|
| 10 |
+
3. A gene is called significant if it passes padj + |LFC| thresholds in AT
|
| 11 |
+
LEAST ONE pairwise comparison (BH correction applied jointly across all
|
| 12 |
+
comparisons × genes).
|
| 13 |
+
4. results.csv contains the per-gene minimum padj (across comparisons) and
|
| 14 |
+
the LFC from the comparison with the smallest padj.
|
| 15 |
+
5. Individual pairwise result files are also saved.
|
| 16 |
+
|
| 17 |
+
Input:
|
| 18 |
+
metadata.csv – samples × annotations; must contain a condition column
|
| 19 |
+
with ≥ 3 groups.
|
| 20 |
+
counts.csv – genes/features × samples; raw non-negative integer counts.
|
| 21 |
+
|
| 22 |
+
Output:
|
| 23 |
+
results.csv (combined: min padj, representative LFC)
|
| 24 |
+
significant_genes.csv
|
| 25 |
+
pairwise_{X}_vs_{ref}.csv (one file per non-reference group)
|
| 26 |
+
normalized_counts.csv
|
| 27 |
+
log_normalized_counts.csv
|
| 28 |
+
metadata_used_for_analysis.csv
|
| 29 |
+
"""
|
| 30 |
+
|
| 31 |
+
import argparse
|
| 32 |
+
import os
|
| 33 |
+
import numpy as np
|
| 34 |
+
import pandas as pd
|
| 35 |
+
from pydeseq2.dds import DeseqDataSet
|
| 36 |
+
from pydeseq2.ds import DeseqStats
|
| 37 |
+
from statsmodels.stats.multitest import multipletests
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def parse_args():
|
| 41 |
+
parser = argparse.ArgumentParser(description="DESeq2 multi-group analysis (≥3 groups).")
|
| 42 |
+
parser.add_argument("--metadata", default="metadata.csv")
|
| 43 |
+
parser.add_argument("--counts", default="counts.csv")
|
| 44 |
+
parser.add_argument("--condition_col", default="condition")
|
| 45 |
+
parser.add_argument("--ref_level", default="control",
|
| 46 |
+
help="Reference group for all pairwise comparisons.")
|
| 47 |
+
parser.add_argument("--min_total_count", type=int, default=10)
|
| 48 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 49 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 50 |
+
parser.add_argument("--output_dir", default=".")
|
| 51 |
+
return parser.parse_args()
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
def main():
|
| 55 |
+
args = parse_args()
|
| 56 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 57 |
+
|
| 58 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 59 |
+
counts = pd.read_csv(args.counts, index_col=0)
|
| 60 |
+
|
| 61 |
+
if args.condition_col not in metadata.columns:
|
| 62 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 63 |
+
|
| 64 |
+
shared = metadata.index.intersection(counts.columns)
|
| 65 |
+
if len(shared) == 0:
|
| 66 |
+
raise ValueError("No shared sample IDs between metadata and count matrix.")
|
| 67 |
+
metadata = metadata.loc[shared].copy()
|
| 68 |
+
counts = counts.loc[:, shared].copy()
|
| 69 |
+
|
| 70 |
+
metadata = metadata.dropna(subset=[args.condition_col])
|
| 71 |
+
counts = counts.loc[:, metadata.index]
|
| 72 |
+
|
| 73 |
+
groups = metadata[args.condition_col].astype(str).unique().tolist()
|
| 74 |
+
if len(groups) < 3:
|
| 75 |
+
raise ValueError(f"multi_group pipeline requires ≥3 groups; found: {groups}. "
|
| 76 |
+
"Use the basic pipeline for two-group comparisons.")
|
| 77 |
+
if args.ref_level not in groups:
|
| 78 |
+
raise ValueError(f"Reference group '{args.ref_level}' not found in {groups}.")
|
| 79 |
+
test_groups = [g for g in sorted(groups) if g != args.ref_level]
|
| 80 |
+
print(f"Groups: ref='{args.ref_level}', test={test_groups}")
|
| 81 |
+
|
| 82 |
+
if (metadata[args.condition_col].value_counts() < 2).any():
|
| 83 |
+
raise ValueError("Each group needs at least two biological replicates.")
|
| 84 |
+
|
| 85 |
+
if (counts < 0).any().any():
|
| 86 |
+
raise ValueError("Count matrix contains negative values.")
|
| 87 |
+
if not np.all(np.equal(counts.values, np.floor(counts.values))):
|
| 88 |
+
raise ValueError("Counts must be raw integers.")
|
| 89 |
+
counts = counts.astype(int)
|
| 90 |
+
|
| 91 |
+
counts = counts.loc[counts.sum(axis=1) >= args.min_total_count].copy()
|
| 92 |
+
if counts.shape[0] == 0:
|
| 93 |
+
raise ValueError("No genes remain after low-count filtering.")
|
| 94 |
+
print(f"Genes retained after filtering: {counts.shape[0]}")
|
| 95 |
+
|
| 96 |
+
all_categories = [args.ref_level] + test_groups
|
| 97 |
+
metadata[args.condition_col] = pd.Categorical(
|
| 98 |
+
metadata[args.condition_col],
|
| 99 |
+
categories=all_categories,
|
| 100 |
+
ordered=False,
|
| 101 |
+
)
|
| 102 |
+
|
| 103 |
+
counts_t = counts.T
|
| 104 |
+
metadata = metadata.loc[counts_t.index]
|
| 105 |
+
|
| 106 |
+
dds = DeseqDataSet(
|
| 107 |
+
counts=counts_t,
|
| 108 |
+
metadata=metadata,
|
| 109 |
+
design_factors=args.condition_col,
|
| 110 |
+
refit_cooks=True,
|
| 111 |
+
)
|
| 112 |
+
dds.deseq2()
|
| 113 |
+
|
| 114 |
+
# Pairwise comparisons: each test group vs reference
|
| 115 |
+
pairwise_results = {}
|
| 116 |
+
for tg in test_groups:
|
| 117 |
+
stat_res = DeseqStats(
|
| 118 |
+
dds,
|
| 119 |
+
contrast=[args.condition_col, tg, args.ref_level],
|
| 120 |
+
alpha=args.padj_cutoff,
|
| 121 |
+
)
|
| 122 |
+
stat_res.summary()
|
| 123 |
+
coeff = f"{args.condition_col}_{tg}_vs_{args.ref_level}"
|
| 124 |
+
try:
|
| 125 |
+
stat_res.lfc_shrink(coeff=coeff)
|
| 126 |
+
except Exception:
|
| 127 |
+
pass
|
| 128 |
+
pw = stat_res.results_df.copy()
|
| 129 |
+
pw.to_csv(os.path.join(args.output_dir, f"pairwise_{tg}_vs_{args.ref_level}.csv"))
|
| 130 |
+
pairwise_results[tg] = pw
|
| 131 |
+
print(f"Pairwise {tg} vs {args.ref_level}: done.")
|
| 132 |
+
|
| 133 |
+
# Combine: re-apply BH correction jointly across all pairwise p-values
|
| 134 |
+
all_pvals = pd.concat(
|
| 135 |
+
{tg: pw["pvalue"] for tg, pw in pairwise_results.items()},
|
| 136 |
+
axis=1,
|
| 137 |
+
)
|
| 138 |
+
all_lfc = pd.concat(
|
| 139 |
+
{tg: pw["log2FoldChange"] for tg, pw in pairwise_results.items()},
|
| 140 |
+
axis=1,
|
| 141 |
+
)
|
| 142 |
+
|
| 143 |
+
# Min raw p-value per gene
|
| 144 |
+
min_pval = all_pvals.min(axis=1)
|
| 145 |
+
valid_mask = min_pval.notna()
|
| 146 |
+
global_padj = pd.Series(np.nan, index=min_pval.index)
|
| 147 |
+
_, padj_vals, _, _ = multipletests(min_pval[valid_mask], method="fdr_bh")
|
| 148 |
+
global_padj[valid_mask] = padj_vals
|
| 149 |
+
|
| 150 |
+
# Representative LFC: from the comparison with the minimum p-value per gene
|
| 151 |
+
best_comparison = all_pvals.idxmin(axis=1)
|
| 152 |
+
rep_lfc = pd.Series(
|
| 153 |
+
[all_lfc.loc[gene, best_comparison[gene]] if pd.notna(best_comparison[gene]) else np.nan
|
| 154 |
+
for gene in all_lfc.index],
|
| 155 |
+
index=all_lfc.index,
|
| 156 |
+
)
|
| 157 |
+
# baseMean from the first pairwise result (identical across comparisons)
|
| 158 |
+
base_mean = pairwise_results[test_groups[0]]["baseMean"]
|
| 159 |
+
|
| 160 |
+
res = pd.DataFrame({
|
| 161 |
+
"baseMean": base_mean,
|
| 162 |
+
"log2FoldChange": rep_lfc,
|
| 163 |
+
"padj": global_padj,
|
| 164 |
+
"best_comparison": best_comparison,
|
| 165 |
+
}).sort_values("padj")
|
| 166 |
+
|
| 167 |
+
res["significant"] = (res["padj"] < args.padj_cutoff) & (res["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 168 |
+
res["direction"] = "not_significant"
|
| 169 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] > 0), "direction"] = "up"
|
| 170 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] < 0), "direction"] = "down"
|
| 171 |
+
|
| 172 |
+
res.to_csv(os.path.join(args.output_dir, "results.csv"))
|
| 173 |
+
res[res["significant"]].to_csv(os.path.join(args.output_dir, "significant_genes.csv"))
|
| 174 |
+
|
| 175 |
+
norm = pd.DataFrame(dds.layers["normed_counts"], index=dds.obs_names, columns=dds.var_names)
|
| 176 |
+
norm.to_csv(os.path.join(args.output_dir, "normalized_counts.csv"))
|
| 177 |
+
np.log2(norm + 1).to_csv(os.path.join(args.output_dir, "log_normalized_counts.csv"))
|
| 178 |
+
metadata.to_csv(os.path.join(args.output_dir, "metadata_used_for_analysis.csv"))
|
| 179 |
+
|
| 180 |
+
print(f"Significant genes (any comparison): {int(res['significant'].sum())}")
|
| 181 |
+
print("Done.")
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
if __name__ == "__main__":
|
| 185 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/02_volcano_plot.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a volcano plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create a volcano plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="volcano_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df["safe_padj"] = plot_df["padj"].replace(0, np.nextafter(0, 1))
|
| 27 |
+
plot_df["neg_log10_padj"] = -np.log10(plot_df["safe_padj"])
|
| 28 |
+
plot_df["category"] = "Not significant"
|
| 29 |
+
plot_df.loc[
|
| 30 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] >= args.lfc_cutoff),
|
| 31 |
+
"category",
|
| 32 |
+
] = "Up"
|
| 33 |
+
plot_df.loc[
|
| 34 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] <= -args.lfc_cutoff),
|
| 35 |
+
"category",
|
| 36 |
+
] = "Down"
|
| 37 |
+
|
| 38 |
+
color_map = {"Not significant": "#AAAAAA", "Up": "#D62728", "Down": "#1F77B4"}
|
| 39 |
+
|
| 40 |
+
plt.figure(figsize=(7, 6))
|
| 41 |
+
for cat in ["Not significant", "Up", "Down"]:
|
| 42 |
+
sub = plot_df[plot_df["category"] == cat]
|
| 43 |
+
plt.scatter(
|
| 44 |
+
sub["log2FoldChange"], sub["neg_log10_padj"],
|
| 45 |
+
s=8, alpha=0.6,
|
| 46 |
+
label=f"{cat} (n={len(sub)})",
|
| 47 |
+
color=color_map[cat],
|
| 48 |
+
)
|
| 49 |
+
|
| 50 |
+
plt.axvline(args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 51 |
+
plt.axvline(-args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 52 |
+
plt.axhline(-np.log10(args.padj_cutoff), linestyle="--", linewidth=1, color="black")
|
| 53 |
+
plt.xlabel("log2 fold change")
|
| 54 |
+
plt.ylabel("-log10 adjusted p-value")
|
| 55 |
+
plt.title("Volcano plot")
|
| 56 |
+
plt.legend(fontsize=8)
|
| 57 |
+
plt.tight_layout()
|
| 58 |
+
|
| 59 |
+
out = os.path.join(args.output_dir, args.output)
|
| 60 |
+
plt.savefig(out, dpi=300)
|
| 61 |
+
plt.close()
|
| 62 |
+
print(f"Saved: {out}")
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
if __name__ == "__main__":
|
| 66 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/03_ma_plot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create an MA plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create an MA plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="MA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["baseMean", "log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df = plot_df[plot_df["baseMean"] > 0].copy()
|
| 27 |
+
plot_df["significant"] = (
|
| 28 |
+
(plot_df["padj"] < args.padj_cutoff) &
|
| 29 |
+
(plot_df["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
plt.figure(figsize=(7, 6))
|
| 33 |
+
nonsig = plot_df[~plot_df["significant"]]
|
| 34 |
+
sig = plot_df[plot_df["significant"]]
|
| 35 |
+
plt.scatter(
|
| 36 |
+
np.log10(nonsig["baseMean"]), nonsig["log2FoldChange"],
|
| 37 |
+
s=8, alpha=0.4, label=f"Not significant (n={len(nonsig)})", color="#AAAAAA",
|
| 38 |
+
)
|
| 39 |
+
plt.scatter(
|
| 40 |
+
np.log10(sig["baseMean"]), sig["log2FoldChange"],
|
| 41 |
+
s=8, alpha=0.8, label=f"Significant (n={len(sig)})", color="#D62728",
|
| 42 |
+
)
|
| 43 |
+
plt.axhline(0, linestyle="--", linewidth=1, color="black")
|
| 44 |
+
plt.xlabel("log10 mean expression")
|
| 45 |
+
plt.ylabel("log2 fold change")
|
| 46 |
+
plt.title("MA plot")
|
| 47 |
+
plt.legend(fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/04_pca_plot.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a PCA plot from log-normalised expression / count data."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from sklearn.decomposition import PCA
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="PCA plot from log-normalised data.")
|
| 12 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 13 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 14 |
+
parser.add_argument("--condition_col", default="condition")
|
| 15 |
+
parser.add_argument("--output", default="PCA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 25 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 26 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 27 |
+
log_counts = log_counts.loc[shared]
|
| 28 |
+
metadata = metadata.loc[shared]
|
| 29 |
+
|
| 30 |
+
if args.condition_col not in metadata.columns:
|
| 31 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 32 |
+
|
| 33 |
+
pca = PCA(n_components=2)
|
| 34 |
+
pcs = pca.fit_transform(log_counts)
|
| 35 |
+
pca_df = pd.DataFrame(pcs, index=log_counts.index, columns=["PC1", "PC2"])
|
| 36 |
+
pca_df = pca_df.join(metadata[[args.condition_col]])
|
| 37 |
+
|
| 38 |
+
plt.figure(figsize=(6, 5))
|
| 39 |
+
groups = sorted(pca_df[args.condition_col].astype(str).unique())
|
| 40 |
+
colors = plt.cm.Set1.colors
|
| 41 |
+
for i, grp in enumerate(groups):
|
| 42 |
+
sub = pca_df[pca_df[args.condition_col].astype(str) == grp]
|
| 43 |
+
plt.scatter(sub["PC1"], sub["PC2"], s=60, alpha=0.85,
|
| 44 |
+
label=grp, color=colors[i % len(colors)],
|
| 45 |
+
edgecolors="white", linewidths=0.5)
|
| 46 |
+
|
| 47 |
+
for sample in pca_df.index:
|
| 48 |
+
plt.annotate(sample, (pca_df.loc[sample, "PC1"], pca_df.loc[sample, "PC2"]),
|
| 49 |
+
fontsize=6, alpha=0.7, xytext=(3, 3), textcoords="offset points")
|
| 50 |
+
|
| 51 |
+
plt.xlabel(f"PC1 ({pca.explained_variance_ratio_[0]*100:.1f}%)")
|
| 52 |
+
plt.ylabel(f"PC2 ({pca.explained_variance_ratio_[1]*100:.1f}%)")
|
| 53 |
+
plt.title("PCA")
|
| 54 |
+
plt.legend(title=args.condition_col)
|
| 55 |
+
plt.tight_layout()
|
| 56 |
+
|
| 57 |
+
out = os.path.join(args.output_dir, args.output)
|
| 58 |
+
plt.savefig(out, dpi=300)
|
| 59 |
+
plt.close()
|
| 60 |
+
print(f"Saved: {out}")
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/05_heatmap_top_de_genes.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a heatmap of the top differentially expressed genes/features."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import seaborn as sns
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
import matplotlib.patches as mpatches
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def parse_args():
|
| 12 |
+
parser = argparse.ArgumentParser(description="Heatmap of top DE genes.")
|
| 13 |
+
parser.add_argument("--results", default="results.csv")
|
| 14 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 15 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 16 |
+
parser.add_argument("--condition_col", default="condition")
|
| 17 |
+
parser.add_argument("--top_n", type=int, default=50)
|
| 18 |
+
parser.add_argument("--output", default="top_DE_genes_heatmap.png")
|
| 19 |
+
parser.add_argument("--output_dir", default=".")
|
| 20 |
+
return parser.parse_args()
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def zscore_by_gene(df):
|
| 24 |
+
means = df.mean(axis=1)
|
| 25 |
+
stds = df.std(axis=1).replace(0, 1)
|
| 26 |
+
return df.sub(means, axis=0).div(stds, axis=0)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def main():
|
| 30 |
+
args = parse_args()
|
| 31 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 32 |
+
|
| 33 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 34 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 35 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 36 |
+
|
| 37 |
+
# Select top genes: prefer significant ones
|
| 38 |
+
if "significant" in res.columns:
|
| 39 |
+
sig_res = res[res["significant"] == True].dropna(subset=["padj"]).sort_values("padj")
|
| 40 |
+
else:
|
| 41 |
+
sig_res = res.dropna(subset=["padj"]).sort_values("padj")
|
| 42 |
+
|
| 43 |
+
if len(sig_res) >= args.top_n:
|
| 44 |
+
top_genes = sig_res.head(args.top_n).index
|
| 45 |
+
elif len(sig_res) > 0:
|
| 46 |
+
print(f"Only {len(sig_res)} significant features; using all.")
|
| 47 |
+
top_genes = sig_res.index
|
| 48 |
+
else:
|
| 49 |
+
print("No significant features; falling back to top N by padj.")
|
| 50 |
+
top_genes = res.dropna(subset=["padj"]).sort_values("padj").head(args.top_n).index
|
| 51 |
+
|
| 52 |
+
available = [g for g in top_genes if g in log_counts.columns]
|
| 53 |
+
if not available:
|
| 54 |
+
raise ValueError("None of the top features are in log_normalized_counts.csv.")
|
| 55 |
+
|
| 56 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 57 |
+
log_counts = log_counts.loc[shared]
|
| 58 |
+
metadata = metadata.loc[shared]
|
| 59 |
+
|
| 60 |
+
if args.condition_col not in metadata.columns:
|
| 61 |
+
col_colors = None
|
| 62 |
+
legend_patches = []
|
| 63 |
+
else:
|
| 64 |
+
groups = sorted(metadata[args.condition_col].astype(str).unique())
|
| 65 |
+
palette = [plt.cm.Set1.colors[i % 9] for i in range(len(groups))]
|
| 66 |
+
cond_pal = dict(zip(groups, palette))
|
| 67 |
+
col_colors = metadata[args.condition_col].astype(str).map(cond_pal)
|
| 68 |
+
legend_patches = [mpatches.Patch(color=cond_pal[g], label=g) for g in groups]
|
| 69 |
+
|
| 70 |
+
hm = log_counts[available].T
|
| 71 |
+
hm_z = zscore_by_gene(hm)
|
| 72 |
+
|
| 73 |
+
cluster = sns.clustermap(
|
| 74 |
+
hm_z,
|
| 75 |
+
figsize=(max(8, len(shared) * 0.4 + 4), max(10, len(available) * 0.2 + 2)),
|
| 76 |
+
col_cluster=True,
|
| 77 |
+
row_cluster=True,
|
| 78 |
+
col_colors=col_colors,
|
| 79 |
+
xticklabels=True,
|
| 80 |
+
yticklabels=True,
|
| 81 |
+
cmap="vlag",
|
| 82 |
+
)
|
| 83 |
+
plt.setp(cluster.ax_heatmap.get_xticklabels(), rotation=45, ha="right", fontsize=8)
|
| 84 |
+
plt.setp(cluster.ax_heatmap.get_yticklabels(), fontsize=7)
|
| 85 |
+
|
| 86 |
+
if legend_patches:
|
| 87 |
+
cluster.ax_heatmap.legend(
|
| 88 |
+
handles=legend_patches, title=args.condition_col,
|
| 89 |
+
loc="upper right", bbox_to_anchor=(1.25, 1.1), fontsize=8,
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
cluster.fig.suptitle(f"Top {len(available)} DE features", y=1.02)
|
| 93 |
+
|
| 94 |
+
out = os.path.join(args.output_dir, args.output)
|
| 95 |
+
cluster.savefig(out, dpi=300, bbox_inches="tight")
|
| 96 |
+
plt.close(cluster.fig)
|
| 97 |
+
print(f"Saved: {out}")
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
if __name__ == "__main__":
|
| 101 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/06_top_genes_barplot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a horizontal bar plot of top differentially expressed genes/features."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from matplotlib.patches import Patch
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Bar plot of top DE genes.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--top_n", type=int, default=20)
|
| 14 |
+
parser.add_argument("--output", default="top_DE_genes_barplot.png")
|
| 15 |
+
parser.add_argument("--output_dir", default=".")
|
| 16 |
+
return parser.parse_args()
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def main():
|
| 20 |
+
args = parse_args()
|
| 21 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 22 |
+
|
| 23 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 24 |
+
top_df = (
|
| 25 |
+
res.dropna(subset=["padj", "log2FoldChange"])
|
| 26 |
+
.sort_values("padj")
|
| 27 |
+
.head(args.top_n)
|
| 28 |
+
.copy()
|
| 29 |
+
)
|
| 30 |
+
if top_df.empty:
|
| 31 |
+
raise ValueError("No features available for plotting.")
|
| 32 |
+
|
| 33 |
+
top_df = top_df.iloc[::-1]
|
| 34 |
+
colors = ["#D62728" if v > 0 else "#1F77B4" for v in top_df["log2FoldChange"]]
|
| 35 |
+
|
| 36 |
+
plt.figure(figsize=(8, max(6, len(top_df) * 0.3)))
|
| 37 |
+
plt.barh(top_df.index, top_df["log2FoldChange"], color=colors)
|
| 38 |
+
plt.axvline(0, linestyle="--", linewidth=1, color="black")
|
| 39 |
+
plt.xlabel("log2 fold change")
|
| 40 |
+
plt.ylabel("Feature")
|
| 41 |
+
plt.title(f"Top {args.top_n} differentially expressed features")
|
| 42 |
+
|
| 43 |
+
legend_elements = [
|
| 44 |
+
Patch(facecolor="#D62728", label="Up"),
|
| 45 |
+
Patch(facecolor="#1F77B4", label="Down"),
|
| 46 |
+
]
|
| 47 |
+
plt.legend(handles=legend_elements, fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_multi_group_pipeline/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Count_DESeq2_multi_group
|
| 2 |
+
|
| 3 |
+
**Decision rule:** Three or more independent groups in a cross-sectional design
|
| 4 |
+
|
| 5 |
+
## Required input files
|
| 6 |
+
|
| 7 |
+
`metadata.csv counts.csv [output_dir] [ref_level]`
|
| 8 |
+
|
| 9 |
+
## Quick start
|
| 10 |
+
|
| 11 |
+
```bash
|
| 12 |
+
bash run_pipeline.sh metadata.csv counts.csv [output_dir] [ref_level] output/
|
| 13 |
+
```
|
| 14 |
+
|
| 15 |
+
## Key design notes
|
| 16 |
+
|
| 17 |
+
Pairwise comparisons (each group vs ref); joint BH FDR; saves pairwise_X_vs_ref.csv per comparison.
|
| 18 |
+
|
| 19 |
+
## Standardised output columns
|
| 20 |
+
|
| 21 |
+
All pipelines write `results.csv` with: `log2FoldChange`, `baseMean`, `padj`, `significant`, `direction`.
|
| 22 |
+
|
| 23 |
+
## Required packages
|
| 24 |
+
|
| 25 |
+
```bash
|
| 26 |
+
pip install pandas numpy matplotlib seaborn scikit-learn scipy statsmodels pydeseq2
|
| 27 |
+
```
|
src/statlens/pipelines/deseq2_multi_group_pipeline/run_pipeline.sh
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Count_DESeq2_multi_group pipeline — ≥3 independent groups.
|
| 3 |
+
# Usage: bash run_pipeline.sh [metadata.csv] [counts.csv] [output_dir] [ref_level]
|
| 4 |
+
set -euo pipefail
|
| 5 |
+
METADATA=${1:-metadata.csv}; COUNTS=${2:-counts.csv}; OUTPUT_DIR=${3:-output}; REF_LEVEL=${4:-control}
|
| 6 |
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 7 |
+
|
| 8 |
+
echo "=== Step 1: DESeq2 multi-group ==="
|
| 9 |
+
python "$SCRIPT_DIR/01_deseq2_multi_group_analysis.py" \
|
| 10 |
+
--metadata "$METADATA" --counts "$COUNTS" --ref_level "$REF_LEVEL" --output_dir "$OUTPUT_DIR"
|
| 11 |
+
|
| 12 |
+
R="$OUTPUT_DIR/results.csv"; L="$OUTPUT_DIR/log_normalized_counts.csv"; M="$OUTPUT_DIR/metadata_used_for_analysis.csv"
|
| 13 |
+
echo "=== Step 2: Volcano ===" && python "$SCRIPT_DIR/02_volcano_plot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 14 |
+
echo "=== Step 3: MA ===" && python "$SCRIPT_DIR/03_ma_plot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 15 |
+
echo "=== Step 4: PCA ===" && python "$SCRIPT_DIR/04_pca_plot.py" --log_counts "$L" --metadata "$M" --output_dir "$OUTPUT_DIR"
|
| 16 |
+
echo "=== Step 5: Heatmap ===" && python "$SCRIPT_DIR/05_heatmap_top_de_genes.py" --results "$R" --log_counts "$L" --metadata "$M" --output_dir "$OUTPUT_DIR"
|
| 17 |
+
echo "=== Step 6: Barplot ===" && python "$SCRIPT_DIR/06_top_genes_barplot.py" --results "$R" --output_dir "$OUTPUT_DIR"
|
| 18 |
+
echo "" && echo "Pipeline complete. Outputs: $OUTPUT_DIR"
|
src/statlens/pipelines/deseq2_paired_pipeline/01_deseq2_paired_analysis.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
01_deseq2_paired_analysis.py
|
| 3 |
+
|
| 4 |
+
Count_DESeq2_paired_or_repeated workflow: each individual contributes more than
|
| 5 |
+
one sample (e.g. tumour/normal pairs, pre/post treatment, repeated time points
|
| 6 |
+
from the same patient).
|
| 7 |
+
|
| 8 |
+
Design formula: ~ subject + condition
|
| 9 |
+
|
| 10 |
+
The subject term absorbs between-individual variation; the condition coefficient
|
| 11 |
+
captures the within-individual treatment effect.
|
| 12 |
+
|
| 13 |
+
Requirements:
|
| 14 |
+
- Every subject must appear in at least two conditions.
|
| 15 |
+
- The condition column must still have exactly two levels.
|
| 16 |
+
|
| 17 |
+
Input:
|
| 18 |
+
metadata.csv – samples × annotations; must contain condition and subject columns.
|
| 19 |
+
counts.csv – genes/features × samples; raw non-negative integer counts.
|
| 20 |
+
|
| 21 |
+
Output:
|
| 22 |
+
results.csv
|
| 23 |
+
significant_genes.csv
|
| 24 |
+
normalized_counts.csv
|
| 25 |
+
log_normalized_counts.csv
|
| 26 |
+
metadata_used_for_analysis.csv
|
| 27 |
+
"""
|
| 28 |
+
|
| 29 |
+
import argparse
|
| 30 |
+
import os
|
| 31 |
+
import numpy as np
|
| 32 |
+
import pandas as pd
|
| 33 |
+
from pydeseq2.dds import DeseqDataSet
|
| 34 |
+
from pydeseq2.ds import DeseqStats
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def parse_args():
|
| 38 |
+
parser = argparse.ArgumentParser(description="DESeq2 paired / repeated-measures analysis.")
|
| 39 |
+
parser.add_argument("--metadata", default="metadata.csv")
|
| 40 |
+
parser.add_argument("--counts", default="counts.csv")
|
| 41 |
+
parser.add_argument("--condition_col", default="condition")
|
| 42 |
+
parser.add_argument("--subject_col", default="subject",
|
| 43 |
+
help="Column in metadata identifying each individual/biological unit.")
|
| 44 |
+
parser.add_argument("--ref_level", default="control")
|
| 45 |
+
parser.add_argument("--test_level", default="case")
|
| 46 |
+
parser.add_argument("--min_total_count", type=int, default=10)
|
| 47 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 48 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 49 |
+
parser.add_argument("--output_dir", default=".")
|
| 50 |
+
return parser.parse_args()
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def main():
|
| 54 |
+
args = parse_args()
|
| 55 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 56 |
+
|
| 57 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 58 |
+
counts = pd.read_csv(args.counts, index_col=0)
|
| 59 |
+
|
| 60 |
+
for col in [args.condition_col, args.subject_col]:
|
| 61 |
+
if col not in metadata.columns:
|
| 62 |
+
raise ValueError(f"Metadata must contain column: {col}")
|
| 63 |
+
|
| 64 |
+
shared = metadata.index.intersection(counts.columns)
|
| 65 |
+
if len(shared) == 0:
|
| 66 |
+
raise ValueError("No shared sample IDs between metadata and count matrix.")
|
| 67 |
+
metadata = metadata.loc[shared].copy()
|
| 68 |
+
counts = counts.loc[:, shared].copy()
|
| 69 |
+
|
| 70 |
+
metadata = metadata.dropna(subset=[args.condition_col, args.subject_col])
|
| 71 |
+
counts = counts.loc[:, metadata.index]
|
| 72 |
+
|
| 73 |
+
observed = set(metadata[args.condition_col].astype(str).unique())
|
| 74 |
+
expected = {args.ref_level, args.test_level}
|
| 75 |
+
if observed != expected:
|
| 76 |
+
raise ValueError(f"Requires exactly two condition groups {expected}; observed {observed}.")
|
| 77 |
+
|
| 78 |
+
# Warn if any subject contributes only one condition (will reduce power)
|
| 79 |
+
subject_cond = metadata.groupby(args.subject_col)[args.condition_col].nunique()
|
| 80 |
+
unpaired = subject_cond[subject_cond < 2]
|
| 81 |
+
if len(unpaired) > 0:
|
| 82 |
+
print(f"Warning: {len(unpaired)} subject(s) appear in only one condition: "
|
| 83 |
+
f"{unpaired.index.tolist()}. They are kept but reduce blocking efficiency.")
|
| 84 |
+
print(f"Subjects: {metadata[args.subject_col].nunique()}")
|
| 85 |
+
|
| 86 |
+
if (counts < 0).any().any():
|
| 87 |
+
raise ValueError("Count matrix contains negative values.")
|
| 88 |
+
if not np.all(np.equal(counts.values, np.floor(counts.values))):
|
| 89 |
+
raise ValueError("Counts must be raw integers.")
|
| 90 |
+
counts = counts.astype(int)
|
| 91 |
+
|
| 92 |
+
counts = counts.loc[counts.sum(axis=1) >= args.min_total_count].copy()
|
| 93 |
+
if counts.shape[0] == 0:
|
| 94 |
+
raise ValueError("No genes remain after low-count filtering.")
|
| 95 |
+
print(f"Genes retained after filtering: {counts.shape[0]}")
|
| 96 |
+
|
| 97 |
+
metadata[args.condition_col] = pd.Categorical(
|
| 98 |
+
metadata[args.condition_col],
|
| 99 |
+
categories=[args.ref_level, args.test_level],
|
| 100 |
+
ordered=False,
|
| 101 |
+
)
|
| 102 |
+
|
| 103 |
+
counts_t = counts.T
|
| 104 |
+
metadata = metadata.loc[counts_t.index]
|
| 105 |
+
|
| 106 |
+
# Design: ~ subject + condition
|
| 107 |
+
dds = DeseqDataSet(
|
| 108 |
+
counts=counts_t,
|
| 109 |
+
metadata=metadata,
|
| 110 |
+
design_factors=[args.subject_col, args.condition_col],
|
| 111 |
+
refit_cooks=True,
|
| 112 |
+
)
|
| 113 |
+
dds.deseq2()
|
| 114 |
+
|
| 115 |
+
stat_res = DeseqStats(
|
| 116 |
+
dds,
|
| 117 |
+
contrast=[args.condition_col, args.test_level, args.ref_level],
|
| 118 |
+
alpha=args.padj_cutoff,
|
| 119 |
+
)
|
| 120 |
+
stat_res.summary()
|
| 121 |
+
|
| 122 |
+
coeff = f"{args.condition_col}_{args.test_level}_vs_{args.ref_level}"
|
| 123 |
+
try:
|
| 124 |
+
stat_res.lfc_shrink(coeff=coeff)
|
| 125 |
+
print(f"LFC shrinkage applied (coeff: {coeff}).")
|
| 126 |
+
except Exception as e:
|
| 127 |
+
print(f"Warning: LFC shrinkage failed ({e}). Using unshrunken LFC.")
|
| 128 |
+
|
| 129 |
+
res = stat_res.results_df.copy().sort_values("padj")
|
| 130 |
+
res["significant"] = (res["padj"] < args.padj_cutoff) & (res["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 131 |
+
res["direction"] = "not_significant"
|
| 132 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] > 0), "direction"] = f"up_in_{args.test_level}"
|
| 133 |
+
res.loc[(res["significant"]) & (res["log2FoldChange"] < 0), "direction"] = f"down_in_{args.test_level}"
|
| 134 |
+
|
| 135 |
+
res.to_csv(os.path.join(args.output_dir, "results.csv"))
|
| 136 |
+
res[res["significant"]].to_csv(os.path.join(args.output_dir, "significant_genes.csv"))
|
| 137 |
+
|
| 138 |
+
norm = pd.DataFrame(dds.layers["normed_counts"], index=dds.obs_names, columns=dds.var_names)
|
| 139 |
+
norm.to_csv(os.path.join(args.output_dir, "normalized_counts.csv"))
|
| 140 |
+
np.log2(norm + 1).to_csv(os.path.join(args.output_dir, "log_normalized_counts.csv"))
|
| 141 |
+
metadata.to_csv(os.path.join(args.output_dir, "metadata_used_for_analysis.csv"))
|
| 142 |
+
|
| 143 |
+
print(f"Significant genes: {int(res['significant'].sum())}")
|
| 144 |
+
print("Done.")
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
if __name__ == "__main__":
|
| 148 |
+
main()
|
src/statlens/pipelines/deseq2_paired_pipeline/02_volcano_plot.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a volcano plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create a volcano plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="volcano_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df["safe_padj"] = plot_df["padj"].replace(0, np.nextafter(0, 1))
|
| 27 |
+
plot_df["neg_log10_padj"] = -np.log10(plot_df["safe_padj"])
|
| 28 |
+
plot_df["category"] = "Not significant"
|
| 29 |
+
plot_df.loc[
|
| 30 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] >= args.lfc_cutoff),
|
| 31 |
+
"category",
|
| 32 |
+
] = "Up"
|
| 33 |
+
plot_df.loc[
|
| 34 |
+
(plot_df["padj"] < args.padj_cutoff) & (plot_df["log2FoldChange"] <= -args.lfc_cutoff),
|
| 35 |
+
"category",
|
| 36 |
+
] = "Down"
|
| 37 |
+
|
| 38 |
+
color_map = {"Not significant": "#AAAAAA", "Up": "#D62728", "Down": "#1F77B4"}
|
| 39 |
+
|
| 40 |
+
plt.figure(figsize=(7, 6))
|
| 41 |
+
for cat in ["Not significant", "Up", "Down"]:
|
| 42 |
+
sub = plot_df[plot_df["category"] == cat]
|
| 43 |
+
plt.scatter(
|
| 44 |
+
sub["log2FoldChange"], sub["neg_log10_padj"],
|
| 45 |
+
s=8, alpha=0.6,
|
| 46 |
+
label=f"{cat} (n={len(sub)})",
|
| 47 |
+
color=color_map[cat],
|
| 48 |
+
)
|
| 49 |
+
|
| 50 |
+
plt.axvline(args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 51 |
+
plt.axvline(-args.lfc_cutoff, linestyle="--", linewidth=1, color="black")
|
| 52 |
+
plt.axhline(-np.log10(args.padj_cutoff), linestyle="--", linewidth=1, color="black")
|
| 53 |
+
plt.xlabel("log2 fold change")
|
| 54 |
+
plt.ylabel("-log10 adjusted p-value")
|
| 55 |
+
plt.title("Volcano plot")
|
| 56 |
+
plt.legend(fontsize=8)
|
| 57 |
+
plt.tight_layout()
|
| 58 |
+
|
| 59 |
+
out = os.path.join(args.output_dir, args.output)
|
| 60 |
+
plt.savefig(out, dpi=300)
|
| 61 |
+
plt.close()
|
| 62 |
+
print(f"Saved: {out}")
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
if __name__ == "__main__":
|
| 66 |
+
main()
|
src/statlens/pipelines/deseq2_paired_pipeline/03_ma_plot.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create an MA plot from analysis results."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pandas as pd
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="Create an MA plot from analysis results.")
|
| 12 |
+
parser.add_argument("--results", default="results.csv")
|
| 13 |
+
parser.add_argument("--padj_cutoff", type=float, default=0.05)
|
| 14 |
+
parser.add_argument("--lfc_cutoff", type=float, default=1.0)
|
| 15 |
+
parser.add_argument("--output", default="MA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 25 |
+
plot_df = res.dropna(subset=["baseMean", "log2FoldChange", "padj"]).copy()
|
| 26 |
+
plot_df = plot_df[plot_df["baseMean"] > 0].copy()
|
| 27 |
+
plot_df["significant"] = (
|
| 28 |
+
(plot_df["padj"] < args.padj_cutoff) &
|
| 29 |
+
(plot_df["log2FoldChange"].abs() >= args.lfc_cutoff)
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
plt.figure(figsize=(7, 6))
|
| 33 |
+
nonsig = plot_df[~plot_df["significant"]]
|
| 34 |
+
sig = plot_df[plot_df["significant"]]
|
| 35 |
+
plt.scatter(
|
| 36 |
+
np.log10(nonsig["baseMean"]), nonsig["log2FoldChange"],
|
| 37 |
+
s=8, alpha=0.4, label=f"Not significant (n={len(nonsig)})", color="#AAAAAA",
|
| 38 |
+
)
|
| 39 |
+
plt.scatter(
|
| 40 |
+
np.log10(sig["baseMean"]), sig["log2FoldChange"],
|
| 41 |
+
s=8, alpha=0.8, label=f"Significant (n={len(sig)})", color="#D62728",
|
| 42 |
+
)
|
| 43 |
+
plt.axhline(0, linestyle="--", linewidth=1, color="black")
|
| 44 |
+
plt.xlabel("log10 mean expression")
|
| 45 |
+
plt.ylabel("log2 fold change")
|
| 46 |
+
plt.title("MA plot")
|
| 47 |
+
plt.legend(fontsize=8)
|
| 48 |
+
plt.tight_layout()
|
| 49 |
+
|
| 50 |
+
out = os.path.join(args.output_dir, args.output)
|
| 51 |
+
plt.savefig(out, dpi=300)
|
| 52 |
+
plt.close()
|
| 53 |
+
print(f"Saved: {out}")
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
if __name__ == "__main__":
|
| 57 |
+
main()
|
src/statlens/pipelines/deseq2_paired_pipeline/04_pca_plot.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a PCA plot from log-normalised expression / count data."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import matplotlib.pyplot as plt
|
| 7 |
+
from sklearn.decomposition import PCA
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def parse_args():
|
| 11 |
+
parser = argparse.ArgumentParser(description="PCA plot from log-normalised data.")
|
| 12 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 13 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 14 |
+
parser.add_argument("--condition_col", default="condition")
|
| 15 |
+
parser.add_argument("--output", default="PCA_plot.png")
|
| 16 |
+
parser.add_argument("--output_dir", default=".")
|
| 17 |
+
return parser.parse_args()
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
args = parse_args()
|
| 22 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 25 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 26 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 27 |
+
log_counts = log_counts.loc[shared]
|
| 28 |
+
metadata = metadata.loc[shared]
|
| 29 |
+
|
| 30 |
+
if args.condition_col not in metadata.columns:
|
| 31 |
+
raise ValueError(f"Metadata must contain column: {args.condition_col}")
|
| 32 |
+
|
| 33 |
+
pca = PCA(n_components=2)
|
| 34 |
+
pcs = pca.fit_transform(log_counts)
|
| 35 |
+
pca_df = pd.DataFrame(pcs, index=log_counts.index, columns=["PC1", "PC2"])
|
| 36 |
+
pca_df = pca_df.join(metadata[[args.condition_col]])
|
| 37 |
+
|
| 38 |
+
plt.figure(figsize=(6, 5))
|
| 39 |
+
groups = sorted(pca_df[args.condition_col].astype(str).unique())
|
| 40 |
+
colors = plt.cm.Set1.colors
|
| 41 |
+
for i, grp in enumerate(groups):
|
| 42 |
+
sub = pca_df[pca_df[args.condition_col].astype(str) == grp]
|
| 43 |
+
plt.scatter(sub["PC1"], sub["PC2"], s=60, alpha=0.85,
|
| 44 |
+
label=grp, color=colors[i % len(colors)],
|
| 45 |
+
edgecolors="white", linewidths=0.5)
|
| 46 |
+
|
| 47 |
+
for sample in pca_df.index:
|
| 48 |
+
plt.annotate(sample, (pca_df.loc[sample, "PC1"], pca_df.loc[sample, "PC2"]),
|
| 49 |
+
fontsize=6, alpha=0.7, xytext=(3, 3), textcoords="offset points")
|
| 50 |
+
|
| 51 |
+
plt.xlabel(f"PC1 ({pca.explained_variance_ratio_[0]*100:.1f}%)")
|
| 52 |
+
plt.ylabel(f"PC2 ({pca.explained_variance_ratio_[1]*100:.1f}%)")
|
| 53 |
+
plt.title("PCA")
|
| 54 |
+
plt.legend(title=args.condition_col)
|
| 55 |
+
plt.tight_layout()
|
| 56 |
+
|
| 57 |
+
out = os.path.join(args.output_dir, args.output)
|
| 58 |
+
plt.savefig(out, dpi=300)
|
| 59 |
+
plt.close()
|
| 60 |
+
print(f"Saved: {out}")
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
main()
|
src/statlens/pipelines/deseq2_paired_pipeline/05_heatmap_top_de_genes.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Create a heatmap of the top differentially expressed genes/features."""
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import os
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import seaborn as sns
|
| 7 |
+
import matplotlib.pyplot as plt
|
| 8 |
+
import matplotlib.patches as mpatches
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def parse_args():
|
| 12 |
+
parser = argparse.ArgumentParser(description="Heatmap of top DE genes.")
|
| 13 |
+
parser.add_argument("--results", default="results.csv")
|
| 14 |
+
parser.add_argument("--log_counts", default="log_normalized_counts.csv")
|
| 15 |
+
parser.add_argument("--metadata", default="metadata_used_for_analysis.csv")
|
| 16 |
+
parser.add_argument("--condition_col", default="condition")
|
| 17 |
+
parser.add_argument("--top_n", type=int, default=50)
|
| 18 |
+
parser.add_argument("--output", default="top_DE_genes_heatmap.png")
|
| 19 |
+
parser.add_argument("--output_dir", default=".")
|
| 20 |
+
return parser.parse_args()
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def zscore_by_gene(df):
|
| 24 |
+
means = df.mean(axis=1)
|
| 25 |
+
stds = df.std(axis=1).replace(0, 1)
|
| 26 |
+
return df.sub(means, axis=0).div(stds, axis=0)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def main():
|
| 30 |
+
args = parse_args()
|
| 31 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 32 |
+
|
| 33 |
+
res = pd.read_csv(args.results, index_col=0)
|
| 34 |
+
log_counts = pd.read_csv(args.log_counts, index_col=0)
|
| 35 |
+
metadata = pd.read_csv(args.metadata, index_col=0)
|
| 36 |
+
|
| 37 |
+
# Select top genes: prefer significant ones
|
| 38 |
+
if "significant" in res.columns:
|
| 39 |
+
sig_res = res[res["significant"] == True].dropna(subset=["padj"]).sort_values("padj")
|
| 40 |
+
else:
|
| 41 |
+
sig_res = res.dropna(subset=["padj"]).sort_values("padj")
|
| 42 |
+
|
| 43 |
+
if len(sig_res) >= args.top_n:
|
| 44 |
+
top_genes = sig_res.head(args.top_n).index
|
| 45 |
+
elif len(sig_res) > 0:
|
| 46 |
+
print(f"Only {len(sig_res)} significant features; using all.")
|
| 47 |
+
top_genes = sig_res.index
|
| 48 |
+
else:
|
| 49 |
+
print("No significant features; falling back to top N by padj.")
|
| 50 |
+
top_genes = res.dropna(subset=["padj"]).sort_values("padj").head(args.top_n).index
|
| 51 |
+
|
| 52 |
+
available = [g for g in top_genes if g in log_counts.columns]
|
| 53 |
+
if not available:
|
| 54 |
+
raise ValueError("None of the top features are in log_normalized_counts.csv.")
|
| 55 |
+
|
| 56 |
+
shared = log_counts.index.intersection(metadata.index)
|
| 57 |
+
log_counts = log_counts.loc[shared]
|
| 58 |
+
metadata = metadata.loc[shared]
|
| 59 |
+
|
| 60 |
+
if args.condition_col not in metadata.columns:
|
| 61 |
+
col_colors = None
|
| 62 |
+
legend_patches = []
|
| 63 |
+
else:
|
| 64 |
+
groups = sorted(metadata[args.condition_col].astype(str).unique())
|
| 65 |
+
palette = [plt.cm.Set1.colors[i % 9] for i in range(len(groups))]
|
| 66 |
+
cond_pal = dict(zip(groups, palette))
|
| 67 |
+
col_colors = metadata[args.condition_col].astype(str).map(cond_pal)
|
| 68 |
+
legend_patches = [mpatches.Patch(color=cond_pal[g], label=g) for g in groups]
|
| 69 |
+
|
| 70 |
+
hm = log_counts[available].T
|
| 71 |
+
hm_z = zscore_by_gene(hm)
|
| 72 |
+
|
| 73 |
+
cluster = sns.clustermap(
|
| 74 |
+
hm_z,
|
| 75 |
+
figsize=(max(8, len(shared) * 0.4 + 4), max(10, len(available) * 0.2 + 2)),
|
| 76 |
+
col_cluster=True,
|
| 77 |
+
row_cluster=True,
|
| 78 |
+
col_colors=col_colors,
|
| 79 |
+
xticklabels=True,
|
| 80 |
+
yticklabels=True,
|
| 81 |
+
cmap="vlag",
|
| 82 |
+
)
|
| 83 |
+
plt.setp(cluster.ax_heatmap.get_xticklabels(), rotation=45, ha="right", fontsize=8)
|
| 84 |
+
plt.setp(cluster.ax_heatmap.get_yticklabels(), fontsize=7)
|
| 85 |
+
|
| 86 |
+
if legend_patches:
|
| 87 |
+
cluster.ax_heatmap.legend(
|
| 88 |
+
handles=legend_patches, title=args.condition_col,
|
| 89 |
+
loc="upper right", bbox_to_anchor=(1.25, 1.1), fontsize=8,
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
cluster.fig.suptitle(f"Top {len(available)} DE features", y=1.02)
|
| 93 |
+
|
| 94 |
+
out = os.path.join(args.output_dir, args.output)
|
| 95 |
+
cluster.savefig(out, dpi=300, bbox_inches="tight")
|
| 96 |
+
plt.close(cluster.fig)
|
| 97 |
+
print(f"Saved: {out}")
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
if __name__ == "__main__":
|
| 101 |
+
main()
|