Lab Exersize 2

Tutorial 1

library(borealis)
data("pupfish", package="geomorph")
str(pupfish)
edge.landmarks <- 11:56
pup.links <- matrix(c(edge.landmarks[-length(edge.landmarks)], edge.landmarks[-1]), 
                    ncol = 2, byrow = FALSE)
pup.links <- rbind(pup.links[-c(23,28,38),],
                   matrix(c(4,11, 1,3, 3,9, 9,38, 33,7, 34,8, 4,48, 1,46, 49,56), 
                          ncol = 2, byrow = TRUE) )

landmark.plot(pupfish, links = pup.links)
pup.gpa <- align.procrustes(pupfish$coords)
names(pup.gpa)
pup.gdf <- listed.gdf(pup.gpa)
names(pup.gdf)
names(pup.gdf$gdf)
pup.gdf$gdf$Csize <- pupfish$CS
pup.gdf$gdf$sex <- pupfish$Sex
pup.gdf$gdf$pop <- pupfish$Pop
pup.gdf$gdf$pop.sex <- as.factor(paste(pup.gdf$gdf$pop, pup.gdf$gdf$sex, sep = "_"))
pup.pca <- gm.prcomp(pup.gdf$gdf$coords)

plot(pup.pca, col = as.factor(pup.gdf$gdf$pop.sex))
legend("topright", levels(pup.gdf$gdf$pop.sex), 
       col = c(1:length(levels(pup.gdf$gdf$pop.sex))),
       pch = 1, box.lwd = 0)
i <- 1e4-1 # number of iterations
size.model <- procD.lm(coords ~ log(Csize), data=pup.gdf$gdf, iter=i)
anova(size.model)
sex.model <- procD.lm(coords ~ log(Csize) + sex, data=pup.gdf$gdf, iter=i) 
anova(sex.model)
anova(size.model, sex.model)
pop.model <- procD.lm(coords ~ log(Csize) + pop, data=pup.gdf$gdf, iter=i) 
sex.pop.model <- procD.lm(coords ~ log(Csize) + sex + pop, data=pup.gdf$gdf, iter=i) 
anova(size.model, pop.model, sex.pop.model)
sex.by.pop.model <- procD.lm(coords ~ log(Csize) + sex * pop, data=pup.gdf$gdf, iter=i) 
anova(sex.pop.model, sex.by.pop.model)
sex.by.pop.model <- procD.lm(coords ~ log(Csize) + sex + pop + sex:pop, data=pup.gdf$gdf, iter=i) 
pop.unique.model <- procD.lm(coords ~ log(Csize) * pop, data=pup.gdf$gdf, iter=i)
anova(pop.model, pop.unique.model)
plotAllometry(fit = pop.unique.model, size = pup.gdf$gdf$Csize, 
              col = pup.gdf$gdf$pop, xlab = "log centroid size")

Problem 1

pop.unique.model2 <- procD.lm(coords ~ log(Csize) * pop + sex, data=pup.gdf$gdf, iter=i)
anova(sex.pop.model, pop.unique.model2)
plotAllometry(fit = pop.unique.model2, size = pup.gdf$gdf$Csize, 
              col = pup.gdf$gdf$pop.sex, xlab = "log centroid size")

Anova Results

Analysis of Variance, using Residual Randomization
Permutation procedure: Randomization of null model residuals 
Number of permutations: 10000 
Estimation method: Ordinary Least Squares 
Effect sizes (Z) based on F distributions

                                       ResDf Df      RSS        SS        MS      Rsq      F
coords ~ log(Csize) + sex + pop (Null)    50  1 0.027002                     0.000000       
coords ~ log(Csize) * pop + sex           49  1 0.025351 0.0016509 0.0016509 0.029343 3.1909
Total                                     53    0.056262                                    
                                            Z      P Pr(>F)
coords ~ log(Csize) + sex + pop (Null)                     
coords ~ log(Csize) * pop + sex        2.5575 0.0067       
Total  

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Sex and population are an important factors influencing pupfish shape (permutation-based Procrustes ANOVA, F= 3.1909, p = .0067). The interaction between population and size was significant in determining that these groups have unique allometries.

Tutorial 2

create.tps(
  input.filename = "Ofas.RNAi.nota.digitization.csv",
  output.filename = "Ofas.RNAi.nota.tps",
  id.factors = c('digitizer','treatment'),
  include.scale = TRUE,
  invert.scale = TRUE)
bug.nota <- read.tps("Ofas.RNAi.nota.tps", keep.original.ids = TRUE)
nota.lines <- matrix(c(1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,8, 8,1, 2,6),
                     ncol = 2, byrow = TRUE)
bug.nota <- align.reflect(bug.nota, links = nota.lines)
bug.gpa <- align.procrustes(bug.nota)
x <- bug.gpa$Csize > 500
bug.gpa$Csize[x] <- NA

x <- bug.gpa$metadata$treatment == "vr"
bug.gpa$metadata$treatment[x] <- "vg"

x <- bug.gpa$metadata$treatment == "wildtype"
bug.gpa$metadata$treatment[x] <- "wt"
bug.gdf <- listed.gdf(bug.gpa)
bug.pca <- gm.prcomp(bug.gdf$gdf$coords)
ggGMMplot(bug.pca, 
          group = bug.gdf$gdf$treatment, 
          group.title = 'treatment', 
          convex.hulls = TRUE, 
          include.legend = TRUE )

Problem 2

i <- 1e4-1 
bug.gdf <- listed.gdf(bug.gpa)
bug.model1 <- procD.lm(coords ~ log(Csize), data = bug.gdf$gdf, iter = i)
bug.model2 <- procD.lm(coords ~ log(Csize) + digitizer, data = bug.gdf$gdf, iter = i)
anova(bug.model1, bug.model2)

First, I wanted to look at whether or not the digitizer affected the size of the milkweed bug.

Analysis of Variance, using Residual Randomization
Permutation procedure: Randomization of null model residuals 
Number of permutations: 10000 
Estimation method: Ordinary Least Squares 
Effect sizes (Z) based on F distributions

                                ResDf Df    RSS     SS      MS     Rsq      F      Z     P Pr(>F)
coords ~ log(Csize) (Null)         88  1 2.2163                0.00000                           
coords ~ log(Csize) + digitizer    80  8 0.9453 1.2711 0.15888 0.57208 13.446 5.9842 1e-04       
Total                              89    2.2218   

The sample digitizer had a significant effect on the size of the sample, meaning there was non insignificant human error (permutation-based Procrustes ANOVA, F= 13.446, p < .001)

Then I wanted to see if there was any allometry changes between treatment. This was done by modeling treatment and size (and controlling for digitizer), and then modeling an interaction between shape and treatment, to see if the rate of the change in size was affected by treatment.

bug.model3 <- procD.lm(coords ~ log(Csize) + treatment + digitizer, data = bug.gdf$gdf, iter = i)
bug.model4 <- procD.lm(coords ~ log(Csize) * treatment + digitizer, data = bug.gdf$gdf, iter = i)
anova(bug.model3, bug.model4)
 Analysis of Variance, using Residual Randomization
Permutation procedure: Randomization of null model residuals 
Number of permutations: 10000 
Estimation method: Ordinary Least Squares 
Effect sizes (Z) based on F distributions

                                                   ResDf Df     RSS       SS       MS       Rsq      F       Z      P Pr(>F)
coords ~ log(Csize) + treatment + digitizer (Null)    71  1 0.13921                   0.0000000                             
coords ~ log(Csize) * treatment + digitizer           62  9 0.12141 0.017802 0.001978 0.0080123 1.0101 0.12622 0.4545       
Total  

There is no evidence of allometry between bug size and treatments (permutation-based Procrustes ANOVA, F= 1.0101, p = .4545)