{"id":22377270,"url":"https://github.com/csbiology/tmea","last_synced_at":"2025-07-30T23:32:04.991Z","repository":{"id":46656609,"uuid":"287800059","full_name":"CSBiology/TMEA","owner":"CSBiology","description":"Thermodynamically Motivated Enrichment Analysis (TMEA) is a new approach to gene set enrichment analysis.","archived":false,"fork":false,"pushed_at":"2023-01-03T11:57:25.000Z","size":11097,"stargazers_count":8,"open_issues_count":8,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-19T15:45:53.035Z","etag":null,"topics":["bioinformatics","biostatistics","deedle","enrichment-score","f-sharp","genes","gsea","plotly"],"latest_commit_sha":null,"homepage":"https://www.mdpi.com/1099-4300/22/9/1030","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CSBiology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-15T18:09:12.000Z","updated_at":"2024-01-17T21:37:31.000Z","dependencies_parsed_at":"2023-02-01T06:01:10.098Z","dependency_job_id":null,"html_url":"https://github.com/CSBiology/TMEA","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/CSBiology/TMEA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSBiology%2FTMEA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSBiology%2FTMEA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSBiology%2FTMEA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSBiology%2FTMEA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CSBiology","download_url":"https://codeload.github.com/CSBiology/TMEA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSBiology%2FTMEA/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267960696,"owners_count":24172506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","biostatistics","deedle","enrichment-score","f-sharp","genes","gsea","plotly"],"created_at":"2024-12-04T22:13:26.494Z","updated_at":"2025-07-30T23:32:03.112Z","avatar_url":"https://github.com/CSBiology.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://img.shields.io/nuget/v/TMEA)](https://www.nuget.org/packages/TMEA)\n[![](https://img.shields.io/badge/DOI-10.3390%2Fe22091030-brightgreen)](https://doi.org/10.3390/e22091030)\n\nThis repository is home of the framework TMEA (**T**hermodynamically **M**otivated **E**nrichment **A**nalysis), which we created from the scripts we used in our 2020 [Entropy paper]( https://doi.org/10.3390/e22091030)\n\nFind the authors on github: [Kevin Schneider](https://github.com/kMutagene) (1), [Benedikt Venn](https://github.com/bvenn) (1), [Timo Mühlhaus](https://github.com/muehlhaus)\n\n- (1) : These authors contributed **equally**.\n\nIf you use this package in your research, please cite it. Citation formats are available at the [original article page](https://www.mdpi.com/1099-4300/22/9/1030#cite)\n\nalternatively, here is an example citation:\n\n\u003e Schneider K, Venn B, Mühlhaus T. TMEA: A Thermodynamically Motivated Framework for Functional Characterization of Biological Responses to System Acclimation. Entropy. 2020; 22(9):1030.\n\n_This package is in an early beta stage, there may be bugs. Issues and PRs are greatly appreciated!_ \n\n\u003c!-- TOC --\u003e\n\n- [Introduction](#introduction)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Plots](#plots)\n    - [Functionally Annotated Set (FAS) weight distributions](#functionally-annotated-set-fas-weight-distributions)\n    - [Potential Time Course:](#potential-time-course)\n    - [Free Energy Landscape:](#free-energy-landscape)\n    - [Constraint importance:](#constraint-importance)\n    - [Data recovery:](#data-recovery)\n- [TMEA.Dash](#tmeadash)\n    - [Usage](#usage-1)\n- [License acknowlegments](#license-acknowlegments)\n\n\u003c!-- /TOC --\u003e\n\n## Introduction\n\nThe objective of gene set enrichment analysis (GSEA) in modern biological studies is to identify functional \nprofiles in huge sets of biomolecules generated by high throughput measurements of genes, transcripts, metabolites, \nand proteins. GSEA is based on a two-stage process using classical statistical analysis to score the input data and \nsubsequent testing for overrepresentation of the enrichment score within a given functional coherent set. \nHowever, enrichment scores computed by different methods are merely statistically motivated and often elusive to \ndirect biological interpretation. \n\nHere, we propose a novel approach, called Thermodynamically Motivated Enrichment Analysis (TMEA), to account for the \nenergy investment in biological relevant processes. Therefore, TMEA is based on surprisal analysis, that offers a \nthermodynamic-free energy-based representation of the biological steady state and of the biological change. \nThe contribution of each biomolecule underlying the changes in free energy is used in a Monte Carlo resampling \nprocedure resulting in a functional characterization directly coupled to the thermodynamic characterization of \nbiological responses to system perturbations.\n\n![](./docsrc/img/GraphicalAbstract.png)\n\n## Installation\n\nFor instructions on how to install F#, please head [here(Windows)](https://fsharp.org/use/windows/) , [here(MAC)](https://fsharp.org/use/mac/) or [here(Linux)](https://fsharp.org/use/linux/)\n\nthe package itself is available on nuget: https://www.nuget.org/packages/TMEA\n\nalternatively, clone this repo and run `fake.cmd` or `fake.sh` (requires dotnet sdk \u003e= 3.1.302)\n\n\n## Usage\n\n1. Include the lapack folder to your PATH variable, either for the fsi session or on your systems level. The folder is located in the nuget package under `./Netlib_LAPACK`\n\n2. Reference this library and its dependencies.\n\n3. We strongly recommend to register fsi printers for Deedle, the dataframe library we use in this project. There is a `Deedle.fsx` file located in the Deedle nuget package which will take care of that if you `#load` it.\n\n4. A simple pipeline to perform TMEA on time series data looks like this:\n\n    ```F#\n    open TMEA\n    open TMEA.SurprisalAnalysis\n    open TMEA.MonteCarlo\n    open TMEA.Frames\n    open TMEA.Plots\n\n    let annotationMap : Map\u003cstring,string[]\u003e = ... // We assume you have ontology annotations for your dataset\n\n    let tmeaRes = \n        IO.readDataFrame \n            \"TranscriptIdentifier\" // The column of the data table that contains your entity identifiers\n            \"\\t\" // separator for the input file\n            \"path/to/your/raw/data.txt\"\n        |\u003e Analysis.computeOfDataFrame \n            Analysis.standardTMEAParameters //using custom parameters you can change verbosity, bootstrap iterations, and the annotation used for unannotated entities\n            annotationMap\n    ```\n\n## Plots\n\nAll plot functions have a `generate*` analog, which generates the Chart object without rendering it (in case you want to fine tune styles etc.).\nCurrently, the following plots are provided by the package:\n\nAll charting functions are extension methods of the `TMEAResult` type. Given the example script above, you can visualize the results as:\n\n### Functionally Annotated Set (FAS) weight distributions\n\n - `plotFASWeightDistribution` is an exploratory plot that visualizes the overall weight distributions of the given TMEA Characterizations, and adds detailed weight distributions of the FAS of interest on top of that. additionally, annotations on the respective subplots show useful information about the FAS characterization.\n\n    ```F#\n    tmeaRes\n    |\u003e TMEAResult.plotFASWeightDistribution \n        true //use style presets\n        0.05 //significance threshold for (corrected!) p values\n        [1;2;3] //constraints to plot\n        \"signalling.light\" //name of the FAS\n    ```\n\n    ![](./docsrc/img/FASWeightDist.png)\n\n### Potential Time Course:\n\n - `plotConstraintTimecourses` plots the constraint potential time courses of the given TMEA result:\n\n    ```F#\n    tmeaRes\n    |\u003e TMEAResult.plotConstraintTimecourses true //true -\u003e will use style presets\n    ```\n\n    ![](./docsrc/img/cpTimeCourse.png)\n\n - `plotPotentialHeatmap` is a more visually pleasing version of above plot (it omits the baseline state per default):\n\n    ```F#\n    tmeaRes\n    |\u003e TMEAResult.plotPotentialHeatmap true\n    ```\n\n    ![](./docsrc/img/cpHeatmap.png)\n\n### Free Energy Landscape:\n\n - `plotFreeEnergyLandscape` plots the free energy landscape of the TMEA result:\n\n    ```\n    tmeaRes\n    |\u003e TMEAResult.plotFreeEnergyLandscape true\n    ```\n\n    ![](./docsrc/img/EnergyLandscape.png)\n\n### Constraint importance:\n\n - `plotConstraintImportance`: given the TMEA result, plots the singular values of all constraints (except the baseline state) and the 'importance loss' between them. \n\n    ```\n    tmeaRes\n    |\u003e TMEAResult.plotConstraintImportance true\n    ```\n\n    ![](./docsrc/img/ConstraintImportance.png)\n\n### Data recovery:\n\n - `plotDataRecovery`: given the TMEA result, plots the gradual reconstruction of the original data when using only n (in the example below, n = 3) constraints from the given TMEA result:\n\n    ```\n    tmeaRes\n    |\u003e TMEAResult.plotDataRecovery true 3 \n    ```\n\n    ![](./docsrc/img/DataRecovery.png)\n\n## TMEA.Dash\n\nTMEA.Dash is a guided analytics application for TMEA using [Dash.NET](https://www.github.com/plotly/Dash.NET). \n\n### Usage\n\n- Clone this repository\n\n- install dotnet sdk \u003e= 3.1.302\n\n- in a shell, navigate to `src/TMEA.Dash`\n\n- use `dotnet run` to start the application. Open a browser and head to https://localhost:5001/\n\n- you should see the following interface:\n\n![](./docsrc/img/dashapp.png)\n\n## License acknowlegments\n\nThis library contains [Netlib LAPACK](http://www.netlib.org/lapack/) binaries compiled from source, thanks to all the authors of it:\n    \n    Anderson, E. and Bai, Z. and Bischof, C. and Blackford, S. and Demmel, J. and Dongarra, J. and\n    Du Croz, J. and Greenbaum, A. and Hammarling, S. and McKenney, A. and Sorensen, D.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsbiology%2Ftmea","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcsbiology%2Ftmea","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsbiology%2Ftmea/lists"}