Turned to run N positive and negative cases

This commit is contained in:
Louis Lacoste 2023-11-22 17:09:48 +01:00
parent ed05a47f80
commit 0954e00dc3

View file

@ -4,13 +4,31 @@ library(phytools)
library(ape) library(ape)
set.seed(1234) set.seed(1234)
n <- 100 N <- 100 # Number of different simulations
# Preparing output lists
# simulation_results <- data.frame(
# sim_id = numeric(),
# positive_classic_r_squared = numeric(),
# positive_phylo_r_squared = numeric(),
# positive_classic_adjusted_r_squared = numeric(),
# positive_phylo_adjusted_r_squared = numeric(),
# negative_classic_r_squared = numeric(),
# negative_phylo_r_squared = numeric(),
# negative_classic_adjusted_r_squared = numeric(),
# negative_phylo_adjusted_r_squared = numeric(),
# row.names = NULL, check.rows = FALSE, check.names = TRUE,
# stringsAsFactors = default.stringsAsFactors()
# )
# Code for one simulation
simulate_positive_negative <- function(sim_id, n = 100, stoch_process = "BM") {
tree <- rphylo(n, 0.1, 0) tree <- rphylo(n, 0.1, 0)
sigma2err <- 1 sigma2err <- 1
# Continuous phylo trait # Continuous phylo trait
trait <- rTrait(1, tree, "BM") trait <- rTrait(1, tree, stoch_process)
# Adding noise to the trait # Adding noise to the trait
trait <- trait + rnorm(n, mean = 0, sqrt(sigma2err)) trait <- trait + rnorm(n, mean = 0, sqrt(sigma2err))
@ -37,14 +55,14 @@ mu3 <- 2
y <- mu1 * (group == 1) + mu2 * (group == 2) + mu3 * (group == 3) y <- mu1 * (group == 1) + mu2 * (group == 2) + mu3 * (group == 3)
y <- y + trait y <- y + trait
par(mar = c(5, 0, 0, 0) + 0.1) # par(mar = c(5, 0, 0, 0) + 0.1)
plot(tree, show.tip.label = FALSE, x.lim = 50) # plot(tree, show.tip.label = FALSE, x.lim = 50)
tiplabels(bg = group, pch = 21) # tiplabels(bg = group, pch = 21)
phydataplot(y, tree, scaling = 0.1, offset = 4) # phydataplot(y, tree, scaling = 0.1, offset = 4)
fitANOVA <- lm(y ~ group) pos_fit_ANOVA <- lm(y ~ group)
fitphyloANOVA <- phylolm(y ~ group, phy = tree) pos_fitphy_ANOVA <- phylolm(y ~ group, phy = tree)
# Simulation négative # Simulation négative
@ -52,14 +70,38 @@ groups_non_phylo <- as.factor(sample(c(1,2,3), n, replace = TRUE))
y_non_phy <- mu1 * (groups_non_phylo == 1) + mu2 * (groups_non_phylo == 2) + mu3 * (groups_non_phylo == 3) y_non_phy <- mu1 * (groups_non_phylo == 1) + mu2 * (groups_non_phylo == 2) + mu3 * (groups_non_phylo == 3)
y_non_phy <- y_non_phy + trait y_non_phy <- y_non_phy + trait
par(mar = c(5, 0, 0, 0) + 0.1) # par(mar = c(5, 0, 0, 0) + 0.1)
plot(tree, show.tip.label = FALSE, x.lim = 50) # plot(tree, show.tip.label = FALSE, x.lim = 50)
tiplabels(bg = groups_non_phylo, pch = 21) # tiplabels(bg = groups_non_phylo, pch = 21)
phydataplot(y_non_phy, tree, scaling = 0.1, offset = 4) # phydataplot(y_non_phy, tree, scaling = 0.1, offset = 4)
fit_nonphy_ANOVA <- lm(y_non_phy ~ groups_non_phylo) neg_fit_ANOVA <- lm(y_non_phy ~ groups_non_phylo)
fitphy_nonphy_ANOVA <- phylolm(y_non_phy ~ groups_non_phylo, phy = tree) neg_fitphy_ANOVA <- phylolm(y_non_phy ~ groups_non_phylo, phy = tree)
# Summary # Summary
summary(fit_nonphy_ANOVA) ## Positive
summary(fitphy_nonphy_ANOVA) pos_fit_summary <- summary(pos_fit_ANOVA)
pos_fitphy_summary <- summary(pos_fitphy_ANOVA)
## Negative
neg_fit_summary <- summary(neg_fit_ANOVA)
neg_fitphy_summary <- summary(neg_fitphy_ANOVA)
return(data.frame(
sim_id = sim_id,
positive_classic_r_squared = pos_fit_summary$r.squared,
positive_phylo_r_squared = pos_fitphy_summary$r.squared,
positive_classic_adjusted_r_squared = pos_fit_summary$adj.r.squared,
positive_phylo_adjusted_r_squared = pos_fitphy_summary$adj.r.squared,
negative_classic_r_squared = neg_fit_summary$r.squared,
negative_phylo_r_squared = neg_fitphy_summary$r.squared,
negative_classic_adjusted_r_squared = neg_fit_summary$adj.r.squared,
negative_phylo_adjusted_r_squared = neg_fitphy_summary$adj.r.squared,
row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors()
))
}
simulation_results <- do.call(rbind, lapply(seq(N), function(sim_id) {
simulate_positive_negative(sim_id)
}))