Quantify intermediate stability with respect to a given reference point.
getStability(x, ...)
addStability(x, ...)
# S4 method for class 'SummarizedExperiment'
addStability(x, time.col, name = "stability", ...)
# S4 method for class 'SummarizedExperiment'
getStability(
x,
time.col,
assay.type = "counts",
reference = NULL,
group = NULL,
...
)
A
SummarizedExperiment
object.
additional arguments.
time.interval
: Integer scalar
. Indicates the increment
between time steps. By default, the function compares each sample to the
previous one. If you need to take every second, every third, or so, time
step, then increase this accordingly. (Default: 1L
)
calc.separately
: Logical scalar
. Specifies whether to
calculate stability separately for data points with abundance below or
at/above the reference point. (Defaul: FALSE
)
mode
: Character scalar
. Specifies whether to calculate
stability using correlation ("correlation") or a linear model ("lm").
(Default: "correlation"
)
Character scalar
. Specifies a name of the column from
colData
that identifies the sampling time points for the samples.
Character scalar
. Specifies a column name for storing
stability results. (Default: "stability"
)
Character scalar
. Specifies which assay values are
used in the dissimilarity estimation. (Default: "counts"
)
Character scalar
. Specifies a column from
rowData(x)
that determines the reference points. If NULL
,
the default reference is used. (Default: NULL
)
Character scalar
. Specifies a name of the column from
colData
that identifies the grouping of the samples.
(Default: NULL
)
getStability
returns DataFrame
while addStability
returns results added to its rowData(x)
.
These methods estimate intermediate stability described in Lahti et al. 2014. The method is heuristic and makes many simplifying assumptions. However, the stability estimation can be useful for exploration, and can provide a baseline for more advanced measures.
The stability is calculated by first defining reference point, \(R_{f}\),
for each feature. User can define the reference points with reference
.
If reference points are not defined, they are calculated by taking median
$$R_{f} = median(x_{f})$$
where \(f\) denotes a single feature and \(x\) abundance.
Then difference between consecutive time points, \(\Delta_{f, x}\),
$$\Delta_{f, x} = ∣x_{f, t} - x_{f, t-1}∣$$
and difference between the previous time point and reference, \(\Delta_{f. R}\), are calculated:
$$\Delta_{f. R} = ∣x_{f, t-1} - R_{f}∣$$
where \(t\) denotes time point.
Optionally, time difference \(\Delta_{f, t}\) is calculated
$$\Delta_{f, t} = t_{f, t-1} - t_{f, t-1}$$
The stability coefficient \(s_{f}\) is calculated with correlation
$$s_{f} = corr(\Delta_{f, x}, \Delta_{f, R})$$
or with linear model as follows
$$s_{f} = \frac{ \Delta_{f, x} - \beta_{0} - \beta_{2}*\Delta_{f, t} - \epsilon_{f} }{ \Delta_{f, R} }$$
Lahti L, et al. (2014) Tipping elements in the human intestinal ecosystem. Nat Commun. doi: 10.1038/ncomms5344
library(miaTime)
# Load time series data
data(minimalgut)
tse <- minimalgut
# Apply clr transformation
tse <- transformAssay(tse, method = "rclr")
# Calculate stability single system
tse_sub <- tse[, tse[["StudyIdentifier"]] == "Bioreactor A"]
tse_sub <- addStability(tse_sub, assay.type = "rclr", time.col = "Time.hr")
rowData(tse_sub)
#> DataFrame with 16 rows and 8 columns
#> Kingdom Phylum Class
#> <character> <character> <character>
#> Akkermansia_muciniphila Bacteria Verrucomicrobia Verrucomicrobiae
#> Bacteroides_xylanisolvens Bacteria Bacteroidetes Bacteroidia
#> Faecalibacterium_prausnitzii Bacteria Firmicutes Clostridia
#> Anaerobutyricum_soehngenii Bacteria Firmicutes Clostridia
#> Subdoligranulum_variabile Bacteria Firmicutes Clostridia
#> ... ... ... ...
#> Roseburia_intestinalis Bacteria Firmicutes Clostridia
#> Coprococcus_catus Bacteria Firmicutes Clostridia
#> Blautia_obeum Bacteria Firmicutes Clostridia
#> Ruminococcus_bromii Bacteria Firmicutes Clostridia
#> Collinsella_aerofaciens Bacteria Actinobacteria Actinobacteria
#> Order Family
#> <character> <character>
#> Akkermansia_muciniphila Verrucomicrobiales Verrucomicrobiaceae
#> Bacteroides_xylanisolvens Bacteroidales Bacteroidaceae
#> Faecalibacterium_prausnitzii Clostridiales Ruminococcaceae
#> Anaerobutyricum_soehngenii Clostridiales Eubacteriaceae
#> Subdoligranulum_variabile Clostridiales Ruminococcaceae
#> ... ... ...
#> Roseburia_intestinalis Clostridiales Lachnospiraceae
#> Coprococcus_catus Clostridiales Lachnospiraceae
#> Blautia_obeum Clostridiales Ruminococcaceae
#> Ruminococcus_bromii Clostridiales Ruminococcaceae
#> Collinsella_aerofaciens Coriobacteriales Coriobacteriaceae
#> Genus Species stability
#> <character> <character> <numeric>
#> Akkermansia_muciniphila Akkermansia Akkermansia_muciniph.. 0.210974
#> Bacteroides_xylanisolvens Bacteroides Bacteroides_xylaniso.. 0.271798
#> Faecalibacterium_prausnitzii Faecalibacterium Faecalibacterium_pra.. 0.541675
#> Anaerobutyricum_soehngenii Anaerobutyricum Anaerobutyricum_soeh.. 0.351807
#> Subdoligranulum_variabile Subdoligranulum Subdoligranulum_vari.. 0.216796
#> ... ... ... ...
#> Roseburia_intestinalis Roseburia Roseburia_intestinalis 0.1557061
#> Coprococcus_catus Coprococcus Coprococcus_catus 0.2932463
#> Blautia_obeum Blautia Blautia_obeum 0.0853636
#> Ruminococcus_bromii Ruminococcus Ruminococcus_bromii 0.1707766
#> Collinsella_aerofaciens Collinsella Collinsella_aerofaci.. 0.4199917
# Add custom reference values
rowData(tse)[["ref_col"]] <- 1
# Calculate stability for each system simultaneously by taking time
# difference into account
tse <- addStability(
tse, assay.type = "rclr", time.col = "Time.hr",
group = "StudyIdentifier", ref_col = "ref_col", mode = "lm")
rowData(tse)
#> DataFrame with 16 rows and 11 columns
#> Kingdom Phylum Class
#> <character> <character> <character>
#> Akkermansia_muciniphila Bacteria Verrucomicrobia Verrucomicrobiae
#> Bacteroides_xylanisolvens Bacteria Bacteroidetes Bacteroidia
#> Faecalibacterium_prausnitzii Bacteria Firmicutes Clostridia
#> Anaerobutyricum_soehngenii Bacteria Firmicutes Clostridia
#> Subdoligranulum_variabile Bacteria Firmicutes Clostridia
#> ... ... ... ...
#> Roseburia_intestinalis Bacteria Firmicutes Clostridia
#> Coprococcus_catus Bacteria Firmicutes Clostridia
#> Blautia_obeum Bacteria Firmicutes Clostridia
#> Ruminococcus_bromii Bacteria Firmicutes Clostridia
#> Collinsella_aerofaciens Bacteria Actinobacteria Actinobacteria
#> Order Family
#> <character> <character>
#> Akkermansia_muciniphila Verrucomicrobiales Verrucomicrobiaceae
#> Bacteroides_xylanisolvens Bacteroidales Bacteroidaceae
#> Faecalibacterium_prausnitzii Clostridiales Ruminococcaceae
#> Anaerobutyricum_soehngenii Clostridiales Eubacteriaceae
#> Subdoligranulum_variabile Clostridiales Ruminococcaceae
#> ... ... ...
#> Roseburia_intestinalis Clostridiales Lachnospiraceae
#> Coprococcus_catus Clostridiales Lachnospiraceae
#> Blautia_obeum Clostridiales Ruminococcaceae
#> Ruminococcus_bromii Clostridiales Ruminococcaceae
#> Collinsella_aerofaciens Coriobacteriales Coriobacteriaceae
#> Genus Species ref_col
#> <character> <character> <numeric>
#> Akkermansia_muciniphila Akkermansia Akkermansia_muciniph.. 1
#> Bacteroides_xylanisolvens Bacteroides Bacteroides_xylaniso.. 1
#> Faecalibacterium_prausnitzii Faecalibacterium Faecalibacterium_pra.. 1
#> Anaerobutyricum_soehngenii Anaerobutyricum Anaerobutyricum_soeh.. 1
#> Subdoligranulum_variabile Subdoligranulum Subdoligranulum_vari.. 1
#> ... ... ... ...
#> Roseburia_intestinalis Roseburia Roseburia_intestinalis 1
#> Coprococcus_catus Coprococcus Coprococcus_catus 1
#> Blautia_obeum Blautia Blautia_obeum 1
#> Ruminococcus_bromii Ruminococcus Ruminococcus_bromii 1
#> Collinsella_aerofaciens Collinsella Collinsella_aerofaci.. 1
#> stability_Bioreactor A stability_Bioreactor B
#> <numeric> <numeric>
#> Akkermansia_muciniphila 0.2671427 0.5479229
#> Bacteroides_xylanisolvens 0.2728461 0.5080847
#> Faecalibacterium_prausnitzii 0.3235416 0.4426659
#> Anaerobutyricum_soehngenii 0.2696693 0.1627811
#> Subdoligranulum_variabile 0.0993302 0.0676437
#> ... ... ...
#> Roseburia_intestinalis 0.1469217 0.336963
#> Coprococcus_catus 0.1941561 0.345858
#> Blautia_obeum 0.0462427 -0.123109
#> Ruminococcus_bromii 0.1852228 0.104678
#> Collinsella_aerofaciens 0.4211536 0.495969
#> stability_Bioreactor C
#> <numeric>
#> Akkermansia_muciniphila 0.4531121
#> Bacteroides_xylanisolvens 0.3579722
#> Faecalibacterium_prausnitzii 0.3261063
#> Anaerobutyricum_soehngenii 0.0468848
#> Subdoligranulum_variabile 0.0792569
#> ... ...
#> Roseburia_intestinalis 0.4889192
#> Coprococcus_catus 0.1413676
#> Blautia_obeum 0.2641749
#> Ruminococcus_bromii 0.0757622
#> Collinsella_aerofaciens 0.8230176