knitr::opts_chunk$set(echo = TRUE)
This vignette was made to be an example of how the package can be applied to real-world data. As such, we focused on the Salix-galler-parasitoid data published by Kopelke et al. (2017) for which additional information on phylogeny was added. The full data was used to perform the analysis in Wooton et al. (2021).
The data is part of the alien
R package and has already been formatted.
library(alien) data(salixGal) data(galPara) #treeGal <- read.nexus("./Tree_with_added_taxa_with_short_codes_from_Mesquite.nex") #cophGal <- cophenetic(treeGal) #phyloGal <- as.matrix(salixGal$phyloDistTo) #sel <- which(rownames(cophGal) %in% rownames(phyloGal)) #cophGalSel <- cophGal[sel,sel] #cophGalOrd <- cophGalSel[sort(rownames(cophGalSel)),sort(rownames(cophGalSel))] #salixGal$phyloDistTo <- as.dist(cophGalOrd) #galPara$phyloDistFrom <- as.dist(cophGalOrd)
fitKNN
# Salix-galler salixGalKNNInter <- fitKNN(salixGal, distFrom = "jaccard", distTo = "jaccard", nNeig = 3, weight = 0) logLik(salixGalKNNInter, error = 0.001) tjur(salixGalKNNInter) # Galler-parasitoid galParaKNNInter <- fitKNN(galPara, distFrom = "jaccard", distTo = "jaccard", nNeig = 3, weight = 0) logLik(galParaKNNInter, error = 0.001) tjur(galParaKNNInter)
# Salix-galler salixGalKNNInterTrait <- fitKNN(salixGal, distFrom = "jaccard", distTo = "jaccard", distTraitFrom = "euclidean", distTraitTo = "euclidean", nNeig = 3, weight = 1) logLik(salixGalKNNInterTrait, error = 0.001) tjur(salixGalKNNInterTrait) # Galler-parasitoid galParaKNNInterTrait <- fitKNN(galPara, distFrom = "jaccard", distTo = "jaccard", distTraitFrom = "euclidean", distTraitTo = "euclidean", nNeig = 3, weight = 1) logLik(galParaKNNInterTrait, error = 0.001) tjur(galParaKNNInterTrait)
# Salix-galler salixGalKNNInterPhylo <- fitKNN(salixGal, distFrom = "jaccard", distTo = "jaccard", nNeig = 3, weight = 1, phylo=TRUE) logLik(salixGalKNNInterPhylo, error = 0.001) tjur(salixGalKNNInterPhylo) # Galler-parasitoid galParaKNNInterPhylo <- fitKNN(galPara, distFrom = "jaccard", distTo = "jaccard", nNeig = 3, weight = 1, phylo = TRUE) logLik(galParaKNNInterPhylo, error = 0.001) tjur(galParaKNNInterPhylo)
fitRF
############## # Salix-galler ############## # Base of formula salTraits <- paste(colnames(salixGal$traitFrom), collapse = "+") galTraits <- paste(colnames(salixGal$traitTo), collapse = "+") # Formula FormulaSalGal <- as.formula(paste("~", salTraits, "+", galTraits)) # Model salixGalRFTrait <- fitRF(salixGal, formula = FormulaSalGal, ntree = 2000, nodesize = 1) # Loglikelihood and Tjur's D logLik(salixGalRFTrait, error = 0.001) tjur(salixGalRFTrait) ################### # Galler-parasitoid ################### # Base of formula galTraits <- paste(colnames(galPara$traitFrom), collapse = "+") parTraits <- paste(colnames(galPara$traitTo), collapse = "+") # Formula FormulaGalPara <- as.formula(paste("~", galTraits, "+", parTraits)) # Model galParaRFTrait <- fitRF(galPara, formula = FormulaGalPara, ntree=2000, nodesize = 1) # Loglikelihood and Tjur's D logLik(galParaRFTrait, error = 0.001) tjur(galParaRFTrait)
library(vegan) salPhylo <- wcmdscale(salixGal$phyloDistFrom, add = TRUE) colnames(salPhylo) <- paste0("salPhylo", 1:ncol(salPhylo)) galPhylo <- wcmdscale(salixGal$phyloDistTo, add = TRUE) colnames(galPhylo) <- paste0("galPhylo", 1:ncol(galPhylo)) paraPhylo <- wcmdscale(galPara$phyloDistTo, add = TRUE) colnames(paraPhylo) <- paste0("paraPhylo", 1:ncol(paraPhylo)) ############## # Salix-galler ############## salixGalPhylo <- alienData(adjMat = salixGal$adjMat, traitFrom = as.data.frame(salPhylo), traitTo = as.data.frame(galPhylo)) # Base of formula salPhyloTraits <- paste(colnames(salixGalPhylo$traitFrom), collapse = "+") galPhyloTraits <- paste(colnames(salixGalPhylo$traitTo), collapse = "+") # Formula FormulaSalGalPhylo <- as.formula(paste("~", salPhyloTraits, "+", galPhyloTraits)) # Model salixGalRFPhylo <- fitRF(salixGalPhylo, formula = FormulaSalGalPhylo, ntree = 2000, nodesize = 1) # Loglikelihood and Tjur's D logLik(salixGalRFPhylo, error = 0.001) tjur(salixGalRFPhylo) ################### # Galler-parasitoid ################### galParaPhylo <- alienData(adjMat = galPara$adjMat, traitFrom = as.data.frame(galPhylo), traitTo = as.data.frame(paraPhylo)) # Base of formula galPhyloTraits <- paste(colnames(galParaPhylo$traitFrom), collapse = "+") paraPhyloTraits <- paste(colnames(galParaPhylo$traitTo), collapse = "+") # Formula FormulaGalParaPhylo <- as.formula(paste("~", galPhyloTraits, "+", paraPhyloTraits)) # Model galParaRFPhylo <- fitRF(galParaPhylo, formula = FormulaGalParaPhylo, ntree=2000, nodesize = 1) # Loglikelihood and Tjur's D logLik(galParaRFPhylo, error = 0.001) tjur(galParaRFPhylo)
fitGLM
################ # Salix - Galler ################ # Construct squared traits for numerical traits salixGalSq <- polyTrait(salixGal) #============== # Build formula #============== # Select traits salixTr <- c("TREE.VOLUME", "TREE.VOLUME_Sq", "LEAF.THICKNESS", "GLUCOSIDES", "GLUCOSIDES_Sq", "TREE.HEIGHT", "TREE.HEIGHT_Sq", "LEAF.HAIRINESS") gallTr <- "GALLTYPE" # Independent term indep <- paste(c(salixTr, gallTr), collapse = "+") # Interaction term (without Square) salixTrNoSq <- c("TREE.VOLUME", "LEAF.THICKNESS", "GLUCOSIDES", "TREE.HEIGHT", "LEAF.HAIRINESS") gallTrNoSq <- c("GALLTYPE") combTr <- combn(c(salixTrNoSq, gallTrNoSq), 2) inter <- paste(combTr[1,], ":", combTr[2,], collapse = "+") # Build formula FormulaSalGal <- as.formula(paste("~", indep, "+", inter)) #========== # Run model #========== salixGalGLMTrait <- fitGLM(salixGalSq, formula = FormulaSalGal, family = binomial(link = "logit")) #============================ # Log-likelihood and Tjur's D #============================ logLik(salixGalGLMTrait, error = 0.001) tjur(salixGalGLMTrait) ##################### # Galler - Parasitoid ##################### # Construct squared traits for numerical traits galParaSq <- polyTrait(galPara) #============== # Build formula #============== # Select traits gallTr <- c("GALLTYPE", "BODYLENGTH.GAL", "BODYLENGTH.GAL_Sq", "PHENOLOGY.GAL", "OVIPOS.STRATEGY", "GALL.WALL", "GALL.WALL_Sq") paraTr <- c("P.I", "OVIPOS.LNTH", "OVIPOS.LNTH_Sq", "ATTACK.STAGE", "PHENOLOGY.PAR", "BODYLENGTH.PAR", "BODYLENGTH.PAR_Sq", "ENDO.ECTO") # Independent term indep <- paste(c(gallTr, paraTr), collapse = "+") # Interaction term (without Square) gallTrNoSq <- c("GALLTYPE", "BODYLENGTH.GAL", "PHENOLOGY.GAL", "OVIPOS.STRATEGY", "GALL.WALL") paraTrNoSq <- c("P.I", "OVIPOS.LNTH", "ATTACK.STAGE", "PHENOLOGY.PAR", "BODYLENGTH.PAR", "ENDO.ECTO") combTr <- combn(c(gallTrNoSq, paraTrNoSq), 2) inter <- paste(combTr[1,], ":", combTr[2,], collapse = "+") # Build formula FormulaGalPara <- as.formula(paste("~", indep, "+", inter)) #========== # Run model #========== galParaGLMTrait <- fitGLM(galParaSq, formula = FormulaGalPara, family = binomial(link = "logit")) #============================ # Log-likelihood and Tjur's D #============================ logLik(galParaGLMTrait, error = 0.001) tjur(galParaGLMTrait)
fit4corner
# Construct squared traits for numerical traits salixGalSq <- polyTrait(salixGal) #============== # Build formula #============== # Select traits salixTr <- c("TREE.VOLUME", "TREE.VOLUME_Sq", "LEAF.THICKNESS", "GLUCOSIDES", "GLUCOSIDES_Sq", "TREE.HEIGHT", "TREE.HEIGHT_Sq", "LEAF.HAIRINESS") gallTr <- "GALLTYPE" # Independent term indep <- paste(c(salixTr, gallTr), collapse = "+") # Interaction term (without Square) salixTrNoSq <- c("TREE.VOLUME", "LEAF.THICKNESS", "GLUCOSIDES", "TREE.HEIGHT", "LEAF.HAIRINESS") gallTrNoSq <- c("GALLTYPE") combTr <- expand.grid(salixTrNoSq, gallTrNoSq) inter <- paste(combTr[,1], ":", combTr[,2], collapse = "+") # Build formula FormulaSalGal <- as.formula(paste("~", indep, "+", inter)) #========== # Run model #========== salixGal4cornerTrait <- fitGLM(salixGalSq, formula = FormulaSalGal, family = binomial(link = "logit")) #============================ # Log-likelihood and Tjur's D #============================ logLik(salixGal4cornerTrait, error = 0.001) tjur(salixGal4cornerTrait) ##################### # Galler - Parasitoid ##################### # Construct squared traits for numerical traits galParaSq <- polyTrait(galPara) #============== # Build formula #============== # Select traits gallTr <- c("GALLTYPE", "BODYLENGTH.GAL", "BODYLENGTH.GAL_Sq", "PHENOLOGY.GAL", "OVIPOS.STRATEGY", "GALL.WALL", "GALL.WALL_Sq") paraTr <- c("P.I", "OVIPOS.LNTH", "OVIPOS.LNTH_Sq", "ATTACK.STAGE", "PHENOLOGY.PAR", "BODYLENGTH.PAR", "BODYLENGTH.PAR_Sq", "ENDO.ECTO") # Independent term indep <- paste(c(gallTr, paraTr), collapse = "+") # Interaction term (without Square) gallTrNoSq <- c("GALLTYPE", "BODYLENGTH.GAL", "PHENOLOGY.GAL", "OVIPOS.STRATEGY", "GALL.WALL") paraTrNoSq <- c("P.I", "OVIPOS.LNTH", "ATTACK.STAGE", "PHENOLOGY.PAR", "BODYLENGTH.PAR", "ENDO.ECTO") combTr <- expand.grid(gallTrNoSq, paraTrNoSq) inter <- paste(combTr[,1], ":", combTr[,2], collapse = "+") # Build formula FormulaGalPara <- as.formula(paste("~", indep, "+", inter)) #========== # Run model #========== galParaGLMTrait <- fitGLM(galParaSq, formula = FormulaGalPara, family = binomial(link = "logit")) #============================ # Log-likelihood and Tjur's D #============================ logLik(galParaGLMTrait, error = 0.001) tjur(galParaGLMTrait)
fitIMC
# Salix-galler salixGalIMC <- readRDS("salixGalIMC.RDS") logLik(salixGalIMC, error = 0.001) # -137.0956 tjur(salixGalIMC) # 0.526749 # Galler-parasitoids galParaIMC <- readRDS("galParaIMC.RDS") logLik(galParaIMC, error = 0.001) # -690.649 tjur(galParaIMC) # 0.5714072
This function take a long time to run.
# Salix-galler salixGalIMC <- fitIMC(salixGal, d = 1) logLik(salixGalIMC, error = 0.001) # -137.0956 tjur(salixGalIMC) # 0.526749 # Galler-parasitoids galParaIMC <- fitIMC(galPara, d = 1) logLik(galParaIMC, error = 0.001) # -690.649 tjur(galParaIMC) # 0.5714072
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.