-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add interval logic for l2g features #812
base: dev
Are you sure you want to change the base?
Conversation
# feature will be the same for any gene associated with a studyLocus) | ||
local_max.withColumn( | ||
"regional_maximum", | ||
f.max(local_feature_name).over(Window.partitionBy("studyLocusId")), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is it maximum? According to the table and what we discussed it should be mean?
https://docs.google.com/spreadsheets/d/1wUs1AprRCCGItZmgDhc1fF5BtwCSosdzFv4NQ8V6Dtg/edit?gid=452826388#gid=452826388
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the changes Jack!!!
The logic to build the features looks good! Please see my comments, but they are more along the lines of how we process the interval data in the L2G step.
I suggested processing all interval sources to make the process simpler, but since the code is accommodated to take source names and paths individually and changing it is a mess, it's also fine to leave it like that as long as the interval_paths parameter is correctly configured.
The implemented changes wouldn't run, because of the creation of a Interval dataset with a mismatching schema. I would encourage you to:
- add any features you add to the
test_l2g_feature_matrix.py
suite, to make sure that the code doesnt crash - In the same file, add a semantic test for the common logic
- Update the documentation pages
- Pull dev branch to bring the changes to the feature matrix step
…1_l2g_intervals
…1_l2g_intervals
…d test for interval features
…1_l2g_intervals
…1_l2g_intervals
…1_l2g_intervals
…1_l2g_intervals
…1_l2g_intervals
We have investigated the Intervals-only V2G dataset, the problem is that one variant can contain interval information from multiple genes (up to 200) from one interval source, in addition, the Interval-only V2G dataset is too big, and can potentially be 4x the size of the variant index. Therefore, it is not feasible to include interval data inside the variant index, instead, the "processed interval" dataset (requires gene index), will be generated each release, and the feature generation step will intersect variants found within studyLocus to the "processed interval" using an overlap approach to generate the scores needed for the interval features. |
…1_l2g_intervals
…ntropy into xg1_l2g_intervals
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for your additions! It looks like the code is not yet ready so please look at my comments.
In general, I think that before integrating anything into dev, we should retrain the model and make a more informed decision about what and how we want to add it.
Like, it's a naive q, but is there a way to aggregate this data so that the feature represents if the credible set is part of any regulatory region that we know is physically close to the gene? As opposed to having separate features per source.
Based on the code, I guess you have agreed that Intervals will be written to disk and then the features will be extracted in the FM generation.
Correct me if I'm wrong, but based on your comment (#812 (comment)) the heavy part of processing interval data is not so much parsing the raw data, but getting the V2G relationships because of the high data volume. Have you considered doing the Interval parsing as part of the FM generation step?
In essence, I'd like to see the impact of these features before making a decision
processed_interval_path: str, | ||
liftover_max_length_difference: int = 100, | ||
) -> None: | ||
"""Run Variant-to-gene (V2G) step. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
update
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please write the name of the module in lower case
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The step in in gentropy
s source root. Datasource is the folder where we store data parsers
|
||
gene_index_path: str = MISSING | ||
liftover_chain_file_path: str = MISSING | ||
max_distance: int = 250_000 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not 500kb?
# intervals | ||
"pchicMean", | ||
"pchicMeanNeighbourhood", | ||
"enhTssCorrelationMean", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like more readable feature names to pick up what they represent easily
"pchicMean", | ||
"pchicMeanNeighbourhood", | ||
"enhTssCorrelationMean", | ||
"enhTssCorrelationMeanNeighbourhood", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like more readable feature names to pick up what they represent easily
class EnhTssCorrelationMeanFeature(L2GFeature): | ||
"""Average weighted Enhancer-TSS correlation between studylocus and gene TSS.""" | ||
|
||
fill_na_value = 0 # would be 0 if implemented |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same as above
class DhsPmtrCorrelationMeanFeature(L2GFeature): | ||
"""Average weighted DHS-promoter correlation between studylocus and gene TSS.""" | ||
|
||
fill_na_value = 0 # would be 0 if implemented |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same as above
Compared to the Mean weighted DHS-promoter correlation for all genes in the vicinity. | ||
""" | ||
|
||
fill_na_value = 0 # would be 0 if implemented |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same as above
@@ -33,7 +35,7 @@ def __init__( | |||
self, | |||
session: Session, | |||
*, | |||
features_list: list[str], | |||
features_list: list[str] = LocusToGeneFeatureMatrixConfig().features_list, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instantiating LocusToGeneFeatureMatrixConfig
will call the session class by default. We tend to avoid calling step configs
{ | ||
"metadata": {}, | ||
"name": "geneId", | ||
"nullable": false, | ||
"nullable": true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why nullable?
✨ Context
Adding interval based features to the l2g model, based on the feature list (opentargets/issues#3521).
opentargets/issues#3512
🛠 What does this PR implement
🙈 Missing
More features from anderson + thurman.
🚦 Before submitting
dev
branch?make test
)?poetry run pre-commit run --all-files
)?