Install necessary packages and import appropriate data
pacman::p_load(tidyverse, readxl, raster, vegan, tigris, sf, sjPlot, sp, spOccupancy, ggrepel, lme4, lmerTest, MuMIn, brms, MCMCvis, cmdstanr, lubridate, forcats, tidybayes, ggdist)
# Install dependencies
#install.packages(c("posterior", "RcppParallel", "jsonlite"))
# Install cmdstanr
#install.packages("cmdstanr", repos = c("https://mc-stan.org/r-packages/", getOption("repos")))
# Tree PCQ Data
tree_data <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/05_SharedData/Field_Data_FL_AL_MS.xlsx",
sheet = "Tree_PCQ")
# Soil Data
fuel_data <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/05_SharedData/Field_Data_FL_AL_MS.xlsx",
sheet = "Fuel_Sampling")
# Veg Data
Veg_Cover <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/05_SharedData/Field_Data_FL_AL_MS.xlsx",
sheet = "Veg_Cover")
# Shrub Cover Data
shrub_data <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/05_SharedData/Field_Data_FL_AL_MS.xlsx",
sheet = "Shrub_Cover")
# Site Data
CameraData <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/04_Wildlife/02_Data/CameraData.xlsx")
CameraLoc <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/04_Wildlife/02_Data/CameraLoc.xlsx",
sheet = "CameraLocations")
# Add effort data
effort_matrix <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/04_Wildlife/02_Data/CameraLoc.xlsx",
sheet = "Effort_Matrix_Full") %>%
pivot_longer(cols = matches("^202[4-5]-"), names_to = "week", values_to = "days") %>%
filter(days == "7") %>%
dplyr::select(Plot, week)
# Count the total number of quadrats per plot
quadrat_count <- Veg_Cover %>%
group_by(Plot) %>%
summarize(total_quadrats = n_distinct(Quadrat), .groups = "drop")
#Filter tree data to only include trees with "tree" in the growth column
tree_data <- dplyr::filter(tree_data, Growth == "Tree")
#Filter Veg Cover to exclude Shrubs and Trees
Veg_Cover <- dplyr::filter(Veg_Cover, Growth != "Shrub" & Growth != "Tree")
#Filter Shrub Cover to only include Shrubs and Trees
shrub_data <- dplyr::filter(shrub_data, Growth == "Shrub" | Growth == "Tree")
# Total number of sites
total_sites <- nrow(CameraLoc)
# Function to filter data by frequency
filter_by_frequency <- function(df) {
# Group data by species and calculate the frequency
freq <- df %>%
group_by(Species) %>%
summarise(Frequency = n_distinct(Plot) / nrow(CameraLoc) * 100) %>%
filter(Frequency >= 0)
# Filter the original data to include only species with frequency >= XX%
filtered_df <- df %>%
filter(Species %in% freq$Species)
return(filtered_df)
}
# Filter tree data by frequency
tree_data <- filter_by_frequency(tree_data)
# Filter Veg Cover data by frequency
Veg_Cover <- filter_by_frequency(Veg_Cover)
# Filter Shrub Cover data by frequency
shrub_data <- filter_by_frequency(shrub_data)
# Total length of Shrub cover at a site
shrub_cover <- shrub_data %>%
mutate(Cover = Line_End - Line_Start) %>%
group_by(Species_Name, Plot) %>%
summarise(Shrub_Total_Cover = sum(Cover, na.rm = TRUE), .groups = "drop") %>%
mutate(Shrub_Percent_Cover = Shrub_Total_Cover / 3000 * 100)
# Summed length of shrub over at a site
shrub_cover_summed <- shrub_cover %>%
group_by(Plot) %>%
summarize(total_shrub_cover = sum(Shrub_Total_Cover, na.rm = TRUE), .groups = "drop")
# Combine Plot and Quadrat columns
Veg_Cover <- Veg_Cover %>%
mutate(Plot_Quadrat = paste(Plot, Quadrat, sep = '_'))
# Join with CogonSites to get site information
Veg_Cover <- Veg_Cover %>%
left_join(CameraLoc, by = "Plot")
# Sum species cover across quadrats for each species at each plot
veg_cover_summed <- Veg_Cover %>%
group_by(Plot, Species_Name) %>%
summarize(total_cover = sum(Cover_Per, na.rm = TRUE), .groups = "drop")
# Calculate average herbaceous species cover
avg_species_cover <- veg_cover_summed %>%
left_join(quadrat_count, by = "Plot") %>%
mutate(avg_cover = total_cover / total_quadrats)
# Merge shrub cover with herbaceous average cover
combined_cover <- avg_species_cover %>%
full_join(
shrub_cover %>%
dplyr::select(Plot, Species_Name, Shrub_Percent_Cover),
by = c("Plot", "Species_Name")
) %>%
mutate(
overlap_flag = ifelse(!is.na(avg_cover) & !is.na(Shrub_Percent_Cover), TRUE, FALSE), # Flag overlaps
final_cover = case_when(
!is.na(avg_cover) & is.na(Shrub_Percent_Cover) ~ avg_cover, # Use herbaceous cover if no shrub data
is.na(avg_cover) & !is.na(Shrub_Percent_Cover) ~ Shrub_Percent_Cover, # Use shrub cover if no herbaceous data
TRUE ~ NA_real_ # Leave as NA where overlaps exist
)
)
# Species Matrix
species_matrix <- combined_cover %>%
dplyr::select(Plot, Species_Name, final_cover) %>%
pivot_wider(
names_from = Species_Name,
values_from = final_cover,
values_fill = 0
)
avg_cogongrass_cover <- species_matrix %>%
group_by(Plot) %>%
summarize(Avg_Cogongrass_Cover = sum(Imperata_cylindrica, na.rm = TRUE) / n(), .groups = "drop")
# Summarize species cover by site
site_species_cover <- Veg_Cover %>%
group_by(Plot, Species_Name) %>%
summarize(total_cover = sum(Cover_Per, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'Plot'. You can override using the
## `.groups` argument.
# Calculate Shannon diversity per site
Veg_shannon_diversity <- site_species_cover %>%
group_by(Plot) %>%
mutate(proportion = total_cover / sum(total_cover)) %>%
summarize(Veg_shannon_index = -sum(proportion * log(proportion), na.rm = TRUE))
print(Veg_shannon_diversity)
## # A tibble: 206 × 2
## Plot Veg_shannon_index
## <chr> <dbl>
## 1 BI200 2.28
## 2 BI201 2.20
## 3 BI202 1.50
## 4 BI97 1.82
## 5 BI99 3.06
## 6 BN210 2.97
## 7 BN211 2.43
## 8 BN212 2.22
## 9 BN96 3.05
## 10 BN98 2.79
## # ℹ 196 more rows
if (!is.numeric(fuel_data$Height)) {
fuel_data$Height <- as.numeric(as.character(fuel_data$Height))
}
## Warning: NAs introduced by coercion
# Calculate average vegetation height per plot
veg_height <- fuel_data %>%
group_by(Plot) %>%
summarize(avg_veg_height = mean(Height, na.rm = TRUE), .groups = "drop")
# Tree density from point-centered quarter data
if (!is.numeric(tree_data$Distance)) {
tree_data$Distance <- as.numeric(as.character(tree_data$Distance))
}
tree_density_data <- tree_data %>%
group_by(Plot) %>%
summarize(Average_Distance = mean(Distance) / 100, # Convert to meters
Tree_Density = 10000 / (Average_Distance^2)) # Convert to trees per hectare
# Average canopy cover from vegetation quadrats
tree_canopy_data <- Veg_Cover %>%
distinct(Plot, Quadrat, .keep_all = TRUE) %>% # Ensure each quadrat counts once per plot
group_by(Plot) %>%
summarize(Avg_Canopy_Cover = mean(Canopy_Cover, na.rm = TRUE), .groups = "drop") # Calculate the average canopy cover per plot
cor(tree_density_data$Tree_Density, tree_canopy_data$Avg_Canopy_Cover)
## [1] 0.2742307
CameraData <- CameraData%>%
dplyr::select(-Status)
O2_data <- CameraData %>%
left_join(CameraLoc_O2, by = "Plot")
O2_data <- O2_data %>%
mutate(
DateTime = update(Date,
hour = hour(Time),
minute = minute(Time),
second = second(Time))
)
gap_mins <- 30
O2_data <- O2_data %>%
filter(!is.na(DateTime)) %>%
arrange(Plot, Name, DateTime) %>%
group_by(Plot, Name) %>%
group_modify(~{
df <- .x
keep <- logical(nrow(df))
last_kept <- as.POSIXct(NA, tz = tz(df$DateTime[1]))
for (i in seq_len(nrow(df))) {
if (is.na(last_kept) || difftime(df$DateTime[i], last_kept, units = "mins") > gap_mins) {
keep[i] <- TRUE
last_kept <- df$DateTime[i]
}
}
df[keep, , drop = FALSE]
}) %>%
ungroup()
dat <- O2_data %>%
filter(!is.na(Behavior), !is.na(Status), !is.na(BehLoc)) %>%
mutate(
# time-of-day as proportion of a 24-hour day, then z-score and quadratic
time_prop = (hour(DateTime)*3600 + minute(DateTime)*60 + second(DateTime)) / 86400,
time_z = as.numeric(scale(time_prop)),
time_z2 = time_z^2,
# temperature standardized
temp_z = as.numeric(scale(Air.TemperatureC)),
# month factor to absorb temporal clustering
Month = factor(month(DateTime)),
# set factor baselines
Behavior = factor(Behavior, ordered = FALSE),
Behavior = relevel(Behavior, ref = "Local_Search"),
Status = factor(Status, levels = c("Non_Invaded","Invaded")),
BehLoc = factor(BehLoc, levels = c("Non_Patch","Patch")), # ensure Non_Patch vs Patch
Plot = factor(Plot),
Name = factor(Name),
Site = factor(Site),
Camera.Type = factor(Camera.Type)
)
# Priors (weakly informative, regularizing)
priors <- c(
prior(normal(0, 1), class = "b", dpar = "muForaging"),
prior(normal(0, 1), class = "b", dpar = "muTransit"),
prior(normal(0, 2.5), class = "Intercept", dpar = "muForaging"),
prior(normal(0, 2.5), class = "Intercept", dpar = "muTransit"),
prior(exponential(1), class = "sd", dpar = "muForaging"),
prior(exponential(1), class = "sd", dpar = "muTransit")
)
# 1) BETWEEN SITES: Do behaviors differ at invaded vs non-invaded sites?
# Multilevel multinomial (categorical) model with population-level effects and random intercepts
model_status <- brm(
bf(Behavior ~ Status * Name +
(1 | Site) + (1 | Camera.Type) + (1 | Month)),
family = categorical(link = "logit", refcat = "Local_Search"),
data = dat,
prior = priors,
chains = 4, cores = 4, iter = 4000, warmup = 2000,
control = list(adapt_delta = 0.95, max_treedepth = 12)
)
## Compiling Stan program...
## Start sampling
## Warning: There were 12 divergent transitions after warmup. See
## https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## to find out why this is a problem and how to eliminate them.
## Warning: Examine the pairs() plot to diagnose sampling problems
# Quick diagnostics
summary(model_status)
## Warning: There were 12 divergent transitions after warmup. Increasing
## adapt_delta above 0.95 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## Family: categorical
## Links: muForaging = logit; muTransit = logit
## Formula: Behavior ~ Status * Name + (1 | Site) + (1 | Camera.Type) + (1 | Month)
## Data: dat (Number of observations: 2815)
## Draws: 4 chains, each with iter = 4000; warmup = 2000; thin = 1;
## total post-warmup draws = 8000
##
## Multilevel Hyperparameters:
## ~Camera.Type (Number of levels: 4)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.40 0.35 0.02 1.29 1.00 2803
## sd(muTransit_Intercept) 0.21 0.21 0.01 0.76 1.00 3526
## Tail_ESS
## sd(muForaging_Intercept) 3875
## sd(muTransit_Intercept) 4034
##
## ~Month (Number of levels: 9)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.67 0.23 0.35 1.22 1.00 3114
## sd(muTransit_Intercept) 0.17 0.11 0.01 0.44 1.00 2445
## Tail_ESS
## sd(muForaging_Intercept) 4265
## sd(muTransit_Intercept) 3680
##
## ~Site (Number of levels: 5)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.17 0.17 0.00 0.61 1.00 4102
## sd(muTransit_Intercept) 0.47 0.23 0.20 1.07 1.00 4653
## Tail_ESS
## sd(muForaging_Intercept) 4329
## sd(muTransit_Intercept) 5508
##
## Regression Coefficients:
## Estimate Est.Error l-95% CI
## muForaging_Intercept -0.51 0.53 -1.55
## muTransit_Intercept 1.51 0.42 0.69
## muForaging_StatusInvaded -0.21 0.44 -1.07
## muForaging_NameDasypus_novemcinctus 1.84 0.54 0.81
## muForaging_NameDidelphis_virginiana 0.89 0.73 -0.56
## muForaging_NameLynx_rufus -0.44 0.89 -2.26
## muForaging_NameMeleagris_gallopavo 0.23 0.67 -1.09
## muForaging_NameOdocoileus_virginianus 1.12 0.38 0.39
## muForaging_NameProcyon_lotor -0.71 0.55 -1.81
## muForaging_NameSciurus_carolinensis 0.07 0.69 -1.28
## muForaging_NameSylvilagus_floridanus 1.54 0.61 0.36
## muForaging_StatusInvaded:NameDasypus_novemcinctus 0.53 0.62 -0.69
## muForaging_StatusInvaded:NameDidelphis_virginiana 0.08 0.80 -1.51
## muForaging_StatusInvaded:NameLynx_rufus -0.19 0.94 -2.04
## muForaging_StatusInvaded:NameMeleagris_gallopavo 0.12 0.87 -1.65
## muForaging_StatusInvaded:NameOdocoileus_virginianus -0.14 0.45 -1.02
## muForaging_StatusInvaded:NameProcyon_lotor -0.17 0.67 -1.47
## muForaging_StatusInvaded:NameSciurus_carolinensis 0.17 0.75 -1.32
## muForaging_StatusInvaded:NameSylvilagus_floridanus 0.42 0.74 -1.02
## muTransit_StatusInvaded 0.20 0.39 -0.56
## muTransit_NameDasypus_novemcinctus 0.70 0.49 -0.26
## muTransit_NameDidelphis_virginiana 0.21 0.66 -1.05
## muTransit_NameLynx_rufus 1.47 0.73 0.08
## muTransit_NameMeleagris_gallopavo 0.05 0.56 -1.02
## muTransit_NameOdocoileus_virginianus -0.17 0.30 -0.76
## muTransit_NameProcyon_lotor -0.49 0.41 -1.29
## muTransit_NameSciurus_carolinensis -0.86 0.62 -2.05
## muTransit_NameSylvilagus_floridanus -0.11 0.58 -1.23
## muTransit_StatusInvaded:NameDasypus_novemcinctus 0.01 0.59 -1.14
## muTransit_StatusInvaded:NameDidelphis_virginiana 0.36 0.74 -1.08
## muTransit_StatusInvaded:NameLynx_rufus 0.62 0.87 -1.03
## muTransit_StatusInvaded:NameMeleagris_gallopavo -0.24 0.79 -1.76
## muTransit_StatusInvaded:NameOdocoileus_virginianus -0.26 0.40 -1.06
## muTransit_StatusInvaded:NameProcyon_lotor -0.08 0.50 -1.08
## muTransit_StatusInvaded:NameSciurus_carolinensis -0.49 0.68 -1.81
## muTransit_StatusInvaded:NameSylvilagus_floridanus 0.12 0.70 -1.24
## u-95% CI Rhat Bulk_ESS
## muForaging_Intercept 0.52 1.00 4346
## muTransit_Intercept 2.31 1.00 5564
## muForaging_StatusInvaded 0.64 1.00 5923
## muForaging_NameDasypus_novemcinctus 2.90 1.00 8038
## muForaging_NameDidelphis_virginiana 2.27 1.00 9883
## muForaging_NameLynx_rufus 1.27 1.00 12736
## muForaging_NameMeleagris_gallopavo 1.55 1.00 11025
## muForaging_NameOdocoileus_virginianus 1.86 1.00 6383
## muForaging_NameProcyon_lotor 0.34 1.00 8589
## muForaging_NameSciurus_carolinensis 1.43 1.00 9417
## muForaging_NameSylvilagus_floridanus 2.77 1.00 8546
## muForaging_StatusInvaded:NameDasypus_novemcinctus 1.73 1.00 7915
## muForaging_StatusInvaded:NameDidelphis_virginiana 1.66 1.00 12312
## muForaging_StatusInvaded:NameLynx_rufus 1.61 1.00 13458
## muForaging_StatusInvaded:NameMeleagris_gallopavo 1.77 1.00 13431
## muForaging_StatusInvaded:NameOdocoileus_virginianus 0.74 1.00 5934
## muForaging_StatusInvaded:NameProcyon_lotor 1.14 1.00 9001
## muForaging_StatusInvaded:NameSciurus_carolinensis 1.65 1.00 10506
## muForaging_StatusInvaded:NameSylvilagus_floridanus 1.88 1.00 10009
## muTransit_StatusInvaded 0.97 1.00 5088
## muTransit_NameDasypus_novemcinctus 1.67 1.00 8280
## muTransit_NameDidelphis_virginiana 1.49 1.00 10185
## muTransit_NameLynx_rufus 2.93 1.00 10870
## muTransit_NameMeleagris_gallopavo 1.18 1.00 10680
## muTransit_NameOdocoileus_virginianus 0.40 1.00 6503
## muTransit_NameProcyon_lotor 0.30 1.00 7606
## muTransit_NameSciurus_carolinensis 0.36 1.00 8873
## muTransit_NameSylvilagus_floridanus 1.07 1.00 9221
## muTransit_StatusInvaded:NameDasypus_novemcinctus 1.17 1.00 7186
## muTransit_StatusInvaded:NameDidelphis_virginiana 1.81 1.00 9982
## muTransit_StatusInvaded:NameLynx_rufus 2.35 1.00 12094
## muTransit_StatusInvaded:NameMeleagris_gallopavo 1.34 1.00 11778
## muTransit_StatusInvaded:NameOdocoileus_virginianus 0.53 1.00 5041
## muTransit_StatusInvaded:NameProcyon_lotor 0.90 1.00 6334
## muTransit_StatusInvaded:NameSciurus_carolinensis 0.84 1.00 8259
## muTransit_StatusInvaded:NameSylvilagus_floridanus 1.53 1.00 10095
## Tail_ESS
## muForaging_Intercept 4482
## muTransit_Intercept 5452
## muForaging_StatusInvaded 5919
## muForaging_NameDasypus_novemcinctus 6254
## muForaging_NameDidelphis_virginiana 5956
## muForaging_NameLynx_rufus 6115
## muForaging_NameMeleagris_gallopavo 6623
## muForaging_NameOdocoileus_virginianus 5826
## muForaging_NameProcyon_lotor 6222
## muForaging_NameSciurus_carolinensis 6373
## muForaging_NameSylvilagus_floridanus 6355
## muForaging_StatusInvaded:NameDasypus_novemcinctus 5804
## muForaging_StatusInvaded:NameDidelphis_virginiana 5954
## muForaging_StatusInvaded:NameLynx_rufus 5907
## muForaging_StatusInvaded:NameMeleagris_gallopavo 6430
## muForaging_StatusInvaded:NameOdocoileus_virginianus 5510
## muForaging_StatusInvaded:NameProcyon_lotor 6610
## muForaging_StatusInvaded:NameSciurus_carolinensis 6028
## muForaging_StatusInvaded:NameSylvilagus_floridanus 6753
## muTransit_StatusInvaded 5106
## muTransit_NameDasypus_novemcinctus 6625
## muTransit_NameDidelphis_virginiana 5804
## muTransit_NameLynx_rufus 5196
## muTransit_NameMeleagris_gallopavo 6396
## muTransit_NameOdocoileus_virginianus 6266
## muTransit_NameProcyon_lotor 5925
## muTransit_NameSciurus_carolinensis 5526
## muTransit_NameSylvilagus_floridanus 6663
## muTransit_StatusInvaded:NameDasypus_novemcinctus 6404
## muTransit_StatusInvaded:NameDidelphis_virginiana 5879
## muTransit_StatusInvaded:NameLynx_rufus 6394
## muTransit_StatusInvaded:NameMeleagris_gallopavo 5760
## muTransit_StatusInvaded:NameOdocoileus_virginianus 4954
## muTransit_StatusInvaded:NameProcyon_lotor 6174
## muTransit_StatusInvaded:NameSciurus_carolinensis 5541
## muTransit_StatusInvaded:NameSylvilagus_floridanus 6119
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
plot(model_status)
waic(model_status)
## Warning:
## 5 (0.2%) p_waic estimates greater than 0.4. We recommend trying loo instead.
##
## Computed from 8000 by 2815 log-likelihood matrix.
##
## Estimate SE
## elpd_waic -2539.2 31.4
## p_waic 43.6 1.9
## waic 5078.3 62.8
##
## 5 (0.2%) p_waic estimates greater than 0.4. We recommend trying loo instead.
loo(model_status)
##
## Computed from 8000 by 2815 log-likelihood matrix.
##
## Estimate SE
## elpd_loo -2539.3 31.4
## p_loo 43.7 2.0
## looic 5078.6 62.9
## ------
## MCSE of elpd_loo is 0.1.
## MCSE and ESS estimates assume MCMC draws (r_eff in [0.6, 1.6]).
##
## All Pareto k estimates are good (k < 0.7).
## See help('pareto-k-diagnostic') for details.
# 2) WITHIN INVADED: Do behaviors differ inside vs outside cogongrass patches?
dat_inv <- dat %>% filter(Status == "Invaded")
# Priors for the within-invaded model (same structure, applies to both non-reference categories)
priors_inv <- c(
prior(normal(0, 1), class = "b", dpar = "muForaging"),
prior(normal(0, 1), class = "b", dpar = "muTransit"),
prior(normal(0, 2.5), class = "Intercept", dpar = "muForaging"),
prior(normal(0, 2.5), class = "Intercept", dpar = "muTransit"),
prior(exponential(1), class = "sd", dpar = "muForaging"),
prior(exponential(1), class = "sd", dpar = "muTransit")
)
model_loc <- brm(
bf(Behavior ~ BehLoc * Name +
(1 | Site) + (1 | Camera.Type) + (1 | Month)),
family = categorical(link = "logit", refcat = "Local_Search"),
data = dat_inv,
prior = priors_inv,
chains = 4, cores = 4, iter = 4000, warmup = 2000,
control = list(adapt_delta = 0.95, max_treedepth = 12)
)
## Compiling Stan program...
## Start sampling
## Warning: There were 1 divergent transitions after warmup. See
## https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## to find out why this is a problem and how to eliminate them.
## Warning: Examine the pairs() plot to diagnose sampling problems
summary(model_loc)
## Warning: There were 1 divergent transitions after warmup. Increasing
## adapt_delta above 0.95 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## Family: categorical
## Links: muForaging = logit; muTransit = logit
## Formula: Behavior ~ BehLoc * Name + (1 | Site) + (1 | Camera.Type) + (1 | Month)
## Data: dat_inv (Number of observations: 1300)
## Draws: 4 chains, each with iter = 4000; warmup = 2000; thin = 1;
## total post-warmup draws = 8000
##
## Multilevel Hyperparameters:
## ~Camera.Type (Number of levels: 4)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.62 0.45 0.05 1.77 1.00 2711
## sd(muTransit_Intercept) 0.55 0.35 0.11 1.47 1.00 2916
## Tail_ESS
## sd(muForaging_Intercept) 2576
## sd(muTransit_Intercept) 2384
##
## ~Month (Number of levels: 9)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.43 0.20 0.11 0.91 1.00 2145
## sd(muTransit_Intercept) 0.25 0.16 0.01 0.63 1.00 2448
## Tail_ESS
## sd(muForaging_Intercept) 1856
## sd(muTransit_Intercept) 3102
##
## ~Site (Number of levels: 5)
## Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS
## sd(muForaging_Intercept) 0.70 0.40 0.14 1.69 1.00 2963
## sd(muTransit_Intercept) 0.61 0.34 0.20 1.46 1.00 3087
## Tail_ESS
## sd(muForaging_Intercept) 2649
## sd(muTransit_Intercept) 4535
##
## Regression Coefficients:
## Estimate Est.Error l-95% CI
## muForaging_Intercept -0.03 0.70 -1.42
## muTransit_Intercept 0.93 0.60 -0.32
## muForaging_BehLocPatch -1.29 0.59 -2.46
## muForaging_NameDasypus_novemcinctus 1.60 0.55 0.56
## muForaging_NameDidelphis_virginiana 0.34 0.75 -1.14
## muForaging_NameLynx_rufus -0.59 0.87 -2.34
## muForaging_NameMeleagris_gallopavo 0.11 0.85 -1.58
## muForaging_NameOdocoileus_virginianus 0.27 0.44 -0.59
## muForaging_NameProcyon_lotor -1.23 0.57 -2.35
## muForaging_NameSciurus_carolinensis -0.14 0.67 -1.48
## muForaging_NameSylvilagus_floridanus 1.06 0.68 -0.26
## muForaging_BehLocPatch:NameDasypus_novemcinctus -0.32 0.80 -1.92
## muForaging_BehLocPatch:NameDidelphis_virginiana -0.17 0.93 -2.04
## muForaging_BehLocPatch:NameLynx_rufus -0.02 1.00 -1.99
## muForaging_BehLocPatch:NameMeleagris_gallopavo -0.05 0.99 -2.02
## muForaging_BehLocPatch:NameOdocoileus_virginianus -0.28 0.62 -1.47
## muForaging_BehLocPatch:NameProcyon_lotor -0.14 0.92 -1.96
## muForaging_BehLocPatch:NameSciurus_carolinensis -0.05 0.98 -1.97
## muForaging_BehLocPatch:NameSylvilagus_floridanus -0.12 0.96 -2.07
## muTransit_BehLocPatch 1.84 0.50 0.89
## muTransit_NameDasypus_novemcinctus 0.49 0.51 -0.49
## muTransit_NameDidelphis_virginiana 0.16 0.67 -1.12
## muTransit_NameLynx_rufus 1.47 0.74 0.08
## muTransit_NameMeleagris_gallopavo -0.32 0.80 -1.91
## muTransit_NameOdocoileus_virginianus -0.63 0.40 -1.42
## muTransit_NameProcyon_lotor -0.41 0.45 -1.29
## muTransit_NameSciurus_carolinensis -0.79 0.59 -1.94
## muTransit_NameSylvilagus_floridanus -0.12 0.64 -1.36
## muTransit_BehLocPatch:NameDasypus_novemcinctus -0.36 0.71 -1.72
## muTransit_BehLocPatch:NameDidelphis_virginiana 0.53 0.89 -1.16
## muTransit_BehLocPatch:NameLynx_rufus 0.05 0.99 -1.85
## muTransit_BehLocPatch:NameMeleagris_gallopavo 0.17 0.93 -1.65
## muTransit_BehLocPatch:NameOdocoileus_virginianus 0.09 0.52 -0.96
## muTransit_BehLocPatch:NameProcyon_lotor 0.41 0.75 -1.02
## muTransit_BehLocPatch:NameSciurus_carolinensis 0.13 0.94 -1.67
## muTransit_BehLocPatch:NameSylvilagus_floridanus 0.25 0.92 -1.51
## u-95% CI Rhat Bulk_ESS
## muForaging_Intercept 1.35 1.00 3261
## muTransit_Intercept 2.04 1.00 3259
## muForaging_BehLocPatch -0.14 1.00 5243
## muForaging_NameDasypus_novemcinctus 2.68 1.00 5996
## muForaging_NameDidelphis_virginiana 1.80 1.00 9393
## muForaging_NameLynx_rufus 1.05 1.00 9712
## muForaging_NameMeleagris_gallopavo 1.74 1.00 9396
## muForaging_NameOdocoileus_virginianus 1.12 1.00 4860
## muForaging_NameProcyon_lotor -0.14 1.00 6259
## muForaging_NameSciurus_carolinensis 1.14 1.00 8496
## muForaging_NameSylvilagus_floridanus 2.41 1.00 8607
## muForaging_BehLocPatch:NameDasypus_novemcinctus 1.26 1.00 9559
## muForaging_BehLocPatch:NameDidelphis_virginiana 1.66 1.00 12085
## muForaging_BehLocPatch:NameLynx_rufus 1.94 1.00 13532
## muForaging_BehLocPatch:NameMeleagris_gallopavo 1.88 1.00 12813
## muForaging_BehLocPatch:NameOdocoileus_virginianus 0.97 1.00 5296
## muForaging_BehLocPatch:NameProcyon_lotor 1.66 1.00 10540
## muForaging_BehLocPatch:NameSciurus_carolinensis 1.87 1.00 11686
## muForaging_BehLocPatch:NameSylvilagus_floridanus 1.73 1.00 12069
## muTransit_BehLocPatch 2.86 1.00 4861
## muTransit_NameDasypus_novemcinctus 1.52 1.00 5387
## muTransit_NameDidelphis_virginiana 1.55 1.00 7795
## muTransit_NameLynx_rufus 2.99 1.00 9806
## muTransit_NameMeleagris_gallopavo 1.26 1.00 10597
## muTransit_NameOdocoileus_virginianus 0.14 1.00 4215
## muTransit_NameProcyon_lotor 0.49 1.00 4772
## muTransit_NameSciurus_carolinensis 0.38 1.00 7009
## muTransit_NameSylvilagus_floridanus 1.18 1.00 7883
## muTransit_BehLocPatch:NameDasypus_novemcinctus 1.05 1.00 7602
## muTransit_BehLocPatch:NameDidelphis_virginiana 2.31 1.00 10611
## muTransit_BehLocPatch:NameLynx_rufus 2.00 1.00 11829
## muTransit_BehLocPatch:NameMeleagris_gallopavo 2.00 1.00 12704
## muTransit_BehLocPatch:NameOdocoileus_virginianus 1.05 1.00 4916
## muTransit_BehLocPatch:NameProcyon_lotor 1.94 1.00 8505
## muTransit_BehLocPatch:NameSciurus_carolinensis 1.96 1.00 13409
## muTransit_BehLocPatch:NameSylvilagus_floridanus 2.11 1.00 11597
## Tail_ESS
## muForaging_Intercept 4632
## muTransit_Intercept 4297
## muForaging_BehLocPatch 4892
## muForaging_NameDasypus_novemcinctus 5961
## muForaging_NameDidelphis_virginiana 6417
## muForaging_NameLynx_rufus 6155
## muForaging_NameMeleagris_gallopavo 6196
## muForaging_NameOdocoileus_virginianus 5848
## muForaging_NameProcyon_lotor 6095
## muForaging_NameSciurus_carolinensis 6327
## muForaging_NameSylvilagus_floridanus 6205
## muForaging_BehLocPatch:NameDasypus_novemcinctus 6029
## muForaging_BehLocPatch:NameDidelphis_virginiana 5809
## muForaging_BehLocPatch:NameLynx_rufus 5983
## muForaging_BehLocPatch:NameMeleagris_gallopavo 5914
## muForaging_BehLocPatch:NameOdocoileus_virginianus 5649
## muForaging_BehLocPatch:NameProcyon_lotor 5740
## muForaging_BehLocPatch:NameSciurus_carolinensis 5283
## muForaging_BehLocPatch:NameSylvilagus_floridanus 6207
## muTransit_BehLocPatch 5160
## muTransit_NameDasypus_novemcinctus 5846
## muTransit_NameDidelphis_virginiana 5884
## muTransit_NameLynx_rufus 5937
## muTransit_NameMeleagris_gallopavo 5640
## muTransit_NameOdocoileus_virginianus 5209
## muTransit_NameProcyon_lotor 5735
## muTransit_NameSciurus_carolinensis 6009
## muTransit_NameSylvilagus_floridanus 6339
## muTransit_BehLocPatch:NameDasypus_novemcinctus 5953
## muTransit_BehLocPatch:NameDidelphis_virginiana 6187
## muTransit_BehLocPatch:NameLynx_rufus 5861
## muTransit_BehLocPatch:NameMeleagris_gallopavo 6165
## muTransit_BehLocPatch:NameOdocoileus_virginianus 5566
## muTransit_BehLocPatch:NameProcyon_lotor 5732
## muTransit_BehLocPatch:NameSciurus_carolinensis 5716
## muTransit_BehLocPatch:NameSylvilagus_floridanus 5727
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
plot(model_loc)
waic(model_loc)
## Warning:
## 7 (0.5%) p_waic estimates greater than 0.4. We recommend trying loo instead.
##
## Computed from 8000 by 1300 log-likelihood matrix.
##
## Estimate SE
## elpd_waic -1008.8 24.7
## p_waic 37.1 1.9
## waic 2017.7 49.5
##
## 7 (0.5%) p_waic estimates greater than 0.4. We recommend trying loo instead.
loo(model_loc)
##
## Computed from 8000 by 1300 log-likelihood matrix.
##
## Estimate SE
## elpd_loo -1009.0 24.7
## p_loo 37.3 1.9
## looic 2018.0 49.5
## ------
## MCSE of elpd_loo is 0.1.
## MCSE and ESS estimates assume MCMC draws (r_eff in [0.5, 1.9]).
##
## All Pareto k estimates are good (k < 0.7).
## See help('pareto-k-diagnostic') for details.
# Prediction grid for invasion status
newdata <- expand_grid(
Status = c("Non_Invaded", "Invaded"),
Name = unique(dat$Name) # Include all species to get marginal effect
) %>%
mutate(
Site = NA,
Camera.Type = NA,
Month = NA
)
# Get posterior predictions
pred_draws <- add_epred_draws(
newdata,
model_status,
re_formula = NA, # Marginalizing over random effects
ndraws = 2000
) %>%
ungroup()
# Marginal predictions across species (average effect)
marginal_predictions <- pred_draws %>%
group_by(Status, .draw, .category) %>%
summarise(.epred = mean(.epred), .groups = "drop")
# Summary statistics
behavior_summary <- marginal_predictions %>%
group_by(Status, .category) %>%
median_qi(.epred, .width = 0.95) %>%
mutate(
Behavior = .category,
Probability = .epred,
Lower = .lower,
Upper = .upper
) %>%
dplyr::select(Status, Behavior, Probability, Lower, Upper)
# Reorder behaviors
behavior_summary <- behavior_summary %>%
mutate(
Behavior = factor(Behavior,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit")),
Status = factor(Status,
levels = c("Non_Invaded", "Invaded"),
labels = c("Non-Invaded", "Invaded"))
)
# Color palette
status_colors <- c("Non-Invaded" = "#0072B2", "Invaded" = "#D55E00")
# Plot-level proportions
plot_proportions <- dat %>%
group_by(Plot, Status, Behavior) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(Plot, Status) %>%
mutate(
total = sum(n),
site_prob = n / total
) %>%
ungroup() %>%
mutate(
Status = factor(Status,
levels = c("Non_Invaded", "Invaded"),
labels = c("Non-Invaded", "Invaded")),
Behavior = factor(Behavior,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit"))
)
print(plot_proportions)
## # A tibble: 94 × 6
## Plot Status Behavior n total site_prob
## <fct> <fct> <fct> <int> <int> <dbl>
## 1 BI201 Invaded Local Search 6 58 0.103
## 2 BI201 Invaded Foraging 13 58 0.224
## 3 BI201 Invaded Transit 39 58 0.672
## 4 BN211 Non-Invaded Local Search 8 83 0.0964
## 5 BN211 Non-Invaded Foraging 21 83 0.253
## 6 BN211 Non-Invaded Transit 54 83 0.651
## 7 EI100 Invaded Local Search 9 69 0.130
## 8 EI100 Invaded Foraging 17 69 0.246
## 9 EI100 Invaded Transit 43 69 0.623
## 10 EI102 Invaded Local Search 16 59 0.271
## # ℹ 84 more rows
# Plot
p <- ggplot(behavior_summary, aes(x = Behavior, y = Probability, fill = Status)) +
geom_col(position = position_dodge(width = 0.8),
width = 0.7,
color = "black",
linewidth = 0.3) +
geom_errorbar(aes(ymin = Lower, ymax = Upper),
position = position_dodge(width = 0.8),
width = 0.25,
linewidth = 0.5) +
# Add plot-level data points
geom_point(data = plot_proportions,
aes(x = Behavior, y = site_prob, fill = Status),
position = position_dodge(width = 0.8),
size = 2.5,
shape = 21,
color = "black",
alpha = 0.5,
stroke = 0.8) +
scale_fill_manual(values = status_colors,
name = "Site Status") +
scale_y_continuous(
limits = c(0, 1),
breaks = seq(0, 1, 0.1),
expand = expansion(mult = c(0, 0.02)),
labels = scales::label_percent(accuracy = 1)
) +
labs(
x = "Behavior Category",
y = "Predicted Probability",
title = NULL
) +
theme_classic(base_size = 12) +
theme(
axis.text.x = element_text(size = 11, color = "black"),
axis.text.y = element_text(size = 10, color = "black"),
axis.title = element_text(size = 12, face = "bold"),
axis.line = element_line(linewidth = 0.5),
axis.ticks = element_line(linewidth = 0.5),
legend.position = c(0.10, 0.85),
legend.title = element_text(size = 11, face = "bold"),
legend.text = element_text(size = 10),
legend.background = element_rect(fill = "white", color = "black", linewidth = 0.3),
legend.key.size = unit(1.5, "cm"),
panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3),
plot.margin = margin(10, 10, 10, 10)
)
print(p)
ggsave("Figure_Behavior_by_Invasion_Status.png",
plot = p,
width = 7,
height = 5,
dpi = 600,
bg = "white")
# Create prediction grid for BehLoc
newdata_loc <- expand_grid(
BehLoc = c("Non_Patch", "Patch"),
Name = unique(dat_inv$Name) # Include all species to get marginal effect
) %>%
mutate(
Site = NA,
Camera.Type = NA,
Month = NA
)
# Posterior predictions
pred_draws_loc <- add_epred_draws(
newdata_loc,
model_loc,
re_formula = NA, # Marginalizing over random effects
ndraws = 2000
) %>%
ungroup()
marginal_predictions_loc <- pred_draws_loc %>%
group_by(BehLoc, .draw, .category) %>%
summarise(.epred = mean(.epred), .groups = "drop")
# Summary statistics
behavior_summary_loc <- marginal_predictions_loc %>%
group_by(BehLoc, .category) %>%
median_qi(.epred, .width = 0.95) %>%
mutate(
Behavior = .category,
Probability = .epred,
Lower = .lower,
Upper = .upper
) %>%
dplyr::select(BehLoc, Behavior, Probability, Lower, Upper)
# Reorder factors
behavior_summary_loc <- behavior_summary_loc %>%
mutate(
Behavior = factor(Behavior,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit")),
BehLoc = factor(BehLoc,
levels = c("Non_Patch", "Patch"),
labels = c("Non-Patch", "Patch"))
)
# Plot-level proportions for overlay points
plot_proportions_loc <- dat_inv %>%
group_by(Plot, BehLoc, Behavior) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(Plot, BehLoc) %>%
mutate(
total = sum(n),
site_prob = n / total
) %>%
ungroup() %>%
mutate(
BehLoc = factor(BehLoc,
levels = c("Non_Patch", "Patch"),
labels = c("Non-Patch", "Patch")),
Behavior = factor(Behavior,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit"))
)
# Color palette
location_colors <- c("Non-Patch" = "#0072B2", "Patch" = "#D55E00")
p_loc <- ggplot(behavior_summary_loc, aes(x = Behavior, y = Probability, fill = BehLoc)) +
geom_col(position = position_dodge(width = 0.8),
width = 0.7,
color = "black",
linewidth = 0.3) +
geom_errorbar(aes(ymin = Lower, ymax = Upper),
position = position_dodge(width = 0.8),
width = 0.25,
linewidth = 0.5) +
# Add site-level data points
geom_point(data = plot_proportions_loc,
aes(x = Behavior, y = site_prob, fill = BehLoc),
position = position_dodge(width = 0.8),
size = 2.5,
shape = 21,
color = "black",
alpha = 0.5,
stroke = 0.8) +
scale_fill_manual(values = location_colors,
name = "Location") +
scale_y_continuous(
limits = c(0, 1),
breaks = seq(0, 1, 0.1),
expand = expansion(mult = c(0, 0.02)),
labels = scales::label_percent(accuracy = 1)
) +
labs(
x = "Behavior Category",
y = "Predicted Probability",
title = NULL
) +
theme_classic(base_size = 12) +
theme(
axis.text.x = element_text(size = 11, color = "black"),
axis.text.y = element_text(size = 10, color = "black"),
axis.title = element_text(size = 12, face = "bold"),
axis.line = element_line(linewidth = 0.5),
axis.ticks = element_line(linewidth = 0.5),
legend.position = c(0.14, 0.83),
legend.title = element_text(size = 11, face = "bold"),
legend.text = element_text(size = 10),
legend.background = element_rect(fill = "white", color = "black", linewidth = 0.3),
legend.key.size = unit(1.7, "cm"),
panel.grid.major.y = element_line(color = "gray90", linewidth = 0.3),
plot.margin = margin(10, 10, 10, 10)
)
print(p_loc)
ggsave("Figure_Behavior_by_Location.png",
plot = p_loc,
width = 7,
height = 5,
dpi = 600,
bg = "white")
pd <- function(x) {
max(mean(x > 0), mean(x < 0))
}
draws_loc <- as_draws_df(model_loc)
draws_status <- as_draws_df(model_status)
beta_loc <- draws_loc[, grep("^b_", colnames(draws_loc))]
## Warning: Dropping 'draws_df' class as required metadata was removed.
beta_status <- draws_status[, grep("^b_", colnames(draws_status))]
## Warning: Dropping 'draws_df' class as required metadata was removed.
pd_vals_loc <- apply(beta_loc, 2, pd)
beta_means_loc <- colMeans(beta_loc)
results_loc <- data.frame(
parameter = colnames(beta_loc),
mean = beta_means_loc,
pd = pd_vals_loc,
pd_95 = pd_vals_loc >= 0.95
)
head(results_loc)
## parameter
## b_muForaging_Intercept b_muForaging_Intercept
## b_muTransit_Intercept b_muTransit_Intercept
## b_muForaging_BehLocPatch b_muForaging_BehLocPatch
## b_muForaging_NameDasypus_novemcinctus b_muForaging_NameDasypus_novemcinctus
## b_muForaging_NameDidelphis_virginiana b_muForaging_NameDidelphis_virginiana
## b_muForaging_NameLynx_rufus b_muForaging_NameLynx_rufus
## mean pd pd_95
## b_muForaging_Intercept -0.03080426 0.513000 FALSE
## b_muTransit_Intercept 0.93393204 0.939625 FALSE
## b_muForaging_BehLocPatch -1.28570639 0.986375 TRUE
## b_muForaging_NameDasypus_novemcinctus 1.60448011 0.999250 TRUE
## b_muForaging_NameDidelphis_virginiana 0.33537520 0.674750 FALSE
## b_muForaging_NameLynx_rufus -0.59398428 0.742500 FALSE
pd_vals_status <- apply(beta_status, 2, pd)
beta_means_status <- colMeans(beta_status)
results_status <- data.frame(
parameter = colnames(beta_status),
mean = beta_means_status,
pd = pd_vals_status,
pd_95 = pd_vals_status >= 0.95
)
head(results_status)
## parameter
## b_muForaging_Intercept b_muForaging_Intercept
## b_muTransit_Intercept b_muTransit_Intercept
## b_muForaging_StatusInvaded b_muForaging_StatusInvaded
## b_muForaging_NameDasypus_novemcinctus b_muForaging_NameDasypus_novemcinctus
## b_muForaging_NameDidelphis_virginiana b_muForaging_NameDidelphis_virginiana
## b_muForaging_NameLynx_rufus b_muForaging_NameLynx_rufus
## mean pd pd_95
## b_muForaging_Intercept -0.5083134 0.841625 FALSE
## b_muTransit_Intercept 1.5135275 0.998625 TRUE
## b_muForaging_StatusInvaded -0.2122971 0.686500 FALSE
## b_muForaging_NameDasypus_novemcinctus 1.8384012 1.000000 TRUE
## b_muForaging_NameDidelphis_virginiana 0.8868583 0.885875 FALSE
## b_muForaging_NameLynx_rufus -0.4405670 0.683875 FALSE
results_loc$parameter <- gsub("^b_", "", results_loc$parameter)
results_status$parameter <- gsub("^b_", "", results_status$parameter)
print(results_loc)
## parameter
## b_muForaging_Intercept muForaging_Intercept
## b_muTransit_Intercept muTransit_Intercept
## b_muForaging_BehLocPatch muForaging_BehLocPatch
## b_muForaging_NameDasypus_novemcinctus muForaging_NameDasypus_novemcinctus
## b_muForaging_NameDidelphis_virginiana muForaging_NameDidelphis_virginiana
## b_muForaging_NameLynx_rufus muForaging_NameLynx_rufus
## b_muForaging_NameMeleagris_gallopavo muForaging_NameMeleagris_gallopavo
## b_muForaging_NameOdocoileus_virginianus muForaging_NameOdocoileus_virginianus
## b_muForaging_NameProcyon_lotor muForaging_NameProcyon_lotor
## b_muForaging_NameSciurus_carolinensis muForaging_NameSciurus_carolinensis
## b_muForaging_NameSylvilagus_floridanus muForaging_NameSylvilagus_floridanus
## b_muForaging_BehLocPatch:NameDasypus_novemcinctus muForaging_BehLocPatch:NameDasypus_novemcinctus
## b_muForaging_BehLocPatch:NameDidelphis_virginiana muForaging_BehLocPatch:NameDidelphis_virginiana
## b_muForaging_BehLocPatch:NameLynx_rufus muForaging_BehLocPatch:NameLynx_rufus
## b_muForaging_BehLocPatch:NameMeleagris_gallopavo muForaging_BehLocPatch:NameMeleagris_gallopavo
## b_muForaging_BehLocPatch:NameOdocoileus_virginianus muForaging_BehLocPatch:NameOdocoileus_virginianus
## b_muForaging_BehLocPatch:NameProcyon_lotor muForaging_BehLocPatch:NameProcyon_lotor
## b_muForaging_BehLocPatch:NameSciurus_carolinensis muForaging_BehLocPatch:NameSciurus_carolinensis
## b_muForaging_BehLocPatch:NameSylvilagus_floridanus muForaging_BehLocPatch:NameSylvilagus_floridanus
## b_muTransit_BehLocPatch muTransit_BehLocPatch
## b_muTransit_NameDasypus_novemcinctus muTransit_NameDasypus_novemcinctus
## b_muTransit_NameDidelphis_virginiana muTransit_NameDidelphis_virginiana
## b_muTransit_NameLynx_rufus muTransit_NameLynx_rufus
## b_muTransit_NameMeleagris_gallopavo muTransit_NameMeleagris_gallopavo
## b_muTransit_NameOdocoileus_virginianus muTransit_NameOdocoileus_virginianus
## b_muTransit_NameProcyon_lotor muTransit_NameProcyon_lotor
## b_muTransit_NameSciurus_carolinensis muTransit_NameSciurus_carolinensis
## b_muTransit_NameSylvilagus_floridanus muTransit_NameSylvilagus_floridanus
## b_muTransit_BehLocPatch:NameDasypus_novemcinctus muTransit_BehLocPatch:NameDasypus_novemcinctus
## b_muTransit_BehLocPatch:NameDidelphis_virginiana muTransit_BehLocPatch:NameDidelphis_virginiana
## b_muTransit_BehLocPatch:NameLynx_rufus muTransit_BehLocPatch:NameLynx_rufus
## b_muTransit_BehLocPatch:NameMeleagris_gallopavo muTransit_BehLocPatch:NameMeleagris_gallopavo
## b_muTransit_BehLocPatch:NameOdocoileus_virginianus muTransit_BehLocPatch:NameOdocoileus_virginianus
## b_muTransit_BehLocPatch:NameProcyon_lotor muTransit_BehLocPatch:NameProcyon_lotor
## b_muTransit_BehLocPatch:NameSciurus_carolinensis muTransit_BehLocPatch:NameSciurus_carolinensis
## b_muTransit_BehLocPatch:NameSylvilagus_floridanus muTransit_BehLocPatch:NameSylvilagus_floridanus
## mean pd pd_95
## b_muForaging_Intercept -0.03080426 0.513000 FALSE
## b_muTransit_Intercept 0.93393204 0.939625 FALSE
## b_muForaging_BehLocPatch -1.28570639 0.986375 TRUE
## b_muForaging_NameDasypus_novemcinctus 1.60448011 0.999250 TRUE
## b_muForaging_NameDidelphis_virginiana 0.33537520 0.674750 FALSE
## b_muForaging_NameLynx_rufus -0.59398428 0.742500 FALSE
## b_muForaging_NameMeleagris_gallopavo 0.11261003 0.555375 FALSE
## b_muForaging_NameOdocoileus_virginianus 0.27248601 0.730125 FALSE
## b_muForaging_NameProcyon_lotor -1.22687431 0.987250 TRUE
## b_muForaging_NameSciurus_carolinensis -0.14489733 0.577125 FALSE
## b_muForaging_NameSylvilagus_floridanus 1.06174356 0.940250 FALSE
## b_muForaging_BehLocPatch:NameDasypus_novemcinctus -0.32451369 0.657375 FALSE
## b_muForaging_BehLocPatch:NameDidelphis_virginiana -0.16719722 0.570375 FALSE
## b_muForaging_BehLocPatch:NameLynx_rufus -0.01702145 0.500125 FALSE
## b_muForaging_BehLocPatch:NameMeleagris_gallopavo -0.04922888 0.522375 FALSE
## b_muForaging_BehLocPatch:NameOdocoileus_virginianus -0.27906570 0.673875 FALSE
## b_muForaging_BehLocPatch:NameProcyon_lotor -0.13568735 0.554250 FALSE
## b_muForaging_BehLocPatch:NameSciurus_carolinensis -0.04544090 0.521125 FALSE
## b_muForaging_BehLocPatch:NameSylvilagus_floridanus -0.12145032 0.547750 FALSE
## b_muTransit_BehLocPatch 1.83700150 1.000000 TRUE
## b_muTransit_NameDasypus_novemcinctus 0.48553058 0.827000 FALSE
## b_muTransit_NameDidelphis_virginiana 0.15885013 0.587500 FALSE
## b_muTransit_NameLynx_rufus 1.47436355 0.981000 TRUE
## b_muTransit_NameMeleagris_gallopavo -0.31625107 0.653750 FALSE
## b_muTransit_NameOdocoileus_virginianus -0.62566676 0.946125 FALSE
## b_muTransit_NameProcyon_lotor -0.41329255 0.826250 FALSE
## b_muTransit_NameSciurus_carolinensis -0.79313235 0.910250 FALSE
## b_muTransit_NameSylvilagus_floridanus -0.12072143 0.574000 FALSE
## b_muTransit_BehLocPatch:NameDasypus_novemcinctus -0.35919885 0.699375 FALSE
## b_muTransit_BehLocPatch:NameDidelphis_virginiana 0.52957471 0.714750 FALSE
## b_muTransit_BehLocPatch:NameLynx_rufus 0.04701014 0.517750 FALSE
## b_muTransit_BehLocPatch:NameMeleagris_gallopavo 0.17458212 0.575625 FALSE
## b_muTransit_BehLocPatch:NameOdocoileus_virginianus 0.08613186 0.570500 FALSE
## b_muTransit_BehLocPatch:NameProcyon_lotor 0.41040036 0.701250 FALSE
## b_muTransit_BehLocPatch:NameSciurus_carolinensis 0.12796945 0.554250 FALSE
## b_muTransit_BehLocPatch:NameSylvilagus_floridanus 0.24843130 0.603500 FALSE
print(results_status)
## parameter
## b_muForaging_Intercept muForaging_Intercept
## b_muTransit_Intercept muTransit_Intercept
## b_muForaging_StatusInvaded muForaging_StatusInvaded
## b_muForaging_NameDasypus_novemcinctus muForaging_NameDasypus_novemcinctus
## b_muForaging_NameDidelphis_virginiana muForaging_NameDidelphis_virginiana
## b_muForaging_NameLynx_rufus muForaging_NameLynx_rufus
## b_muForaging_NameMeleagris_gallopavo muForaging_NameMeleagris_gallopavo
## b_muForaging_NameOdocoileus_virginianus muForaging_NameOdocoileus_virginianus
## b_muForaging_NameProcyon_lotor muForaging_NameProcyon_lotor
## b_muForaging_NameSciurus_carolinensis muForaging_NameSciurus_carolinensis
## b_muForaging_NameSylvilagus_floridanus muForaging_NameSylvilagus_floridanus
## b_muForaging_StatusInvaded:NameDasypus_novemcinctus muForaging_StatusInvaded:NameDasypus_novemcinctus
## b_muForaging_StatusInvaded:NameDidelphis_virginiana muForaging_StatusInvaded:NameDidelphis_virginiana
## b_muForaging_StatusInvaded:NameLynx_rufus muForaging_StatusInvaded:NameLynx_rufus
## b_muForaging_StatusInvaded:NameMeleagris_gallopavo muForaging_StatusInvaded:NameMeleagris_gallopavo
## b_muForaging_StatusInvaded:NameOdocoileus_virginianus muForaging_StatusInvaded:NameOdocoileus_virginianus
## b_muForaging_StatusInvaded:NameProcyon_lotor muForaging_StatusInvaded:NameProcyon_lotor
## b_muForaging_StatusInvaded:NameSciurus_carolinensis muForaging_StatusInvaded:NameSciurus_carolinensis
## b_muForaging_StatusInvaded:NameSylvilagus_floridanus muForaging_StatusInvaded:NameSylvilagus_floridanus
## b_muTransit_StatusInvaded muTransit_StatusInvaded
## b_muTransit_NameDasypus_novemcinctus muTransit_NameDasypus_novemcinctus
## b_muTransit_NameDidelphis_virginiana muTransit_NameDidelphis_virginiana
## b_muTransit_NameLynx_rufus muTransit_NameLynx_rufus
## b_muTransit_NameMeleagris_gallopavo muTransit_NameMeleagris_gallopavo
## b_muTransit_NameOdocoileus_virginianus muTransit_NameOdocoileus_virginianus
## b_muTransit_NameProcyon_lotor muTransit_NameProcyon_lotor
## b_muTransit_NameSciurus_carolinensis muTransit_NameSciurus_carolinensis
## b_muTransit_NameSylvilagus_floridanus muTransit_NameSylvilagus_floridanus
## b_muTransit_StatusInvaded:NameDasypus_novemcinctus muTransit_StatusInvaded:NameDasypus_novemcinctus
## b_muTransit_StatusInvaded:NameDidelphis_virginiana muTransit_StatusInvaded:NameDidelphis_virginiana
## b_muTransit_StatusInvaded:NameLynx_rufus muTransit_StatusInvaded:NameLynx_rufus
## b_muTransit_StatusInvaded:NameMeleagris_gallopavo muTransit_StatusInvaded:NameMeleagris_gallopavo
## b_muTransit_StatusInvaded:NameOdocoileus_virginianus muTransit_StatusInvaded:NameOdocoileus_virginianus
## b_muTransit_StatusInvaded:NameProcyon_lotor muTransit_StatusInvaded:NameProcyon_lotor
## b_muTransit_StatusInvaded:NameSciurus_carolinensis muTransit_StatusInvaded:NameSciurus_carolinensis
## b_muTransit_StatusInvaded:NameSylvilagus_floridanus muTransit_StatusInvaded:NameSylvilagus_floridanus
## mean pd
## b_muForaging_Intercept -0.50831343 0.841625
## b_muTransit_Intercept 1.51352753 0.998625
## b_muForaging_StatusInvaded -0.21229710 0.686500
## b_muForaging_NameDasypus_novemcinctus 1.83840119 1.000000
## b_muForaging_NameDidelphis_virginiana 0.88685830 0.885875
## b_muForaging_NameLynx_rufus -0.44056697 0.683875
## b_muForaging_NameMeleagris_gallopavo 0.23434054 0.637625
## b_muForaging_NameOdocoileus_virginianus 1.11766650 0.998750
## b_muForaging_NameProcyon_lotor -0.70880579 0.910375
## b_muForaging_NameSciurus_carolinensis 0.07280573 0.541500
## b_muForaging_NameSylvilagus_floridanus 1.53769281 0.993875
## b_muForaging_StatusInvaded:NameDasypus_novemcinctus 0.52815691 0.806875
## b_muForaging_StatusInvaded:NameDidelphis_virginiana 0.07727428 0.542250
## b_muForaging_StatusInvaded:NameLynx_rufus -0.19125876 0.572750
## b_muForaging_StatusInvaded:NameMeleagris_gallopavo 0.12088302 0.559250
## b_muForaging_StatusInvaded:NameOdocoileus_virginianus -0.13828183 0.618875
## b_muForaging_StatusInvaded:NameProcyon_lotor -0.16999033 0.597000
## b_muForaging_StatusInvaded:NameSciurus_carolinensis 0.16662018 0.590500
## b_muForaging_StatusInvaded:NameSylvilagus_floridanus 0.42200810 0.718500
## b_muTransit_StatusInvaded 0.19764191 0.693250
## b_muTransit_NameDasypus_novemcinctus 0.69934281 0.924000
## b_muTransit_NameDidelphis_virginiana 0.20634420 0.616875
## b_muTransit_NameLynx_rufus 1.46537849 0.982625
## b_muTransit_NameMeleagris_gallopavo 0.04601522 0.522625
## b_muTransit_NameOdocoileus_virginianus -0.16757613 0.713250
## b_muTransit_NameProcyon_lotor -0.49080071 0.885000
## b_muTransit_NameSciurus_carolinensis -0.86039418 0.914250
## b_muTransit_NameSylvilagus_floridanus -0.10988265 0.582250
## b_muTransit_StatusInvaded:NameDasypus_novemcinctus 0.01118142 0.501500
## b_muTransit_StatusInvaded:NameDidelphis_virginiana 0.36218959 0.689750
## b_muTransit_StatusInvaded:NameLynx_rufus 0.61847830 0.758375
## b_muTransit_StatusInvaded:NameMeleagris_gallopavo -0.24241798 0.626000
## b_muTransit_StatusInvaded:NameOdocoileus_virginianus -0.25833187 0.738750
## b_muTransit_StatusInvaded:NameProcyon_lotor -0.07883214 0.557250
## b_muTransit_StatusInvaded:NameSciurus_carolinensis -0.48509744 0.758125
## b_muTransit_StatusInvaded:NameSylvilagus_floridanus 0.11725317 0.561500
## pd_95
## b_muForaging_Intercept FALSE
## b_muTransit_Intercept TRUE
## b_muForaging_StatusInvaded FALSE
## b_muForaging_NameDasypus_novemcinctus TRUE
## b_muForaging_NameDidelphis_virginiana FALSE
## b_muForaging_NameLynx_rufus FALSE
## b_muForaging_NameMeleagris_gallopavo FALSE
## b_muForaging_NameOdocoileus_virginianus TRUE
## b_muForaging_NameProcyon_lotor FALSE
## b_muForaging_NameSciurus_carolinensis FALSE
## b_muForaging_NameSylvilagus_floridanus TRUE
## b_muForaging_StatusInvaded:NameDasypus_novemcinctus FALSE
## b_muForaging_StatusInvaded:NameDidelphis_virginiana FALSE
## b_muForaging_StatusInvaded:NameLynx_rufus FALSE
## b_muForaging_StatusInvaded:NameMeleagris_gallopavo FALSE
## b_muForaging_StatusInvaded:NameOdocoileus_virginianus FALSE
## b_muForaging_StatusInvaded:NameProcyon_lotor FALSE
## b_muForaging_StatusInvaded:NameSciurus_carolinensis FALSE
## b_muForaging_StatusInvaded:NameSylvilagus_floridanus FALSE
## b_muTransit_StatusInvaded FALSE
## b_muTransit_NameDasypus_novemcinctus FALSE
## b_muTransit_NameDidelphis_virginiana FALSE
## b_muTransit_NameLynx_rufus TRUE
## b_muTransit_NameMeleagris_gallopavo FALSE
## b_muTransit_NameOdocoileus_virginianus FALSE
## b_muTransit_NameProcyon_lotor FALSE
## b_muTransit_NameSciurus_carolinensis FALSE
## b_muTransit_NameSylvilagus_floridanus FALSE
## b_muTransit_StatusInvaded:NameDasypus_novemcinctus FALSE
## b_muTransit_StatusInvaded:NameDidelphis_virginiana FALSE
## b_muTransit_StatusInvaded:NameLynx_rufus FALSE
## b_muTransit_StatusInvaded:NameMeleagris_gallopavo FALSE
## b_muTransit_StatusInvaded:NameOdocoileus_virginianus FALSE
## b_muTransit_StatusInvaded:NameProcyon_lotor FALSE
## b_muTransit_StatusInvaded:NameSciurus_carolinensis FALSE
## b_muTransit_StatusInvaded:NameSylvilagus_floridanus FALSE
common_names <- c(
"Canis_latrans" = "Coyote",
"Odocoileus_virginianus" = "White-Tailed Deer",
"Dasypus_novemcinctus" = "Nine-Banded Armadillo",
"Procyon_lotor" = "Raccoon",
"Lynx_rufus" = "Bobcat",
"Didelphis_virginiana" = "Virginia Opossum",
"Sylvilagus_floridanus" = "Eastern Cottontail Rabbit",
"Meleagris_gallopavo" = "Wild Turkey",
"Sciurus_carolinensis" = "Gray Squirrel"
)
newdata_sp <- expand_grid(
Status = c("Non_Invaded", "Invaded"),
Name = unique(dat$Name)
) %>%
mutate(
Site = NA,
Camera.Type = NA,
Month = NA
)
pred_draws_sp <- add_epred_draws(
newdata_sp,
model_status,
re_formula = ~(1 | Name), # ← ONLY species RE
ndraws = 2000
)
behavior_summary_sp <- pred_draws_sp %>%
group_by(Name, Status, .category) %>%
median_qi(.epred, .width = 0.95) %>%
mutate(
Behavior = factor(.category,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit")),
Status = factor(Status,
levels = c("Non_Invaded", "Invaded"),
labels = c("Non-Invaded", "Invaded"))
)
behavior_summary_sp <- behavior_summary_sp %>%
mutate(
Name = recode(Name, !!!common_names),
Name = factor(Name, levels = common_names)
)
p_species <- ggplot(behavior_summary_sp,
aes(x = Behavior, y = .epred, fill = Status)) +
geom_col(position = position_dodge(0.8),
width = 0.7,
color = "black") +
geom_errorbar(aes(ymin = .lower, ymax = .upper),
position = position_dodge(0.8),
width = 0.25) +
facet_wrap(~ Name) +
scale_y_continuous(limits = c(0,1),
labels = scales::label_percent()) +
labs(
x = "Behavior Category",
y = "Behavior Probability"
) +
theme_classic()
print(p_species)
ggsave("Figure_Behavior_by_Species.png",
plot = p_species,
width = 7,
height = 5,
dpi = 600,
bg = "white")
newdata_loc_sp <- expand_grid(
BehLoc = c("Non_Patch", "Patch"),
Name = unique(dat_inv$Name)
) %>%
mutate(
Site = NA,
Camera.Type = NA,
Month = NA
)
pred_draws_loc_sp <- add_epred_draws(
newdata_loc_sp,
model_loc,
re_formula = ~(1 | Name), # species RE
ndraws = 2000
)
behavior_summary_loc_sp <- pred_draws_loc_sp %>%
group_by(Name, BehLoc, .category) %>%
median_qi(.epred, .width = 0.95) %>%
mutate(
Behavior = factor(.category,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit")),
BehLoc = factor(BehLoc,
levels = c("Non_Patch", "Patch"),
labels = c("Non-Patch", "Patch"))
)
behavior_summary_loc_sp <- behavior_summary_loc_sp %>%
mutate(
Name = recode(Name, !!!common_names),
Name = factor(Name, levels = common_names)
)
plot_proportions_loc_sp <- dat_inv %>%
group_by(Name, Plot, BehLoc, Behavior) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(Name, Plot, BehLoc) %>%
mutate(site_prob = n / sum(n)) %>%
ungroup() %>%
mutate(
BehLoc = factor(BehLoc,
levels = c("Non_Patch", "Patch"),
labels = c("Non-Patch", "Patch")),
Behavior = factor(Behavior,
levels = c("Local_Search", "Foraging", "Transit"),
labels = c("Local Search", "Foraging", "Transit"))
)
location_colors <- c("Non-Patch" = "#0072B2",
"Patch" = "#D55E00")
p_loc_species <- ggplot(behavior_summary_loc_sp,
aes(x = Behavior, y = .epred, fill = BehLoc)) +
geom_col(position = position_dodge(0.8),
width = 0.7,
color = "black") +
geom_errorbar(aes(ymin = .lower, ymax = .upper),
position = position_dodge(0.8),
width = 0.25) +
# geom_point(data = plot_proportions_loc_sp,
# aes(x = Behavior, y = site_prob, fill = BehLoc),
# position = position_dodge(0.8),
# size = 2.5,
# shape = 21,
# color = "black",
# alpha = 0.5,
# stroke = 0.8) +
facet_wrap(~ Name) +
scale_fill_manual(values = location_colors,
name = "Location") +
scale_y_continuous(limits = c(0,1),
labels = scales::label_percent()) +
labs(
x = "Behavior Category",
y = "Behavior Probability"
) +
theme_classic(base_size = 12)
print(p_loc_species)
ggsave("Figure_Behavior_by_Species_Within.png",
plot = p_loc_species,
width = 7,
height = 5,
dpi = 600,
bg = "white")