library(awst)
library(SummarizedExperiment)
library(EDASeq)
# Load data (e.g., SummarizedExperiment)
data(airway, package = "airway")
# Filter lowly expressed genes
filter <- rowMeans(assay(airway)) >= 10
se <- airway[filter,]
# Apply Asymmetric Within-Sample Transformation
se <- awst(se)
# Filter uninformative genes using entropy
filtered <- gene_filter(se)
# Optional: Apply AWST after full-quantile normalization
assay(se, "fq") <- betweenLaneNormalization(assay(se), which = "full")
se_normalized <- awst(se, expr_values = "fq")
Input/Output Note: Inputs a SummarizedExperiment containing raw RNA-seq counts; outputs a SummarizedExperiment with transformed values in the "awst" assay and optionally filtered features.
When to Use
To regularize RNA-seq read counts and reduce the effect of noise on sample clustering or classification, especially for highly degraded or low input material samples like tumors or single cells.
To perform per-sample standardization and asymmetric winsorization using awst() to reduce the influence of highly expressed features and noise of lowly expressed features.
To filter out uninformative genes that contribute only noise to sample distances using the entropy-based gene_filter() function.
When NOT to Use
For differential expression analysis where raw or specifically modeled counts are required (use DESeq2 or edgeR instead).
For multi-sample batch effect correction across highly heterogeneous batches without prior normalization (use sva::ComBat or removeBatchEffect from limma instead).
Data Requirements
Input must be a SummarizedExperiment object (or a matrix of counts).
Contains raw or normalized RNA-seq read counts (e.g., from airway dataset).
Lowly expressed genes should be pre-filtered (e.g., keeping genes with rowMeans(assay(se)) >= 10).
Key Parameters
expr_values ("counts"): Character string specifying which assay of the input SummarizedExperiment to use for the transformation (e.g., "fq" after running betweenLaneNormalization).
Best Practices
Pre-filter non-expressed or lowly expressed genes (e.g., average count < 10) before applying AWST to reduce computational load and noise.
Apply a prior normalization step, such as full-quantile normalization via betweenLaneNormalization(), which allows awst() to estimate parameters only once for all samples.
Use gene_filter() after awst() to remove uninformative genes and improve sample separation in downstream analyses like PCA (prcomp()).
Common Pitfalls
Pitfall: Running awst() on log-transformed data. Fix: Ensure the input assay contains non-log-transformed counts, as awst() internally exploits the log-normal probability distribution.
Pitfall: Retaining too many uninformative genes which dilutes the biological signal in PCA. Fix: Run gene_filter() on the transformed object to retain only genes contributing to sample distance.
Alternatives
DESeq2 for variance stabilizing transformation (VST) or rlog.
edgeR for calculating CPM/RPKM or TMM normalization.
scater / scran for single-cell specific normalization and pooling.
Citations
Risso D, Pagnotta SM (2021). "Per-sample standardization and asymmetric winsorization lead to accurate clustering of RNA-seq expression profiles." Bioinformatics. doi:10.1093/bioinformatics/btab091.
1---2name: awst3description: awst4---56# awst78## Workflows910### Standard Workflow1112```r13library(awst)14library(SummarizedExperiment)15library(EDASeq)1617# Load data (e.g., SummarizedExperiment)18data(airway, package = "airway")1920# Filter lowly expressed genes21filter <- rowMeans(assay(airway)) >= 1022se <- airway[filter,]2324# Apply Asymmetric Within-Sample Transformation25se <- awst(se)2627# Filter uninformative genes using entropy28filtered <- gene_filter(se)2930# Optional: Apply AWST after full-quantile normalization31assay(se, "fq") <- betweenLaneNormalization(assay(se), which = "full")32se_normalized <- awst(se, expr_values = "fq")33```34**Input/Output Note:** Inputs a `SummarizedExperiment` containing raw RNA-seq counts; outputs a `SummarizedExperiment` with transformed values in the `"awst"` assay and optionally filtered features.3536## When to Use37- To regularize RNA-seq read counts and reduce the effect of noise on sample clustering or classification, especially for highly degraded or low input material samples like tumors or single cells.38- To perform per-sample standardization and asymmetric winsorization using `awst()` to reduce the influence of highly expressed features and noise of lowly expressed features.39- To filter out uninformative genes that contribute only noise to sample distances using the entropy-based `gene_filter()` function.4041## When NOT to Use42- For differential expression analysis where raw or specifically modeled counts are required (use `DESeq2` or `edgeR` instead).43- For multi-sample batch effect correction across highly heterogeneous batches without prior normalization (use `sva::ComBat` or `removeBatchEffect` from `limma` instead).4445## Data Requirements46- Input must be a `SummarizedExperiment` object (or a matrix of counts).47- Contains raw or normalized RNA-seq read counts (e.g., from `airway` dataset).48- Lowly expressed genes should be pre-filtered (e.g., keeping genes with `rowMeans(assay(se)) >= 10`).4950## Key Parameters51- **expr_values** ("counts"): Character string specifying which assay of the input `SummarizedExperiment` to use for the transformation (e.g., `"fq"` after running `betweenLaneNormalization`).5253## Best Practices54- Pre-filter non-expressed or lowly expressed genes (e.g., average count < 10) before applying AWST to reduce computational load and noise.55- Apply a prior normalization step, such as full-quantile normalization via `betweenLaneNormalization()`, which allows `awst()` to estimate parameters only once for all samples.56- Use `gene_filter()` after `awst()` to remove uninformative genes and improve sample separation in downstream analyses like PCA (`prcomp()`).5758## Common Pitfalls59- *Pitfall*: Running `awst()` on log-transformed data. *Fix*: Ensure the input assay contains non-log-transformed counts, as `awst()` internally exploits the log-normal probability distribution.60- *Pitfall*: Retaining too many uninformative genes which dilutes the biological signal in PCA. *Fix*: Run `gene_filter()` on the transformed object to retain only genes contributing to sample distance.6162## Alternatives63- `DESeq2` for variance stabilizing transformation (VST) or rlog.64- `edgeR` for calculating CPM/RPKM or TMM normalization.65- `scater` / `scran` for single-cell specific normalization and pooling.6667## Citations68- Risso D, Pagnotta SM (2021). "Per-sample standardization and asymmetric winsorization lead to accurate clustering of RNA-seq expression profiles." *Bioinformatics*. doi:10.1093/bioinformatics/btab091.6970## References71- Homepage: https://bioconductor.org/packages/awst72- Vignette: https://bioconductor.org/packages/release/bioc/vignettes/awst/inst/doc/awst_intro.html
Run npx skillmds@latest add biomate-ai/awst in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
awst It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
biomate-ai (@biomate-ai) published this skill. Their other Agent Skills are listed on their SkillMD profile.