library(ggplot2)
nitt <- 10000
bs = 30
library(MCMCglmm)
## Loading required package: Matrix
## Loading required package: coda
## Loading required package: ape
deg_dat <- readRDS("../data/processed/degradation_parameters.RDS")
deg_dat$species.height <- as.numeric(deg_dat$species.stratum) - 0.5
pca <- prcomp(deg_dat[, c("blur.ratio", "envelope.correlation", "SNR", "excess.attenuation")], scale. = TRUE)
deg_dat$PC1 <- pca$x[, 1]
summary(pca)
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.4470 1.0243 0.7095 0.59459
## Proportion of Variance 0.5235 0.2623 0.1258 0.08839
## Cumulative Proportion 0.5235 0.7858 0.9116 1.00000
pca$rotation
## PC1 PC2 PC3 PC4
## blur.ratio 0.4897179 -0.5138268 0.5505624 0.4393626
## envelope.correlation -0.5207786 0.4589055 0.4319763 0.5758402
## SNR -0.5298089 -0.4128413 0.5127233 -0.5347705
## excess.attenuation -0.4563645 -0.5957767 -0.4973856 0.4351886
agg_deg <- aggregate(cbind(blur.ratio, envelope.correlation, SNR, excess.attenuation, PC1) ~ distance + species.stratum + playback.stratum + species, data = deg_dat, mean)
ggplot(agg_deg, aes(x = distance, y = blur.ratio, group = species, col = species.stratum)) +
geom_point() +
geom_line() +
scale_color_viridis_d() +
labs(x = "Distance (m)", y = "Blur ratio", col = "Species stratum") +
facet_wrap(~ playback.stratum) +
theme_classic(base_size = bs)

ggplot(agg_deg, aes(x = distance, y = envelope.correlation, group = species, col = species.stratum)) +
geom_point() +
geom_line() +
scale_color_viridis_d() +
labs(x = "Distance (m)", y = "Envelope correlation", col = "Species stratum") +
facet_wrap(~ playback.stratum) +
theme_classic(base_size = bs)

ggplot(agg_deg, aes(x = distance, y = SNR, group = species, col = species.stratum)) +
geom_point() +
geom_line() +
scale_color_viridis_d() +
labs(x = "Distance (m)", y = "Signal-to-noise ratio", col = "Species stratum") +
facet_wrap(~ playback.stratum) +
theme_classic(base_size = bs)

ggplot(agg_deg, aes(x = distance, y = excess.attenuation, group = species, col = species.stratum)) +
geom_point() +
geom_line() +
scale_color_viridis_d() +
labs(x = "Distance (m)", y = "Excess attenuation", col = "Species stratum") +
facet_wrap(~ playback.stratum) +
theme_classic(base_size = bs)

ggplot(agg_deg, aes(x = distance, y = PC1, group = species, col = species.stratum)) +
geom_point() +
geom_line() +
scale_color_viridis_d() +
labs(x = "Distance (m)", y = "PC1 (overall degradation)", col = "Species stratum") +
facet_wrap(~ playback.stratum) +
theme_classic(base_size = bs)

blur ratio
mod1 <- MCMCglmm(blur.ratio ~ height + species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod2 <- MCMCglmm(blur.ratio ~ height * species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod3 <- MCMCglmm(blur.ratio ~ species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod4 <- MCMCglmm(blur.ratio ~ height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
br.mods <- list(mod1, mod2, mod3, mod4)
saveRDS(br.mods, "blur.ratio.models.RDS")
br.mods <- readRDS("../blur.ratio.models.RDS")
dics <- sapply(br.mods, function(x) x$DIC)
dics <- dics - min(dics)
names(dics) <- paste0("mod", 1:4)
sort(dics)
## mod4 mod1 mod2 mod3
## 0.0000000 0.1085204 2.3235323 23.3519324
summary(br.mods[[which.min(dics)]])
##
## Iterations = 3001:9991
## Thinning interval = 10
## Sample size = 700
##
## DIC: -32380.2
##
## G-structure: ~transect
##
## post.mean l-95% CI u-95% CI eff.samp
## transect 0.0001261 1.194e-05 0.0004238 700
##
## ~signal.type
##
## post.mean l-95% CI u-95% CI eff.samp
## signal.type 0.0002393 2e-04 0.0002821 700
##
## ~distance
##
## post.mean l-95% CI u-95% CI eff.samp
## distance 0.003712 5.606e-05 0.008039 700
##
## ~species
##
## post.mean l-95% CI u-95% CI eff.samp
## species 0.003096 0.001217 0.005879 700
##
## R-structure: ~units
##
## post.mean l-95% CI u-95% CI eff.samp
## units 0.002461 0.002399 0.002536 700
##
## Location effects: blur.ratio ~ height
##
## post.mean l-95% CI u-95% CI eff.samp pMCMC
## (Intercept) 0.143471 0.077015 0.206211 700.0 0.0143 *
## height -0.007437 -0.009025 -0.005472 825.5 <0.001 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
excess.attenuation
mod1 <- MCMCglmm(excess.attenuation ~ height + species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod2 <- MCMCglmm(excess.attenuation ~ height * species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod3 <- MCMCglmm(excess.attenuation ~ species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod4 <- MCMCglmm(excess.attenuation ~ height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
ea.mods <- list(mod1, mod2, mod3, mod4)
saveRDS(ea.mods, "excess.attenuation.models.RDS")
ea.mods <- readRDS("../excess.attenuation.models.RDS")
dics <- sapply(ea.mods, function(x) x$DIC)
dics <- dics - min(dics)
names(dics) <- paste0("mod", 1:4)
sort(dics)
## mod2 mod1 mod4 mod3
## 0.000000 7.261564 7.516969 262.118659
summary(ea.mods[[which.min(dics)]])
##
## Iterations = 3001:9991
## Thinning interval = 10
## Sample size = 700
##
## DIC: 13224.8
##
## G-structure: ~transect
##
## post.mean l-95% CI u-95% CI eff.samp
## transect 0.1192 0.01779 0.3618 700
##
## ~signal.type
##
## post.mean l-95% CI u-95% CI eff.samp
## signal.type 0.008934 0.006482 0.01128 490.4
##
## ~distance
##
## post.mean l-95% CI u-95% CI eff.samp
## distance 39.61 0.8046 89.19 700
##
## ~species
##
## post.mean l-95% CI u-95% CI eff.samp
## species 0.06383 0.02233 0.1183 755.6
##
## R-structure: ~units
##
## post.mean l-95% CI u-95% CI eff.samp
## units 0.2043 0.1988 0.2097 423.3
##
## Location effects: excess.attenuation ~ height * species.height
##
## post.mean l-95% CI u-95% CI eff.samp pMCMC
## (Intercept) 5.30505 0.59968 11.23076 700 0.0429 *
## height -0.21207 -0.23316 -0.18897 700 <0.001 **
## species.height -0.04132 -0.16778 0.09561 700 0.5029
## height:species.height -0.03078 -0.04655 -0.01637 1044 <0.001 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
envelope.correlation
mod1 <- MCMCglmm(envelope.correlation ~ height + species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod2 <- MCMCglmm(envelope.correlation ~ height * species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod3 <- MCMCglmm(envelope.correlation ~ species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod4 <- MCMCglmm(envelope.correlation ~ height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
ec.mods <- list(mod1, mod2, mod3, mod4)
saveRDS(ec.mods, "envelope.correlation.models.RDS")
ec.mods <- readRDS("../envelope.correlation.models.RDS")
dics <- sapply(ec.mods, function(x) x$DIC)
dics <- dics - min(dics)
names(dics) <- paste0("mod", 1:4)
sort(dics)
## mod1 mod2 mod4 mod3
## 0.00 45602.23 45611.01 45866.70
summary(ec.mods[[which.min(dics)]])
##
## Iterations = 3001:9991
## Thinning interval = 10
## Sample size = 700
##
## DIC: -32378.41
##
## G-structure: ~transect
##
## post.mean l-95% CI u-95% CI eff.samp
## transect 0.0001216 1.105e-05 0.0003533 700
##
## ~signal.type
##
## post.mean l-95% CI u-95% CI eff.samp
## signal.type 0.0002408 0.0002007 0.0002885 700
##
## ~distance
##
## post.mean l-95% CI u-95% CI eff.samp
## distance 0.002425 4.159e-05 0.006577 700
##
## ~species
##
## post.mean l-95% CI u-95% CI eff.samp
## species 0.002917 0.001171 0.005227 700
##
## R-structure: ~units
##
## post.mean l-95% CI u-95% CI eff.samp
## units 0.00246 0.002389 0.002527 750
##
## Location effects: blur.ratio ~ height + species.height
##
## post.mean l-95% CI u-95% CI eff.samp pMCMC
## (Intercept) 0.120336 0.062820 0.195388 782.7 0.0114 *
## height -0.007497 -0.009357 -0.005756 700.0 <0.001 **
## species.height 0.016972 -0.012072 0.045922 700.0 0.2257
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Signal-to-noise ratio
mod1 <- MCMCglmm(SNR ~ height + species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod2 <- MCMCglmm(SNR ~ height * species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod3 <- MCMCglmm(SNR ~ species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod4 <- MCMCglmm(SNR ~ height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
snr.mods <- list(mod1, mod2, mod3, mod4)
saveRDS(snr.mods, "snr.models.RDS")
snr.mods <- readRDS("../snr.models.RDS")
dics <- sapply(snr.mods, function(x) x$DIC)
dics <- dics - min(dics)
names(dics) <- paste0("mod", 1:4)
sort(dics)
## mod1 mod2 mod4 mod3
## 0.000000 1.162794 1.557138 7.924739
summary(ec.mods[[which.min(dics)]])
##
## Iterations = 3001:9991
## Thinning interval = 10
## Sample size = 700
##
## DIC: -32378.41
##
## G-structure: ~transect
##
## post.mean l-95% CI u-95% CI eff.samp
## transect 0.0001216 1.105e-05 0.0003533 700
##
## ~signal.type
##
## post.mean l-95% CI u-95% CI eff.samp
## signal.type 0.0002408 0.0002007 0.0002885 700
##
## ~distance
##
## post.mean l-95% CI u-95% CI eff.samp
## distance 0.002425 4.159e-05 0.006577 700
##
## ~species
##
## post.mean l-95% CI u-95% CI eff.samp
## species 0.002917 0.001171 0.005227 700
##
## R-structure: ~units
##
## post.mean l-95% CI u-95% CI eff.samp
## units 0.00246 0.002389 0.002527 750
##
## Location effects: blur.ratio ~ height + species.height
##
## post.mean l-95% CI u-95% CI eff.samp pMCMC
## (Intercept) 0.120336 0.062820 0.195388 782.7 0.0114 *
## height -0.007497 -0.009357 -0.005756 700.0 <0.001 **
## species.height 0.016972 -0.012072 0.045922 700.0 0.2257
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
PC1
mod1 <- MCMCglmm(PC1 ~ height + species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod2 <- MCMCglmm(PC1 ~ height * species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod3 <- MCMCglmm(PC1 ~ species.height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
mod4 <- MCMCglmm(PC1 ~ height, random = ~ transect + signal.type + distance + species, data = deg_dat, verbose = FALSE, nitt = nitt)
pc.mods <- list(mod1, mod2, mod3, mod4)
saveRDS(pc.mods, "pc1.models.RDS")
pc.mods <- readRDS("../pc1.models.RDS")
dics <- sapply(pc.mods, function(x) x$DIC)
dics <- dics - min(dics)
names(dics) <- paste0("mod", 1:4)
sort(dics)
## mod4 mod1 mod2 mod3
## 0.0000000 0.1372839 1.1420333 7.0963914
summary(pc.mods[[which.min(dics)]])
##
## Iterations = 3001:9991
## Thinning interval = 10
## Sample size = 700
##
## DIC: 24206.85
##
## G-structure: ~transect
##
## post.mean l-95% CI u-95% CI eff.samp
## transect 0.06689 0.005389 0.1973 700
##
## ~signal.type
##
## post.mean l-95% CI u-95% CI eff.samp
## signal.type 0.0464 0.03762 0.05618 549.8
##
## ~distance
##
## post.mean l-95% CI u-95% CI eff.samp
## distance 5.622 0.1368 22.69 700
##
## ~species
##
## post.mean l-95% CI u-95% CI eff.samp
## species 0.5279 0.2169 0.9457 789.5
##
## R-structure: ~units
##
## post.mean l-95% CI u-95% CI eff.samp
## units 0.5849 0.5683 0.6026 700
##
## Location effects: PC1 ~ height
##
## post.mean l-95% CI u-95% CI eff.samp pMCMC
## (Intercept) 0.17256 -2.44449 2.51412 700 0.811
## height -0.05787 -0.08423 -0.03259 700 <0.001 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1