ChiLiubio / microeco

An R package for data analysis in microbial community ecology
GNU General Public License v3.0
207 stars 59 forks source link

dbRDA axis percentages different #435

Open DpennaS opened 4 days ago

DpennaS commented 4 days ago

Hi There!

I was performing a dbRDA but notice that the percentage explained by the axis are different doing manually and with the microeco

I will send here the codes and the files

Ordination manual

otu.table.norm <- ps_mesocosmos_norm$otu_table

ps_mesocosmos$sample_table[is.na(ps_mesocosmos$sample_table)] <- 0 amb <- ps_mesocosmos$sample_table[7:21] var_amb <- as.data.frame(scale(amb))

dist_matriz <- vegdist(otu.table.norm, method = "bray")

dist_matriz <- ps_mesocosmos_norm$beta_diversity$bray View(dist_matriz)

dbRDA usando a matriz de distâncias e as variáveis escalonadas

dbrda_result <- dbrda(dist_matriz ~ ., data = var_amb) summary(dbrda_result)

anova(dbrda_result, by = "terms") anova(dbrda_result, by = "axis")

plot(dbrda_result)

site_scores <- scores(dbrda_result, display = "sites") site_scores_df <- as.data.frame(site_scores)

env_scores <- scores(dbrda_result, display = "bp") env_scores_df <- as.data.frame(env_scores)

eigenvalues <- summary(dbrda_result)$cont$importance[2, ] # Linha com % explicada eigenvalues <- eigenvalues * 100 # Converter para porcentagem names(eigenvalues) <- paste0("dbRDA", seq_along(eigenvalues)) # Nomear os eixos

perc_axis <- paste0("dbRDA1 (", round(eigenvalues["dbRDA1"], 2), "%) | dbRDA2 (", round(eigenvalues["dbRDA2"], 2), "%)")

site_scores_df$warming <- ps_mesocosmos$sample_table$warming

test2 <- ggplot(site_scores_df, aes(x = dbRDA1, y = dbRDA2, color = warming)) + geom_point(size = 3) +

geom_text_repel(aes(label = rownames(site_scores_df)), size = 3) +

geom_segment(data = env_scores_df, aes(x = 0, y = 0, xend = dbRDA1, yend = dbRDA2), arrow = arrow(type = "closed", length = unit(0.1, "inches")), color = "black") + geom_text(data = env_scores_df, aes(x = dbRDA1, y = dbRDA2, label = rownames(env_scores_df)), color = "black", size = 3) + labs(x = "db-RDA1", y = "db-RDA2", color = "Waming", subtitle = perc_axis) + theme_minimal() + scale_color_brewer(palette = "Set1")

test2

Teste microeco

ps_mesocosmos_norm$sample_table[is.na(ps_mesocosmos_norm$sample_table)] <- 0 t1 <- trans_env$new(dataset = ps_mesocosmos_norm, env_cols = c(7:21)) t1$cal_ordination(method = "dbRDA", use_measure = "bray") t1$trans_ordination(adjust_arrow_length = TRUE, max_perc_env = 1.5) t1$plot_ordination(plot_color = "warming") t1$cal_ordination_anova() t1$cal_ordination_envfit() t1$res_ordination_terms t1$res_ordination_axis

test1 <- t1$plot_ordination(plot_color = "warming")

Thanks for the attention

tax.txt metadata120.txt otu.txt

ChiLiubio commented 4 days ago

Hi. To compare two types of results and make the steps reproducible, I will use the example data inside the package and shorten the steps as many as possible.

library(microeco)
data(dataset)
data(env_data_16S)
t1 <- trans_env$new(dataset = dataset, add_data = env_data_16S[, 4:11])
t1$cal_ordination(method = "dbRDA", use_measure = "bray")
t1$trans_ordination(adjust_arrow_length = TRUE, max_perc_env = 1.5)
t1$plot_ordination(plot_color = "Group")
# let's check the percentage shown in the axis
raw_dbrda_result <- t1$res_ordination
raw_dbrda_result$CCA$eig/sum(raw_dbrda_result$CCA$eig) * 100