pacman::p_load(dplyr, readxl, tidyr, raster, vegan, tigris, sf, sp, plotly, ggrepel, kableExtra, brms)

# 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")
tree_data <- tree_data %>%
  filter(Authority %in% c("BRSF", "WSF", "Jay"))

# 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")
fuel_data <- fuel_data %>%
  filter(Authority %in% c("BRSF", "WSF", "Jay"))

Seasonal_Fuel_Sampling <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/01_FuelDynamics/02_Data/02_Fuel_Data/Seasonal_Fuel_Sampling.xlsx",
                                     sheet = "Fuel_Data")
Seasonal_Fuel_Sampling <- Seasonal_Fuel_Sampling %>%
  filter(Authority %in% c("BRSF", "WSF", "Jay"))

# Seasonal Sampling Locations
Seasonal_Sampling_Locations <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/01_FuelDynamics/02_Data/02_Fuel_Data/Seasonal_Fuel_Sampling.xlsx",
                                          sheet = "Sites")
Seasonal_Sampling_Locations <- Seasonal_Sampling_Locations %>%
  filter(Authority %in% c("BRSF", "WSF", "Jay"))

# Bag Weights
bag_weights <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/01_FuelDynamics/02_Data/02_Fuel_Data/Seasonal_Fuel_Sampling.xlsx",
                                          sheet = "Bag_Avg")
## New names:
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
# Site Data
CogonSites <- read_excel("C:/Users/DrewIvory/OneDrive - University of Florida/Desktop/School/PHD/01_Projects/05_SharedData/CogonSites_FL_AL_MS.xlsx")
CogonSites <- CogonSites %>%
  filter(Authority %in% c("BRSF", "WSF", "Jay"))

# Only include Florida/Alabama Sites
CogonSites <- CogonSites[CogonSites$Authority != "CNF" & CogonSites$Authority != "DSNF", ]

Filter All data to only include specified species (Per PLANTS database)

Filter all data to only include species found at 3% of all sites

#Fuel Dynamics ## Combine seasonal fuel data

Net Weight Method

Live

Comb_Live_Data_Net <- Combined_Data_Net %>%
  mutate(
    Live_Bag = as.numeric(Live_Bag),
    Live_Weight_Post = as.numeric(Live_Weight_Post),
    Live_Weight_Initial = as.numeric(Live_Weight_Initial),
    Live_Height = as.numeric(Height),
    Net_Live = as.numeric(Net_Live),
    Status = as.character(Status)  # Status as a character
  )
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Live_Height = as.numeric(Height)`.
## Caused by warning:
## ! NAs introduced by coercion
Comb_Live_Data_Net <- Comb_Live_Data_Net %>%
  mutate(biomass = Net_Live)

Comb_Live_Data_Net <- Comb_Live_Data_Net %>%
  filter(biomass >= 0)

Comb_Live_Data_Net <- Comb_Live_Data_Net %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, ((Live_Weight_Initial - Live_Bag) - Net_Live) / Net_Live * 100, NA))

avg_live_values_Net <- Comb_Live_Data_Net %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_live_biomass = mean(biomass, na.rm = TRUE),
            avg_live_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            avg_height = mean(Live_Height, na.rm = TRUE) / 100,
            .groups = "drop")

Dead

Comb_Dead_Data_Net <- Combined_Data_Net %>%
  mutate(
    Dead_Bag = as.numeric(Dead_Bag),
    Dead_Weight_Post = as.numeric(Dead_Weight_Post),
    Dead_Weight_Initial = as.numeric(Dead_Weight_Initial),
    Net_Dead = as.numeric(Net_Dead),
    Status = as.character(Status)  # Status as a character
  )

Comb_Dead_Data_Net <- Comb_Dead_Data_Net %>%
  mutate(biomass = Net_Dead)

Comb_Dead_Data_Net <- Comb_Dead_Data_Net %>%
  filter(biomass >= 0)

Comb_Dead_Data_Net <- Comb_Dead_Data_Net %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, ((Dead_Weight_Initial - Dead_Bag) - Net_Dead) / Net_Dead * 100, NA))

avg_dead_values_Net <- Comb_Dead_Data_Net %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_dead_biomass = mean(biomass, na.rm = TRUE),
            avg_dead_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            .groups = "drop")

Litter

Comb_Litter_Data_Net <- Combined_Data_Net %>%
  mutate(
    Litter_Bag = as.numeric(Litter_Bag),
    Litter_Weight_Post = as.numeric(Litter_Weight_Post),
    Litter_Weight_Initial = as.numeric(Litter_Weight_Initial),
    Net_Litter = as.numeric(Net_Litter),
    Status = as.character(Status)  # Status as a character
  )

Comb_Litter_Data_Net <- Comb_Litter_Data_Net %>%
  mutate(biomass = Net_Litter)

Comb_Litter_Data_Net <- Comb_Litter_Data_Net %>%
  filter(biomass >= 0)

Comb_Litter_Data_Net <- Comb_Litter_Data_Net %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, ((Litter_Weight_Initial - Litter_Bag) - Net_Litter) / Net_Litter * 100, NA))

avg_litter_values_Net <- Comb_Litter_Data_Net %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_litter_biomass = mean(biomass, na.rm = TRUE),
            avg_litter_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            .groups = "drop")

Average Bag Weight Method

Live

Comb_Live_Data_Avg <- Combined_Data_Avg %>%
  mutate(
    Live_Bag = as.numeric(Live_Bag),
    Live_Weight_Post = as.numeric(Live_Weight_Post),
    Live_Weight_Initial = as.numeric(Live_Weight_Initial),
    Live_Height = as.numeric(Height),
    Dry_LiveBag = as.numeric(Dry_LiveBag),
    Status = as.character(Status)  # Status as a character
  )
## Warning: There were 2 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `Live_Height = as.numeric(Height)`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
Comb_Live_Data_Avg <- Comb_Live_Data_Avg %>%
  mutate(biomass = Live_Weight_Post - Dry_LiveBag)

Comb_Live_Data_Avg <- Comb_Live_Data_Avg %>%
  filter(biomass >= 0)

Comb_Live_Data_Avg <- Comb_Live_Data_Avg %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, (Live_Weight_Initial - Live_Weight_Post) / biomass * 100, NA))

avg_live_values_Avg <- Comb_Live_Data_Avg %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_live_biomass = mean(biomass, na.rm = TRUE),
            avg_live_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            avg_height = mean(Live_Height, na.rm = TRUE) / 100,
            .groups = "drop")

Dead

Comb_Dead_Data_Avg <- Combined_Data_Avg %>%
  mutate(
    Dead_Bag = as.numeric(Dead_Bag),
    Dead_Weight_Post = as.numeric(Dead_Weight_Post),
    Dead_Weight_Initial = as.numeric(Dead_Weight_Initial),
    Dry_DeadBag = as.numeric(Dry_DeadBag),
    Status = as.character(Status)  # Status as a character
  )
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Dry_DeadBag = as.numeric(Dry_DeadBag)`.
## Caused by warning:
## ! NAs introduced by coercion
Comb_Dead_Data_Avg <- Comb_Dead_Data_Avg %>%
  mutate(biomass = Dead_Weight_Post - Dry_DeadBag)

Comb_Dead_Data_Avg <- Comb_Dead_Data_Avg %>%
  filter(biomass >= 0)

Comb_Dead_Data_Avg <- Comb_Dead_Data_Avg %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, (Dead_Weight_Initial - Dead_Weight_Post) / biomass * 100, NA))

avg_dead_values_Avg <- Comb_Dead_Data_Avg %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_dead_biomass = mean(biomass, na.rm = TRUE),
            avg_dead_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            .groups = "drop")

Litter

Comb_Litter_Data_Avg <- Combined_Data_Avg %>%
  mutate(
    Litter_Bag = as.numeric(Litter_Bag),
    Litter_Weight_Post = as.numeric(Litter_Weight_Post),
    Litter_Weight_Initial = as.numeric(Litter_Weight_Initial),
    Dry_LitterBag = as.numeric(Dry_LitterBag),
    Status = as.character(Status)  # Status as a character
  )
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Dry_LitterBag = as.numeric(Dry_LitterBag)`.
## Caused by warning:
## ! NAs introduced by coercion
Comb_Litter_Data_Avg <- Comb_Litter_Data_Avg %>%
  mutate(biomass = Litter_Weight_Post - Dry_LitterBag)

Comb_Litter_Data_Avg <- Comb_Litter_Data_Avg %>%
  filter(biomass >= 0)

Comb_Litter_Data_Avg <- Comb_Litter_Data_Avg %>%
  mutate(relative_moisture_content = ifelse(biomass > bioT, (Litter_Weight_Initial - Litter_Weight_Post) / biomass * 100, NA))

avg_litter_values_Avg <- Comb_Litter_Data_Avg %>%
  group_by(Plot, Season, Status) %>%
  summarize(avg_litter_biomass = mean(biomass, na.rm = TRUE),
            avg_litter_moisture_content = mean(relative_moisture_content, na.rm = TRUE),
            avg_soil_moisture = mean(Soil_Moisture, na.rm = TRUE),
            .groups = "drop")

Fill in gaps within Net method with Avg method.

# Live
avg_live_values_Combined <- avg_live_values_Net %>%
  full_join(avg_live_values_Avg, by = "Plot", suffix = c("_Net", "_Avg")) %>%
  mutate(
    avg_live_biomass = coalesce(avg_live_biomass_Net, avg_live_biomass_Avg),
    avg_live_moisture_content = coalesce(avg_live_moisture_content_Net, avg_live_moisture_content_Avg),
    avg_soil_moisture = coalesce(avg_soil_moisture_Net, avg_soil_moisture_Avg),
    avg_height = coalesce(avg_height_Net, avg_height_Avg),
    Season = coalesce(Season_Net, Season_Avg),
    Status = coalesce(Status_Net, Status_Avg)
  ) %>%
  select(Plot, Season, Status, avg_live_biomass, avg_live_moisture_content, avg_soil_moisture, avg_height)

# Dead
avg_dead_values_Combined <- avg_dead_values_Net %>%
  full_join(avg_dead_values_Avg, by = "Plot", suffix = c("_Net", "_Avg")) %>%
  mutate(
    avg_dead_biomass = coalesce(avg_dead_biomass_Net, avg_dead_biomass_Avg),
    avg_dead_moisture_content = coalesce(avg_dead_moisture_content_Net, avg_dead_moisture_content_Avg),
    avg_soil_moisture = coalesce(avg_soil_moisture_Net, avg_soil_moisture_Avg),
    Season = coalesce(Season_Net, Season_Avg),
    Status = coalesce(Status_Net, Status_Avg)
  ) %>%
  select(Plot, Season, Status, avg_dead_biomass, avg_dead_moisture_content, avg_soil_moisture)

# Litter
avg_litter_values_Combined <- avg_litter_values_Net %>%
  full_join(avg_litter_values_Avg, by = "Plot", suffix = c("_Net", "_Avg")) %>%
  mutate(
    avg_litter_biomass = coalesce(avg_litter_biomass_Net, avg_litter_biomass_Avg),
    avg_litter_moisture_content = coalesce(avg_litter_moisture_content_Net, avg_litter_moisture_content_Avg),
    avg_soil_moisture = coalesce(avg_soil_moisture_Net, avg_soil_moisture_Avg),
    Season = coalesce(Season_Net, Season_Avg),
    Status = coalesce(Status_Net, Status_Avg)
  ) %>%
  select(Plot, Season, Status, avg_litter_biomass, avg_litter_moisture_content, avg_soil_moisture)

Combine summer sampling (CogonSites) locations with winter sampling locations

Merge avg_live_values, avg_dead_values, and avg_litter_values

Average Fuel Values by Invasion Status and Season

There are 10,000 square meters in a hectare. Biomass is from 25 cm by 25 cm quadrats, so we have 0.0625 square meters. Therefore, 10,000/0.0625 = 160,000. So biomass gets multiplied by 160,000 and divided by 1,000,000 to convert from grams to tonnes.

25th, 50th and 75 quantiles of fuel values

Fuel_model_quantiles <- avg_fuel_values %>%
  group_by(Status, Season) %>%
  summarize(avg_live_biomass_25 = quantile(avg_live_biomass, 0.25, na.rm = TRUE) * 0.16,
            avg_live_biomass_50 = quantile(avg_live_biomass, 0.50, na.rm = TRUE) * 0.16,
            avg_live_biomass_75 = quantile(avg_live_biomass, 0.75, na.rm = TRUE) * 0.16,
            avg_dead_biomass_25 = quantile(avg_dead_biomass, 0.25, na.rm = TRUE) * 0.16,
            avg_dead_biomass_50 = quantile(avg_dead_biomass, 0.50, na.rm = TRUE) * 0.16,
            avg_dead_biomass_75 = quantile(avg_dead_biomass, 0.75, na.rm = TRUE) * 0.16,
            avg_litter_biomass_25 = quantile(avg_litter_biomass, 0.25, na.rm = TRUE) * 0.16,
            avg_litter_biomass_50 = quantile(avg_litter_biomass, 0.50, na.rm = TRUE) * 0.16,
            avg_litter_biomass_75 = quantile(avg_litter_biomass, 0.75, na.rm = TRUE) * 0.16,
            avg_live_moisture_content_25 = quantile(avg_live_moisture_content, 0.25, na.rm = TRUE),
            avg_live_moisture_content_50 = quantile(avg_live_moisture_content, 0.50, na.rm = TRUE),
            avg_live_moisture_content_75 = quantile(avg_live_moisture_content, 0.75, na.rm = TRUE),
            avg_dead_moisture_content_25 = quantile(avg_dead_moisture_content, 0.25, na.rm = TRUE),
            avg_dead_moisture_content_50 = quantile(avg_dead_moisture_content, 0.50, na.rm = TRUE),
            avg_dead_moisture_content_75 = quantile(avg_dead_moisture_content, 0.75, na.rm = TRUE),
            avg_litter_moisture_content_25 = quantile(avg_litter_moisture_content, 0.25, na.rm = TRUE),
            avg_litter_moisture_content_50 = quantile(avg_litter_moisture_content, 0.50, na.rm = TRUE),
            avg_litter_moisture_content_75 = quantile(avg_litter_moisture_content, 0.75, na.rm = TRUE),
            avg_soil_moisture_25 = quantile(avg_soil_moisture, 0.25, na.rm = TRUE),
            avg_soil_moisture_50 = quantile(avg_soil_moisture, 0.50, na.rm = TRUE),
            avg_soil_moisture_75 = quantile(avg_soil_moisture, 0.75, na.rm = TRUE),
            avg_height_25 = quantile(avg_height, 0.25, na.rm = TRUE),
            avg_height_50 = quantile(avg_height, 0.50, na.rm = TRUE),
            avg_height_75 = quantile(avg_height, 0.75, na.rm = TRUE),
            .groups = "drop")

# Kable table of quantiles
kable(Fuel_model_quantiles)
Status Season avg_live_biomass_25 avg_live_biomass_50 avg_live_biomass_75 avg_dead_biomass_25 avg_dead_biomass_50 avg_dead_biomass_75 avg_litter_biomass_25 avg_litter_biomass_50 avg_litter_biomass_75 avg_live_moisture_content_25 avg_live_moisture_content_50 avg_live_moisture_content_75 avg_dead_moisture_content_25 avg_dead_moisture_content_50 avg_dead_moisture_content_75 avg_litter_moisture_content_25 avg_litter_moisture_content_50 avg_litter_moisture_content_75 avg_soil_moisture_25 avg_soil_moisture_50 avg_soil_moisture_75 avg_height_25 avg_height_50 avg_height_75
Invaded Green_Up 1.1562667 2.1616000 3.4720000 1.8922667 2.4192000 3.108267 3.486400 4.974400 9.215467 54.66557 117.06158 133.0470 9.195465 10.39843 16.57708 9.487179 11.44906 14.92138 4.833333 5.766667 7.10000 0.5600000 0.7533333 0.9500000
Invaded Summer 1.7720000 2.4472000 3.7221333 1.2645333 2.3952000 4.480933 2.325600 4.085333 6.754400 133.21727 147.42139 168.2493 13.454489 18.01118 27.29767 11.681481 21.20772 35.50451 6.316667 10.900000 12.95833 0.6633333 0.8050000 1.0100000
Invaded Winter 0.9458667 1.4976000 2.4898667 1.9476000 3.4101333 6.198267 3.023867 5.620267 7.916800 95.76815 119.49396 151.1411 13.788625 19.72430 36.73561 15.979345 27.86209 47.96388 5.933333 10.916667 13.89167 0.7116667 0.8500000 0.9733333
Non_Invaded Green_Up 0.3685333 0.5088000 0.7546667 0.3370667 0.7482667 1.361600 3.924267 6.187200 8.342933 51.67528 80.33146 146.1973 9.750584 15.46700 17.59368 7.290356 12.30107 17.27920 3.066667 4.033333 9.30000 0.2333333 0.3333333 0.4366667
Non_Invaded Summer 0.2821333 0.5946667 1.0218667 0.1384000 0.3152000 0.896000 3.992200 6.060000 7.308933 133.27391 163.91720 191.7656 8.801051 15.42178 29.73250 10.007541 21.21443 47.66848 3.741667 5.500000 11.65833 0.1533333 0.2366667 0.3366667
Non_Invaded Winter 0.2112000 0.2728000 0.5125333 0.3168000 0.7242667 1.806667 4.612133 6.603733 9.257733 30.64949 85.18529 184.4349 11.679660 16.25337 49.32975 15.910721 42.65335 56.80946 6.233333 9.566667 12.37500 0.1116667 0.2366667 0.3583333

Objective 1- Cogongrass relationship with fuel dynamics

Data Cleaning

GLMM Live Fuel Biomass

Model Comparison

Conditional Effects Live Biomass

GLMM Dead Fuel Biomass

Model Comparison

GLMM Litter Fuel Biomass

Model Comparison

GLMM Live Moisture

Model Comparison

GLMM Dead Moisture

Model Comparison

GLMM Litter Moisture

Model Comparison

GLMM Soil Moisture

Model Comparison

GLMM Veg Height

Model Comparison