ImmuneDynamics / Spectre

A computational toolkit in R for the integration, exploration, and analysis of high-dimensional single-cell cytometry and imaging data.
https://immunedynamics.github.io/spectre/
MIT License
56 stars 21 forks source link

Is skipping data transformation for channel values in Spectre workflow only is specific to the Spectre workflow? #150

Closed denvercal1234GitHub closed 3 months ago

denvercal1234GitHub commented 1 year ago

Hi there,

Thanks for the package.

[1] According to issue #121, Spectre::read.files() is a wrapper around flowCore::read.flowSet or flowCore::read.FCS.

[2] From the discussion here (https://github.com/RGLab/flowCore/issues/245), flowCore read functions apply a separate transformation that is independent (on top of) the transformation that is applied by FlowJo.

[3] From https://github.com/saeyslab/PeacoQC/issues/14, "If you already unmixed and did an arcsinh transformation in the Spectre package, you do not need to repeat this and can just skip these steps before doing PeacoQC".

Thus, since Spectre tutorial advises that we should skip arsinh transformation if we input into Spectre the channel values exported from FlowJo. I thus interpreted this advice to mean that the channel values exported from FlowJo are already arsinh transformed data.

QUESTION 1. As a result, if a package requires the data to be transformed, should I skip data transformation (e.g., flowCore::transform()) once I converted the channel values into FCS files using Spectre::write.files() as done in #149? Or, the advice to skip data transformation for channel values in Spectre workflow only is specific to the Spectre workflow?

QUESTION 2. How to check whether the FCS files saved as data.table have been transformed or not in R?

Thank you for your help.

SamGG commented 1 year ago

IMHO Q1: you should address this question to Spectre developers. Q2: if the maximum of a channel is lower than let's say 10, the channel is probably transformed. HTH

tomashhurst commented 1 year ago

Hi @denvercal1234GitHub

QUESTION 1. As a result, if a package requires the data to be transformed, should I skip data transformation (e.g., flowCore::transform()) once I converted the channel values into FCS files using Spectre::write.files() as done in https://github.com/ImmuneDynamics/Spectre/issues/149? Or, the advice to skip data transformation for channel values in Spectre workflow only is specific to the Spectre workflow?

If you are working with channel values (exported from FlowJo) these are transformed already, so you won't need to do any further transformations in other packages.

QUESTION 2. How to check whether the FCS files saved as data.table have been transformed or not in R?

Have a look at the values -- channel values will range between a min of 0 and a max of 1024 (most values will likely be between 200 and 1000. If the values range from 0 (or indeed less than 0) up to say 2x10^5 (e.g. BD LSRII) or 2x10^6 (Cytek Aurora) then these are likely to be untransformed. If the values are between 0 and 5 or 6, these are likely arcsinh transformed values.