This is an analysis of a survey of anglers that recruited during the COVID-19 Pandemic. The data set includes a control group of anglers that recruited during the 3 years prior to the Pandemic. The purpose of this analysis is to identify the defining characteristics and preferences of these anglers to retain them.

library(dplyr) 
library(pander)
library(knitr)
library(tidyverse)
library(readxl)
library(naniar)
library(vegan)
library(ggplot2)
library(rockchalk)
library(effectsize)
library(survey)
library(car)
library(ggeffects)
library(caret) 
library(regclass) 
library(generalhoslem)
library(effects)
library(faraway)
library(ecodist)
library(ape)
library(lmPerm)
library(factoextra)
library(kableExtra)
library(ade4)
library(BiodiversityR)
library(ggrepel)
library(corrplot)

Import data and recode factors

### Import the data and revise variables ###
raw1 <- as.data.frame(unclass(read_xlsx("REOrg TPWD NEW ANGLERS Includes INCOMPLETES.xlsx", sheet = "Data")),stringsAsFactors = TRUE) # COVID anglers data (includes incompletes)
rand_draw1 <- as.data.frame(unclass(read_xlsx("RAND062021_angler_rand_draw.xlsx")),stringsAsFactors = TRUE) # random draw sample for COVID and preCOVID anglers data
raw2 <- as.data.frame(unclass(read_xlsx("REOrg TPWD PreCOVID ANGLERS includes INCOMPLETES.xlsx", sheet = "Data")),stringsAsFactors = TRUE) # preCOVID anglers data (includes incompletes)

# Concatenate COVID and PreCOVID datasets
raw1 <- raw1 %>% 
  mutate(New.Old = rep("New",length(RespID))) # New anglers that started after COVID
    
raw2 <- raw2 %>% 
  mutate(New.Old = rep("Old",length(RespID))) # Old anglers that started preCOVID

raw3 <- rbind(raw1,raw2)

# Clean independent variables
rev1 <- raw3 %>%
  replace_with_na_at(.vars = "Q28_Gender",condition = ~.x %in% c("Other/nonbinary")) %>%
  replace_with_na_all(condition = ~.x %in% c("Prefer not to answer")) %>%
  mutate(Children = as.factor(case_when(Q29B %in% c("Children under age 5","Children age 5 to 12","Children age 13 to 17") ~ "Under 17", 
                              Q29E == "Children 18 years or older" ~ "18 or over",
                              Q29A == "No. I do not have any children." ~ "No children")),
         Race = as.factor(case_when(Q26C == "Black or African American" ~ "Black or African American",
                               Q26D == "Native American or Alaskan Native" ~ "Native American or Alaskan Native",
                               Q26E == "Asian or Pacific Islander" ~ "Asian or Pacific Islander",
                               Q26B == "White" ~ "White",
                               str_length(Q26Other)>0 ~ "Other")),
         Hispanic = as.factor(case_when(Q25_Hisp %in% c("Yes, Mexican, Mexican American, Chicano","Yes, other Spanish/Hispanic group or mixed heritage (Please specify.)") ~ "Hispanic",
                              Q25_Hisp == "No, not Spanish/Hispanic" ~ "Not Hispanic")),
         R_E = as.factor(paste(Race,Hispanic)),
         Race_Ethn = as.factor(case_when(R_E %in% c("Other Hispanic","Asian or Pacific Islander Hispanic","Black or African American Hispanic","Native American or Alaskan Native Hispanic") ~ "Other Hispanic",
                                R_E %in% c("Asian or Pacific Islander NA","Asian or Pacific Islander Not Hispanic") ~ "Asian or Pacific Islander",
                                R_E %in% c("Black or African American NA","Black or African American Not Hispanic") ~ "Black or African American",
                                R_E %in% c("Native American or Alaskan Native NA","Native American or Alaskan Native Not Hispanic") ~ "Native American or Alaskan Native",
                                R_E %in% c("NA Hispanic") ~ "Hispanic",
                                R_E %in% c("White NA","White Not Hispanic") ~ "White",
                                R_E %in% c("White Hispanic") ~ "White Hispanic")),
         SW_FW1 = paste(Q7A,Q7B,Q7C,Q7D,Q7E,sep = "_"),
         SW_FW2 = as.factor(case_when(grepl("Saltwater",SW_FW1) & grepl("Freshwater", SW_FW1) ~ "SW.FW",
                                                     grepl("Saltwater", SW_FW1) ~ "SW",
                                                     grepl("Freshwater", SW_FW1) ~ "FW")),
         Income = as.factor(Q30_Income),
         Gender = as.factor(Q28_Gender),
         Age = Q27_Age,
         New.Old = as.factor(New.Old),
         COVID = as.factor(Q4_COVID_Fished),
         UniqueID = paste(rep("A",length(RespID)),RespID,sep = "_")) %>%
  droplevels()

Calculate non-response bias by gender and age

# Survey response proportions
responses <- rev1 %>%
  filter(!(is.na(Gender) | is.na(Age))) %>% # remove NA values from Gender & Age
  count(Gender,Age) %>%
  mutate(freq = prop.table(n)) # get proportions for Gender and Age

# Random draw proportions
rand_draw2 <- rand_draw1 %>%
    mutate(Age = Age_Grp) %>%
  filter(!(is.na(Gender) | is.na(Age))) %>% # remove NA values from Gender & Age
  count(Gender,Age) %>%
  mutate(freq = prop.table(n),
         Gender = str_replace_all(Gender,"F", "Female"), # get proportions for Gender and Age 
         Gender = str_replace_all(Gender,"M", "Male"))

# Weights for survey data
weights1 <- responses %>%
  inner_join(rand_draw2, by = c("Gender","Age"),suffix = c("_survey", "_random")) %>%
  mutate(weights = freq_random/freq_survey)

## Adjust responses using weights
rev1_wts <- rev1 %>%
  left_join(weights1, by = c("Gender","Age")) %>%
  replace_na(list(weights = 1)) %>%
  mutate(Gender = as.factor(Gender))
kable(weights1, caption = "Weights applied to the survey data", digits = 3)
Weights applied to the survey data
Gender Age n_survey freq_survey n_random freq_random weights
Female 18-24 39 0.021 1022 0.053 2.553
Female 25-34 138 0.073 1559 0.081 1.101
Female 35-44 171 0.091 1645 0.085 0.937
Female 45-54 161 0.086 1247 0.065 0.755
Female 55-64 153 0.081 767 0.040 0.488
Female 65 or older 77 0.041 383 0.020 0.485
Male 18-24 51 0.027 2639 0.137 5.042
Male 25-34 124 0.066 2744 0.142 2.156
Male 35-44 237 0.126 2868 0.148 1.179
Male 45-54 305 0.162 2234 0.116 0.714
Male 55-64 254 0.135 1415 0.073 0.543
Male 65 or older 172 0.091 792 0.041 0.449

Demographics of survey respondents

# Use survey design to incorporate non-response bias weights in age and gender 
rev2_wts <- rev1_wts
svy_desn <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts) # Survey design
Gender <- svytable(~Gender, design = svy_desn)
Age <- svytable(~Age, design = svy_desn)

# Calculate proportions
Gender <- Gender %>%
  data.frame() %>%
  mutate(n = Freq) %>%
  mutate(freq = prop.table(n)) %>%
  dplyr::select(-Freq) 

Age <- Age %>%
  data.frame() %>%
  mutate(n = Freq) %>%
  mutate(freq = prop.table(n)) %>%
  dplyr::select(-Freq) 

COVID <- rev2_wts %>%
  filter(!(is.na(COVID))) %>% 
  count(COVID) %>%
  mutate(freq = prop.table(n))

Income <- rev2_wts %>%
  filter(!(is.na(Income))) %>% 
  count(Income) %>%
  mutate(freq = prop.table(n)) # get proportions

Children <- rev2_wts %>%
  filter(!(is.na(Children))) %>% 
  count(Children) %>%
  mutate(freq = prop.table(n)) # get proportions

Race_Ethn <- rev2_wts %>%
  filter(!(is.na(Race_Ethn))) %>% 
  count(Race_Ethn) %>%
  mutate(freq = prop.table(n)) # get proportions

New.Old <- rev2_wts %>%
  filter(!(is.na(New.Old))) %>% 
  count(New.Old) %>%
  mutate(freq = prop.table(n)) # get proportions

SW_FW2 <- rev2_wts %>%
  filter(!(is.na(SW_FW2))) %>% 
  count(SW_FW2) %>%
  mutate(freq = prop.table(n)) # get proportions
Age %>% 
  kbl(caption = "Age",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Age
Age n freq
18-24 357.72 0.19
25-34 420.27 0.22
35-44 442.73 0.23
45-54 343.18 0.18
55-64 222.61 0.12
65 or older 114.49 0.06
Gender %>% 
  kbl(caption = "Gender",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Gender
Gender n freq
Female 650.33 0.34
Male 1247.67 0.66
Children %>% 
  kbl(caption = "Children",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Children
Children n freq
18 or over 852 0.56
No children 501 0.33
Under 17 182 0.12
Income %>% 
  kbl(caption = "Income",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Income
Income n freq
Between $100,000 and $149,999 332 0.23
Between $20,000 and $39,999 142 0.10
Between $40,000 and $59,999 186 0.13
Between $60,000 and $79,999 226 0.15
Between $80,000 and $99,999 211 0.14
Less than $20,000 70 0.05
Over $150,000 298 0.20
Race_Ethn %>% 
  kbl(caption = "Race and Ethnicity",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Race and Ethnicity
Race_Ethn n freq
Asian or Pacific Islander 64 0.04
Black or African American 84 0.05
Hispanic 41 0.02
Native American or Alaskan Native 40 0.02
Other Hispanic 74 0.04
White 1220 0.69
White Hispanic 242 0.14
COVID %>% 
  kbl(caption = "Prompted to fish by COVID",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Prompted to fish by COVID
COVID n freq
No, I was already planning to go fishing. 1583 0.81
Yes 381 0.19
New.Old %>% 
  kbl(caption = "Retained or New Angler during pandemic",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Retained or New Angler during pandemic
New.Old n freq
New 1517 0.68
Old 721 0.32
SW_FW2 %>% 
  kbl(caption = "Saltwater or Freshwater Angler",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Saltwater or Freshwater Angler
SW_FW2 n freq
FW 802 0.43
SW 448 0.24
SW.FW 631 0.34

Q1. How likely are you to go fishing in the next 6 months (Very likely to very unlikely)?

rev2_wts$Q1_Fish_6months <- recode_factor(rev2_wts$Q1_Fish_6months,"Somewhat likely" = "Likely","Very likely" = "Likely","Very unlikely" = "Unlikely")

# Survey response proportions
Q1_prop <- rev2_wts %>%
  filter(!(is.na(Q1_Fish_6months))) %>% # remove NA values from Gender & Age
  count(Q1_Fish_6months) %>%
  mutate(freq = prop.table(n)) # 99% report they are likely to go fishing in the next 6 months

Responses are summarized into likely or unlikely. Most anglers (99%) are likely to go fishing in the next 6 months, further analysis is not needed.

Q2. Why are you unlikely to go fishing in the next 6 months?

Q2_responses <- rev1_wts %>%
  mutate(Q2_all = as.factor(case_when(Q2B == "It’s too hard to find a place to fish." ~ "Hard to find fishing place", 
                              Q2C == "No one in my family or friend circle wants to go with me." ~ "No one to fish with",
                              Q2D == "I don’t know what to do with fish when I catch them." ~ "Don't know what to do with fish",
                              Q2E == "I decided I just don’t like fishing." ~ "Don't like fishing",
                              str_length(Q2Other)>0 ~ "Other"))) %>%
  filter(!is.na(Q2_all))

ggplot(Q2_responses,aes(Q2_all)) + geom_histogram(stat = "count") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q2. Reasons Unlikely to Go Fishing") # histogram counts of levels

Only 19 responses, not enough data for robust analysis

Q3. Did you go fishing between mid-March 2020 and today?

svy_desn_Q3 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts) # Survey design
Q3_mod1 <- svyglm(Q3_Fished ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q3, family=quasibinomial)
summary(Q3_mod1) # examine model results
varImp(Q3_mod1) # Variable importance
VIF(Q3_mod1) # collinearity
Q3_mod2 <- svyglm(Q3_Fished ~ Gender + Age, design=svy_desn_Q3, family=quasibinomial)
summary(Q3_mod2)
Q3_mod3 <- svyglm(Q3_Fished ~ Age, design=svy_desn_Q3, family=quasibinomial)
summary(Q3_mod3)
car::Anova(Q3_mod3, type = 3, test.statistic = "F",error.df = degf(Q3_mod2$survey.design)) # Evaluate variable significance

# Estimate and odds ratio table
Q3_coef_table <- coef(summary(Q3_mod3))
Q3_AOR <- standardize_parameters(Q3_mod3, exp = TRUE) # Odds_ratio and 95% CI
Q3_summary_table <- cbind(Q3_coef_table,Odds_Ratio = Q3_AOR$Std_Odds_Ratio,CI_low = Q3_AOR$CI_low,CI_high = Q3_AOR$CI_high)

# Check model accuracy
logitgof(obs = Q3_mod3$y, fitted(Q3_mod3)) #run hoslem test to test goodness of fit
glm.probs <- predict(Q3_mod3,type = "response") #Predict() assigns fitted model values for each participants based on the model
glm.pred <- as.factor(ifelse(glm.probs > 0.5, 1, 0)) #If prediction is above 50% assign 1 and assign 0 if prediction is below 50%
prop.table(table(glm.pred == Q3_mod3$y)) # Correct assignment 88% of the time 
Q3_age_xtab <- xtabs(~Q3_Fished + Age, data = rev2_wts)
Q3_AOR_18 <- 1/0.27

# Survey response proportions
Q3_prop <- rev2_wts %>%
  filter(!(is.na(Q3_Fished))) %>% # remove NA values from Gender & Age
  count(Q3_Fished) %>%
  mutate(freq = prop.table(n)) # get proportions
# Table of responses
Q3_prop %>% 
  kbl(caption = "Q3 Survey Responses",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 88% went fishing in the last 6 months
Q3 Survey Responses
Q3_Fished n freq
No 256 0.12
Yes 1965 0.88
# Histogram of responses
ggplot(model.frame(Q3_mod3), aes(Q3_Fished, fill = Age)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q3. Fished in last 6 months")   

# Model odds ratios
Q3_summary_table %>% 
  kbl(caption = "Q3 Model Odds Ratios",digits = 3) %>%
  kable_classic(full_width = F, html_font = "Cambria")
Q3 Model Odds Ratios
Estimate Std. Error t value Pr(>|t|) Odds_Ratio CI_low CI_high
(Intercept) 2.380 0.407 5.845 0.000 10.800 4.860 23.996
Age25-34 0.584 0.506 1.155 0.248 1.793 0.665 4.831
Age35-44 0.085 0.447 0.189 0.850 1.088 0.453 2.616
Age45-54 -0.357 0.432 -0.826 0.409 0.700 0.300 1.634
Age55-64 -0.407 0.433 -0.940 0.347 0.665 0.284 1.557
Age65 or older -1.298 0.432 -3.001 0.003 0.273 0.117 0.638
# Model effect plot
plot(Effect(focal.predictors = c("Age"),Q3_mod3))

Most respondents (88%) went fishing between mid-March 2020 and 2021. Younger individuals (18-24 yrs) were 3.70 times more likely than older individuals (65+) to have fished in the last 6 months.

Q4. Did the effects of the COVID-19 pandemic prompt you to go fishing?

svy_desn_Q4 <- svydesign(ids = ~0,  weights = ~weights,data = rev2_wts) # Survey design
Q4_mod1 <- svyglm(Q4_COVID_Fished ~ Gender + Income + Children + New.Old + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q4, family=quasibinomial)
summary(Q4_mod1) # examine model results
varImp(Q4_mod1) # Variable importance
VIF(Q4_mod1) # collinearity
Q4_mod2 <- svyglm(Q4_COVID_Fished ~ Age + Children + Gender + Income, design=svy_desn_Q4, family=quasibinomial)
summary(Q4_mod2)
Q4_mod3 <- svyglm(Q4_COVID_Fished ~ Age + Children + Gender, design=svy_desn_Q4, family=quasibinomial)
summary(Q4_mod3)
varImp(Q4_mod3) # Variable importance
VIF(Q4_mod3) # collinearity
car::Anova(Q4_mod3, type = 3, test.statistic = "F",error.df = degf(Q4_mod2$survey.design)) # Evaluate variable significance

# Estimate and odds ratio table
Q4_coef_table <- coef(summary(Q4_mod3))
Q4_AOR <- standardize_parameters(Q4_mod3, exp = TRUE) # Odds_ratio and 95% CI
Q4_summary_table <- cbind(Q4_coef_table,Odds_Ratio = Q4_AOR$Std_Odds_Ratio,CI_low = Q4_AOR$CI_low,CI_high = Q4_AOR$CI_high)

# Check model accuracy
logitgof(obs = Q4_mod3$y, fitted(Q4_mod3)) #run hoslem test to test goodness of fit
glm.probs <- predict(Q4_mod3,type = "response") #Predict() assigns fitted model values for each participants based on the model
glm.pred <- as.factor(ifelse(glm.probs > 0.5, 1, 0)) #If prediction is above 50% assign 1 and assign 0 if prediction is below 50%
prop.table(table(glm.pred == Q4_mod3$y)) 
Q4_xtab <- xtabs(~Q4_COVID_Fished + Age, data = rev2_wts)
Q4_xtab <- Q4_xtab%>%ftable(row.vars=c("Age"))

# Survey response proportions
Q4_prop <- rev2_wts %>%
  filter(!(is.na(Q4_COVID_Fished))) %>% # remove NA values from Gender & Age
  count(Q4_COVID_Fished) %>%
  mutate(freq = prop.table(n)) # get proportions

Q4_AOR_Male <- 1/0.52 # 1.92 x
# Table of responses
Q4_prop %>% 
  kbl(caption = "Q4 Survey Responses",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q4 Survey Responses
Q4_COVID_Fished n freq
No, I was already planning to go fishing. 1583 0.81
Yes 381 0.19
# Histogram of responses
ggplot(model.frame(Q4_mod3), aes(Q4_COVID_Fished, fill = Age)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q4. Fished due to COVID") + facet_wrap(~Gender, ncol = 2)#  

ggplot(model.frame(Q4_mod3), aes(Q4_COVID_Fished, fill = Children)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q4. Fished due to COVID")

# Model odds ratio results
Q4_summary_table %>% 
  kbl(caption = "Q4 Model Odds Ratios",digits = 3) %>%
  kable_classic(full_width = F, html_font = "Cambria")
Q4 Model Odds Ratios
Estimate Std. Error t value Pr(>|t|) Odds_Ratio CI_low CI_high
(Intercept) -1.837 0.334 -5.509 0.000 0.159 0.083 0.306
Age25-34 0.701 0.333 2.107 0.035 2.016 1.050 3.871
Age35-44 0.522 0.331 1.578 0.115 1.685 0.881 3.223
Age45-54 0.399 0.344 1.159 0.247 1.490 0.759 2.925
Age55-64 0.428 0.339 1.262 0.207 1.534 0.789 2.982
Age65 or older -0.110 0.398 -0.277 0.782 0.896 0.410 1.955
ChildrenNo children 0.767 0.187 4.100 0.000 2.154 1.492 3.110
ChildrenUnder 17 0.325 0.267 1.218 0.224 1.384 0.820 2.336
GenderMale -0.654 0.177 -3.692 0.000 0.520 0.367 0.736
# Effect plot
plot(Effect(focal.predictors = c("Children","Age","Gender"),Q4_mod3))

Most anglers (81%) were already planning on going fishing and were not prompted by COVID-19 to go fishing.

The odds of going fishing due to COVID were: 2.01 times less likely for young anglers (25-34) compared to other ages, 2.15 times less likely for anglers with no children compared to those with adult children, 1.92 times less likely for male anglers compared to females.

Q5. How important were each of the following reasons why you went fishing? Please select no more than 2 of these for the “Very Important” column.

# Clean Q5 survey answers
rev2_wts <- rev2_wts %>%  
  mutate_at(vars(Q5A:Q5I), list(~recode_factor(.,"Not Important" = "1","Somewhat Important" = "2","Important" = "3","Very Important (please limit to 2 reasons)" = "4"))) %>%
  mutate(across(Q5A:Q5I, ~as.numeric(as.character(.)))) %>%
  mutate_at(vars(Q5A:Q5I), list(~.*weights)) %>%
  mutate(Food = Q5A,
         Sport = Q5B,
         Outdoors = Q5C,
         Nature = Q5D,
         Friends = Q5E,
         Children1 = Q5F,
         Stress = Q5G,
         Relax = Q5H,
         Get_away = Q5I)
  
# Remove rows with missing independent variable data
Q5_df1 <- rev2_wts %>%
  filter_at(vars(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2),all_vars(!is.na(.))) 
Q5_df2 <- Q5_df1 %>%
  dplyr::select(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2,Food,Sport,Outdoors,Nature,Friends,Children1,Stress,Relax,Get_away)
# Select independent variables
Q5_indep1 <- Q5_df1 %>%
  dplyr::select(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2)
# Select dependent variables
Q5_dep1 <- Q5_df1 %>%
  dplyr::select(Food,Sport,Outdoors,Nature,Friends,Children1,Stress,Relax,Get_away)
# Transform dependent data
Q5_dep2 <- decostand(Q5_dep1, method = 'normalize') 
# MCA, keep 2 axes, on independent data
Q5_indep2 <- dudi.mix(Q5_indep1, scannf=F, nf=2)$tab # MCA, keep 2 axes

# Run CCA
Q5_rda_mod1 <- rda(Q5_dep2 ~ ., data = Q5_indep2) 
envfit(Q5_rda_mod1,Q5_indep2) # select variables at alpha = 0.001 for next model
Q5_indep3 <- Q5_indep2 %>%
  dplyr::select(Gende.Female,Gende.Male,Age.18.24,Age.25.34,Age.65.or.older,Child.18.or.over, Child.No.children,Child.Under.17,COVID.No..I.was.already.planning.to.go.fishing.,COVID.Yes,New.O.New,New.O.Old)
Q5_rda_mod2 <- rda(Q5_dep2 ~ ., data = Q5_indep3)
envfit(Q5_rda_mod2,Q5_indep3) # select variables at alpha = 0.001 for next model
RsquareAdj(Q5_rda_mod2) 
sqrt(vif.cca(Q5_rda_mod2))

# Extract scores for visualization
vare_spp_sco1 <- scores(Q5_rda_mod2, display = "species")
vare_sam_sco1 <- scores(Q5_rda_mod2, display = "sites")
vare_env_sco1 <- scores(Q5_rda_mod2, display = "bp")
vare_spp_tbl1 <- as_tibble(vare_spp_sco1)
vare_sam_tbl1 <- as_tibble(vare_sam_sco1)
vare_env_tbl1 <- as_tibble(vare_env_sco1)
vare_spp_tbl1 <- mutate(vare_spp_tbl1, vgntxt=rownames(vare_spp_sco1), ccatype = "species")
vare_sam_tbl1 <- mutate(vare_sam_tbl1, vgntxt=rownames(vare_sam_sco1), ccatype = "sites")
vare_env_tbl1 <- mutate(vare_env_tbl1, vgntxt=c("Female","Age 18-24","Age 25-34","Age 65 over","Children 18 over","No Children","pre-COVID","New"),ccatype = "bp")
rescaled1 <- vare_env_tbl1 %>% 
            dplyr::select(RDA1, RDA2) %>%
            as.matrix() *0.75
vare_tbl <- dplyr::select(vare_env_tbl1, vgntxt, ccatype) %>%
            bind_cols(as_tibble(rescaled1)) %>%
            bind_rows(vare_spp_tbl1)
# Reorganize data to plot
Q5_a <- rev1_wts[c(which(colnames(rev1_wts)=="Q5A"):which(colnames(rev1_wts)=="Q5I"))]
colnames(Q5_a) <- c("Food","Sport","Outdoors","Nature","Friends","Children1","Stress","Relax","Get_away")
Q5_b <- Q5_a %>% 
  pivot_longer(cols = Food:Get_away,names_to = "Q5_answers",values_to = "Agreement")
Q5_c <- Q5_b %>%
  group_by(Q5_answers,Agreement) %>%
  count() %>%
  na.omit()
Q5_c$Agreement <- ordered(Q5_c$Agreement,levels = c("Not Important", "Somewhat Important", "Important","Very Important (please limit to 2 reasons)"))
ggplot(Q5_c, aes(fill=Agreement, y=n, x=Q5_answers)) + geom_bar(position="fill", stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Percent", x = "Q5. Reasons for Fishing") 

# PERMANOVA
anova.cca(Q5_rda_mod2, step = 1000, by = "axis",permutations = 999) # 4 sig axes
## Permutation test for rda under reduced model
## Forward tests for axes
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(formula = Q5_dep2 ~ Gende.Female + Gende.Male + Age.18.24 + Age.25.34 + Age.65.or.older + Child.18.or.over + Child.No.children + Child.Under.17 + COVID.No..I.was.already.planning.to.go.fishing. + COVID.Yes + New.O.New + New.O.Old, data = Q5_indep3)
##           Df Variance       F Pr(>F)    
## RDA1       1 0.005123 62.9800  0.001 ***
## RDA2       1 0.001495 18.3818  0.001 ***
## RDA3       1 0.000435  5.3462  0.005 ** 
## RDA4       1 0.000222  2.7263  0.320    
## RDA5       1 0.000114  1.3991  0.879    
## RDA6       1 0.000033  0.4019  1.000    
## RDA7       1 0.000015  0.1790  1.000    
## RDA8       1 0.000001  0.0075  1.000    
## Residual 950 0.077277                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
envfit(Q5_rda_mod2,Q5_indep3) # select variables at alpha = 0.001 for next model
## 
## ***VECTORS
## 
##                                                     RDA1     RDA2     r2 Pr(>r)
## Gende.Female                                    -0.43263  0.90157 0.0911  0.001
## Gende.Male                                       0.43263 -0.90157 0.0911  0.001
## Age.18.24                                       -0.97516  0.22150 0.0201  0.001
## Age.25.34                                       -0.97536  0.22062 0.0491  0.001
## Age.65.or.older                                  0.81081 -0.58531 0.0181  0.001
## Child.18.or.over                                 0.99540 -0.09579 0.1322  0.001
## Child.No.children                               -0.99675  0.08056 0.2559  0.001
## Child.Under.17                                   0.99952 -0.03097 0.0263  0.001
## COVID.No..I.was.already.planning.to.go.fishing.  0.89293 -0.45019 0.0242  0.001
## COVID.Yes                                       -0.89293  0.45019 0.0242  0.001
## New.O.New                                       -0.65496  0.75567 0.0263  0.001
## New.O.Old                                        0.65496 -0.75567 0.0263  0.001
##                                                    
## Gende.Female                                    ***
## Gende.Male                                      ***
## Age.18.24                                       ***
## Age.25.34                                       ***
## Age.65.or.older                                 ***
## Child.18.or.over                                ***
## Child.No.children                               ***
## Child.Under.17                                  ***
## COVID.No..I.was.already.planning.to.go.fishing. ***
## COVID.Yes                                       ***
## New.O.New                                       ***
## New.O.Old                                       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
# Basic plot for visualization
ggplot() +
  geom_point(aes(x=RDA1, y=RDA2), data=filter(vare_tbl, ccatype=="species"))  +
  geom_text_repel(aes(x=RDA1, y=RDA2, label=vgntxt, size=3,colour=ccatype),
                  data=vare_tbl, seed=123) + 
  geom_segment(aes(x=0, y=0, xend=RDA1, yend=RDA2), arrow=arrow(length = unit(0.2,"cm")),
               data=filter(vare_tbl, ccatype=="bp"), color="blue") +
  coord_fixed() +
  theme_classic() +
  scale_colour_manual(values = c("blue", "black")) +
  theme(legend.position="none")

Most anglers indicated that being outdoors in nature, relaxing, relieving stress, and spending time with friends were all important reasons for fishing, while fishing for food, sport, or spending time with children were less important reasons to go fishing.

Anglers over 65 and anglers not prompted by COVID to go fishing were more likely to fish for food or sport. Anglers between the ages of 18-34 were likely to go fishing to enjoy nature, the outdoors, and to relieve stress. While anglers that recruited during COVID and female anglers were more likely to fish to spend time with friends. Finally, anglers with adult children were more likely than anglers without children to report that they fish to spend time with children.

Q6 Since mid-March 2020, how many days have you gone fishing?

# Order the factor
rev2_wts$Q6_DaysFished <- as.factor(rev2_wts$Q6_DaysFished)
rev2_wts$Q6_DaysFished  <- ordered(rev2_wts$Q6_DaysFished, levels = c("Once (1 day)", "2–3 days", "4–10 days","More than 10 days"))
svy_desn_Q6 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q6_mod1 <- svyolr(Q6_DaysFished ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q6)
summary(Q6_mod1) # examine model results
Q6_mod2 <- svyolr(Q6_DaysFished ~ SW_FW2 + Gender + Age + Income + Race_Ethn, design=svy_desn_Q6)
summary(Q6_mod2) # examine model results
Q6_mod3 <- svyolr(Q6_DaysFished ~ SW_FW2 + Gender + Age + Race_Ethn, design=svy_desn_Q6)
summary(Q6_mod3) # examine model results
Q6_mod4 <- svyolr(Q6_DaysFished ~ SW_FW2 + Gender + Age, design=svy_desn_Q6)
summary(Q6_mod4) # examine model results
VIF(Q6_mod4) # collinearity
FW_AOR <- 1/0.441 # 2.268x
Angler_65over <- 1/0.498 # 2.008x

# Estimate and odds ratio table
Q6_coef_table <- coef(summary(Q6_mod4))
Q6_pval <- pnorm(abs(Q6_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q6_AOR <- exp(coef(Q6_mod4))
Q6_summary_table <- cbind(Q6_coef_table, "p value" = round(Q6_pval,3),Odds_Ratio = Q6_AOR)

# Survey response proportions
Q6_prop <- rev2_wts %>%
  filter(!(is.na(Q6_DaysFished))) %>% # remove NA values from Gender & Age
  count(Q6_DaysFished) %>%
  mutate(freq = prop.table(n)) # get proportions
# Table of responses
Q6_prop %>% 
  kbl(caption = "Q6 Days Fished",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q6 Days Fished
Q6_DaysFished n freq
Once (1 day) 97 0.05
2–3 days 441 0.23
4–10 days 630 0.33
More than 10 days 726 0.38
# Histogram of responses
ggplot(model.frame(Q6_mod4), aes(Q6_DaysFished, fill = Age)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q6. Days Fished in Last 6 Months") + facet_wrap(~Gender, ncol = 2)   

# Model odds ratio
Q6_summary_table %>% 
  kbl(caption = "Q6 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q6 Model Odds Ratios
Value Std. Error t value p value Odds_Ratio
SW_FW2SW -0.82 0.15 -5.45 0.00 0.44
SW_FW2SW.FW 0.52 0.13 3.94 0.00 1.68
GenderMale 0.39 0.11 3.40 0.00 1.47
Age25-34 -0.13 0.25 -0.52 0.60 0.88
Age35-44 -0.33 0.23 -1.43 0.15 0.72
Age45-54 -0.34 0.23 -1.49 0.14 0.71
Age55-64 -0.45 0.24 -1.91 0.06 0.64
Age65 or older -0.70 0.26 -2.69 0.01 0.50
Once (1 day)|2–3 days -3.22 0.29 -11.15 0.00 0.04
2–3 days|4–10 days -1.15 0.24 -4.71 0.00 0.32
4–10 days|More than 10 days 0.32 0.24 1.34 0.18 1.38

Most anglers were likely to have gone fishing more than 1 day (94%).

The odds of fishing the most often (>10 days) were: 1.47 times more likely for males compared to females, 1.68 times more likely for anglers that fish in both freshwater and saltwater compared to just freshwater anglers, 2.27 times more likely for freshwater anglers compared to saltwater anglers, and 2.01 times more likely for young anglers (18-24 yrs) compared to the oldest anglers (65 yrs+).

Q8 From mid-March 2020 until today, did you go fishing from a boat?

rev2_wts <- rev1_wts %>%
  mutate(Boat1 = paste(Q8A,Q8B,Q8C,sep = "_"),
         Boat_Y_N = as.factor(case_when(grepl("Yes",Boat1) ~ "Yes",
                             grepl("No", Boat1) ~ "No")),
         Boat_Own = as.factor(case_when(grepl("owned",Boat1) ~ "Borrow",
                                        grepl("own", Boat1) ~ "Own")))

# Anglers that fished from a boat
responses_Q8_Y_N <- rev2_wts %>%
  filter(!(is.na(Boat_Y_N))) %>% # remove NA values
  count(Boat_Y_N) %>%
  mutate(freq = prop.table(n)) # 56% of anglers fished from a boat

# Anglers that owned the boat they fished from
responses_Q8_Own <- rev2_wts %>%
  filter(!(is.na(Boat_Own))) %>% # remove NA values 
  count(Boat_Own) %>%
  mutate(freq = prop.table(n)) # Of those anglers that fished from a boat, 36% owned the boat
responses_Q8_Y_N %>% 
  kbl(caption = "Q8A. Did you fish from a boat?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q8A. Did you fish from a boat?
Boat_Y_N n freq
No 823 0.44
Yes 1053 0.56
responses_Q8_Own %>% 
  kbl(caption = "Q8B. Did you own the boat you fished on?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q8B. Did you own the boat you fished on?
Boat_Own n freq
Borrow 674 0.64
Own 379 0.36

Anglers fished from a boat 56% of the time and 36% of those that fished from a boat owned the boat.

Q9. The last time you went fishing, was fishing the main purpose of the trip, or was it just one of the activities but not the main purpose of the trip?

rev2_wts$Q9_Purpose <- recode_factor(rev2_wts$Q9_Purpose,"Fishing was one activity, but not the main purpose of the trip." = "No","Fishing was the main purpose of the trip." = "Yes")
svy_desn_Q9 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts) # Survey design
Q9_mod1 <- svyglm(Q9_Purpose ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q9, family=quasibinomial)
summary(Q9_mod1) # examine model results
varImp(Q9_mod1) # Variable importance
VIF(Q9_mod1) # collinearity
Q9_mod2 <- svyglm(Q9_Purpose ~ Gender + Age + Income, design=svy_desn_Q9, family=quasibinomial)
summary(Q9_mod2)
varImp(Q9_mod2) # Variable importance
VIF(Q9_mod2) # collinearity
car::Anova(Q9_mod2, type = 3, test.statistic = "F",error.df = degf(Q9_mod2$survey.design)) # Evaluate variable significance

# Check model accuracy
logitgof(obs = Q9_mod2$y, fitted(Q9_mod2)) #run hoslem test to test goodness of fit
glm.probs <- predict(Q9_mod2,type = "response") #Predict() assigns fitted model values for each participants based on the model
glm.pred <- as.factor(ifelse(glm.probs > 0.5, 1, 0)) #If prediction is above 50% assign 1 and assign 0 if prediction is below 50%
prop.table(table(glm.pred == Q9_mod2$y)) # Correct assignment 75% of the time 
Q9_age_xtab <- xtabs(~Age + Gender+Q9_Purpose, data = rev2_wts)
Q9_age_xtab <- Q9_age_xtab%>%ftable(row.vars=c("Gender","Age"))

# Estimate and odds ratio table
Q9_coef_table <- coef(summary(Q9_mod2))
Q9_AOR <- standardize_parameters(Q9_mod2, exp = TRUE) # Odds_ratio and 95% CI
Q9_summary_table <- cbind(Q9_coef_table,Odds_Ratio = Q9_AOR$Std_Odds_Ratio,CI_low = Q9_AOR$CI_low,CI_high = Q9_AOR$CI_high)

# Survey response proportions
Q9_prop <- rev2_wts %>%
  filter(!(is.na(Q9_Purpose))) %>% # remove NA values from Gender & Age
  count(Q9_Purpose) %>%
  mutate(freq = prop.table(n)) # get proportions

Q4_AOR_65 <- 1/0.21 # 4.76 x
Q4_AOR_45 <- 1/0.41 # 2.44 x
# Table of responses
Q9_prop %>% 
  kbl(caption = "Q9 Was Fishing the Main Purpose?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") # 81% were already planning to go fishing
Q9 Was Fishing the Main Purpose?
Q9_Purpose n freq
No 468 0.25
Yes 1398 0.75
# Histogram of responses
ggplot(model.frame(Q9_mod2), aes(Q9_Purpose, fill = Age)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q9. Was Fishing the Main Purpose?") + facet_wrap(~Gender, ncol = 2)

# Summary table
Q9_summary_table %>% 
  kbl(caption = "Q9 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q9 Model Odds Ratios
Estimate Std. Error t value Pr(>|t|) Odds_Ratio CI_low CI_high
(Intercept) 1.78 0.43 4.10 0.00 5.92 2.53 13.85
GenderMale 0.42 0.16 2.72 0.01 1.53 1.12 2.07
Age25-34 -0.96 0.44 -2.20 0.03 0.38 0.16 0.90
Age35-44 -0.99 0.43 -2.30 0.02 0.37 0.16 0.86
Age45-54 -0.89 0.44 -2.03 0.04 0.41 0.17 0.97
Age55-64 -0.95 0.44 -2.16 0.03 0.39 0.16 0.92
Age65 or older -1.57 0.46 -3.45 0.00 0.21 0.08 0.51
IncomeBetween $20,000 and $39,999 1.14 0.35 3.28 0.00 3.14 1.58 6.21
IncomeBetween $40,000 and $59,999 0.49 0.27 1.81 0.07 1.64 0.96 2.80
IncomeBetween $60,000 and $79,999 0.40 0.26 1.54 0.12 1.49 0.90 2.47
IncomeBetween $80,000 and $99,999 0.01 0.24 0.06 0.95 1.01 0.63 1.63
IncomeLess than $20,000 -0.63 0.40 -1.58 0.11 0.53 0.24 1.17
IncomeOver $150,000 -0.38 0.23 -1.69 0.09 0.68 0.44 1.06
# Effect plot
plot(Effect(focal.predictors = c("Gender","Age"),Q9_mod2))

Most anglers (75%) reported that fishing was the main purpose of their trip.

The odds that the main purpose of the trip was fishing was: 1.53 times more likely for male anglers compared to females, 2.44 - 4.76 times more likely for anglers ages 18-24 compared to older anglers, 3.14 times more likely for anglers with incomes between $20-$39K compared to anglers with higher incomes.

Q10. Who do you typically fish with?

# Evaluate frequencies by categorical responses
Q10_df1 <- rev2_wts %>% 
  dplyr::select(c("Q10A":"Q10J")) %>%
  pivot_longer(cols = "Q10A":"Q10J",names_to = "Q10_answers",values_to = "Agreement") %>%
  group_by(Q10_answers,Agreement) %>%
  count() %>%
  na.omit()
freq = prop.table(Q10_df1$n)
Q10_df1 <- data.frame(cbind(Q10_df1,freq=freq))

# Format data for analysis
Q10_df2 <- rev2_wts %>% 
    dplyr::select(Q10A,Q10F,Q10G,Q10H,Q10I,Q10J,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  pivot_longer(cols = "Q10A":"Q10J",names_to = "Q10_answers",values_to = "Agreement") %>%
  group_by(Q10_answers,Agreement,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  filter(!is.na(Agreement)) %>%
  mutate(Agreement = as.factor(Agreement)) %>%
  data.frame()

# Chi-square tests
svy_desn_Q10 <- svydesign(ids = ~0, weights = ~weights, data = Q10_df2) # Survey design

Q10_Gender_chisq <- svychisq(~Gender + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_Age_chisq <- svychisq(~Age + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_Race_Ethn_chisq <- svychisq(~Race_Ethn + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_Income_chisq <- svychisq(~Income + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_SW_FW2_chisq <- svychisq(~SW_FW2 + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_New.Old_chisq <- svychisq(~New.Old + Agreement, svy_desn_Q10, statistic = "adjWald") # not significant
Q10_Children_chisq <- svychisq(~Children + Agreement, svy_desn_Q10, statistic = "adjWald") # significant
Q10_COVID_chisq <- svychisq(~COVID + Agreement, svy_desn_Q10, statistic = "adjWald") # significant

# Contingency tables for significant factors
Q10_Gender_tbl <- svytable(~Gender + Agreement, svy_desn_Q10)
Q10_Age_tbl <- svytable(~Age + Agreement, svy_desn_Q10)
Q10_Race_Ethn_tbl <- svytable(~Race_Ethn + Agreement, svy_desn_Q10)
Q10_Income_tbl <- svytable(~Income + Agreement, svy_desn_Q10)
Q10_SW_FW2_tbl <- svytable(~SW_FW2 + Agreement, svy_desn_Q10)
Q10_COVID_tbl <- svytable(~COVID + Agreement, svy_desn_Q10)
Q10_Children_tbl <- svytable(~Children + Agreement, svy_desn_Q10)
# Response percentages graph
ggplot(Q10_df1,aes(x=Agreement,y=freq)) + geom_bar(stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8), axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + labs(y = "Percentage", x = "Q10. Who do you go fishing with?") 

# Chi-square test results
Q10_Gender_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
Female 38 159 239 281 99 98
Male 184 265 350 590 177 135
Q10_Gender_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Gender + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 7.3369, ndf = 5, ddf = 2854, p-value = 7.649e-07
corrplot(Q10_Gender_chisq$residuals, is.cor = FALSE)

Q10_Age_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
18-24 51 10 120 231 10 21
25-34 57 125 143 239 24 5
35-44 39 185 143 169 120 29
45-54 37 69 88 132 92 67
55-64 30 24 66 70 23 69
65 or older 10 13 32 30 6 37
Q10_Age_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Age + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 22.169, ndf = 25, ddf = 2834, p-value < 2.2e-16
corrplot(Q10_Age_chisq$residuals, is.cor = FALSE)

Q10_Race_Ethn_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
Asian or Pacific Islander 9 11 20 35 6 2
Black or African American 8 18 19 33 4 4
Hispanic 1 14 22 21 9 6
Native American or Alaskan Native 9 14 12 24 10 7
Other Hispanic 15 33 29 60 25 20
White 135 236 342 474 160 141
White Hispanic 32 60 104 171 40 36
Q10_Race_Ethn_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Race_Ethn + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 1.8887, ndf = 30, ddf = 2829, p-value = 0.00247
corrplot(Q10_Race_Ethn_chisq$residuals, is.cor = FALSE)

Q10_Income_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
Between $100,000 and $149,999 28 69 91 137 59 43
Between $20,000 and $39,999 27 42 59 94 14 14
Between $40,000 and $59,999 35 42 62 88 22 17
Between $60,000 and $79,999 31 63 68 117 29 27
Between $80,000 and $99,999 25 52 59 85 36 29
Less than $20,000 21 12 39 36 7 4
Over $150,000 27 63 71 105 49 38
Q10_Income_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Income + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 1.5954, ndf = 30, ddf = 2829, p-value = 0.02125
corrplot(Q10_Income_chisq$residuals, is.cor = FALSE)

Q10_SW_FW2_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
FW 131 218 253 345 107 92
SW 27 84 137 209 68 68
SW.FW 77 172 251 392 127 101
Q10_SW_FW2_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~SW_FW2 + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 3.4809, ndf = 10, ddf = 2849, p-value = 0.0001434
corrplot(Q10_SW_FW2_chisq$residuals, is.cor = FALSE)

Q10_COVID_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
No, I was already planning to go fishing. 181 387 532 765 253 230
Yes 54 88 116 186 49 33
Q10_COVID_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~COVID + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 2.3068, ndf = 5, ddf = 2854, p-value = 0.04205
corrplot(Q10_COVID_chisq$residuals, is.cor = FALSE)

Q10_Children_tbl %>% 
  kbl(caption = "Q10 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q10 Who do you fish with?
No one, I go by myself With my kids who are 12 years or younger My family goes with extended family With friends With my teenagers, ages 13–19 With my grown children 20 years and older
18 or over 47 83 182 187 132 179
No children 126 13 207 425 18 30
Under 17 24 118 85 119 28 14
Q10_Children_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Children + Agreement, svy_desn_Q10, statistic = "adjWald")
## F = 39.008, ndf = 10, ddf = 2849, p-value < 2.2e-16
corrplot(Q10_Children_chisq$residuals, is.cor = FALSE)

Anglers typically fish with friends, extended family, or with kids younger than 12 years. Male anglers are more likely to fish by themselves compared to female anglers. Anglers 45+ are more likely to fish with grown children than younger anglers, anglers between the ages of 35-54 are most likely to fish with young children and teenagers, while anglers 18-24 are most likely to fish with friends. Asian or Pacific Islander anglers and White Hispanic anglers are most likely to fish with friends, Black or African American anglers are most likely to fish with young children, Hispanic anglers are most likely to fish with extended family, Native American or Alaskan Native anglers are most likely to fish by themselves, Other Hispanic anglers are most likely to fish with teenagers, and White anglers are most likely to fish with grown children. Anglers with incomes over $80K are more likely to fish with teenagers and grown children, anglers with incomes between <$20-$80K are more likely to fish with friends, extended family, or by themselves. Freshwater anglers are most likely to fish by themselves, saltwater anglers are most likely to fish with grown children, and anglers that fish in both freshwater and saltwater are most likely to fish with friends. Anglers prompted by COVID to fish were most likley to fish by themselves, while those that were already planning to fish were most likely to fish with grown children. Anglers with adult children were most likely to fish with adult children, anglers with young children were most likely to fish with young children, and anglers with no children were most likely to fish with friends.

Q11. Please indicate how much you agree with each of the following statements about fishing.

# Clean Q11 survey answers
rev2_wts <- rev2_wts %>%  
  mutate_at(vars(Q11A:Q11D), list(~recode_factor(.,"Strongly Disagree" = "-2","Disagree" = "-1","Agree" = "1","Strongly Agree"= "2"))) %>%
  mutate(across(Q11A:Q11D, ~as.numeric(as.character(.)))) %>%
  mutate_at(vars(Q11A:Q11D), list(~.*weights)) %>%
  mutate(Enjoyed_fishing = Q11A,
         Too_expensive = Q11B,
         Fishing_rules_confusing = Q11C,
         Enjoyed_surroundings = Q11D)

# Remove rows with missing independent variable data
Q11_df1 <- rev2_wts %>%
  filter_at(vars(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2),all_vars(!is.na(.))) 
# Select independent variables
Q11_indep1 <- Q11_df1 %>%
  dplyr::select(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2)
# Select dependent variables
Q11_dep1 <- Q11_df1 %>%
  dplyr::select(Enjoyed_fishing,Too_expensive,Fishing_rules_confusing,Enjoyed_surroundings)
# Transform dependent data
Q11_dep2 <- decostand(Q11_dep1, method = 'standardize') 
Q11_indep2 <- dudi.mix(Q11_indep1, scannf=F, nf=2)$tab # MCA, keep 2 axes

# Run RDA
Q11_rda_mod1 <- rda(Q11_dep2 ~ ., data = Q11_indep2) 
envfit(Q11_rda_mod1,Q11_indep2) # select variables at alpha = 0.001 with R2>0.05
Q11_indep3 <- Q11_indep2 %>%
  dplyr::select(Gende.Female,Gende.Male, Age.18.24, Age.25.34, Age.45.54, Age.55.64, Age.65.or.older, Child.18.or.over, Child.No.children, Child.Under.17,Race_.White, Race_.White.Hispanic, SW_FW.SW)
Q11_rda_mod2 <- rda(Q11_dep2 ~ ., data = Q11_indep3)
envfit(Q11_rda_mod2,Q11_indep3) # select variables at alpha = 0.001 for next model
Q11_indep4 <- Q11_indep2 %>%
  dplyr::select(Age.18.24, Age.25.34,Age.55.64, Age.65.or.older, Child.18.or.over, Child.No.children)
Q11_rda_mod3 <- rda(Q11_dep2 ~ ., data = Q11_indep4)
envfit(Q11_rda_mod3,Q11_indep4) # select variables at alpha = 0.001 for next model
Q11_rda_mod3$call
RsquareAdj(Q11_rda_mod3) 
sqrt(vif.cca(Q11_rda_mod3))

# Extract scores for visualization
# Basic plot for visualization
vare_spp_sco <- scores(Q11_rda_mod3, display = "species")
vare_sam_sco <- scores(Q11_rda_mod3, display = "sites")
vare_env_sco <- scores(Q11_rda_mod3, display = "bp")
vare_spp_tbl <- as_tibble(vare_spp_sco)
vare_sam_tbl <- as_tibble(vare_sam_sco)
vare_env_tbl <- as_tibble(vare_env_sco)
vare_spp_tbl <- mutate(vare_spp_tbl, vgntxt=c("Enjoyed fishing","Too expensive","Fishing rules confusing", "Enjoyed surroundings"), ccatype = "species")
vare_sam_tbl <- mutate(vare_sam_tbl, vgntxt=rownames(vare_sam_sco), ccatype = "sites")
vare_env_tbl <- mutate(vare_env_tbl, vgntxt=c("Age 18-24","Age 25-34","Age 55-64","Age 65 over","Children 18 over","No Children"),ccatype = "bp")
rescaled <- vare_env_tbl %>% 
            dplyr::select(RDA1, RDA2) %>%
            as.matrix() *2.5
vare_tbl <- dplyr::select(vare_env_tbl, vgntxt, ccatype) %>%
            bind_cols(as_tibble(rescaled)) %>%
            bind_rows(vare_spp_tbl)
# Reorganize data to plot
Q11_a <- rev1_wts[c(which(colnames(rev1_wts)=="Q11A"):which(colnames(rev1_wts)=="Q11D"))]
colnames(Q11_a) <- c("Enjoyed_fishing","Too_expensive","Fishing_rules_confusing","Enjoyed_surroundings")
Q11_b <- Q11_a %>% 
  pivot_longer(cols = Enjoyed_fishing:Enjoyed_surroundings,names_to = "Q11_answers",values_to = "Agreement")
Q11_c <- Q11_b %>%
  group_by(Q11_answers,Agreement) %>%
  count() %>%
  na.omit()
Q11_c$Agreement <- ordered(Q11_c$Agreement,levels = c("Strongly Agree", "Agree", "Disagree","Strongly Disagree") )
ggplot(Q11_c, aes(fill=Agreement, y=n, x=Q11_answers)) + geom_bar(position="fill", stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Percent", x = "Q11. Agreement on Fishing Statements") 

# PERMANOVA
anova.cca(Q11_rda_mod3, step = 1000, by = "axis",permutations = 999)
## Permutation test for rda under reduced model
## Forward tests for axes
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(formula = Q11_dep2 ~ Age.18.24 + Age.25.34 + Age.55.64 + Age.65.or.older + Child.18.or.over + Child.No.children, data = Q11_indep4)
##           Df Variance        F Pr(>F)    
## RDA1       1  1.91738 879.8543  0.001 ***
## RDA2       1  0.00205   0.9425  0.993    
## RDA3       1  0.00115   0.5297  0.998    
## RDA4       1  0.00044   0.2038  1.000    
## Residual 954  2.07896                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
envfit(Q11_rda_mod3,Q11_indep4) # select variables at alpha = 0.001 for next model
## 
## ***VECTORS
## 
##                        RDA1      RDA2     r2 Pr(>r)    
## Age.18.24          0.999920 -0.012517 0.5785  0.001 ***
## Age.25.34          0.999850 -0.017438 0.0709  0.001 ***
## Age.55.64         -0.999890  0.014526 0.0948  0.001 ***
## Age.65.or.older   -0.999900  0.014469 0.0491  0.001 ***
## Child.18.or.over  -0.999940  0.011054 0.1972  0.001 ***
## Child.No.children  0.999880 -0.015624 0.1200  0.001 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
# Basic visualization
ggplot() +
  geom_point(aes(x=RDA1, y=RDA2), data=filter(vare_tbl, ccatype=="species"))  +
  geom_text_repel(aes(x=RDA1, y=RDA2, label=vgntxt, size=3,colour=ccatype),
                  data=vare_tbl, seed=123) + 
  geom_segment(aes(x=0, y=0, xend=RDA1, yend=RDA2), arrow=arrow(length = unit(0.2,"cm")),
               data=filter(vare_tbl, ccatype=="bp"), color="blue") +
  coord_fixed() +
  theme_classic() +
  scale_colour_manual(values = c("blue", "black")) +
  theme(legend.position="none")

Most individuals agreed with the statements that they enjoyed fishing and their surroundings and disagreed with the statements that fishing rules were confusing or fishing was too expensive.

Anglers without children and between the ages of 18-34 were more likely to enjoy their surroundings and enjoy fishing, while those with children and over the age of 55 were more likely to report that the fishing rules were confusing and that fishing was too expensive.

Q12. How often did you catch fish during your trips?

# Order the factor
rev2_wts$Q12_CatchOften <- as.factor(rev2_wts$Q12_CatchOften)
rev2_wts$Q12_CatchOften  <- ordered(rev2_wts$Q12_CatchOften, levels = c("Never","Rarely", "Sometimes","Most of the time","Always"))
svy_desn_Q12 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q12_mod1 <- svyolr(Q12_CatchOften ~  SW_FW2 + Age + Gender + Income + Children + New.Old + COVID + Race_Ethn, design=svy_desn_Q12)
summary(Q12_mod1) # examine model results
VIF(Q12_mod1) # collinearity
Q12_mod2 <- svyolr(Q12_CatchOften ~ SW_FW2 + Income + COVID + Race_Ethn, design=svy_desn_Q12)
summary(Q12_mod2) # examine model results
VIF(Q12_mod2) # collinearity
Q12_mod3 <- svyolr(Q12_CatchOften ~ SW_FW2 + COVID + Race_Ethn, design=svy_desn_Q12)
summary(Q12_mod3) # examine model results
VIF(Q12_mod3) # collinearity

# Estimate and odds ratio table
Q12_coef_table <- coef(summary(Q12_mod3))
Q12_pval <- pnorm(abs(Q12_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q12_AOR <- exp(coef(Q12_mod3))
Q12_summary_table <- cbind(Q12_coef_table, "p value" = round(Q12_pval,3),Odds_Ratio = Q12_AOR)

# Survey response proportions
Q12_prop <- rev2_wts %>%
  filter(!(is.na(Q12_CatchOften))) %>% # remove NA values from Gender & Age
  count(Q12_CatchOften) %>%
  mutate(freq = prop.table(n)) # get proportions

Q12_COVID_AOR <- 1/0.564 # 1.773x
# Table of responses
Q12_prop %>% 
  kbl(caption = "Q12 How often do you catch fish?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q12 How often do you catch fish?
Q12_CatchOften n freq
Never 38 0.02
Rarely 181 0.10
Sometimes 541 0.29
Most of the time 829 0.45
Always 254 0.14
# Histogram of responses
ggplot(model.frame(Q12_mod3), aes(Q12_CatchOften, fill = SW_FW2)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q12. How often do you catch fish?") + facet_wrap(~COVID, ncol = 2)

# Odds Ratio summary table
Q12_summary_table %>% 
  kbl(caption = "Q12 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q12 Model Odds Ratios
Value Std. Error t value p value Odds_Ratio
SW_FW2SW 0.20 0.16 1.22 0.22 1.22
SW_FW2SW.FW 0.32 0.14 2.19 0.03 1.37
COVIDYes -0.57 0.16 -3.58 0.00 0.56
Race_EthnBlack or African American -0.30 0.33 -0.91 0.36 0.74
Race_EthnHispanic -0.82 0.68 -1.20 0.23 0.44
Race_EthnNative American or Alaskan Native 0.88 0.29 3.08 0.00 2.42
Race_EthnOther Hispanic 0.35 0.41 0.85 0.39 1.42
Race_EthnWhite 0.40 0.26 1.53 0.12 1.49
Race_EthnWhite Hispanic -0.37 0.29 -1.29 0.20 0.69
Never|Rarely -3.45 0.36 -9.70 0.00 0.03
Rarely|Sometimes -1.88 0.28 -6.78 0.00 0.15
Sometimes|Most of the time -0.10 0.27 -0.38 0.70 0.90
Most of the time|Always 2.19 0.29 7.68 0.00 8.93

Most anglers (88%) reported that they usually catch fish (either sometimes, most of the time, or always), while only 12% of anglers rarely (10%) or never (2%) catch fish.

The odds of catching fish most of the time were: 1.37 times more likely for for anglers that fish in both freshwater and saltwater compared to just freshwater anglers, 1.77 times more likely for anglers that were already planning to fish pre-COVID compared to anglers that recruited during COVID, and 2.42 times more likely for Native American or Alaskan Native anglers.

Q13. How often did you keep the fish you caught?

# Order the factor
rev2_wts$Q13_KeepOften <- as.factor(rev2_wts$Q13_KeepOften)
rev2_wts$Q13_KeepOften  <- ordered(rev2_wts$Q13_KeepOften, levels = c("Never","Rarely", "Sometimes", "Most of the time","Always"))
svy_desn_Q13 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q13_mod1 <- svyolr(Q13_KeepOften ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q13)
summary(Q13_mod1) # examine model results
VIF(Q13_mod1) # collinearity
Q13_mod2 <- svyolr(Q13_KeepOften ~ New.Old + COVID + SW_FW2 + Age + Income, design=svy_desn_Q13)
summary(Q13_mod2) # examine model results
VIF(Q13_mod2) # collinearity
Q13_mod3 <- svyolr(Q13_KeepOften ~ New.Old + SW_FW2 + Age, design=svy_desn_Q13)
summary(Q13_mod3) # examine model results
VIF(Q13_mod3) # collinearity

# Create odds ratio summary table
Q13_coef_table <- coef(summary(Q13_mod3))
Q13_pval <- pnorm(abs(Q13_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q13_AOR <- exp(coef(Q13_mod3))
Q13_summary_table <- cbind(Q13_coef_table, "p value" = round(Q13_pval,3),Odds_Ratio = Q13_AOR)

# Survey response proportions
Q13_prop <- rev2_wts %>%
  filter(!(is.na(Q13_KeepOften))) %>% # remove NA values from Gender & Age
  count(Q13_KeepOften) %>%
  mutate(freq = prop.table(n)) # get proportions
Q13_prop
# Table of responses
Q13_prop %>% 
  kbl(caption = "Q13 How often do you keep the fish you catch?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q13 How often do you keep the fish you catch?
Q13_KeepOften n freq
Never 429 0.24
Rarely 409 0.23
Sometimes 572 0.32
Most of the time 296 0.16
Always 97 0.05
# Histogram of responses
ggplot(model.frame(Q13_mod3), aes(Q13_KeepOften, fill = SW_FW2)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q13. How often do you keep fish?") + facet_wrap(~New.Old, ncol = 2)

# Odds Ratio summary table
Q13_summary_table %>% 
  kbl(caption = "Q13 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q13 Model Odds Ratios
Value Std. Error t value p value Odds_Ratio
New.OldOld 0.43 0.12 3.69 0.00 1.54
SW_FW2SW 1.21 0.15 8.30 0.00 3.36
SW_FW2SW.FW 0.78 0.14 5.79 0.00 2.18
Age25-34 0.16 0.23 0.69 0.49 1.17
Age35-44 0.32 0.22 1.45 0.15 1.38
Age45-54 0.18 0.22 0.81 0.42 1.20
Age55-64 0.57 0.23 2.51 0.01 1.77
Age65 or older 1.02 0.25 4.04 0.00 2.79
Never|Rarely -0.20 0.23 -0.89 0.37 0.82
Rarely|Sometimes 0.96 0.23 4.12 0.00 2.61
Sometimes|Most of the time 2.54 0.25 10.15 0.00 12.63
Most of the time|Always 4.18 0.27 15.32 0.00 65.05

Approximately half of anglers (47%) reported that they do not usually keep the fish they catch (either rarely or never), while 32% of anglers sometimes keep their catch and only 21% of anglers usually keep their catch (most of the time or always).

The odds of keeping the fish that anglers caught were: 1.54 times more likely for for anglers that had licenses prior to the pandemic, 3.36 times more likely for saltwater anglers compared to freshwater anglers, 2.18 times more likely for anglers that fish in both freshwater and saltwater compared to freshwater anglers, 1.77-2.79 times more likely for anglers 55+.

Q14. When you went fishing, was there anything you did not enjoy? Choose all that apply.

# Evaluate frequencies by categorical responses
Q14_df1 <- rev2_wts %>% 
  dplyr::select(c("Q14A":"Q14F")) %>%
  pivot_longer(cols = "Q14A":"Q14F",names_to = "Q14_answers",values_to = "Agreement") %>%
  group_by(Q14_answers,Agreement) %>%
  count() %>%
  na.omit()
freq = prop.table(Q14_df1$n)
Q14_df1 <- data.frame(cbind(Q14_df1,freq=freq))
Q14_df1$Agreement <- recode_factor(Q14_df1$Agreement,"No, I enjoyed everything." = "Enjoyed everything","It was tough to find a good fishing spot close to home." = "Finding close fishing spot","I didnt have all of the needed equipment to fish." = "Needed equipment","I wasnt sure about the right techniques for casting or reeling in my bait/lure." = "Techniques for casting/reeling","My children had a lot of trouble fishing (casting, paying attention, avoiding anything dangerous, etc.)." = "Children had trouble","I didnt catch anything." = "Didn't catch anything")

# Format data for analysis
Q14_df2 <- rev2_wts %>% 
    dplyr::select(Q14A,Q14B,Q14C,Q14D,Q14E,Q14F,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  pivot_longer(cols = "Q14A":"Q14F",names_to = "Q14_answers",values_to = "Agreement") %>%
  group_by(Q14_answers,Agreement,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  filter(!is.na(Agreement)) %>%
  mutate(Agreement = as.factor(Agreement)) %>%
  data.frame()
Q14_df2$Agreement <- recode_factor(Q14_df2$Agreement,"No, I enjoyed everything." = "Enjoyed everything","It was tough to find a good fishing spot close to home." = "Finding close fishing spot","I didnt have all of the needed equipment to fish." = "Needed equipment","I wasnt sure about the right techniques for casting or reeling in my bait/lure." = "Techniques for casting/reeling","My children had a lot of trouble fishing (casting, paying attention, avoiding anything dangerous, etc.)." = "Children had trouble","I didnt catch anything." = "Didn't catch anything")

# Chi-square tests
svy_desn_Q14 <- svydesign(ids = ~0, weights = ~weights, data = Q14_df2) # Survey design

Q14_Gender_chisq <- svychisq(~Gender + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_Age_chisq <- svychisq(~Age + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_Race_Ethn_chisq <- svychisq(~Race_Ethn + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_Income_chisq <- svychisq(~Income + Agreement, svy_desn_Q14, statistic = "adjWald") # NOT significant
Q14_SW_FW2_chisq <- svychisq(~SW_FW2 + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_New.Old_chisq <- svychisq(~New.Old + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_Children_chisq <- svychisq(~Children + Agreement, svy_desn_Q14, statistic = "adjWald") # significant
Q14_COVID_chisq <- svychisq(~COVID + Agreement, svy_desn_Q14, statistic = "adjWald") # significant

# Contingency tables for significant factors
Q14_Gender_tbl <- svytable(~Gender + Agreement, svy_desn_Q14)
Q14_Age_tbl <- svytable(~Age + Agreement, svy_desn_Q14)
Q14_Race_Ethn_tbl <- svytable(~Race_Ethn + Agreement, svy_desn_Q14)
Q14_SW_FW2_tbl <- svytable(~SW_FW2 + Agreement, svy_desn_Q14)
Q14_New.Old_tbl <- svytable(~New.Old + Agreement, svy_desn_Q14)
Q14_COVID_tbl <- svytable(~COVID + Agreement, svy_desn_Q14)
Q14_Children_tbl <- svytable(~Children + Agreement, svy_desn_Q14)
# Response percentages graph
ggplot(Q14_df1,aes(x=Agreement,y=freq)) + geom_bar(stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8), axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + labs(y = "Percentage", x = "Q14. Was there anything about fishing you didn't enjoy?") 

# Chi-square test results
Q14_Gender_tbl %>% 
  kbl(caption = "Q14 Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q14 Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
Female 285 125 27 102 32 128
Male 433 367 114 174 60 240
Q14_Gender_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Gender + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 5.7381, ndf = 5, ddf = 2086, p-value = 2.886e-05
corrplot(Q14_Gender_chisq$residuals, is.cor = FALSE)

Q14_Age_tbl %>% 
  kbl(caption = "Q14 Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q14 Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
18-24 89 144 41 63 5 101
25-34 146 131 34 98 33 79
35-44 175 101 36 56 37 89
45-54 153 68 18 33 11 52
55-64 110 33 9 19 4 28
65 or older 48 15 3 7 3 15
Q14_Age_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Age + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 4.9101, ndf = 25, ddf = 2066, p-value = 2.302e-14
corrplot(Q14_Age_chisq$residuals, is.cor = FALSE)

Q14_Race_Ethn_tbl %>% 
  kbl(caption = "Q14 Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q14 Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
Asian or Pacific Islander 19 24 9 22 2 14
Black or African American 20 27 13 17 7 23
Hispanic 14 15 3 12 5 10
Native American or Alaskan Native 22 12 7 12 3 9
Other Hispanic 33 44 6 16 4 9
White 453 239 71 127 58 197
White Hispanic 112 91 31 67 8 73
Q14_Race_Ethn_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Race_Ethn + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 1.9292, ndf = 30, ddf = 2061, p-value = 0.001846
corrplot(Q14_Race_Ethn_chisq$residuals, is.cor = FALSE)

Q14_SW_FW2_tbl %>% 
  kbl(caption = "Q14 Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q14 Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
FW 309 230 56 137 44 186
SW 215 68 22 51 15 59
SW.FW 261 214 68 111 42 152
Q14_SW_FW2_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~SW_FW2 + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 3.6805, ndf = 10, ddf = 2081, p-value = 6.761e-05
corrplot(Q14_SW_FW2_chisq$residuals, is.cor = FALSE)

Q14_COVID_tbl %>% 
  kbl(caption = "Q14 Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q14 Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
No, I was already planning to go fishing. 684 390 114 180 64 282
Yes 103 128 32 120 37 116
Q14_COVID_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~COVID + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 14.078, ndf = 5, ddf = 2086, p-value = 1.447e-13
corrplot(Q14_COVID_chisq$residuals, is.cor = FALSE)

Q14_Children_tbl %>% 
  kbl(caption = "Anything about fishing you didn't enjoy?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Anything about fishing you didn’t enjoy?
Enjoyed everything Finding close fishing spot Needed equipment Techniques for casting/reeling Children had trouble Didn’t catch anything
18 or over 270 97 31 45 17 92
No children 221 233 74 152 5 151
Under 17 81 81 19 32 31 57
Q14_Children_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Children + Agreement, svy_desn_Q14, statistic = "adjWald")
## F = 10.45, ndf = 10, ddf = 2081, p-value < 2.2e-16
corrplot(Q14_Children_chisq$residuals, is.cor = FALSE)

Most anglers reported that they enjoyed everything about fishing, while some anglers reported they had a hard time finding a good fishing spot close to home or that they didn’t catch anything. Female anglers reported that they enjoyed everything, while male anglers were more likely to report difficulty finding a close fishing spot and needing equipment. Anglers over 45 years were most likely to report that they enjoyed everything, while younger anglers had trouble finding a close fishing spot, had uncertainty about casting/reeling, and reported that their children had trouble fishing. Asian or Pacific Islander anglers and White Hispanic anglers had issues with casting/reeling, Black or African American anglers and Native American or Alaskan Native anglers needed equipment, Hispanic anglers children had trouble fishing, Other Hispanic anglers had trouble finding close fishing spots, and White anglers enjoyed everything. Freshwater anglers reported that they didn’t catch anything, saltwater anglers enjoyed everything, and anglers that fished in both needed equipment. Anglers prompted by COVID-19 to fish needed techniques for casting/reeling and anglers that were already planning to fish enjoyed everything. Finally, anglers with young children reported that their children had trouble fishing, anglers with adult children enjoyed everything, and anglers with no children needed techniques for casting/reeling.

Q16. The last time you went fishing, how long did it take you to get there from home? Choose only one answer.

# Order the factor
rev2_wts$Q16_TravelTime <- as.factor(rev2_wts$Q16_TravelTime)
rev2_wts$Q16_TravelTime  <- ordered(rev2_wts$Q16_TravelTime, levels = c("Less than 30 minutes","Between 30 and 60 minutes", "Between 1 and 2 hours", "More than 2 hours"))
svy_desn_Q16 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q16_mod1 <- svyolr(Q16_TravelTime ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q16)
summary(Q16_mod1) # examine model results
VIF(Q16_mod1) # collinearity
Q16_mod2 <- svyolr(Q16_TravelTime ~ Income + SW_FW2 + Age + Race_Ethn, design=svy_desn_Q16)
summary(Q16_mod2) # examine model results
VIF(Q16_mod2) # collinearity

# Create summary table
Q16_coef_table <- coef(summary(Q16_mod2))
Q16_pval <- pnorm(abs(Q16_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q16_AOR <- exp(coef(Q16_mod2))
Q16_summary_table <- cbind(Q16_coef_table, "p value" = round(Q16_pval,3),Odds_Ratio = Q16_AOR)

# Survey response proportions
Q16_prop <- rev2_wts %>%
  filter(!(is.na(Q16_TravelTime))) %>% # remove NA values from Gender & Age
  count(Q16_TravelTime) %>%
  mutate(freq = prop.table(n)) # get proportions

Q16_AOR_I20K <- 1/0.47 # 2.128
Q16_AOR_RW <- 1/0.54 # 1.85
Q16_AOR_RB <- 1/0.58 # 1.72
# Table of responses
Q16_prop %>% 
  kbl(caption = "Q16 How long did it take you to get to your fishing spot?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q16 How long did it take you to get to your fishing spot?
Q16_TravelTime n freq
Less than 30 minutes 599 0.33
Between 30 and 60 minutes 521 0.29
Between 1 and 2 hours 395 0.22
More than 2 hours 283 0.16
# Histogram of responses
ggplot(model.frame(Q16_mod2), aes(Q16_TravelTime, fill = Age)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q16. How long did it take you to get to your fishing spot?") + facet_wrap(~SW_FW2, ncol = 2)

ggplot(model.frame(Q16_mod2), aes(Q16_TravelTime, fill = Income)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q16. How long did it take you to get to your fishing spot?") 

ggplot(model.frame(Q16_mod2), aes(Q16_TravelTime, fill = Race_Ethn)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q16. How long did it take you to get to your fishing spot?") 

# Summary table
Q16_summary_table %>% 
  kbl(caption = "Q16 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q16 Model Odds Ratios
Value Std. Error t value p value Odds_Ratio
IncomeBetween $20,000 and $39,999 -0.60 0.28 -2.18 0.03 0.55
IncomeBetween $40,000 and $59,999 -0.05 0.20 -0.24 0.81 0.95
IncomeBetween $60,000 and $79,999 -0.26 0.20 -1.30 0.20 0.77
IncomeBetween $80,000 and $99,999 -0.06 0.21 -0.30 0.77 0.94
IncomeLess than $20,000 -0.75 0.35 -2.13 0.03 0.47
IncomeOver $150,000 0.21 0.19 1.08 0.28 1.23
SW_FW2SW 0.79 0.17 4.75 0.00 2.20
SW_FW2SW.FW 0.65 0.15 4.27 0.00 1.92
Age25-34 0.36 0.29 1.22 0.22 1.43
Age35-44 0.33 0.28 1.19 0.23 1.40
Age45-54 0.42 0.28 1.52 0.13 1.53
Age55-64 0.53 0.29 1.81 0.07 1.69
Age65 or older 0.70 0.31 2.24 0.03 2.01
Race_EthnBlack or African American -0.61 0.31 -1.97 0.05 0.54
Race_EthnHispanic 0.05 0.45 0.11 0.91 1.05
Race_EthnNative American or Alaskan Native -0.84 0.56 -1.49 0.14 0.43
Race_EthnOther Hispanic -0.37 0.38 -0.99 0.32 0.69
Race_EthnWhite -0.55 0.27 -2.03 0.04 0.58
Race_EthnWhite Hispanic -0.52 0.30 -1.74 0.08 0.59
Less than 30 minutes|Between 30 and 60 minutes -0.50 0.39 -1.29 0.20 0.61
Between 30 and 60 minutes|Between 1 and 2 hours 0.77 0.38 2.00 0.04 2.16
Between 1 and 2 hours|More than 2 hours 1.93 0.39 4.93 0.00 6.87

The majority of anglers (62%) reported that they traveled less than 1 hour the last time they went fishing (less than 30 mins or between 30-60 mins), while 38% of anglers traveled more than 1 hour (between 1-2 hrs or 2+ hrs).

The odds of traveling further to fish were: 2.13 times more likely for anglers with an income between $100K-$150K compared to anglers with the lowest incomes (<$20K), 2.20 times more likely for saltwater anglers compared to freshwater anglers, 1.92 times more likely for anglers that fish in both freshwater and saltwater compared to freshwater anglers, 1.69 - 2.01 times more likely for anglers 55+ compared to younger anglers, and 1.72 - 1.85 times more likely for Asian or Pacific Islander anglers compared to white and Black or African American anglers

Q17. How far are you willing to travel to go fishing?

# Order the factor
rev2_wts$Q17_MaxTravel <- as.factor(rev2_wts$Q17_MaxTravel)
rev2_wts$Q17_MaxTravel  <- ordered(rev2_wts$Q17_MaxTravel, levels = c("Less than 30 minutes","Between 30 and 60 minutes", "Between 1 and 2 hours", "Between 2 and 4 hours","More than 4 hours"))
svy_desn_Q17 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q17_mod1 <- svyolr(Q17_MaxTravel ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q17)
summary(Q17_mod1) # examine model results
VIF(Q17_mod1) # collinearity
Q17_mod2 <- svyolr(Q17_MaxTravel ~ Income + COVID + SW_FW2 + Children, design=svy_desn_Q17)
summary(Q17_mod2) # examine model results
VIF(Q17_mod2) # collinearity
Q17_mod3 <- svyolr(Q17_MaxTravel ~ Income + COVID + SW_FW2, design=svy_desn_Q17)
summary(Q17_mod3) # examine model results
VIF(Q17_mod3) # collinearity

# Create summary table
Q17_coef_table <- coef(summary(Q17_mod3))
Q17_pval <- pnorm(abs(Q17_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q17_AOR <- exp(coef(Q17_mod3))
Q17_summary_table <- cbind(Q17_coef_table, "p value" = round(Q17_pval,3),Odds_ratio = Q17_AOR)

# Survey response proportions
Q17_prop <- rev2_wts %>%
  filter(!(is.na(Q17_MaxTravel))) %>% # remove NA values from Gender & Age
  count(Q17_MaxTravel) %>%
  mutate(freq = prop.table(n)) # get proportions

Q17_AOR_I20K <- 1/0.39 # 2.56
Q16_AOR_Covid <- 1/0.66 # 1.52
Q16_AOR_RB <- 1/0.58 # 1.72
# Table of responses
Q17_prop %>% 
  kbl(caption = "Q17 How far are you willing to travel to go fishing?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria")
Q17 How far are you willing to travel to go fishing?
Q17_MaxTravel n freq
Less than 30 minutes 68 0.04
Between 30 and 60 minutes 341 0.19
Between 1 and 2 hours 556 0.31
Between 2 and 4 hours 430 0.24
More than 4 hours 400 0.22
# Histogram of responses
ggplot(model.frame(Q17_mod2), aes(Q17_MaxTravel, fill = Income)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q17. How far are you willing to travel to go fishing?") + facet_wrap(~SW_FW2, ncol = 2)

ggplot(model.frame(Q17_mod2), aes(Q17_MaxTravel, fill = COVID)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q17. How far are you willing to travel to go fishing?")

# Summary Table
Q17_summary_table %>% 
  kbl(caption = "Q17 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q17 Model Odds Ratios
Value Std. Error t value p value Odds_ratio
IncomeBetween $20,000 and $39,999 -0.02 0.25 -0.08 0.94 0.98
IncomeBetween $40,000 and $59,999 0.17 0.20 0.85 0.40 1.19
IncomeBetween $60,000 and $79,999 0.12 0.22 0.52 0.60 1.12
IncomeBetween $80,000 and $99,999 -0.17 0.16 -1.04 0.30 0.84
IncomeLess than $20,000 -0.95 0.45 -2.12 0.03 0.39
IncomeOver $150,000 0.51 0.18 2.84 0.00 1.66
COVIDYes -0.41 0.15 -2.70 0.01 0.66
SW_FW2SW 0.10 0.17 0.62 0.54 1.11
SW_FW2SW.FW 0.67 0.15 4.49 0.00 1.96
Less than 30 minutes|Between 30 and 60 minutes -3.32 0.23 -14.53 0.00 0.04
Between 30 and 60 minutes|Between 1 and 2 hours -1.03 0.14 -7.10 0.00 0.36
Between 1 and 2 hours|Between 2 and 4 hours 0.30 0.14 2.10 0.04 1.35
Between 2 and 4 hours|More than 4 hours 1.40 0.15 9.35 0.00 4.07

Most anglers (77%) reported that they were willing to travel over an hour to go fishing with a travel time mode of between 1-2 hrs. Only 4% of anglers desired fishing spots within a 30 minute drive.

The odds of being willing to travel further to fish were: 2.56 times more likely for anglers with an income between $100K-$150K compared to anglers with the lowest incomes (<$20K), 1.66 times more likely for anglers with an income over $150K compared to anglers with lower incomes, 1.52 times more likely for anglers that had licenses prior to the pandemic, and 1.96 times more likely for anglers that fish in both freshwater and saltwater compared to freshwater anglers.

Q18. Please tell us how these features would affect your willingness to fish. For each row, indicate your level of agreement with the following statement: I am more likely to go fishing at a place where this feature, facility, or amenity is available:

# Clean Q18 survey answers
rev2_wts <- rev2_wts %>%  
  mutate_at(vars(Q18A:Q18I), list(~recode_factor(.,"Strongly Disagree" = "-2","Disagree" = "-1","Neither Agree nor Disagree" = "0","Agree" = "1","Strongly Agree"= "2"))) %>%
  mutate(across(Q18A:Q18I, ~as.numeric(as.character(.)))) %>%
  mutate_at(vars(Q18A:Q18I), list(~.*weights)) %>%
  mutate(Motorboat_access = Q18A,
         Peaceful_areas = Q18B,
         Portable_restrooms = Q18C,
         Paddling_trail = Q18D,
         Fish_stockings = Q18E,
         Parking_area = Q18F,
         ADA_accessible = Q18G,
         Baby_changing_stations = Q18H,
         Shoreline_access = Q18I)
  
# Remove rows with missing independent variable data
Q18_df1 <- rev2_wts %>%
  filter_at(vars(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2),all_vars(!is.na(.))) 
# Select independent variables
Q18_indep1 <- Q18_df1 %>%
  dplyr::select(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2)
# Select dependent variables
Q18_dep1 <- Q18_df1 %>%
  dplyr::select(Motorboat_access,Peaceful_areas,Portable_restrooms,Paddling_trail,Fish_stockings,Parking_area,ADA_accessible,Baby_changing_stations,Shoreline_access)
# Transform dependent data
Q18_dep2 <- decostand(Q18_dep1, method = 'normalize') # normalize
# MCA, keep 2 axes, on independent data
Q18_indep2 <- dudi.mix(Q18_indep1, scannf=F, nf=2)$tab # MCA, keep 2 axes

# Run RDA
Q18_rda_mod1 <- rda(Q18_dep2 ~ ., data = Q18_indep2,scale = TRUE) 
envfit(Q18_rda_mod1,Q18_indep2) # select variables at alpha = 0.001 for next model 
Q18_indep3 <- Q18_indep2 %>%
  dplyr::select(Incom.Between..100.000.and..149.999,Incom.Over..150.000,Age.25.34, Age.35.44, Age.45.54, Age.65.or.older,Child.No.children,Child.Under.17,New.O.New,New.O.Old, Race_.Black.or.African.American,Race_.White, Race_.White.Hispanic,SW_FW.SW,SW_FW.FW)
Q18_rda_mod2 <- rda(Q18_dep2 ~ ., data = Q18_indep3)
envfit(Q18_rda_mod2,Q18_indep3) # select variables at alpha = 0.001 for next model
Q18_indep4 <- Q18_indep2 %>%
  dplyr::select(Incom.Over..150.000,Age.25.34,Age.65.or.older,Child.No.children,Child.Under.17,New.O.New,New.O.Old, Race_.Black.or.African.American,Race_.White, Race_.White.Hispanic, SW_FW.SW,SW_FW.FW)
Q18_rda_mod3 <- rda(Q18_dep2 ~ ., data = Q18_indep4)
envfit(Q18_rda_mod3,Q18_indep4) # select variables at alpha = 0.001 for next model
Q18_rda_mod3$call
RsquareAdj(Q18_rda_mod3) # 0.04 
sqrt(vif.cca(Q18_rda_mod3))

# Extract scores for visualization
# Basic plot for visualization
vare_spp_sco <- scores(Q18_rda_mod3, display = "species",scaling = "species")
vare_sam_sco <- scores(Q18_rda_mod3, display = "sites",scaling = "sites")
vare_env_sco <- scores(Q18_rda_mod3, display = "bp",scaling = "sites")
vare_spp_tbl <- as_tibble(vare_spp_sco)
vare_sam_tbl <- as_tibble(vare_sam_sco)
vare_env_tbl <- as_tibble(vare_env_sco)
vare_spp_tbl <- mutate(vare_spp_tbl, vgntxt=rownames(vare_spp_sco), ccatype = "species")
vare_sam_tbl <- mutate(vare_sam_tbl, vgntxt=rownames(vare_sam_sco), ccatype = "sites")
vare_env_tbl <- mutate(vare_env_tbl, vgntxt=c("Income over $150K","Age 25-34","Age 65 over","No children", "Children Under 17","New Angler","Black or African American","White","White Hispanic","Saltwater","Freshwater"),ccatype = "bp")
rescaled <- vare_env_tbl %>% 
            dplyr::select(RDA1, RDA2) %>%
            as.matrix() *4.5
vare_tbl <- dplyr::select(vare_env_tbl, vgntxt, ccatype) %>%
            bind_cols(as_tibble(rescaled)) %>%
            bind_rows(vare_spp_tbl)
# Reorganize data to plot
Q18_a <- rev1_wts[c(which(colnames(rev1_wts)=="Q18A"):which(colnames(rev1_wts)=="Q18I"))]
colnames(Q18_a) <- c("Motorboat_access","Peaceful_areas","Portable_restrooms","Paddling_trail","Fish_stockings","Parking_area","ADA_accessible","Baby_changing_stations","Shoreline_access") 
Q18_b <- Q18_a %>% 
  pivot_longer(cols = Motorboat_access:Shoreline_access,names_to = "Q18_answers",values_to = "Agreement")
Q18_c <- Q18_b %>%
  group_by(Q18_answers,Agreement) %>%
  count() %>%
  na.omit()
Q18_c$Agreement <- ordered(Q18_c$Agreement,levels = c("Strongly Agree", "Agree", "Neither Agree nor Disagree","Disagree","Strongly Disagree") )

ggplot(Q18_c, aes(fill=Agreement, y=n, x=Q18_answers)) + geom_bar(position="fill", stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Percent", x = "Q18. Agreement on Fishing Statements") 

# PERMANOVA
anova.cca(Q18_rda_mod3, step = 1000, by = "axis",permutations = 999)
## Permutation test for rda under reduced model
## Forward tests for axes
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(formula = Q18_dep2 ~ Incom.Over..150.000 + Age.25.34 + Age.65.or.older + Child.No.children + Child.Under.17 + New.O.New + New.O.Old + Race_.Black.or.African.American + Race_.White + Race_.White.Hispanic + SW_FW.SW + SW_FW.FW, data = Q18_indep4)
##           Df Variance       F Pr(>F)    
## RDA1       1  0.01240 26.2410  0.001 ***
## RDA2       1  0.00486 10.2844  0.002 ** 
## RDA3       1  0.00260  5.5001  0.103    
## RDA4       1  0.00251  5.3210  0.087 .  
## RDA5       1  0.00099  2.1053  0.877    
## RDA6       1  0.00037  0.7828  1.000    
## RDA7       1  0.00015  0.3210  1.000    
## RDA8       1  0.00011  0.2434  1.000    
## RDA9       1  0.00008  0.1719  1.000    
## Residual 949  0.44843                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
envfit(Q18_rda_mod3,Q18_indep4) # select variables at alpha = 0.001 for next model
## 
## ***VECTORS
## 
##                                     RDA1     RDA2     r2 Pr(>r)    
## Incom.Over..150.000              0.93128  0.36431 0.0214  0.001 ***
## Age.25.34                       -0.99940 -0.03474 0.0270  0.001 ***
## Age.65.or.older                  0.99711  0.07597 0.0192  0.001 ***
## Child.No.children               -0.50675 -0.86209 0.0210  0.001 ***
## Child.Under.17                  -0.87368  0.48650 0.0501  0.001 ***
## New.O.New                       -0.79407 -0.60783 0.0267  0.001 ***
## New.O.Old                        0.79407  0.60783 0.0267  0.001 ***
## Race_.Black.or.African.American -0.61014 -0.79229 0.0138  0.001 ***
## Race_.White                      0.99582  0.09129 0.0476  0.001 ***
## Race_.White.Hispanic            -0.98298  0.18369 0.0180  0.001 ***
## SW_FW.SW                         0.28128  0.95962 0.0377  0.001 ***
## SW_FW.FW                        -0.24117 -0.97048 0.0175  0.001 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
# Basic plot for visualization
ggplot() +
  geom_point(aes(x=RDA1, y=RDA2), data=filter(vare_tbl, ccatype=="species"))  +
  geom_text_repel(aes(x=RDA1, y=RDA2, label=vgntxt, size=3,colour=ccatype),
                  data=vare_tbl, seed=123) + 
  geom_segment(aes(x=0, y=0, xend=RDA1, yend=RDA2), arrow=arrow(length = unit(0.2,"cm")),
               data=filter(vare_tbl, ccatype=="bp"), color="blue") +
  coord_fixed() +
  theme_classic() +
  scale_colour_manual(values = c("blue", "black")) +
  theme(legend.position="none")

Anglers agreed more strongly that they would fish in areas that had the following amenities: parking areas, peaceful areas, portable restrooms, and shoreline access. Fish stockings, motorboat access, and paddling trails were less important, while having baby changing stations and ADA accessible facilities were least important overall. Anglers that recruited during the pandemic and fish in freshwater were more likely to to agree that fish stockings, having peaceful areas, ADA accessibility, and shoreline access were important.

Anglers between the ages of 25-34 and those that identified as White Hispanic favored sites with paddling trails. Anglers that recruited during the pandemic, Black or African American anglers, anglers without children, and freshwater anglers favored fish stockings and peaceful areas. Anglers age 65 and over, white, saltwater anglers, and with incomes over $150K were more likely to favor sites with motorboat access. Finally, anglers with children under 17 were more likely to favor sites with baby changing stations and portable restrooms.

Q19. Please tell us how these features would affect your willingness to fish. For each row, indicate your level of agreement with the following statement: I am more likely to go fishing at a place where this feature, facility, or amenity is available:

# Clean Q19 survey answers
rev2_wts <- rev2_wts %>%  
  mutate_at(vars(Q19A:Q19H), list(~recode_factor(.,"Strongly Disagree" = "-2","Disagree" = "-1","Neither Agree nor Disagree" = "0","Agree" = "1","Strongly Agree"= "2"))) %>%
  mutate(across(Q19A:Q19H, ~as.numeric(as.character(.)))) %>%
  mutate_at(vars(Q19A:Q19H), list(~.*weights)) %>%
  mutate(Canoe_access = Q19A,
         Space = Q19B,
         Brick_restrooms = Q19C,
         Lighting = Q19D,
         Picnic_areas = Q19E,
         Playground = Q19F,
         Shade = Q19G,
         Swimming = Q19H)
  
# Remove rows with missing independent variable data
Q19_df1 <- rev2_wts %>%
  filter_at(vars(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2),all_vars(!is.na(.))) 
# Select independent variables
Q19_indep1 <- Q19_df1 %>%
  dplyr::select(Gender,Income,Age,Children,COVID,New.Old,Race_Ethn,SW_FW2)
# Select dependent variables
Q19_dep1 <- Q19_df1 %>%
  dplyr::select(Canoe_access,Space,Brick_restrooms,Lighting,Picnic_areas,Playground,Shade,Swimming)
# Transform dependent data
Q19_dep2 <- decostand(Q19_dep1, method = 'normalize')
# MCA, keep 2 axes, on independent data
Q19_indep2 <- dudi.mix(Q19_indep1, scannf=F, nf=2)$tab # MCA, keep 2 axes

# Run RDA
Q19_rda_mod1 <- rda(Q19_dep2 ~ ., data = Q19_indep2) 
envfit(Q19_rda_mod1,Q19_indep2) # select variables at alpha = 0.001 for next model 
Q19_indep3 <- Q19_indep2 %>%
  dplyr::select(Age.25.34,Age.65.or.older,Child.18.or.over,Child.No.children,Child.Under.17,New.O.New,New.O.Old, Race_.White, Race_.White.Hispanic,SW_FW.SW)
Q19_rda_mod2 <- rda(Q19_dep2 ~ ., data = Q19_indep3)
envfit(Q19_rda_mod2,Q19_indep3) # select variables at alpha = 0.001 for next model
Q19_rda_mod2$call
RsquareAdj(Q19_rda_mod2) 
sqrt(vif.cca(Q19_rda_mod2))

# Extract scores for visualization
# Basic plot for visualization
vare_spp_sco <- scores(Q19_rda_mod2, display = "species")
vare_sam_sco <- scores(Q19_rda_mod2, display = "sites")
vare_env_sco <- scores(Q19_rda_mod2, display = "bp")
vare_spp_tbl <- as_tibble(vare_spp_sco)
vare_sam_tbl <- as_tibble(vare_sam_sco)
vare_env_tbl <- as_tibble(vare_env_sco)
vare_spp_tbl <- mutate(vare_spp_tbl, vgntxt=rownames(vare_spp_sco), ccatype = "species")
vare_sam_tbl <- mutate(vare_sam_tbl, vgntxt=rownames(vare_sam_sco), ccatype = "sites")
vare_env_tbl <- mutate(vare_env_tbl, vgntxt=c("Age 25-34","Age 65 over","Children over 18","No Children","New Angler","White","White Hispanic","Saltwater"),ccatype = "bp")
rescaled <- vare_env_tbl %>% 
            dplyr::select(RDA1, RDA2) %>%
            as.matrix() * 0.5
vare_tbl <- dplyr::select(vare_env_tbl, vgntxt, ccatype) %>%
            bind_cols(as_tibble(rescaled)) %>%
            bind_rows(vare_spp_tbl)
# Reorganize data to plot
Q19_a <- rev1_wts[c(which(colnames(rev1_wts)=="Q19A"):which(colnames(rev1_wts)=="Q19H"))]
colnames(Q19_a) <- c("Canoe_access","Space","Brick_restrooms","Lighting","Picnic_areas","Playground","Shade","Swimming") 
Q19_b <- Q19_a %>% 
  pivot_longer(cols = Canoe_access:Swimming,names_to = "Q19_answers",values_to = "Agreement")
Q19_c <- Q19_b %>%
  group_by(Q19_answers,Agreement) %>%
  count() %>%
  na.omit()
Q19_c$Agreement <- ordered(Q19_c$Agreement,levels = c("Strongly Agree", "Agree", "Neither Agree nor Disagree","Disagree","Strongly Disagree") )

ggplot(Q19_c, aes(fill=Agreement, y=n, x=Q19_answers)) + geom_bar(position="fill", stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Percent", x = "Q19. Agreement on Fishing Statements") 

# PERMANOVA
anova.cca(Q19_rda_mod2, step = 1000, by = "axis",permutations = 999)
## Permutation test for rda under reduced model
## Forward tests for axes
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(formula = Q19_dep2 ~ Age.25.34 + Age.65.or.older + Child.18.or.over + Child.No.children + Child.Under.17 + New.O.New + New.O.Old + Race_.White + Race_.White.Hispanic + SW_FW.SW, data = Q19_indep3)
##           Df Variance       F Pr(>F)    
## RDA1       1  0.01291 22.3734  0.001 ***
## RDA2       1  0.00637 11.0451  0.001 ***
## RDA3       1  0.00183  3.1669  0.321    
## RDA4       1  0.00136  2.3558  0.529    
## RDA5       1  0.00112  1.9393  0.576    
## RDA6       1  0.00040  0.6848  0.993    
## RDA7       1  0.00003  0.0520  1.000    
## RDA8       1  0.00001  0.0260  1.000    
## Residual 950  0.54800                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
envfit(Q19_rda_mod2,Q19_indep3) # select variables at alpha = 0.001 for next model
## 
## ***VECTORS
## 
##                          RDA1     RDA2     r2 Pr(>r)    
## Age.25.34            -0.45223  0.89190 0.0232  0.001 ***
## Age.65.or.older       0.58642 -0.81001 0.0127  0.001 ***
## Child.18.or.over      0.42683 -0.90433 0.0306  0.001 ***
## Child.No.children     0.25079  0.96804 0.0602  0.001 ***
## Child.Under.17       -0.81407 -0.58077 0.0594  0.001 ***
## New.O.New            -0.27017  0.96281 0.0399  0.001 ***
## New.O.Old             0.27017 -0.96281 0.0399  0.001 ***
## Race_.White           0.87387  0.48617 0.0297  0.001 ***
## Race_.White.Hispanic -0.95584 -0.29390 0.0157  0.001 ***
## SW_FW.SW              0.02461 -0.99970 0.0341  0.001 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
plot(Q19_rda_mod2,display = c("sp","bp"),const = -3,scaling = "symmetric")

# Basic plot for visualization
ggplot() +
  geom_point(aes(x=RDA1, y=RDA2), data=filter(vare_tbl, ccatype=="species"))  +
  geom_text_repel(aes(x=RDA1, y=RDA2, label=vgntxt, size=2,colour=ccatype),
                  data=vare_tbl, seed=123) + 
  geom_segment(aes(x=0, y=0, xend=RDA1, yend=RDA2), arrow=arrow(length = unit(0.2,"cm")),
               data=filter(vare_tbl, ccatype=="bp"), color="blue") +
  coord_fixed() +
  theme_classic() +
  scale_colour_manual(values = c("blue", "black")) +
  theme(legend.position="none")

Between 60-95% of anglers agreed that all of the following features would increase their willingness to fish at a site: space, shade, lighting, picnic areas and brick restrooms. Anglers were less willing to fish at sites with playgrounds, swimming, and were approximately neutral about canoe accessibility.

Anglers that recruited during the pandemic and anglers between the ages of 25-34 were most willing to fish at sites with shade and canoe access, while anglers over 65, with children over 18, and saltwater anglers were less likely to report those feature as important. White anglers were more willing to fish at sites with more space. Finally, white hispanic anglers were more willing to fish at sites with playgrounds, swimming, picnic areas, lighting, and brick restrooms.

Q20. How likely are you to purchase another fishing license when your current license expires?

# Order the factor
rev2_wts$Q20_NewLicense <- recode_factor(rev2_wts$Q20_NewLicense,"Not likely at all" = "Not likely","Not very likely" = "Not likely")
rev2_wts$Q20_NewLicense  <- ordered(rev2_wts$Q20_NewLicense, levels = c("Not likely", "Somewhat likely", "Very likely"))
svy_desn_Q20 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q20_mod1 <- svyolr(Q20_NewLicense ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q20)
summary(Q20_mod1) # examine model results
VIF(Q20_mod1) # collinearity
Q20_mod2 <- svyolr(Q20_NewLicense ~ New.Old + COVID + SW_FW2, design=svy_desn_Q20)
summary(Q20_mod2) # examine model results
VIF(Q20_mod2) # collinearity

# Survey response proportions
Q20_prop <- rev2_wts %>%
  filter(!(is.na(Q20_NewLicense))) %>% # remove NA values from Gender & Age
  count(Q20_NewLicense) %>%
  mutate(freq = prop.table(n)) # get proportions

# Create summary table
Q20_coef_table <- coef(summary(Q20_mod2))
Q20_pval <- pnorm(abs(Q20_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q20_AOR <- exp(coef(Q20_mod2))
Q20_summary_table <- cbind(Q20_coef_table, "p value" = round(Q20_pval,3),Odds_Ratio = Q20_AOR)
# Table of responses
Q20_prop %>% 
  kbl(caption = "Q20 How likely are you to purchase another fishing license?",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q20 How likely are you to purchase another fishing license?
Q20_NewLicense n freq
Not likely 18 0.01
Somewhat likely 139 0.07
Very likely 1798 0.92
# Histogram of responses
ggplot(model.frame(Q20_mod2), aes(Q20_NewLicense, fill = New.Old)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q20. How likely are you to buy another fishing license?") + facet_wrap(~SW_FW2, ncol = 2)

ggplot(model.frame(Q20_mod2), aes(Q20_NewLicense, fill = COVID)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q20. How likely are you to buy another fishing license?")

# Summary table
Q20_summary_table %>% 
  kbl(caption = "Q20 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q20 Model Odds Ratios
Value Std. Error t value p value Odds_Ratio
New.OldOld 1.19 0.31 3.86 0.00 3.27
COVIDYes -1.02 0.25 -4.06 0.00 0.36
SW_FW2SW -0.43 0.29 -1.50 0.13 0.65
SW_FW2SW.FW 0.63 0.29 2.19 0.03 1.88
Not likely|Somewhat likely -4.93 0.42 -11.74 0.00 0.01
Somewhat likely|Very likely -2.58 0.23 -11.44 0.00 0.08

Most anglers (99%) reported that they were either somewhat likely (7%) or very likely (92%) to purchase another fishing license.

The odds of being likely to purchase another fishing license were: 3.27 times more likely for anglers that purchased a license prior to the pandemic, 2.28 times more likely for anglers that reported that were not prompted by the pandemic to fish, and 1.88 times more likely for anglers that fish in both freshwater and saltwater compared to anglers that only fish in freshwater.

Q21. How likely would you be to enroll in a program where your license renews automatically every year?

# Order the factor
rev2_wts$Q21_AutoRenew <- as.factor(rev2_wts$Q21_AutoRenew)
rev2_wts$Q21_AutoRenew  <- ordered(rev2_wts$Q21_AutoRenew, levels = c("Extremely unlikely","Unlikely", "Not sure", "Likely", "Extremely likely"))
svy_desn_Q21 <- svydesign(ids = ~0, weights = ~weights, data = rev2_wts,na.rm = TRUE) # New survey design

# Ordinal regression
Q21_mod1 <- svyolr(Q21_AutoRenew ~ Gender + Income + Children + New.Old + COVID + Race_Ethn + SW_FW2 + Age, design=svy_desn_Q21)
summary(Q21_mod1) # examine model results
VIF(Q21_mod1) # collinearity
Q21_mod2 <- svyolr(Q21_AutoRenew ~ Income + Race_Ethn, design=svy_desn_Q21)
summary(Q21_mod2) # examine model results
VIF(Q21_mod2) # collinearity

# Survey response proportions
Q21_prop <- rev2_wts %>%
  filter(!(is.na(Q21_AutoRenew))) %>% # remove NA values from Gender & Age
  count(Q21_AutoRenew) %>%
  mutate(freq = prop.table(n)) # get proportions

# Create summary table
Q21_coef_table <- coef(summary(Q21_mod2))
Q21_pval <- pnorm(abs(Q21_coef_table[, "t value"]),lower.tail = FALSE)* 2
Q21_AOR <- exp(coef(Q21_mod2))
Q21_summary_table <- cbind(Q21_coef_table, "p value" = round(Q21_pval,3),Odds_ratio = Q21_AOR)
# Table of responses
Q21_prop %>% 
  kbl(caption = "Q21 Likeliness to enroll in auto-renew program",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q21 Likeliness to enroll in auto-renew program
Q21_AutoRenew n freq
Extremely unlikely 28 0.01
Unlikely 114 0.06
Not sure 471 0.24
Likely 546 0.28
Extremely likely 788 0.40
# Histogram of responses
ggplot(model.frame(Q21_mod2), aes(Q21_AutoRenew, fill = Income)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q21. Likeliness to enroll in auto-renew program") 

ggplot(model.frame(Q21_mod2), aes(Q21_AutoRenew, fill = Race_Ethn)) + geom_histogram(stat = "count") + theme_classic() + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8),axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + labs(y = "Counts", x = "Q21. Likeliness to enroll in auto-renew program")

# Summary table
Q21_summary_table %>% 
  kbl(caption = "Q21 Model Odds Ratios",digits = 2) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q21 Model Odds Ratios
Value Std. Error t value p value Odds_ratio
IncomeBetween $20,000 and $39,999 -0.75 0.26 -2.85 0.00 0.47
IncomeBetween $40,000 and $59,999 -0.38 0.21 -1.84 0.07 0.69
IncomeBetween $60,000 and $79,999 0.00 0.18 0.02 0.98 1.00
IncomeBetween $80,000 and $99,999 -0.06 0.21 -0.28 0.78 0.94
IncomeLess than $20,000 -0.69 0.39 -1.77 0.08 0.50
IncomeOver $150,000 0.47 0.18 2.60 0.01 1.60
Race_EthnBlack or African American -0.69 0.40 -1.73 0.08 0.50
Race_EthnHispanic 0.01 0.43 0.03 0.98 1.01
Race_EthnNative American or Alaskan Native -0.51 0.85 -0.60 0.55 0.60
Race_EthnOther Hispanic 0.92 0.41 2.23 0.03 2.52
Race_EthnWhite -0.03 0.27 -0.12 0.90 0.97
Race_EthnWhite Hispanic 0.14 0.31 0.44 0.66 1.15
Extremely unlikely|Unlikely -5.72 0.48 -11.79 0.00 0.00
Unlikely|Not sure -3.04 0.32 -9.47 0.00 0.05
Not sure|Likely -1.17 0.30 -3.96 0.00 0.31
Likely|Extremely likely 0.15 0.30 0.51 0.61 1.16

Most anglers (68%) reported that they were either likely (28%) or extremely likely (40%) to enroll in an auto-renew program, while only 7% were unlikely and 24% were unsure.

The odds of being likely to enroll in an autorenew program were: 1.02 times more likely for anglers with an income between $100-$150K compared to anglers with an income between $20K-$40K, 1.66 times more likely for anglers with an income over $150K compared to anglers with an income between $100-$150K, 1.96 times more likely for anglers that identified as an Other race compared to Asian and Pacific Islander anglers.

Q24. Which types of fishing information would you find useful? Please choose all that you would find useful.

# Evaluate frequencies by categorical responses
Q24_df1 <- rev2_wts %>% 
  dplyr::select(c("Q24A":"Q24I")) %>%
  pivot_longer(cols = "Q24A":"Q24I",names_to = "Q24_answers",values_to = "Agreement") %>%
  group_by(Q24_answers,Agreement) %>%
  count() %>%
  na.omit()
freq = prop.table(Q24_df1$n)
Q24_df1 <- data.frame(cbind(Q24_df1,freq=freq))
Q24_df1$Agreement <- recode_factor(Q24_df1$Agreement,"I wouldn't be interested in receiving any information." = "Not interested","How to improve my fishing skills" = "Improve skills","What species to fish for" = "What species","What different kinds of bait or lures work best for certain fish" = "Baits and lures","How to clean fish" = "Clean fish","How to buy a fishing license" = "Buy license","What amenities are available at local fishing areas" = "Available amenities","How to understand fishing regulations better" = "Understand Regulations")

# Format data for analysis
Q24_df2 <- rev2_wts %>% 
    dplyr::select(Q24A,Q24B,Q24C,Q24D,Q24E,Q24F,Q24G,Q24H,Q24I,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  pivot_longer(cols = "Q24A":"Q24I",names_to = "Q24_answers",values_to = "Agreement") %>%
  group_by(Q24_answers,Agreement,Gender,Age,Race_Ethn,Income,SW_FW2,New.Old,Children,COVID,weights) %>%
  filter(!is.na(Agreement)) %>%
  mutate(Agreement = as.factor(Agreement)) %>%
  data.frame()

Q24_df2$Agreement <- recode_factor(Q24_df2$Agreement,"I wouldn't be interested in receiving any information." = "Not interested","How to improve my fishing skills" = "Improve skills","What species to fish for" = "What species","What different kinds of bait or lures work best for certain fish" = "Baits and lures","How to clean fish" = "Clean fish","How to buy a fishing license" = "Buy license","What amenities are available at local fishing areas" = "Available amenities","How to understand fishing regulations better" = "Understand Regulations")

# Chi-square tests
svy_desn_Q24 <- svydesign(ids = ~0, weights = ~weights, data = Q24_df2) # Survey design

Q24_Gender_chisq <- svychisq(~Gender + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant
Q24_Age_chisq <- svychisq(~Age + Agreement, svy_desn_Q24, statistic = "adjWald") # significant
Q24_Race_Ethn_chisq <- svychisq(~Race_Ethn + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant
Q24_Income_chisq <- svychisq(~Income + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant
Q24_SW_FW2_chisq <- svychisq(~SW_FW2 + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant
Q24_New.Old_chisq <- svychisq(~New.Old + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant
Q24_Children_chisq <- svychisq(~Children + Agreement, svy_desn_Q24, statistic = "adjWald") # significant
Q24_COVID_chisq <- svychisq(~COVID + Agreement, svy_desn_Q24, statistic = "adjWald") # not significant

# Contingency tables for significant factors
Q24_Age_tbl <- svytable(~Age + Agreement, svy_desn_Q24)
Q24_Children_tbl <- svytable(~Children + Agreement, svy_desn_Q24)
# Response percentages graph
ggplot(Q24_df1,aes(x=Agreement,y=freq)) + geom_bar(stat="identity") + theme_classic() + theme(axis.title = element_text(size=16), axis.text = element_text(size = 8), axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))  + scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + labs(y = "Percentage", x = "Q24. Who do you go fishing with?") 

# Chi-square test results
Q24_Age_tbl %>% 
  kbl(caption = "Q24 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q24 Who do you fish with?
Not interested Improve skills What species Baits and lures Clean fish Buy license Available amenities Understand Regulations Where to fish
18-24 30 249 171 254 145 39 145 100 224
25-34 25 255 209 290 185 30 188 131 270
35-44 49 239 190 293 142 55 193 121 266
45-54 44 160 126 216 91 28 144 97 201
55-64 29 95 72 134 52 22 104 58 116
65 or older 19 42 33 71 18 8 46 32 53
Q24_Age_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Age + Agreement, svy_desn_Q24, statistic = "adjWald")
## F = 2.0735, ndf = 40, ddf = 6369, p-value = 8.487e-05
corrplot(Q24_Age_chisq$residuals, is.cor = FALSE)

Q24_Children_tbl %>% 
  kbl(caption = "Q24 Who do you fish with?",digits = 0) %>%
  kable_classic(full_width = F, html_font = "Cambria") 
Q24 Who do you fish with?
Not interested Improve skills What species Baits and lures Clean fish Buy license Available amenities Understand Regulations Where to fish
18 or over 77 238 192 340 134 43 234 148 297
No children 68 455 338 490 282 69 297 205 459
Under 17 19 160 112 182 116 34 130 90 173
Q24_Children_chisq
## 
##  Design-based Wald test of association
## 
## data:  svychisq(~Children + Agreement, svy_desn_Q24, statistic = "adjWald")
## F = 2.4582, ndf = 16, ddf = 6393, p-value = 0.0009995
corrplot(Q24_Children_chisq$residuals, is.cor = FALSE)

Anglers were most interested in information about different kinds of bait or lures, followed by information about where to fish, and how to improve their fishing skills. Anglers were least interested in information about how to buy a fishing license. Very few anglers reported that they wouldn’t be interested in receiving any information.

The youngest anglers (ages 18-24) were most interested in receiving information about how to improve their fishing skills, anglers 25-34 wanted information about how to clean fish, anglers 35-44 were interested in information about how to buy a license, anglers 45+ were largely not interested in receiving any information. Anglers with young children wanted information about how to clean fish, anglers with adult children were not interested in receiving information, and those with no children were interested in improving their skills.