|
| 1 | +# Code for analyses in Bigman et al. (2018) Journal of Morphology |
| 2 | + |
| 3 | +# Please cite the following if code or data is used: |
| 4 | +# Bigman JS, Pardo SA, Prinzing TS, Dando M, Wegner NC, Dulvy NK. |
| 5 | +# Ecological lifestyles and the scaling of shark gill surface area. |
| 6 | +# Journal of Morphology. 2018;1–9. https://doi.org/10.1002/jmor.20879 |
| 7 | + |
| 8 | +# packages |
| 9 | +# devtools::install_github("dgrtwo/broom") |
| 10 | +library(tidyverse) |
| 11 | +library(tidyr) |
| 12 | +library(cowplot) |
| 13 | +library(ggplot2) |
| 14 | +library(MASS) |
| 15 | +library(broom) |
| 16 | +library(lme4) |
| 17 | +library(nlme) |
| 18 | +library(forcats) |
| 19 | + |
| 20 | +#### Data wrangling #### |
| 21 | + |
| 22 | +## Mustelus gill surface area data |
| 23 | +MusCaliGSA <- read.csv("MustelusCalifornicusGSA_Data.csv", header = TRUE, |
| 24 | + strip.white = TRUE) %>% tbl_df() # smoothhound raw data |
| 25 | +## Gill surface area data for other 11 sharks |
| 26 | +AllSharkData <- read.csv("Bigman_raw_data_combined.csv", header = TRUE, |
| 27 | + strip.white = TRUE) %>% tbl_df |
| 28 | + |
| 29 | +## Mustelus data transformations |
| 30 | + |
| 31 | +#Gill surface area |
| 32 | +MusCaliGSA$MassG <- (MusCaliGSA$MassKG*1000) |
| 33 | +MusCaliGSA$Log10MassG <- log10(MusCaliGSA$MassG) |
| 34 | +MusCaliGSA$Log10GSAcm2 <- log10(MusCaliGSA$GSAcm2) |
| 35 | + |
| 36 | +# Total filament length |
| 37 | +MusCaliGSA$Log10FilamentLength <- log10(MusCaliGSA$TotalFilamentLength2Sides) |
| 38 | + |
| 39 | +# Average lamellar frequency |
| 40 | +MusCaliGSA$Log10LamFreq <- log10(MusCaliGSA$LamellarFrequency) |
| 41 | + |
| 42 | +# Mean bilateral lamellar surface area |
| 43 | +MusCaliGSA$Log10LamSA <- log10(MusCaliGSA$BilateralLamellarSA) |
| 44 | + |
| 45 | + |
| 46 | +## Remaining shark data transformations |
| 47 | +AllSharkData$Log10MassG <- log10(AllSharkData$MassG) |
| 48 | +AllSharkData$Log10GSAcm2 <- log10(AllSharkData$GSAcm2) |
| 49 | + |
| 50 | +AllSharkData$Log10CenterMassG <- scale(AllSharkData$Log10MassG, |
| 51 | + center = log10(5000), scale = FALSE) |
| 52 | + |
| 53 | + |
| 54 | +#### Analyses #### |
| 55 | + |
| 56 | +## Mustelus gill surface area |
| 57 | + |
| 58 | +# Total gill surface area regression and prediction |
| 59 | +GSA.mass.log <- lm(Log10GSAcm2 ~ Log10MassG, data = MusCaliGSA) |
| 60 | +summary(GSA.mass.log) |
| 61 | + |
| 62 | +predict <- predict(GSA.mass.log, interval="prediction") |
| 63 | +MusCaliGSA <- cbind(MusCaliGSA, predict) |
| 64 | +MusCaliGSA$Fit.NoLog <- 10^(MusCaliGSA$fit) |
| 65 | +MusCaliGSA$Upper.NoLog <- 10^(MusCaliGSA$upr) |
| 66 | +MusCaliGSA$Lower.NoLog <- 10^(MusCaliGSA$lwr) |
| 67 | + |
| 68 | + |
| 69 | +# Total filament length regression and prediction |
| 70 | +FilamentLength.mass <- lm(Log10FilamentLength ~ Log10MassG, data = MusCaliGSA) |
| 71 | +summary(FilamentLength.mass) |
| 72 | + |
| 73 | +predict.FilamentLengthLog10 <- predict(FilamentLength.mass, interval="prediction") |
| 74 | +MusCaliGSA.FilamentLength <- data.frame(MusCaliGSA$MassG, MusCaliGSA$TotalFilamentLength2Sides, |
| 75 | + MusCaliGSA$Log10FilamentLength, MusCaliGSA$Log10MassG, |
| 76 | + predict.FilamentLengthLog10) |
| 77 | +MusCaliGSA.FilamentLength$FitFilLength.NoLog <- 10^(MusCaliGSA.FilamentLength$fit) |
| 78 | +MusCaliGSA.FilamentLength$UpperFilLength.NoLog <- 10^(MusCaliGSA.FilamentLength$upr) |
| 79 | +MusCaliGSA.FilamentLength$LowerFilLength.NoLog <- 10^(MusCaliGSA.FilamentLength$lwr) |
| 80 | + |
| 81 | + |
| 82 | +# Average lamellar frequency regression and prediction |
| 83 | +LamFreq.mass <- lm(Log10LamFreq ~ Log10MassG, data = MusCaliGSA) |
| 84 | +summary(LamFreq.mass) |
| 85 | + |
| 86 | +predict.Log10LamFreq <- predict(LamFreq.mass, interval="prediction") |
| 87 | +MusCaliGSA.LamFreq <-data.frame(MusCaliGSA$MassG, MusCaliGSA$LamellarFrequency, |
| 88 | + MusCaliGSA$Log10MassG, MusCaliGSA$Log10LamFreq, |
| 89 | + predict.Log10LamFreq) |
| 90 | +MusCaliGSA.LamFreq$FitFilLength.NoLog <- 10^(MusCaliGSA.LamFreq$fit) |
| 91 | +MusCaliGSA.LamFreq$UpperFilLength.NoLog <- 10^(MusCaliGSA.LamFreq$upr) |
| 92 | +MusCaliGSA.LamFreq$LowerFilLength.NoLog <- 10^(MusCaliGSA.LamFreq$lwr) |
| 93 | + |
| 94 | + |
| 95 | +# Mean bilateral lamellar surface area regression and prediction |
| 96 | +LamSA.mass <- lm(Log10LamSA ~ Log10MassG, data = MusCaliGSA) |
| 97 | +summary(LamSA.mass) |
| 98 | + |
| 99 | +predict.Log10LamSA <- predict(LamSA.mass, interval="prediction") |
| 100 | +MusCaliGSA.LamSA <- data.frame(MusCaliGSA$MassG, MusCaliGSA$BilateralLamellarSA, |
| 101 | + MusCaliGSA$Log10LamSA, MusCaliGSA$Log10MassG, |
| 102 | + predict.Log10LamSA) |
| 103 | +MusCaliGSA.LamSA$FitFilLength.NoLog <- 10^(MusCaliGSA.LamSA$fit) |
| 104 | +MusCaliGSA.LamSA$UpperFilLength.NoLog <- 10^(MusCaliGSA.LamSA$upr) |
| 105 | +MusCaliGSA.LamSA$LowerFilLength.NoLog <- 10^(MusCaliGSA.LamSA$lwr) |
| 106 | + |
| 107 | + |
| 108 | +#### Scaling of gill surface area for all 12 sharks #### |
| 109 | + |
| 110 | +## Regressions to estimate coefficients |
| 111 | +fitted_models.Log10CenterMass <- AllSharkData %>% |
| 112 | + group_by(Species) %>% |
| 113 | + do(fits.Log10CenterMass = lm(Log10GSAcm2 ~ Log10CenterMassG, data = .)) |
| 114 | + |
| 115 | +model.output.Log10CenterMass <- fitted_models.Log10CenterMass %>% |
| 116 | + tidy(fits.Log10CenterMass) |
| 117 | +fits.Log10CenterMass <- fitted_models.Log10CenterMass %>% |
| 118 | + augment(fits.Log10CenterMass) |
| 119 | + |
| 120 | +## Do intercepts and slopes differ across species? |
| 121 | +mod1 <- lm(Log10GSAcm2 ~ Log10CenterMassG * Species - 1, data = AllSharkData) # |
| 122 | +coef(mod1) |
| 123 | +summary(mod1) |
| 124 | + |
| 125 | +## Do ecological lifestyle traits differ across species? |
| 126 | + |
| 127 | +# 1. Caudal fin aspect ratio |
| 128 | +ActivityLevelDifferences <- lme(Log10GSAcm2 ~ Log10CenterMassG * AspectRatio, |
| 129 | + random = ~ Log10CenterMassG | Species, |
| 130 | + data = AllSharkData, control = lmeControl(opt = "optim")) |
| 131 | +coef(ActivityLevelDifferences) |
| 132 | +summary(ActivityLevelDifferences) |
| 133 | + |
| 134 | +# 2. Habitat type |
| 135 | +HabitatDifferences <- lme(Log10GSAcm2 ~ Log10CenterMassG * HabitatType, |
| 136 | + random = ~ Log10CenterMassG | Species, |
| 137 | + data = AllSharkData, control = lmeControl(opt = "optim")) |
| 138 | +coef(HabitatDifferences) |
| 139 | +summary(HabitatDifferences) |
| 140 | + |
| 141 | +# 3. Maximum size |
| 142 | +MaxSizeDifferences <- lme(Log10GSAcm2 ~ Log10CenterMassG * LogMaxMassG, |
| 143 | + random = ~ Log10CenterMassG | Species, |
| 144 | + data = AllSharkData, control = lmeControl(opt = "optim")) |
| 145 | +coef(MaxSizeDifferences) |
| 146 | +summary(MaxSizeDifferences) |
| 147 | + |
| 148 | + |
| 149 | + |
| 150 | + |
| 151 | + |
| 152 | + |
| 153 | + |
| 154 | + |
0 commit comments