Assessing engraftment extent with q2-FMT#
When investigating FMTs, it is really important to understand the extent to which the recipient microbiome engrafted the donated microbiome. Without assessing engraftment extent, we can never fully understand the clinical outcomes of the study Fig. 3.
Fig. 3 Created with BioRender.#
Herman et al. (2024) [HBB+24] defines three criteria that are important for understanding if a microbiome engrafted following FMT. These are:
Chimeric Asymmetric Community Coalescence
Donated Microbiome Indicator Features
Temporal Stability.
q2-fmt was designed to help you investigate all three of these criteria. q2-fmt is a QIIME 2 plugin that was designed to help you investigate all three of these criteria.
Chimeric Asymmetric Community Coalescence#
In this tutorial, we will be investigating the first criterion: Chimeric Asymmetric Community Coalescence.
We’ll assess the distance to donor (using Jaccard distance) to see how the recipient’s distance to their donor sample changes following the FMT. Before continuing, think about what you might expect to see. Should you expect a recipient’s gut microbiome composition to become more or less similar to their donor after FMT? How quickly would you expect to see that change? What do you expect would happen a few months or years after the transplant?
import qiime2.plugins.fmt.actions as fmt_actions
jaccard_raincloud_stats, jaccard_raincloud_plot_viz = fmt_actions.cc(
diversity_measure=jaccard_distance_matrix,
metadata=sample_metadata_md,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=True,
against_group='0',
p_val_approx='asymptotic',
)
fmt_actions <- import("qiime2.plugins.fmt.actions")
action_results <- fmt_actions$cc(
diversity_measure=jaccard_distance_matrix,
metadata=sample_metadata_md,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=TRUE,
against_group='0',
p_val_approx='asymptotic',
)
jaccard_raincloud_stats <- action_results$stats
jaccard_raincloud_plot_viz <- action_results$raincloud_plot
qiime fmt cc \
--i-diversity-measure diversity-core-metrics/jaccard_distance_matrix.qza \
--m-metadata-file sample-metadata.tsv \
--p-distance-to donor \
--p-compare baseline \
--p-time-column timepoints \
--p-reference-column DonorSampleID \
--p-subject-column PatientID \
--p-filter-missing-references \
--p-against-group 0 \
--p-p-val-approx asymptotic \
--o-stats jaccard-raincloud-stats.qza \
--o-raincloud-plot jaccard-raincloud-plot.qzv
use.action(
use.UsageAction('fmt', 'cc'),
use.UsageInputs(
diversity_measure=core_metrics_results.jaccard_distance_matrix,
metadata=sample_metadata,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=True,
against_group='0',
p_val_approx='asymptotic'
),
use.UsageOutputNames(
stats='jaccard_raincloud_stats',
raincloud_plot='jaccard_raincloud_plot'
)
)
- Using the
qiime2 fmt cctool: Set “diversity_measure” to
#: qiime2 diversity core-metrics [...] : jaccard_distance_matrix.qzaFor “metadata”:
Perform the following steps.
Leave as
Metadata from TSVSet “Metadata Source” to
sample-metadata.tsv
Set “compare” to
baselineSet “distance_to” to
donorSet “time_column” to
timepointsSet “subject_column” to
PatientIDExpand the
additional optionssectionSet “reference_column” to
DonorSampleIDSet “filter_missing_references” to
YesSet “against_group” to
0Set “p_val_approx” to
asymptotic
Press the
Executebutton.
- Once completed, for each new entry in your history, use the
Editbutton to set the name as follows: (Renaming is optional, but it will make any subsequent steps easier to complete.)
History Name
“Name” to set (be sure to press
Save)#: qiime2 fmt cc [...] : stats.qzajaccard-raincloud-stats.qza#: qiime2 fmt cc [...] : raincloud_plot.qzvjaccard-raincloud-plot.qzv
In the resulting raincloud plot, we see that following cancer treatment the recipients distance to donor is relatively high. This seems to be naturally resolving itself but after FMT intervention the recipient’s microbiome looks more similar to the donor. We see some stability in this but by the last time point the recipient’s microbiome mostly looks unique from its donated microbiome.
An optional exercise#
While FMT research is still in its infancy, some early studies suggest that long-term, returning to a “personalize microbiome” is common after FMT, but in some cases features of the donated microbiome are retained. Let’s investigate this idea in an exercise.
Tracking alpha diversity following FMT
Above we tracked the distance to donor following FMT intervention. This is a beta diversity approach to assessing Chimeric Asymmetric Community Coalescence that tells us about the overall membership or composition of a microbiome. We can also directly investigate what happens to community richness, an alpha diversity metric, following FMT intervention.
Try to adapt your above command, and perhaps referring to other sections of the tutorial, to compute a raincloud plot that will allow you to investigate this using the observed features vector you computed earlier. When you’re done, or if you get stuck, expand the following dropdown box for a command that will generate this plot for you.
Solution
obs_features_raincloud_stats, obs_features_raincloud_plot_viz = fmt_actions.cc(
diversity_measure=observed_features_vector,
metadata=sample_metadata_md,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=True,
against_group='0',
p_val_approx='asymptotic',
)
action_results <- fmt_actions$cc(
diversity_measure=observed_features_vector,
metadata=sample_metadata_md,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=TRUE,
against_group='0',
p_val_approx='asymptotic',
)
obs_features_raincloud_stats <- action_results$stats
obs_features_raincloud_plot_viz <- action_results$raincloud_plot
qiime fmt cc \
--i-diversity-measure diversity-core-metrics/observed_features_vector.qza \
--m-metadata-file sample-metadata.tsv \
--p-distance-to donor \
--p-compare baseline \
--p-time-column timepoints \
--p-reference-column DonorSampleID \
--p-subject-column PatientID \
--p-filter-missing-references \
--p-against-group 0 \
--p-p-val-approx asymptotic \
--o-stats obs-features-raincloud-stats.qza \
--o-raincloud-plot obs-features-raincloud-plot.qzv
use.action(
use.UsageAction('fmt', 'cc'),
use.UsageInputs(
diversity_measure=core_metrics_results.observed_features_vector,
metadata=sample_metadata,
distance_to='donor',
compare='baseline',
time_column='timepoints',
reference_column='DonorSampleID',
subject_column='PatientID',
filter_missing_references=True,
against_group='0',
p_val_approx='asymptotic'
),
use.UsageOutputNames(
stats='obs_features_raincloud_stats',
raincloud_plot='obs_features_raincloud_plot'
)
)
- Using the
qiime2 fmt cctool: Set “diversity_measure” to
#: qiime2 diversity core-metrics [...] : observed_features_vector.qzaFor “metadata”:
Perform the following steps.
Leave as
Metadata from TSVSet “Metadata Source” to
sample-metadata.tsv
Set “compare” to
baselineSet “distance_to” to
donorSet “time_column” to
timepointsSet “subject_column” to
PatientIDExpand the
additional optionssectionSet “reference_column” to
DonorSampleIDSet “filter_missing_references” to
YesSet “against_group” to
0Set “p_val_approx” to
asymptotic
Press the
Executebutton.
- Once completed, for each new entry in your history, use the
Editbutton to set the name as follows: (Renaming is optional, but it will make any subsequent steps easier to complete.)
History Name
“Name” to set (be sure to press
Save)#: qiime2 fmt cc [...] : stats.qzaobs-features-raincloud-stats.qza#: qiime2 fmt cc [...] : raincloud_plot.qzvobs-features-raincloud-plot.qzv