This vignette demonstrates the EcoNiche workflow using the built-in plant community example data.
EcoNiche expects a taxon-by-sample abundance matrix and a
sample-by-variable environmental table. The sample IDs in
colnames(plant_otu) match rownames(plant_env)
and names(plant_group).
## [1] 1038 290
## [1] 290 11
## plant_group
## BDGS_BDGS BTM_BTM BYS_BYS DHY_DHY DMS_DMS
## 10 10 10 10 4
For fast examples, we retain species observed in at least 15 samples.
## [1] 200 290
The CCA workflow uses multiple environmental variables to define the focal composite gradient and annual mean temperature as the covariate and plotting gradient.
cca_res <- cca_workflow_gradient(
otu = otu_ex,
env = plant_env,
sel = c("AMP", "Moisture", "AP", "pH"),
covariates = "AMT",
var = "AMT",
method = "loess",
galaxy_colnum = FALSE,
make_plot = FALSE,
top_node = 20
)
names(cca_res)## [1] "step1" "step2" "step3" "step4"
## NichePosition NicheWidth
## Zanthoxylum.echinocarpum 0.1697882 4.7420
## Xanthophyllum.hainanense 1.7444806 5.3941
## Vitis.amurensis -1.0263057 5.6119
## Viburnum.erosum -0.5273252 10.2469
## Viburnum.dilatatum -0.5462778 8.7614
## Viburnum.betulifolium -0.3724929 5.2418
group_res <- cca_workflow_group(
otu = otu_ex,
env = plant_env,
group = plant_group,
sel = c("AMP", "Moisture", "AP", "pH"),
covariates = "AMT",
var = "AMT",
choice = "all",
method = "loess",
plot_type = "sample",
galaxy_colnum = FALSE,
make_plot = FALSE
)
names(group_res)## [1] "step1" "step2" "step5" "step6"
## ENV NicheWidth NicheWdithSD
## DQS_DQS1 1.5 5.815143 2.058778
## DQS_DQS2 1.5 5.657917 2.208762
## DQS_DQS3 1.5 5.657917 2.208762
## DQS_DQS4 1.5 5.307614 2.219123
## DQS_DQS5 1.5 6.118060 2.123746
## DQS_DQS6 1.5 5.620067 2.233015
GAMs can be used to estimate taxon optima and response breadth along a single gradient.
otu_gam <- plant_otu[rowSums(plant_otu > 0) >= 20, ]
gam_res <- gam_fit_model(
otu = otu_gam,
env = plant_env,
env_var = "AMT",
data_type = "count",
count_family = "nb",
use_offset = TRUE,
min_prev = 0.10,
min_total = 20,
k_spline = 5,
n_grid = 100,
verbose = FALSE
)
head(gam_res)## OTU n_nonzero prevalence total_counts r2 dev_expl
## 7 Spiraea.pubescens 57 0.1965517 978 NA 0.8008558
## 12 Rhododendron.simsii 38 0.1310345 528 NA 0.7288264
## 14 Quercus.wutaishanica 64 0.2206897 1586 NA 0.8141505
## 18 Pinus.armandii 31 0.1068966 401 NA 0.8160050
## 30 Daphniphyllum.macropodum 41 0.1413793 184 NA 0.6504727
## 39 Carpinus.viminea 52 0.1793103 396 NA 0.6238261
## edf F_stat p_value optimum_env env50_min env50_max breadth50
## 7 2.876958 73.23198 0 1.500000 1.500000 2.663636 1.1636364
## 12 3.857311 51.25146 0 10.421212 10.033333 10.809091 0.7757576
## 14 2.842716 84.33932 0 5.572727 2.857576 6.930303 4.0727273
## 18 3.762329 76.05598 0 6.736364 6.348485 7.318182 0.9696970
## 30 2.638485 40.99768 0 11.778788 10.809091 12.748485 1.9393939
## 39 3.924044 41.33183 0 10.033333 9.645455 10.421212 0.7757576
levins_res <- levins_calc_binned(
otu = otu_ex,
env = plant_env,
axis_var = "AMT",
nbin = 8,
bin_method = "equal_freq",
min_occ = 3,
min_abund = 5
)
head(levins_res)## OTU axis n_states levins_B levins_Bstd n_samples
## 1 Spiraea.pubescens AMT 8 1.600861 0.08583722 57
## 2 Quercus.wutaishanica AMT 8 1.699995 0.09999926 64
## 3 Quercus.aliena AMT 8 1.838842 0.11983455 25
## 4 Quercus.acutissima AMT 8 1.748160 0.10688006 31
## 5 Lespedeza.bicolor AMT 8 3.792412 0.39891596 42
## 6 Indosasa.shibataeaoides AMT 8 1.246672 0.03523889 18
## total_abund
## 1 8.128477
## 2 15.323397
## 3 5.140355
## 4 6.668544
## 5 5.226307
## 6 10.465862