for (i in 1:length(vector_age))
{
plot_list = list()
i <- i
for (j in 1:length(vector_continent))
{
plot_list[[j]] <-  local ({
j <- j
p <- ggplot(data = df_pca, aes(x = Comp1, y = Comp2)) +
theme_minimal() +
stat_density_2d(aes(fill = (..level..), alpha = (..level..)^8),h=bandw, geom = "polygon",show.legend=FALSE) +
scale_fill_gradient(low = "gray", high = "darkgrey") +
geom_point(data = df_pca[df_pca$Age == vector_age[i] &
df_pca$Continent == vector_continent[j],],
aes(color = Clade,
shape = Clade,
size  = log(procrust$Csize))) +
scale_color_manual(values = colors_to_plot) +
scale_shape_manual(values = shape_to_plot) +
scale_x_continuous(limits = c(min(df_pca[,1])*limit_factor,max(df_pca[,1])*0.85*limit_factor)) +
scale_y_continuous(limits = c(min(df_pca[,2])*limit_factor,max(df_pca[,2])*1*limit_factor)) +
coord_fixed(ratio=1)+
labs(x = paste0('PC1 = ', round(((eigenvalues[1]/sum(eigenvalues))*100), digits = 2), '%'),
y = paste0('PC2 = ', round(((eigenvalues[2]/sum(eigenvalues))*100), digits = 2), '%')) +
theme(axis.line = element_line(color = "darkgrey", size = 0.5),legend.position = "none")
})
}
print(ggarrange(plotlist = plot_list, ncol = 3, nrow = 2,
labels = vector_continent))
}
for (i in 1:length(vector_age))
{
plot_list = list()
i <- i
for (j in 1:length(vector_continent))
{
plot_list[[j]] <-  local ({
j <- j
p <- ggplot(data = df_pca, aes(x = Comp1, y = Comp2)) +
theme_minimal() +
stat_density_2d(aes(fill = (..level..), alpha = (..level..)^8),h=bandw, geom = "polygon",show.legend=FALSE) +
scale_fill_gradient(low = "gray", high = "darkgrey") +
geom_point(data = df_pca[df_pca$Age == vector_age[i] &
df_pca$Continent == vector_continent[j],],
aes(color = Clade,
shape = Clade,
size  = log(procrust$Csize))) +
scale_color_manual(values = colors_to_plot) +
scale_shape_manual(values = shape_to_plot) +
scale_x_continuous(limits = c(min(df_pca[,1])*limit_factor,max(df_pca[,1])*0.85*limit_factor)) +
scale_y_continuous(limits = c(min(df_pca[,2])*limit_factor,max(df_pca[,2])*1*limit_factor)) +
coord_fixed(ratio=1)+
labs(x = paste0('PC1 = ', round(((eigenvalues[1]/sum(eigenvalues))*100), digits = 2), '%'),
y = paste0('PC2 = ', round(((eigenvalues[2]/sum(eigenvalues))*100), digits = 2), '%')) +
theme(axis.line = element_line(color = "darkgrey", size = 0.5),legend.position = "none")
})
}
print(ggarrange(plotlist = plot_list, ncol = 3, nrow = 2,
labels = vector_continent))
}
for (i in 1:length(vector_age))
library(geomorph)
library(Morpho)
colors_to_plot <- c("Felinae"           = "#FF7979",
"Machairodontinae"  = "#FFA457",
"Nimravinae"        = "#86DA8F",
"Barbourofelinae"   = "#86B8DA")
shape_to_plot <- c("Felinae"          = 15,
"Machairodontinae" = 16,
"Nimravinae"       = 17,
"Barbourofelinae"  = 18)
# "Data" contains measurements age + location of specimens
setwd("mandibles")
data <- read.csv("data_mandibles.csv", sep=";", header = TRUE)
data <- data[,1:7] # Get rid of the last columns which just contains references, etc.
# Import all pts files using custom function from: https://github.com/cha-nar/importpts
import.pts(38)
for(i in 1:length(ptslist))
{
for (j in 1:3) {
for (k in 1:38) {
if (ptsarray[k,j,i] == 9999 | ptsarray[k,j,i] == -9999){
ptsarray[k,j,i] <- NA
}
}
}
}
#Estimate missing landmarks
ptsarray_missing <- fixLMtps(ptsarray, comp = 3, weight = TRUE, weightfun = NULL)
# Fix scale problem with Hoplophoneus_primaevus_PIMUZ-AV-2593
ptsarray_missing$out[,,"Hoplophoneus_primaevus_PIMUZ-AV-2593"] <- ptsarray_missing$out[,,"Hoplophoneus_primaevus_PIMUZ-AV-2593"]*10.5
semilandmarks <- read.csv("sliding_mandibles.csv", sep = ";")
# Perform the superimposition
procrust <- gpagen(ptsarray_missing$out, curves = semilandmarks)
spheres3d(procrust$coords[,,50],
radius=0.01,color="#FF0D68")
library(geomorph)
library(Morpho)
install.packages(c("ape", "cli", "colorspace", "digest", "dplyr", "fansi", "fastmap", "ggfortify", "ggpubr", "ggrepel", "htmltools", "isoband", "jpeg", "jsonlite", "MASS", "purrr", "Rcpp", "rgl", "rlang", "RRPP", "Rvcg", "stringi", "tibble", "tidyr", "utf8", "vctrs", "viridisLite", "xfun"))
install.packages(c("ape", "cli", "colorspace", "digest", "dplyr", "fansi", "fastmap", "ggfortify", "ggpubr", "ggrepel", "htmltools", "isoband", "jpeg", "jsonlite", "MASS", "purrr", "Rcpp", "rgl", "rlang", "RRPP", "Rvcg", "stringi", "tibble", "tidyr", "utf8", "vctrs", "viridisLite", "xfun"))
install.packages(c("ape", "cli", "colorspace", "digest", "dplyr", "fansi", "fastmap", "ggfortify", "ggpubr", "ggrepel", "htmltools", "isoband", "jpeg", "jsonlite", "MASS", "purrr", "Rcpp", "rgl", "rlang", "RRPP", "Rvcg", "stringi", "tibble", "tidyr", "utf8", "vctrs", "viridisLite", "xfun"))
install.packages(c("ape", "cli", "colorspace", "digest", "dplyr", "fansi", "fastmap", "ggfortify", "ggpubr", "ggrepel", "htmltools", "isoband", "jpeg", "jsonlite", "MASS", "purrr", "Rcpp", "rgl", "rlang", "RRPP", "Rvcg", "stringi", "tibble", "tidyr", "utf8", "vctrs", "viridisLite", "xfun"))
install.packages(c("ape", "cli", "colorspace", "digest", "dplyr", "fansi", "fastmap", "ggfortify", "ggpubr", "ggrepel", "htmltools", "isoband", "jpeg", "jsonlite", "MASS", "purrr", "Rcpp", "rgl", "rlang", "RRPP", "Rvcg", "stringi", "tibble", "tidyr", "utf8", "vctrs", "viridisLite", "xfun"))
install.packages("installr")
library(installr)
updateR()
1
library(geomorph)
install.packages("installr")
library(installr)
updateR()
# Importation coordinates, procrustes, etc.
library(geomorph)
library(Morpho)
# Plots
library(ggplot2)
library(ggfortify)
library(ggthemes)
library(ggrepel)
library(ggpubr)
library(viridis)
setwd("C:/Users/narim/EDDy Lab Dropbox/Narimane Chatar/DECAF data/Ontogeny Smilodon/R_data")
# "Data" contains measurements
data      <- read.csv("Smilodon_DATA.csv", sep=";", dec = ',', header = TRUE)
data_lion <- read.csv("Lion_DATA.csv", sep=";", dec = '.', header = TRUE)
data_prim <- read.csv("Primitive_DATA.csv", sep=";", dec = '.', header = TRUE)
# Define semi landmarks
semilandmarks <- read.csv("Sliding_Smilodon_test.csv", sep = ";")
# Results FEA
FEA_smilo <-  read.csv("Results_FEA_Smilodon.csv", sep=",", dec = '.', header = TRUE)
FEA_lion <-  read.csv("Results_FEA_Lion.csv", sep=",", dec = '.', header = TRUE)
source("importpts.R", chdir = TRUE)
setwd("C:/Users/narim/EDDy Lab Dropbox/Narimane Chatar/DECAF data/Ontogeny Smilodon/R_data/Primitive stuffs")
import.pts(32)
array_prim <- ptsarray[-c(3,4),,]
shape_to_plot <- c("Adult_Smilo" = 15,
"Juv_Smilo"   = 16,
"adult_lion" = 0,
"juv_lion"   = 1,
"Primitive"  = 17)
shape_to_plot2 <- c("Adult_Smilo" = 15,
"Juv_Smilo"   = 16,
"adult_lion" = 15,
"juv_lion"   = 16,
"Primitive"  = 17)
color_common <- c("Adult_Smilo" = inferno(3)[2],
"Juv_Smilo"   = inferno(3)[2],
"adult_lion" = viridis(3)[2],
"juv_lion"   = viridis(3)[2],
"Primitive" = "black")
# Import all pts files using custom function from: https://github.com/cha-nar/importpts
setwd("C:/Users/narim/EDDy Lab Dropbox/Narimane Chatar/DECAF data/Ontogeny Smilodon/R_data/Coordinates_Smilodon/test")
import.pts(30)
array_smilo <- ptsarray
# Perform the superimposition
procrust <- gpagen(ptsarray, curves = semilandmarks)
# Same for the lions
setwd("C:/Users/narim/EDDy Lab Dropbox/Narimane Chatar/DECAF data/Ontogeny Smilodon/R_data/Coordinates_lion")
import.pts(32)
array_lion <- ptsarray[-c(3,4),,]
procrust_lions <- gpagen(ptsarray, curves = semilandmarks)
# Visualize landmarks
# spheres3d(procrust$coords[,,10], radius=0.01,color="#FF0D68")
# # # PCA # # #
# Smilodon fatalis
PCA <- gm.prcomp(procrust$coords)
eigenvalues <- PCA$d
scores <- PCA$x
df_pca <-cbind(as.data.frame(scores[,1:2]),data)
PCA_lion <- gm.prcomp(procrust_lions$coords)
eigenvalues_lions <- PCA_lion$d
scores_lions <- PCA_lion$x
df_pca_lion <-cbind(as.data.frame(scores_lions[,1:2]),data_lion)
array_smilo_lion2 <- bindArr(array_smilo, array_lion,along = 3)
procrust__smilo_lions2 <- gpagen(array_smilo_lion2, curves = semilandmarks)
PCA_smilo_lion2 <- gm.prcomp(procrust__smilo_lions2$coords)
eigenvalues_smilo_lion2 <- PCA_smilo_lion2$d
scores_smilo_lion2 <- PCA_smilo_lion2$x
df_pca_smilo_lion <-cbind(as.data.frame(scores_smilo_lion2[,1:2]),rbind(data, data_lion))
smilo_lion <- c(rep("Smilodon", 22), rep("Lion", 22))
color_smilo_lion <- c("Smilodon" = inferno(3)[2],
"Lion"   = viridis(3)[2])
gdf <- geomorph.data.frame(shape = procrust__smilo_lions2$coords,
species = smilo_lion,
LogCsize = log(procrust__smilo_lions2$Csize))
fit <- procD.lm(shape~LogCsize, f2 = NULL, f3=NULL,logsz = TRUE, data=gdf, iter=999,  print.progress = FALSE)
summary(fit)
#unique allometry by sp
fit_by_sp <- procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
# Check for homogeneity of regression slopes.
pA <- plotAllometry(fit_by_sp, gdf$LogCsize, logsz = F,
method = "RegScore", pch = 19)
# Mean values.
mean.size <- aggregate(x = pA$size.var, list(species = gdf$species),
mean)
mean.shape <- aggregate(x = pA$RegScore, list(species = gdf$species),
mean)
df_allometry <- cbind(as.data.frame(pA$RegScore), as.data.frame(gdf$LogCsize), as.data.frame(pA$PredLine), "Species" = smilo_lion)
colnames(df_allometry) <- c("RegScore", "Size", "PredLine", "Species")
shape_Lion_smilo <- c("Lion" = 1,
"Smilodon" = 16)
RegScore <- ggplot(df_allometry, aes(x = Size, y = RegScore, color = Species, shape = Species)) +
theme_minimal() +
geom_point(aes(color = Species,  size = Size, shape = Species)) +
scale_color_manual(values = color_smilo_lion) +
scale_shape_manual(values = shape_Lion_smilo) +
geom_smooth(method = "lm", formula = 'y ~ x', se = FALSE) +
labs(x = paste0('Mandible size (LogCS)'),
y = paste0('Mandibular shape (Regression Score)')) +
stat_regline_equation(aes(label =  paste(after_stat(eq.label), ..adj.rr.label.., sep = "~~~~"))) +
theme(axis.line = element_line(color = "darkgrey", linewidth = 0.5),legend.position = "none")
RegScore
PredValue <- ggplot(df_allometry, aes(x = Size, y = PredLine, color = Species, shape = Species)) +
theme_minimal() +
geom_point(aes(color = Species, size = Size)) +
scale_color_manual(values = color_smilo_lion) +
scale_shape_manual(values = shape_Lion_smilo) +
geom_smooth(method = "lm", formula = 'y ~ x', se = FALSE) +
labs(x = paste0('Mandible size (LogCS)'),
y = paste0('Mandibular shape (Predicted values)')) +
theme(axis.line = element_line(color = "darkgrey", linewidth = 0.5),legend.position = "none")
PredValue
summary(fit_by_sp)
fit_by_sp$coefficients
fit_by_sp$aov.table
test <- lstrends(fit_by_sp, "Species")
install.packages("lsmeans")
library(lsmeans)
test <- lstrends(fit_by_sp, "Species")
lstrends(fit_by_sp, "Species")
#unique allometry by sp
fit_by_sp <- procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
summary(fit_by_sp)
fit_by_sp$aov.table
test <- lstrends(fit_by_sp, "Species")
test <- lstrends(fit_by_sp, "Species", var="LogCsize")
test <- lstrends(fit_by_sp, "shape", var="LogCsize")
test <- lstrends(fit_by_sp, "Species", var="shape")
fit_by_sp$coefficients
test <- coef(fit_by_sp)
coeff_model <- coef(fit_by_sp)
coeff_model <- coef(fit_by_sp)
Intercept <- coeff_model[1]; print(Intercept)
Slope <- coeff_model[2]; print(Slope)
# Check for homogeneity of regression slopes.
pA <- plotAllometry(fit_by_sp, gdf$LogCsize, logsz = F,
method = "RegScore", pch = 19)
pA
coeff_model <- coef(pA)
Intercept <- coeff_model[1]; print(Intercept)
coeff_model <- coef(pA$RegScore)
Intercept <- coeff_model[1]; print(Intercept)
coeff_model <- coef(pA$RegScore)
coeff_model <- coef(fit_by_sp ~ species)
Intercept <- coeff_model[1]; print(Intercept)
Slope <- coeff_model[2]; print(Slope)
coeff_model <- coef(fit_by_sp)
Intercept <- coeff_model[1]; print(Intercept)
Slope <- coeff_model[2]; print(Slope)
shape
gdf
gdf$species == 'Smilodon'
coeff_smilo <- coef(procD.lm(shape ~ LogCsize * species, data = gdf$species == 'Smilodon',
iter = 999, print.progress = FALSE))
coeff_smilo <- coef(procD.lm(shape ~ LogCsize * species, data = gdf[gdf$species == 'Smilodon'],
iter = 999, print.progress = FALSE))
Intercept <- coeff_model[1]; print(Intercept)
Slope <- coeff_model[2]; print(Slope)
coeff_smilo <- coef(procD.lm(shape ~ LogCsize * species, data = gdf[gdf$species == 'Lion'],
iter = 999, print.progress = FALSE))
Intercept <- coeff_model[1]; print(Intercept)
Slope <- coeff_model[2]; print(Slope)
summary(fit_by_sp)
#unique allometry by sp
fit_by_sp <- advanced.procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
library(geomorph)
#unique allometry by sp
fit_by_sp <- advanced.procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
procD.allometry(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE)
#unique allometry by sp
fit_by_sp <- procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
summary(fit_by_sp)
fit_by_sp$Y
fit_by_sp$ANOVA
fit_by_sp$term.labels
pA$RegScore
pA$logsz
pA$GM
lm(pA$PredLine)
lm(fit_by_sp)
fit_by_sp$coefficients
fit$coefficients
fit_by_sp$coefficients
mean(fit_by_sp$coefficients)
pA$RegScore
pA$plot_args
advanced.procD.lm(shape ~ LogCsize * species, data = gdf,
iter = 999, print.progress = FALSE) # unique allometries by families
