#Code is designed to run one species at a time. So focus on one species and run through each section for that species.
#Species datasets read in should already have all environmental data assigned to each set
setwd("~/BLLOP_Data")

library("mgcv")
library("doBy")
library("glmmTMB")
library("nlme")
library("HH")
library('bbmle')
library("rgdal")
library("ncf")
library("mgcv.helper")
library("geosphere")
library(tidyverse)
library(plyr)
library("raster")
library(ggplot2)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
library(ggspatial)
library(viridis)
library(gstat)#if doesn't load, uninstall gstat and xts. then install xts with depencies, then gstat without dependencies
source("http://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R") #for VIF


#####################
# Functions
#####################

#dispersion
disp2=function(mod=NA){
  E=residuals(mod,type='pearson')
  d=sum(E^2)/mod$df.resid
  return(d)
}

#Check for correlations in covariates
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
  usr <- par("usr"); on.exit(par(usr))
  par(usr = c(0, 1, 0, 1))
  r <- abs(cor(x, y))
  txt <- format(c(r, 0.123456789), digits = digits)[1]
  txt <- paste0(prefix, txt)
  if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
  text(0.5, 0.5, txt, cex = cex.cor * r)
}

########################
#Read in species dataset
########################
#SB
sb_data<-read.csv("sb_bll_Catch_full.csv")
sb_data<-subset(sb_data,select=-c(X.2,X.1,X))
sb_data$BINOMIAL<-ifelse(sb_data$Catch>0,1,0)
sb_data$BEGIN_SET_DATE_TIME<-as.POSIXct(sb_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d %H:%M:%S",tz="America/New_York")
sb_data<-sb_data[with(sb_data,order(BEGIN_SET_DATE_TIME)),]
#remove data west of florida
sb_data<-sb_data[which(sb_data$BEGIN_SET_LONGITUDE> -80.5 | (sb_data$BEGIN_SET_LATITUDE>26.7 & sb_data$BEGIN_SET_LONGITUDE> -81.5)),]#need to do this because unlike POP data, some BLL sets occur west of -80.5 but are still in atlantic (e.g. off of jacksonville)
sb_data$MONTH<-as.factor(strftime(sb_data$BEGIN_SET_DATE_TIME_UTC,format="%m",tz="America/New_York"))
sb_data$YEAR<-as.factor(strftime(sb_data$BEGIN_SET_DATE_TIME_UTC,format="%Y",tz="America/New_York"))
#remove 9 sets where soak time is 0
sb_data<-sb_data[-which(sb_data$SOAK_DURATION==0),]
sb_data$logEFFORT<-log(sb_data$NUM_HOOKS_SET*sb_data$SOAK_DURATION)
sb_data$SPECIES<-"sb"
sb_data$Date<-as.Date(sb_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d",origin="1970-01-01",tz="America/New_York")
sb_data$Day<-as.numeric(strftime(sb_data$BEGIN_SET_DATE_TIME,format="%j"))
sb_data$Set_Begin_Hour<-as.numeric(strftime(round(as.POSIXct(sb_data$BEGIN_SET_DATE_TIME,format="%m/%d/%Y %H:%M",origin="1970-01-01",tz="America/New_York"), units="hours"),format="%H"))
sb_data$BEGIN_SET_TEMPERATURE_C<-(sb_data$BEGIN_SET_TEMPERATURE-32)*5/9 #surface temp taken from bottom of machine
sb_data$MEAN_DEPTH<-(sb_data$BOTTOM_DEPTH_MAXIMUM_METER+sb_data$BOTTOM_DEPTH_MINIMUM_METER)/2
#SRF_TRIP is whether set is in shark research fishery or not
#Region fished, 22 is south atlantic, 23 is north atlantic, 21 is gulf of mexico
sb_datanona<-subset(sb_data, select=c(Catch,BINOMIAL,SRF_TRIP,REGION_FISHED,BEGIN_SET_DATE_TIME,Date,Day,MONTH,YEAR,Set_Begin_Hour,BAITTYPE,HOOK_CONFIG,MEAN_DEPTH,BOTTOM_DEPTH_MAXIMUM_METER,BOTTOM_DEPTH_MINIMUM_METER,BEGIN_SET_TEMPERATURE_C,logEFFORT,
                                      BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE,BATHYMETRY,RUGOSITY,BT,BS,SST,SSS,SSH,BTSD,SSTSD,TURB,TURB_ER,CHLA))
#some sets with missing env data (only 14 sets)
sb_datanona<-sb_datanona[complete.cases(sb_datanona[c(10:12,17:31)]),]
#make sure mean depth (from set) and Bathymetry are similar, remove sets that are not the similar
#first convert depths from fathoms to meters (conversion factor is 1.83 m to 1 fathom), also need depth to be negative value
sb_datanona$MEAN_DEPTH<-sb_datanona$MEAN_DEPTH*-1 #average between depth at beginning and end of set
sb_datanona$BOTTOM_DEPTH_MAXIMUM_METER<-sb_datanona$BOTTOM_DEPTH_MAXIMUM_METER*-1
sb_datanona$BOTTOM_DEPTH_MINIMUM_METER<-sb_datanona$BOTTOM_DEPTH_MINIMUM_METER*-1
par(mfrow=c(2,2))
plot(sb_datanona$BATHYMETRY,sb_datanona$MEAN_DEPTH,ylim=c(-350,0))
abline(a=0,b=1)
plot(sb_datanona$BATHYMETRY,sb_datanona$BOTTOM_DEPTH_MAXIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
plot(sb_datanona$BATHYMETRY,sb_datanona$BOTTOM_DEPTH_MINIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
#decided to go with mean depth because bathymetry data could have been collected on edge or deeper which means it could be off from min or max, mean should be better
which(abs(sb_datanona$BATHYMETRY-sb_datanona$MEAN_DEPTH)>100)#Looks like 4 sets are off by 100 m, understand they could be fishing on ledge but 150 is a large difference
sb_datanona<-sb_datanona[-which(abs(sb_datanona$BATHYMETRY-sb_datanona$MEAN_DEPTH)>100),]#this removes 4 sets that off by 100m and 2 sets that have NAs for Mean Depth
#1123 rows



#DS
ds_data<-read.csv("ds_bll_Catch_full.csv")
ds_data<-subset(ds_data,select=-c(X.2,X.1,X))
ds_data$BINOMIAL<-ifelse(ds_data$Catch>0,1,0)
ds_data$BEGIN_SET_DATE_TIME<-as.POSIXct(ds_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d %H:%M:%S",tz="America/New_York")
ds_data<-ds_data[with(ds_data,order(BEGIN_SET_DATE_TIME)),]
#remove data west of florida
ds_data<-ds_data[which(ds_data$BEGIN_SET_LONGITUDE> -80.5 | (ds_data$BEGIN_SET_LATITUDE>26.7 & ds_data$BEGIN_SET_LONGITUDE> -81.5)),]#need to do this because unlike POP data, some BLL sets occur west of -80.5 but are still in atlantic (e.g. off of jacksonville)
ds_data$MONTH<-as.factor(strftime(ds_data$BEGIN_SET_DATE_TIME_UTC,format="%m",tz="America/New_York"))
ds_data$YEAR<-as.factor(strftime(ds_data$BEGIN_SET_DATE_TIME_UTC,format="%Y",tz="America/New_York"))
#remove 9 sets where soak time is 0
ds_data<-ds_data[-which(ds_data$SOAK_DURATION==0),]
ds_data$logEFFORT<-log(ds_data$NUM_HOOKS_SET*ds_data$SOAK_DURATION)
ds_data$SPECIES<-"ds"
ds_data$Date<-as.Date(ds_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d",origin="1970-01-01",tz="America/New_York")
ds_data$Day<-as.numeric(strftime(ds_data$BEGIN_SET_DATE_TIME,format="%j"))
ds_data$Set_Begin_Hour<-as.numeric(strftime(round(as.POSIXct(ds_data$BEGIN_SET_DATE_TIME,format="%m/%d/%Y %H:%M",origin="1970-01-01",tz="America/New_York"), units="hours"),format="%H"))
ds_data$BEGIN_SET_TEMPERATURE_C<-(ds_data$BEGIN_SET_TEMPERATURE-32)*5/9 #surface temp taken from bottom of machine
ds_data$MEAN_DEPTH<-(ds_data$BOTTOM_DEPTH_MAXIMUM_METER+ds_data$BOTTOM_DEPTH_MINIMUM_METER)/2
#SRF_TRIP is whether set is in shark research fishery or not
#Region fished, 22 is south atlantic, 23 is north atlantic, 21 is gulf of mexico
ds_datanona<-subset(ds_data, select=c(Catch,BINOMIAL,SRF_TRIP,REGION_FISHED,BEGIN_SET_DATE_TIME,Date,Day,MONTH,YEAR,Set_Begin_Hour,BAITTYPE,HOOK_CONFIG,MEAN_DEPTH,BOTTOM_DEPTH_MAXIMUM_METER,BOTTOM_DEPTH_MINIMUM_METER,BEGIN_SET_TEMPERATURE_C,logEFFORT,
                                      BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE,BATHYMETRY,RUGOSITY,BT,BS,SST,SSS,SSH,BTSD,SSTSD,TURB,TURB_ER,CHLA))
#some sets with missing env data (only 14 sets)
ds_datanona<-ds_datanona[complete.cases(ds_datanona[c(10:12,17:31)]),]
#make sure mean depth (from set) and Bathymetry are similar, remove sets that are not the similar
#first convert depths from fathoms to meters (conversion factor is 1.83 m to 1 fathom), also need depth to be negative value
ds_datanona$MEAN_DEPTH<-ds_datanona$MEAN_DEPTH*-1 #average between depth at beginning and end of set
ds_datanona$BOTTOM_DEPTH_MAXIMUM_METER<-ds_datanona$BOTTOM_DEPTH_MAXIMUM_METER*-1
ds_datanona$BOTTOM_DEPTH_MINIMUM_METER<-ds_datanona$BOTTOM_DEPTH_MINIMUM_METER*-1
par(mfrow=c(2,2))
plot(ds_datanona$BATHYMETRY,ds_datanona$MEAN_DEPTH,ylim=c(-350,0))
abline(a=0,b=1)
plot(ds_datanona$BATHYMETRY,ds_datanona$BOTTOM_DEPTH_MAXIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
plot(ds_datanona$BATHYMETRY,ds_datanona$BOTTOM_DEPTH_MINIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
#decided to go with mean depth because bathymetry data could have been collected on edge or deeper which means it could be off from min or max, mean should be better
which(abs(ds_datanona$BATHYMETRY-ds_datanona$MEAN_DEPTH)>100)#Looks like 4 sets are off by 100 m, understand they could be fishing on ledge but 150 is a large difference
ds_datanona<-ds_datanona[-which(abs(ds_datanona$BATHYMETRY-ds_datanona$MEAN_DEPTH)>100),]#this removes 4 sets that off by 100m and 2 sets that have NAs for Mean Depth
#1123 rows

#SHH
shh_data<-read.csv("shh_bll_Catch_full.csv")
shh_data<-subset(shh_data,select=-c(X.2,X.1,X))
shh_data$BINOMIAL<-ifelse(shh_data$Catch>0,1,0)
shh_data$BEGIN_SET_DATE_TIME<-as.POSIXct(shh_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d %H:%M:%S",tz="America/New_York")
shh_data<-shh_data[with(shh_data,order(BEGIN_SET_DATE_TIME)),]
#remove data west of florida
shh_data<-shh_data[which(shh_data$BEGIN_SET_LONGITUDE> -80.5 | (shh_data$BEGIN_SET_LATITUDE>26.7 & shh_data$BEGIN_SET_LONGITUDE> -81.5)),]#need to do this because unlike POP data, some BLL sets occur west of -80.5 but are still in atlantic (e.g. off of jacksonville)
shh_data$MONTH<-as.factor(strftime(shh_data$BEGIN_SET_DATE_TIME_UTC,format="%m",tz="America/New_York"))
shh_data$YEAR<-as.factor(strftime(shh_data$BEGIN_SET_DATE_TIME_UTC,format="%Y",tz="America/New_York"))
#remove 9 sets where soak time is 0
shh_data<-shh_data[-which(shh_data$SOAK_DURATION==0),]
shh_data$logEFFORT<-log(shh_data$NUM_HOOKS_SET*shh_data$SOAK_DURATION)
shh_data$SPECIES<-"shh"
shh_data$Date<-as.Date(shh_data$BEGIN_SET_DATE_TIME,format="%Y-%m-%d",origin="1970-01-01",tz="America/New_York")
shh_data$Day<-as.numeric(strftime(shh_data$BEGIN_SET_DATE_TIME,format="%j"))
shh_data$Set_Begin_Hour<-as.numeric(strftime(round(as.POSIXct(shh_data$BEGIN_SET_DATE_TIME,format="%m/%d/%Y %H:%M",origin="1970-01-01",tz="America/New_York"), units="hours"),format="%H"))
shh_data$BEGIN_SET_TEMPERATURE_C<-(shh_data$BEGIN_SET_TEMPERATURE-32)*5/9 #surface temp taken from bottom of machine
shh_data$MEAN_DEPTH<-(shh_data$BOTTOM_DEPTH_MAXIMUM_METER+shh_data$BOTTOM_DEPTH_MINIMUM_METER)/2
#SRF_TRIP is whether set is in shark research fishery or not
#Region fished, 22 is south atlantic, 23 is north atlantic, 21 is gulf of mexico
shh_datanona<-subset(shh_data, select=c(Catch,BINOMIAL,SRF_TRIP,REGION_FISHED,BEGIN_SET_DATE_TIME,Date,Day,MONTH,YEAR,Set_Begin_Hour,BAITTYPE,HOOK_CONFIG,MEAN_DEPTH,BOTTOM_DEPTH_MAXIMUM_METER,BOTTOM_DEPTH_MINIMUM_METER,BEGIN_SET_TEMPERATURE_C,logEFFORT,
                                        BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE,BATHYMETRY,RUGOSITY,BT,BS,SST,SSS,SSH,BTSD,SSTSD,TURB,TURB_ER,CHLA))
#some sets with missing env data (only 14 sets)
shh_datanona<-shh_datanona[complete.cases(shh_datanona[c(10:12,17:31)]),]
#make sure mean depth (from set) and Bathymetry are similar, remove sets that are not the similar
#first convert depths from fathoms to meters (conversion factor is 1.83 m to 1 fathom), also need depth to be negative value
shh_datanona$MEAN_DEPTH<-shh_datanona$MEAN_DEPTH*-1 #average between depth at beginning and end of set
shh_datanona$BOTTOM_DEPTH_MAXIMUM_METER<-shh_datanona$BOTTOM_DEPTH_MAXIMUM_METER*-1
shh_datanona$BOTTOM_DEPTH_MINIMUM_METER<-shh_datanona$BOTTOM_DEPTH_MINIMUM_METER*-1
par(mfrow=c(2,2))
plot(shh_datanona$BATHYMETRY,shh_datanona$MEAN_DEPTH,ylim=c(-350,0))
abline(a=0,b=1)
plot(shh_datanona$BATHYMETRY,shh_datanona$BOTTOM_DEPTH_MAXIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
plot(shh_datanona$BATHYMETRY,shh_datanona$BOTTOM_DEPTH_MINIMUM_METER,ylim=c(-350,0))
abline(a=0,b=1)
#decided to go with mean depth because bathymetry data could have been collected on edge or deeper which means it could be off from min or max, mean should be better
which(abs(shh_datanona$BATHYMETRY-shh_datanona$MEAN_DEPTH)>100)#Looks like 4 sets are off by 100 m, understand they could be fishing on ledge but 150 is a large difference
shh_datanona<-shh_datanona[-which(abs(shh_datanona$BATHYMETRY-shh_datanona$MEAN_DEPTH)>100),]#this removes 4 sets that off by 100m
#1123 rows

#######################
#Plot location of Catch
#######################
#setwd("~/Enviornmental_Data/USmap")
#U.S.<-readOGR(".","us_contig_states")
#map looks bad
#plot(x=1,y=1,ylim=c(5,51.5),xlim=c(-80.2,-37),ylab="",xlab="",type="n")
#rect(xleft= -80.5,ybottom=5,xright= -37,ytop=52,col="lightblue")
#plot(U.S.,col="tan",add=T)
#points(HAUL_LATITUDE~HAUL_LONGITUDE, data=swo_data[which(swo_data$BINOMIAL==0),],pch=16,col="red",cex=0.5)

spatialPlot<-function(species="NA"){
  year<-unique(species$YEAR)
  pdf(paste("Spatial.plot",species$SPECIES[1],"pdf",sep="."),width=10,height=10,onefile=TRUE)
  par(mfrow=c(3,3))
  for(i in year){
    s<-which(species$YEAR==i)
    s1<-species[s,]
    myCex<-s1$BINOMIAL*1.25
    plot(BEGIN_SET_LATITUDE~BEGIN_SET_LONGITUDE,data=s1,pch=21,cex=myCex,bg="blue",col="black",main=paste(species$SPECIES[1],i,sep="_"),ylim=c(20,40),xlim=c(-80.4,-74))
    points(BEGIN_SET_LATITUDE~BEGIN_SET_LONGITUDE, data=s1[which(s1$BINOMIAL==0),],pch=16,col="red",cex=0.5)
  }
  dev.off()
}

spatialPlot(species=sb_data)
spatialPlot(species=ds_data)
spatialPlot(species=shh_data)

##########################
#Plot Catch and variables
##########################
exporePlot<-function(species_dat=NA){
  #Year
  par(mfrow=c(1,1))
  plot(table(species_dat$YEAR[which(species_dat$BINOMIAL==1)]),type="b",main=paste("Number of Sets with",species_dat$SPECIES[1], sep="_"),ylab="Number of Sets",ylim=c(0,100))
  lines(table(species_dat$YEAR[which(species_dat$BINOMIAL==0)]),type="b",col="red")
  
  #Month
  par(mfrow=c(1,1))
  plot(table(species_dat$MONTH[which(species_dat$BINOMIAL==1)]),type="b",main=paste("Number of Sets with",species_dat$SPECIES[1], sep="_"),ylab="Number of Sets",ylim=c(0,100))
  lines(table(species_dat$MONTH[which(species_dat$BINOMIAL==0)]),type="b",col="red")
  
  #RUGOSITY
  par(mfrow=c(2,1))
  plot(Catch~RUGOSITY,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"rug_Catch_all", sep="_"))
  plot(BINOMIAL~RUGOSITY,data=species_dat,main=paste(species_dat$SPECIES[1],"rug_pres_abs_all", sep="_"))
  
  #BATHYMETRY
  par(mfrow=c(2,1))
  plot(Catch~BATHYMETRY,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"bat_Catch_all", sep="_"))
  plot(BINOMIAL~BATHYMETRY,data=species_dat,main=paste(species_dat$SPECIES[1],"bat_pres_abs_all", sep="_"))
  
  #BT
  par(mfrow=c(2,1))
  plot(Catch~BT,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"bt_Catch_all", sep="_"))
  plot(BINOMIAL~BT,data=species_dat,main=paste(species_dat$SPECIES[1],"bt_pres_abs_all", sep="_"))
  
  #BS
  par(mfrow=c(2,1))
  plot(Catch~BS,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"bs_Catch_all", sep="_"))
  plot(BINOMIAL~BS,data=species_dat,main=paste(species_dat$SPECIES[1],"bs_pres_abs_all", sep="_"))
  
  #SST
  par(mfrow=c(2,1))
  plot(Catch~SST,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"sst_Catch_all", sep="_"))
  plot(BINOMIAL~SST,data=species_dat,main=paste(species_dat$SPECIES[1],"sst_pres_abs_all", sep="_"))
  
  #SSH
  par(mfrow=c(2,1))
  plot(Catch~SSH,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"ssh_Catch_all", sep="_"))
  plot(BINOMIAL~SSH,data=species_dat,main=paste(species_dat$SPECIES[1],"ssh_pres_abs_all", sep="_"))
  
  #SSS
  par(mfrow=c(2,1))
  plot(Catch~SSS,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"sss_Catch_all", sep="_"))
  plot(BINOMIAL~SSS,data=species_dat,main=paste(species_dat$SPECIES[1],"sss_pres_abs_all", sep="_"))
  
  #BTSD
  par(mfrow=c(2,1))
  plot(Catch~BTSD,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"sBTSD_Catch_all", sep="_"))
  plot(BINOMIAL~BTSD,data=species_dat,main=paste(species_dat$SPECIES[1],"BTSD_pres_abs_all", sep="_"))
  
  #SSTSD
  par(mfrow=c(2,1))
  plot(Catch~SSTSD,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"sstsd_Catch_all", sep="_"))
  plot(BINOMIAL~SSTSD,data=species_dat,main=paste(species_dat$SPECIES[1],"sstsd_pres_abs_all", sep="_"))
  
  #TURB
  par(mfrow=c(2,1))
  plot(Catch~TURB,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"turb_Catch_all", sep="_"))
  plot(BINOMIAL~TURB,data=species_dat,main=paste(species_dat$SPECIES[1],"turb_pres_abs_all", sep="_"))
  
  #CHLA
  par(mfrow=c(2,1))
  plot(Catch~CHLA,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"chla_Catch_all", sep="_"))
  plot(BINOMIAL~CHLA,data=species_dat,main=paste(species_dat$SPECIES[1],"chla_pres_abs_all", sep="_"))
  
  #BAITTYPE
  par(mfrow=c(1,1))
  plot(table(species_dat$BAITTYPE[which(species_dat$BINOMIAL==1)]),type="b",main=paste("Number of Sets with",species_dat$SPECIES[1], sep="_"),ylab="Number of Sets",ylim=c(0,400))
  lines(table(species_dat$BAITTYPE[which(species_dat$BINOMIAL==0)]),type="b",col="red")
  
  #HOOK_CONFIG
  par(mfrow=c(1,1))
  plot(table(species_dat$HOOK_CONFIG[which(species_dat$BINOMIAL==1)]),type="b",main=paste("Number of Sets with",species_dat$SPECIES[1], sep="_"),ylab="Number of Sets",ylim=c(0,400))
  lines(table(species_dat$HOOK_CONFIG[which(species_dat$BINOMIAL==0)]),type="b",col="red")
  
  #MEAN_DEPTH
  par(mfrow=c(2,1))
  plot(Catch~MEAN_DEPTH,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"mean_depth_Catch_all", sep="_"))
  plot(BINOMIAL~MEAN_DEPTH,data=species_dat,main=paste(species_dat$SPECIES[1],"mean_depth_pres_abs_all", sep="_"))
  
  #Set_Begin_Hour
  par(mfrow=c(2,1))
  plot(Catch~Set_Begin_Hour,data=species_dat,pch=".",main=paste(species_dat$SPECIES[1],"Set_Begin_Hour_Catch_all", sep="_"))
  plot(BINOMIAL~Set_Begin_Hour,data=species_dat,main=paste(species_dat$SPECIES[1],"Set_Begin_Hour_pres_abs_all", sep="_"))
  
}

exporePlot(species_dat=sb_data)
exporePlot(species_dat=ds_data)
exporePlot(species_dat=shh_data)

########################
#Check for correlation
########################
pdf("multicolBLL.pdf",width=8,height=6)
pairs(cbind(as.numeric(ds_datanona$Day),ds_datanona$MONTH,ds_datanona$YEAR, ds_datanona$BEGIN_SET_LATITUDE,ds_datanona$BEGIN_SET_LONGITUDE,ds_datanona$BAITTYPE,ds_datanona$HOOK_CONFIG,
            ds_datanona$MEAN_DEPTH,ds_datanona$Set_Begin_Hour,ds_datanona$RUGOSITY, ds_datanona$BATHYMETRY,ds_datanona$BT,ds_datanona$BS,ds_datanona$SST,ds_datanona$SSS,ds_datanona$SSH, 
            ds_datanona$SSTSD,ds_datanona$BTSD,ds_datanona$TURB,ds_datanona$CHLA), lower.panel = panel.cor,
      labels=c("Dayn","Month","Year","Lat","Lon","Bait","Hook","Hook_D","SetH","Rug","Bat","BT","BS","SST","SSS","SSH","SSTSD","BTSD","TURB","CHLA"))
dev.off()

#there are a good amount of correlations
#dayn and year
#lat and lon, lat and BS, lat and SSS
#lon and and BS, lon and SSS
#hook depth and rug, hook depth and bat
#rug and bat, rug and BTSD
#BS and SSS
#TURB and CHLA

#remove hook depth
#keep rug and bat and try out different models with each
#keep SSS and bs and try out different models with each
#keep chla and turb and try out different models with each


#SB
par(mfrow=c(1,1))
plot(table(sb_datanona$Catch),type='h',ylab='Catch (number/set)')
table(sb_datanona$BINOMIAL) #postive Catches make up 78% of sets originally, with added absences its 49%

#DS
par(mfrow=c(1,1))
plot(table(ds_datanona$Catch),type='h',ylab='Catch (number/set)')
table(ds_datanona$BINOMIAL) #postive Catches make up 23% of sets

#SHH
par(mfrow=c(1,1))
plot(table(shh_datanona$Catch),type='h',ylab='Catch (number/set)')
table(shh_datanona$BINOMIAL) #postive Catches make up 29% of sets

################
#GAM (BINOMIAL)
################
#####
#SB
#####
#1) GLM or GAM
sb_datanona$Daten<-as.numeric(sb_datanona$Date)
#start with SSS and Rugosity removed, mess with combinations further down
modglm<-glm(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+Set_Begin_Hour+BATHYMETRY+BT+SST+BS+SSH+CHLA+BTSD+SSTSD+offset(logEFFORT),data=sb_datanona,family='binomial')
modgam<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')
AIC(modglm,modgam)#gam is way better, go with GAM for here on out

#2)check for temporal autocorrelation (ie. independence vs non independence)
par(mfrow=c(1,1))
EL1=residuals(modgam, type="pearson")
acf(EL1,main="Residuals")
pacf(EL1, main="Residuals")
#no temporal autocorrelation

#VIF
z<-cbind(sb_datanona$YEAR,sb_datanona$MONTH,sb_datanona$Day,sb_datanona$BAITTYPE,sb_datanona$HOOK_CONFIG,sb_datanona$Set_Begin_Hour, sb_datanona$BATHYMETRY,sb_datanona$RUGOSITY,sb_datanona$SST,
         sb_datanona$SSH,sb_datanona$BT,sb_datanona$SSS,sb_datanona$BS,sb_datanona$CHLA,sb_datanona$BTSD,sb_datanona$SSTSD,sb_datanona$TURB)
corvif(z) #correlation among Day of year and Month and BS and SSS
z<-cbind(sb_datanona$YEAR,sb_datanona$MONTH,sb_datanona$BAITTYPE,sb_datanona$HOOK_CONFIG,sb_datanona$Set_Begin_Hour,sb_datanona$BATHYMETRY,sb_datanona$RUGOSITY,sb_datanona$SST,
         sb_datanona$SSH,sb_datanona$BT,sb_datanona$BS,sb_datanona$CHLA,sb_datanona$BTSD,sb_datanona$SSTSD,sb_datanona$TURB)
corvif(z) #looks like as long as Dayn and Year are not both in and SSS and BS are not both in we are all good, nothing else is over 5


#3) Check for spatial autocorrelation
#meaning of correlog plot not clear go with variogram instead

#USE VARIOGRAM

#try using variogram, have to convert df to spatial df and use geographic crs
sb_datanonasp<-sb_datanona
coordinates(sb_datanonasp)<- ~BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE
proj4string(sb_datanonasp)<-CRS("+init=epsg:4326")

modgam.1<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanonasp,family='binomial')

EL.1=residuals(modgam.1, type="pearson")
vario500<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=sb_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance sbween intervals
plot(vario500,main="500_.1") 
vario250<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=sb_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance sbween intervals
plot(vario250,main="250_.1") 
vario100<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=sb_datanonasp,cutoff=100,width=1,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance sbween intervals,  # 0 = N; .15 = NE; 90 = E; 135 = SE
plot(vario100,main="100_.1") 
#looks ok to me, but lets see if we can improve it

modgam2.6<-gam(BINOMIAL~MONTH+YEAR +BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+
                 s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanonasp,family='binomial')
EL2.6=residuals(modgam2.6, type="pearson")
vario500_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=sb_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance sbween intervals
plot(vario500_2.6,main="500_2.6")
vario250_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=sb_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance sbween intervals
plot(vario250_2.6,main="250_2.6")

AIC(modgam.1,modgam2.6)
#2.6 has lowest aic

#https://stats.stackexchange.com/questions/264702/concurvity-in-negative-binomial-gam
concurvity(modgam2.6,full=TRUE)#concurvity is high between lat/lon and bs and bat

df = data.frame(Long=sb_datanona$BEGIN_SET_LONGITUDE, Lat=sb_datanona$BEGIN_SET_LATITUDE,Residuals=EL.1)
coordinates(df)<-c("Long", "Lat")
bubble(df,zcol="Residuals", col=c("orange","blue"),xlab="long",ylab="lat", maxsize=3) 
#seems pretty evenly distrubtion of pos and neg resisb so no autocorrelation

#because of concurvity issues, don't include spatial term


#4) 2 Part Variable selection
#Part 1 environmental variables
mod2<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')
mod3<-gam(BINOMIAL~MONTH+YEAR+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#put rug in for bat, no btsd (correlates with rug)
mod4<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(SSS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#put sss in for bs
mod5<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#put in turb for chla
mod6<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd
mod7<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and btsd
mod8<-gam(BINOMIAL~MONTH+YEAR+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd, with turb and rug, no btsd (correlates with rug)
mod9<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(BTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and chla
mod10<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and chla and SSH and btsd
mod11<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(BTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and chla and SSH
mod12<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no SST
mod13<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no SST and sstsd
mod14<-gam(BINOMIAL~MONTH+YEAR+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and chla and SSH, with rug, no btsd (correlates with rug)
mod15<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no SSH, with turb
mod16<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no SSH
mod17<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(BS)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=sb_datanona,family='binomial')#no SSH, sst, sstsd
AICtab(mod2,mod3,mod4,mod5,mod6,mod7,mod8,mod9,mod10,mod11,mod12,mod13,mod14,mod15,mod16,mod17)
#best model is mod4 but mod7 is simpler and within 2 AICs so go with mod7

#Part 2 gear variables with best model from above
mod7<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and btsd
mod18<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')
mod19<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')
mod20<-gam(BINOMIAL~MONTH+YEAR+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')
mod21<-gam(BINOMIAL~MONTH+YEAR+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')
mod22<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')
AICtab(mod7,mod18,mod19,mod20,mod21,mod22)
#best model is mod21 is best


#5) Tweak k values with REML method
#if we can find the model that explains the most variation and the curves make biological sense go with that model
mod7<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and btsd
mod7.1<-gam(BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT,k=7)+s(SST)+s(BS,k=7)+s(SSH)+s(CHLA)+offset(logEFFORT),data=sb_datanona,family='binomial')#no sstsd and btsd

par(mfrow=c(1,1))
summary(mod7)
gam.check(mod7) #good
plot(mod7)
disp2(mod7) #good


#                     edf Ref.df     F  p-value    
#s(BATHYMETRY) 5.884  6.670 62.771 < 2e-16 ***
#s(BT)         3.806  4.741 19.185 0.00174 ** 
#s(SST)        5.892  6.888 16.182 0.01673 *  
#s(BS)         5.244  6.331  8.501 0.20932    
#s(SSH)        8.723  8.965 24.838 0.00284 ** 
#s(CHLA)       7.774  8.244 58.904 < 2e-16 ***
#R-sq.(adj) =   0.47   Deviance explained =   49%
m=mod7

#Plot respose curves
#to backtransform binomial model use plogis
#to backtransform neg bin use exp
#Bathymetry
xBat<-seq(min(sb_datanona$BATHYMETRY),max(sb_datanona$BATHYMETRY),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BATHYMETRY=xBat,BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),BS=mean(sb_datanona$BS),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),CHLA=mean(sb_datanona$CHLA),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
outBat$pred.Trans<-plogis(outBat$pred.mean)

#BT
xBT<-seq(min(sb_datanona$BT),max(sb_datanona$BT),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BT=xBT,BATHYMETRY=mean(sb_datanona$BATHYMETRY),SST=mean(sb_datanona$SST),BS=mean(sb_datanona$BS),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),CHLA=mean(sb_datanona$CHLA),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outBT<-summaryBy(pred~BT,data=p.data)
outBT$pred.Trans<-plogis(outBT$pred.mean)

#SST
xSST<-seq(min(sb_datanona$SST),max(sb_datanona$SST),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),SST=xSST,BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),BS=mean(sb_datanona$BS),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),CHLA=mean(sb_datanona$CHLA),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outSST<-summaryBy(pred~SST,data=p.data)
outSST$pred.Trans<-plogis(outSST$pred.mean)

#BS
xBS<-seq(min(sb_datanona$BS),max(sb_datanona$BS),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=xBS,BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),CHLA=mean(sb_datanona$CHLA),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outBS<-summaryBy(pred~BS,data=p.data)
outBS$pred.Trans<-plogis(outBS$pred.mean)

#SSS
#xSSS<-seq(min(sb_datanona$SSS),max(sb_datanona$SSS),length=100)
#p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),SSS=xSSS,BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
#                    BS=mean(sb_datanona$BS),SSH=mean(sb_datanona$SSH),CHLA=mean(sb_datanona$CHLA),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
#                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
#outSSS<-summaryBy(pred~SSS,data=p.data)
#outSSS$pred.Trans<-plogis(outSSS$pred.mean)

#SSH
xSSH<-seq(min(sb_datanona$SSH),max(sb_datanona$SSH),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
                    SSS=mean(sb_datanona$SSS),CHLA=mean(sb_datanona$CHLA),SSH=xSSH,BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outSSH<-summaryBy(pred~SSH,data=p.data)
outSSH$pred.Trans<-plogis(outSSH$pred.mean)

#CHLA
xCHLA<-seq(min(sb_datanona$CHLA),max(sb_datanona$CHLA),length=100)
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),CHLA=xCHLA,BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outCHLA<-summaryBy(pred~CHLA,data=p.data)
outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)

#SSTSD
#xSSTSD<-seq(min(sb_datanona$SSTSD),max(sb_datanona$SSTSD),length=100)
#p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
#                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),SSTSD=xSSTSD,BTSD=mean(sb_datanona$BTSD),CHLA=mean(sb_datanona$CHLA),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
#                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
#outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
#outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)

#BTSD
#xBTSD<-seq(min(sb_datanona$BTSD),max(sb_datanona$BTSD),length=100)
#p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
#                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),BTSD=xBTSD,SSTSD=mean(sb_datanona$SSTSD),CHLA=mean(sb_datanona$CHLA),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
#                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
#outBTSD<-summaryBy(pred~BTSD,data=p.data)
#outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)

#Set_Begin_Hour
#xSet_Begin_Hour<-seq(min(sb_datanona$Set_Begin_Hour),max(sb_datanona$Set_Begin_Hour),length=100)
#p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
#                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),CHLA=mean(sb_datanona$CHLA),Set_Begin_Hour=xSet_Begin_Hour,
#                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
#outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
#outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)

#MONTH
p.data<-expand.grid(YEAR=unique(sb_datanona$YEAR),MONTH=levels(sb_datanona$MONTH),BS=mean(sb_datanona$BS),BATHYMETRY=mean(sb_datanona$BATHYMETRY),BT=mean(sb_datanona$BT),SST=mean(sb_datanona$SST),
                    SSS=mean(sb_datanona$SSS),SSH=mean(sb_datanona$SSH),BTSD=mean(sb_datanona$BTSD),SSTSD=mean(sb_datanona$SSTSD),CHLA=mean(sb_datanona$CHLA),Set_Begin_Hour=mean(sb_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(sb_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(sb_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(sb_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude=NULL))
outMONTH<-summaryBy(pred~MONTH,data=p.data)
outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)

#YEAR
outYEAR<-summaryBy(pred~YEAR,data=p.data)
outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)


par(mfrow=c(3,3))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1))
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1))
plot(pred.Trans~SST, data=outSST,type="l",ylim=c(0,1))
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1))
plot(pred.Trans~SSH, data=outSSH,type="l",ylim=c(0,1))
plot(pred.Trans~CHLA, data=outCHLA,type="l",ylim=c(0,1))
#plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,0.8))
#plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,0.8))
#plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,0.8))
plot(pred.Trans~MONTH, data=outMONTH,type="l",ylim=c(0,1))
plot(pred.Trans~YEAR, data=outYEAR,type="l",ylim=c(0,1))



#####
#DS
#####
#after discussion with tobey, feel that it is appropriate to remove 2 sets where SST was 8C and there was a positive catch
#because it is likely outside the temp range of duskies and could be misidentification
ds_datanona<-ds_datanona[-which(ds_datanona$SST<10 & ds_datanona$BINOMIAL==1),]
#1) GLM or GAM
#considered day of year instead, but this correlates with month and we need month
ds_datanona$Daten<-as.numeric(ds_datanona$Date)
#start with SSS and Rugosity removed, mess with combinations further down
modglm<-glm(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+Set_Begin_Hour+BATHYMETRY+BT+SST+BS+SSH+CHLA+BTSD+SSTSD+offset(logEFFORT),data=ds_datanona,family='binomial')
modgam<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
AIC(modglm,modgam)#gam is way better, go with GAM for here on out

#2)check for temporal autocorrelation (ie. independence vs non independence)
par(mfrow=c(1,1))
EL1=residuals(modgam, type="pearson")
acf(EL1,main="Residuals")
pacf(EL1, main="Residuals")
#no temporal autocorrelation

#VIF
z<-cbind(ds_datanona$YEAR,ds_datanona$MONTH,ds_datanona$Day,ds_datanona$BAITTYPE,ds_datanona$HOOK_CONFIG,ds_datanona$Set_Begin_Hour, ds_datanona$BATHYMETRY,ds_datanona$RUGOSITY,ds_datanona$SST,
         ds_datanona$SSH,ds_datanona$BT,ds_datanona$SSS,ds_datanona$BS,ds_datanona$CHLA,ds_datanona$BTSD,ds_datanona$SSTSD,ds_datanona$TURB)
corvif(z) #correlation among Day of year and Month and BS and SSS
z<-cbind(ds_datanona$YEAR,ds_datanona$MONTH,ds_datanona$BAITTYPE,ds_datanona$HOOK_CONFIG,ds_datanona$Set_Begin_Hour,ds_datanona$BATHYMETRY,ds_datanona$RUGOSITY,ds_datanona$SST,
         ds_datanona$SSH,ds_datanona$BT,ds_datanona$BS,ds_datanona$CHLA,ds_datanona$BTSD,ds_datanona$SSTSD,ds_datanona$TURB)
corvif(z) #looks like as long as Dayn and Year are not both in and SSS and BS are not both in we are all good, nothing else is over 5



#3) Check for spatial autocorrelation
#meaning of correlog plot not clear go with variogram instead

#USE VARIOGRAM

#try using variogram, have to convert df to spatial df and use geographic crs
ds_datanonasp<-ds_datanona
coordinates(ds_datanonasp)<- ~BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE
proj4string(ds_datanonasp)<-CRS("+init=epsg:4326")

modgam.1<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanonasp,family='binomial')

EL.1=residuals(modgam.1, type="pearson")
vario500<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=ds_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance dsween intervals
plot(vario500,main="500_.1") 
vario250<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=ds_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance dsween intervals
plot(vario250,main="250_.1") 
vario100<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=ds_datanonasp,cutoff=100,width=1,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance dsween intervals,  # 0 = N; .15 = NE; 90 = E; 135 = SE
plot(vario100,main="100_.1") 
#looks ok to me, but lets see if we can improve it

modgam2.6<-gam(BINOMIAL~MONTH+YEAR +BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+
                 s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanonasp,family='binomial')
EL2.6=residuals(modgam2.6, type="pearson")
vario500_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=ds_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance dsween intervals
plot(vario500_2.6,main="500_2.6")
vario250_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=ds_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance dsween intervals
plot(vario250_2.6,main="250_2.6")

AIC(modgam.1,modgam2.6)
#2.6 has lowest aic, go with it

concurvity(modgam2.6,full=TRUE)#concurvity is high between lat/lon and bs and bat

df = data.frame(Long=ds_datanona$BEGIN_SET_LONGITUDE, Lat=ds_datanona$BEGIN_SET_LATITUDE,Residuals=EL.1)
coordinates(df)<-c("Long", "Lat")
bubble(df,zcol="Residuals", col=c("orange","blue"),xlab="long",ylab="lat", maxsize=3) 
#seems pretty evenly distrubtion of pos and neg resids so no autocorrelation

#decide to keep spatial term to help make other covariates more realistic

#4) 2 Part Variable selection
#Part 1 environmental variables
mod2<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
mod3<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#put rug in for bat, no btsd (correlates with rug)
mod4<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(SSS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#put sss in for bs
mod5<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#put in turb for chla
mod6<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd
mod7<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd and btsd
mod8<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd, with turb and rug, no btsd (correlates with rug)
mod9<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(BTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd and chla
mod10<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd and chla and SSH and btsd
mod11<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(BTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd and chla and SSH
mod12<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SST
mod13<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SST and sstsd
mod14<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=ds_datanona,family='binomial')#no sstsd and chla and SSH, with rug, no btsd (correlates with rug)
mod15<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SSH, with turb
mod16<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SSH
mod17<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SSH, sst, sstsd
AICtab(mod2,mod3,mod4,mod5,mod6,mod7,mod8,mod9,mod10,mod11,mod12,mod13,mod14,mod15,mod16,mod17)
#best models is mod16

#Part 2 gear variables with best model from above
mod16<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')#no SSH
mod18<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
mod19<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+HOOK_CONFIG+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
mod20<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
mod21<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
mod22<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
AICtab(mod16,mod18,mod19,mod20,mod21,mod22)
#best model is mod21 is best


#5) Tweak k values
#if we can find the model that explains the most variation and the curves make biological sense go with that model
mod21<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='binomial')
#model is slightly overdispersed, switch family to quasibinomial because dispersion parameter is not fixed so it can model overdispersion
#http://coltekin.net/cagri/R/r-exercisesse11.html#:~:text=Overdispersion%20occurs%20when%20error%20(residuals,distribution%20is%20the%20binomial%20distribution.&text=Underdispersion%2C%20detected%20by%20lower%20residual,also%20possible%20but%20more%20rare.
mod21.1<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='quasibinomial')
mod21.2<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT,k=7)+s(SST,k=6)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='quasibinomial')
#SST curves not going down for cold temps and this is causing presence of duskies in gulf of maine in Jan which is incorrect...will move forward with a model without SST
mod21.3<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=ds_datanona,family='quasibinomial')
#without SST
mod21.4<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY,k=15)+s(BT,k=9)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD,k=6)+offset(logEFFORT),data=ds_datanona,family='quasibinomial')
mod21.5<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY,k=15)+s(BT,k=9)+s(BS)+s(CHLA)+BTSD+s(SSTSD,k=6)+offset(logEFFORT),data=ds_datanona,family='quasibinomial')

par(mfrow=c(1,1))
summary(mod21.4)
gam.check(mod21.4) #good
plot(mod21.4)
disp2(mod21.4)

#                                             edf Ref.df     F  p-value    
#s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE) 21.433 25.278 1.960  0.00346 ** 
#s(Set_Begin_Hour)                          5.949  7.082 3.372  0.00144 ** 
#s(BATHYMETRY)                              3.373  4.298 0.862  0.51938    
#s(BT)                                      5.048  6.109 5.895 5.08e-06 ***
#s(BS)                                      1.586  1.976 0.288  0.72446    
#s(CHLA)                                    5.266  6.268 1.282  0.23447    
#s(BTSD)                                    2.735  3.492 2.001  0.10038    
#s(SSTSD)                                   1.056  1.108 0.403  0.57694
#R-sq.(adj) =  0.312   Deviance explained = 38.3%

m=mod21.4

#Plot respose curves
#to backtransform binomial model use plogis
#to backtransform neg bin use exp
#Bathymetry
xBat<-seq(min(ds_datanona$BATHYMETRY),max(ds_datanona$BATHYMETRY),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BATHYMETRY=xBat,BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),BS=mean(ds_datanona$BS),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),CHLA=mean(ds_datanona$CHLA),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
outBat$pred.Trans<-plogis(outBat$pred.mean)

#BT
xBT<-seq(min(ds_datanona$BT),max(ds_datanona$BT),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BT=xBT,BATHYMETRY=mean(ds_datanona$BATHYMETRY),SST=mean(ds_datanona$SST),BS=mean(ds_datanona$BS),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),CHLA=mean(ds_datanona$CHLA),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBT<-summaryBy(pred~BT,data=p.data)
outBT$pred.Trans<-plogis(outBT$pred.mean)

#SST
xSST<-seq(min(ds_datanona$SST),max(ds_datanona$SST),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),SST=xSST,BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),BS=mean(ds_datanona$BS),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),CHLA=mean(ds_datanona$CHLA),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSST<-summaryBy(pred~SST,data=p.data)
outSST$pred.Trans<-plogis(outSST$pred.mean)

#BS
xBS<-seq(min(ds_datanona$BS),max(ds_datanona$BS),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=xBS,BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),CHLA=mean(ds_datanona$CHLA),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBS<-summaryBy(pred~BS,data=p.data)
outBS$pred.Trans<-plogis(outBS$pred.mean)

#SSS
#xSSS<-seq(min(ds_datanona$SSS),max(ds_datanona$SSS),length=100)
#p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),SSS=xSSS,BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
#                    BS=mean(ds_datanona$BS),SSH=mean(ds_datanona$SSH),CHLA=mean(ds_datanona$CHLA),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
#                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
#outSSS<-summaryBy(pred~SSS,data=p.data)
#outSSS$pred.Trans<-plogis(outSSS$pred.mean)

#SSH
#xSSH<-seq(min(ds_datanona$SSH),max(ds_datanona$SSH),length=100)
#p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
#                    SSS=mean(ds_datanona$SSS),CHLA=mean(ds_datanona$CHLA),SSH=xSSH,BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
#                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
#outSSH<-summaryBy(pred~SSH,data=p.data)
#outSSH$pred.Trans<-plogis(outSSH$pred.mean)

#CHLA
xCHLA<-seq(min(ds_datanona$CHLA),max(ds_datanona$CHLA),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),CHLA=xCHLA,BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outCHLA<-summaryBy(pred~CHLA,data=p.data)
outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)

#SSTSD
xSSTSD<-seq(min(ds_datanona$SSTSD),max(ds_datanona$SSTSD),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),SSTSD=xSSTSD,BTSD=mean(ds_datanona$BTSD),CHLA=mean(ds_datanona$CHLA),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)

#BTSD
xBTSD<-seq(min(ds_datanona$BTSD),max(ds_datanona$BTSD),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),BTSD=xBTSD,SSTSD=mean(ds_datanona$SSTSD),CHLA=mean(ds_datanona$CHLA),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBTSD<-summaryBy(pred~BTSD,data=p.data)
outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)

#Set_Begin_Hour
xSet_Begin_Hour<-seq(min(ds_datanona$Set_Begin_Hour),max(ds_datanona$Set_Begin_Hour),length=100)
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),CHLA=mean(ds_datanona$CHLA),Set_Begin_Hour=xSet_Begin_Hour,
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)

#MONTH
p.data<-expand.grid(YEAR=unique(ds_datanona$YEAR),MONTH=levels(ds_datanona$MONTH),BS=mean(ds_datanona$BS),BATHYMETRY=mean(ds_datanona$BATHYMETRY),BT=mean(ds_datanona$BT),SST=mean(ds_datanona$SST),
                    SSS=mean(ds_datanona$SSS),SSH=mean(ds_datanona$SSH),BTSD=mean(ds_datanona$BTSD),SSTSD=mean(ds_datanona$SSTSD),CHLA=mean(ds_datanona$CHLA),Set_Begin_Hour=mean(ds_datanona$Set_Begin_Hour),
                    BEGIN_SET_LATITUDE=mean(ds_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(ds_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(ds_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outMONTH<-summaryBy(pred~MONTH,data=p.data)
outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)

#YEAR
outYEAR<-summaryBy(pred~YEAR,data=p.data)
outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)


par(mfrow=c(3,3))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1))
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1))
#plot(pred.Trans~SST, data=outSST,type="l",ylim=c(0,1))
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1))
#plot(pred.Trans~SSH, data=outSSH,type="l",ylim=c(0,1))
plot(pred.Trans~CHLA, data=outCHLA,type="l",ylim=c(0,1))
plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,1))
plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,1))
plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,1))
plot(pred.Trans~MONTH, data=outMONTH,type="l",ylim=c(0,1))
plot(pred.Trans~YEAR, data=outYEAR,type="l",ylim=c(0,1))



#####
#SHH
#####
#1) GLM or GAM
#after discussion with tobey, feel that it is appropriate to remove set where SST was 8C and there was a positive catch
#because it is likely outside the temp range of scalloped hammerheads
shh_datanona<-shh_datanona[-which(shh_datanona$SST<10 & shh_datanona$BINOMIAL==1),]
#considered day of year instead, but this correlates with month and we need month
shh_datanona$Daten<-as.numeric(shh_datanona$Date)
#start with SSS and Rugosity removed, mess with combinations further down
modglm<-glm(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+Set_Begin_Hour+BATHYMETRY+BT+SST+BS+SSH+CHLA+BTSD+SSTSD+offset(logEFFORT),data=shh_datanona,family='binomial')
modgam<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
AIC(modglm,modgam)#gam is way better, go with GAM for here on out

#2)check for temporal autocorrelation (ie. independence vs non independence)
#dont need to worry about temporal autocorrelation, if outside dotted lines means theres correlation
par(mfrow=c(1,1))
EL1=residuals(modgam, type="pearson")
acf(EL1,main="Residuals")
pacf(EL1, main="Residuals")
#no temporal autocorrelation

#VIF
z<-cbind(shh_datanona$YEAR,shh_datanona$MONTH,shh_datanona$Day,shh_datanona$BAITTYPE,shh_datanona$HOOK_CONFIG,shh_datanona$Set_Begin_Hour, shh_datanona$BATHYMETRY,shh_datanona$RUGOSITY,shh_datanona$SST,
         shh_datanona$SSH,shh_datanona$BT,shh_datanona$SSS,shh_datanona$BS,shh_datanona$CHLA,shh_datanona$BTSD,shh_datanona$SSTSD,shh_datanona$TURB)
corvif(z) #correlation among Day of year and Month and BS and SSS
z<-cbind(shh_datanona$YEAR,shh_datanona$MONTH,shh_datanona$BAITTYPE,shh_datanona$HOOK_CONFIG,shh_datanona$Set_Begin_Hour,shh_datanona$BATHYMETRY,shh_datanona$RUGOSITY,shh_datanona$SST,
         shh_datanona$SSH,shh_datanona$BT,shh_datanona$BS,shh_datanona$CHLA,shh_datanona$BTSD,shh_datanona$SSTSD,shh_datanona$TURB)
corvif(z) #looks like as long as Dayn and Year are not both in and SSS and BS are not both in we are all good, nothing else is over 5



#3) Check for spatial autocorrelation
#meaning of correlog plot not clear go with variogram instead

#USE VARIOGRAM

#try using variogram, have to convert df to spatial df and use geographic crs
shh_datanonasp<-shh_datanona
coordinates(shh_datanonasp)<- ~BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE
proj4string(shh_datanonasp)<-CRS("+init=epsg:4326")

modgam.1<-gam(BINOMIAL~MONTH+YEAR+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanonasp,family='binomial')

EL.1=residuals(modgam.1, type="pearson")
vario500<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=shh_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance shhween intervals
plot(vario500,main="500_.1") 
vario250<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=shh_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance shhween intervals
plot(vario250,main="250_.1") 
vario100<-variogram(EL.1 ~ BEGIN_SET_LONGITUDE+BEGIN_SET_LATITUDE,data=shh_datanonasp,cutoff=100,width=1,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance shhween intervals,  # 0 = N; .15 = NE; 90 = E; 135 = SE
plot(vario100,main="100_.1") 
#looks ok to me, but lets see if we can improve it

modgam2.6<-gam(BINOMIAL~MONTH+YEAR +BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+
                 s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanonasp,family='binomial')
EL2.6=residuals(modgam2.6, type="pearson")
vario500_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=shh_datanonasp,cutoff=500,width=10,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance shhween intervals
plot(vario500_2.6,main="500_2.6")
vario250_2.6<-variogram(EL2.6 ~ BEGIN_SET_LONGITUDE + BEGIN_SET_LATITUDE,data=shh_datanonasp,cutoff=250,width=5,alpha=c(0,45,90,135))#cutoff is how far away you want to assess and width is distance shhween intervals
plot(vario250_2.6,main="250_2.6")

AIC(modgam.1,modgam2.6)
#2.6 has lowest aic, go with it

concurvity(modgam2.6,full=TRUE)#concurvity is high between lat/lon and bs and bat

df = data.frame(Long=shh_datanona$BEGIN_SET_LONGITUDE, Lat=shh_datanona$BEGIN_SET_LATITUDE,Residuals=EL.1)
coordinates(df)<-c("Long", "Lat")
bubble(df,zcol="Residuals", col=c("orange","blue"),xlab="long",ylab="lat", maxsize=3) 
#seems pretty evenly distrubtion of pos and neg resishh so no autocorrelation

#decide to keep spatial term to help make other covariates more realistic


#4) 2 Part Variable selection
#Part 1 environmental variables
mod2<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
mod3<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#put rug in for bat, no btsd (correlates with rug)
mod4<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(SSS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#put sss in for bs
mod5<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#put in turb for chla
mod6<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd
mod7<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd and btsd
mod8<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd, with turb and rug, no btsd (correlates with rug)
mod9<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(BTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd and chla
mod10<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd and chla and SSH and btsd
mod11<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(BTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd and chla and SSH
mod12<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no SST
mod13<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(SSH)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no SST and sstsd
mod14<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(RUGOSITY)+s(BT)+s(SST)+s(BS)+offset(logEFFORT),data=shh_datanona,family='binomial')#no sstsd and chla and SSH, with rug, no btsd (correlates with rug)
mod15<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no SSH, with turb
mod16<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no SSH
mod17<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(BS)+s(CHLA)+s(BTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#no SSH, sst, sstsd
AICtab(mod2,mod3,mod4,mod5,mod6,mod7,mod8,mod9,mod10,mod11,mod12,mod13,mod14,mod15,mod16,mod17)
#best models is mod5

#Part 2 gear variables with best model from above
mod5<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')#put in turb for chla
mod18<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
mod19<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+HOOK_CONFIG+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
mod20<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+HOOK_CONFIG+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
mod21<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
mod22<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
AICtab(mod5,mod18,mod19,mod20,mod21,mod22)
#best model is mod22 is best


#5) Tweak k values
#if we can find the model that explains the most variation and the curves make biological sense go with that model
mod22<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='binomial')
#model is slightly overdispersed, switch family to quasibinomial because dispersion parameter is not fixed so it can model overdispersion
#http://coltekin.net/cagri/R/r-exercisesse11.html#:~:text=Overdispersion%20occurs%20when%20error%20(residuals,distribution%20is%20the%20binomial%20distribution.&text=Underdispersion%2C%20detected%20by%20lower%20residual,also%20possible%20but%20more%20rare.
mod22.1<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT),data=shh_datanona,family='quasibinomial')
mod22.2<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT,k=12)+s(SST)+s(BS,k=8)+s(SSH,k=8)+s(TURB,k=12)+s(BTSD,k=7)+s(SSTSD,k=8)+offset(logEFFORT),data=shh_datanona,family='quasibinomial')
mod22.3<-gam(BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS,k=8)+s(SSH)+s(TURB)+s(BTSD,k=7)+s(SSTSD,k=12)+offset(logEFFORT),data=shh_datanona,family='quasibinomial')

par(mfrow=c(1,1))
summary(mod22.1)
gam.check(mod22.1) #good
plot(mod22.1)
disp2(mod22.1) #close to overdispersion, used quasibinomial distribution to account for it

#                                            edf Ref.df     F  p-value    
#s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE) 18.638 22.956 1.384 0.109824    
#s(Set_Begin_Hour)                          8.238  8.817 5.751 6.25e-07 ***
#s(BATHYMETRY)                              4.107  5.122 4.969 0.000149 ***
#s(BT)                                      6.472  7.595 2.662 0.008827 ** 
#s(SST)                                     1.000  1.000 0.015 0.901841    
#s(BS)                                      6.801  7.712 2.504 0.012015 *  
#s(SSH)                                     6.672  7.790 3.766 0.000375 ***
#s(TURB)                                    6.740  7.854 1.252 0.296487    
#s(BTSD)                                    5.984  7.127 4.193 0.000133 ***
#s(SSTSD)                                   5.523  6.672 1.540 0.158882   
#R-sq.(adj) =  0.299   Deviance explained = 47.2%

m=mod22.1

#Plot respose curves
#to backtransform binomial model use plogis
#to backtransform neg bin use exp
#Bathymetry
xBat<-seq(min(shh_datanona$BATHYMETRY),max(shh_datanona$BATHYMETRY),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BATHYMETRY=xBat,BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),BS=mean(shh_datanona$BS),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
outBat$pred.Trans<-plogis(outBat$pred.mean)

#BT
xBT<-seq(min(shh_datanona$BT),max(shh_datanona$BT),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BT=xBT,BATHYMETRY=mean(shh_datanona$BATHYMETRY),SST=mean(shh_datanona$SST),BS=mean(shh_datanona$BS),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBT<-summaryBy(pred~BT,data=p.data)
outBT$pred.Trans<-plogis(outBT$pred.mean)

#SST
xSST<-seq(min(shh_datanona$SST),max(shh_datanona$SST),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),SST=xSST,BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),BS=mean(shh_datanona$BS),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSST<-summaryBy(pred~SST,data=p.data)
outSST$pred.Trans<-plogis(outSST$pred.mean)

#BS
xBS<-seq(min(shh_datanona$BS),max(shh_datanona$BS),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=xBS,BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBS<-summaryBy(pred~BS,data=p.data)
outBS$pred.Trans<-plogis(outBS$pred.mean)

#SSS
#xSSS<-seq(min(shh_datanona$SSS),max(shh_datanona$SSS),length=100)
#p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),SSS=xSSS,BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
#                    TURB=mean(shh_datanona$TURB),BS=mean(shh_datanona$BS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
#                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
#outSSS<-summaryBy(pred~SSS,data=p.data)
#outSSS$pred.Trans<-plogis(outSSS$pred.mean)

#SSH
xSSH<-seq(min(shh_datanona$SSH),max(shh_datanona$SSH),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),CHLA=mean(shh_datanona$CHLA),SSH=xSSH,BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSSH<-summaryBy(pred~SSH,data=p.data)
outSSH$pred.Trans<-plogis(outSSH$pred.mean)

#CHLA
#xCHLA<-seq(min(shh_datanona$CHLA),max(shh_datanona$CHLA),length=100)
#p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
#                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=xCHLA,BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
#                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
#p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
#outCHLA<-summaryBy(pred~CHLA,data=p.data)
#outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)

#TURB
xTURB<-seq(min(shh_datanona$TURB),max(shh_datanona$TURB),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=xTURB,SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),CHLA=mean(shh_datanona$CHLA),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outTURB<-summaryBy(pred~TURB,data=p.data)
outTURB$pred.Trans<-plogis(outTURB$pred.mean)

#SSTSD
xSSTSD<-seq(min(shh_datanona$SSTSD),max(shh_datanona$SSTSD),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),SSTSD=xSSTSD,BTSD=mean(shh_datanona$BTSD),CHLA=mean(shh_datanona$CHLA),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)

#BTSD
xBTSD<-seq(min(shh_datanona$BTSD),max(shh_datanona$BTSD),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),BTSD=xBTSD,SSTSD=mean(shh_datanona$SSTSD),CHLA=mean(shh_datanona$CHLA),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outBTSD<-summaryBy(pred~BTSD,data=p.data)
outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)

#Set_Begin_Hour
xSet_Begin_Hour<-seq(min(shh_datanona$Set_Begin_Hour),max(shh_datanona$Set_Begin_Hour),length=100)
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),CHLA=mean(shh_datanona$CHLA),Set_Begin_Hour=xSet_Begin_Hour,
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)

#MONTH
p.data<-expand.grid(YEAR=unique(shh_datanona$YEAR),MONTH=levels(shh_datanona$MONTH),BS=mean(shh_datanona$BS),BATHYMETRY=mean(shh_datanona$BATHYMETRY),BT=mean(shh_datanona$BT),SST=mean(shh_datanona$SST),
                    TURB=mean(shh_datanona$TURB),SSS=mean(shh_datanona$SSS),SSH=mean(shh_datanona$SSH),BTSD=mean(shh_datanona$BTSD),SSTSD=mean(shh_datanona$SSTSD),CHLA=mean(shh_datanona$CHLA),Set_Begin_Hour=mean(shh_datanona$Set_Begin_Hour),
                    BAITTYPE=levels(shh_datanona$BAITTYPE),BEGIN_SET_LATITUDE=mean(shh_datanona$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(shh_datanona$BEGIN_SET_LONGITUDE),logEFFORT=mean(shh_datanona$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)"))
outMONTH<-summaryBy(pred~MONTH,data=p.data)
outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)

#YEAR
outYEAR<-summaryBy(pred~YEAR,data=p.data)
outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)

#BAITTYPE
outBAIT<-summaryBy(pred~BAITTYPE,data=p.data)
outBAIT$pred.Trans<-plogis(outBAIT$pred.mean)


par(mfrow=c(3,4))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1))
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1))
plot(pred.Trans~SST, data=outSST,type="l",ylim=c(0,1))
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1))
plot(pred.Trans~SSH, data=outSSH,type="l",ylim=c(0,1))
plot(pred.Trans~TURB, data=outTURB,type="l",ylim=c(0,1))
plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,1))
plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,1))
plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,1))
plot(pred.Trans~BAITTYPE, data=outBAIT,type="l",ylim=c(0,1))
plot(pred.Trans~MONTH, data=outMONTH,type="l",ylim=c(0,1))
plot(pred.Trans~YEAR, data=outYEAR,type="l",ylim=c(0,1))


##################
#Model Validation
##################
library(dismo)
library(forecast)
library(blockCV)

###Random Validation
modVal<-function(data=NA,gam.formula=NA,exclude=NULL,method=NULL,drop.unused.levels=TRUE,family=NA){
  k <- 10
  set.seed(10)
  group <- kfold(data, k) #assigned all data into 10 groups
  
  AUC_Rec<-NULL
  TSS_Rec<-NULL
  cor_Rec<-NULL
  RMSE_test_Rec<-NULL
  RMSE_train_Rec<-NULL
  MAPE_test_Rec<-NULL
  RMSE_testNull_Rec<-NULL
  RMSE_trainNull_Rec<-NULL
  nRMSE_train_Rec<-NULL
  nRMSE_test_Rec<-NULL
  MASE_Rec<-NULL
  DMRec<-NULL
  for (i in 1:k) {
    train <- data[group != i,]
    test <- data[group == i,]
    modbi<-gam(gam.formula,data=train,family=family,method=method,drop.unused.levels=drop.unused.levels)
    #model run for test
    pred.test<-predict(modbi,type='link',newdata=test,exclude=exclude)
    pred.test<-plogis(pred.test)
    #model run for train
    pred.train<-predict(modbi,type='link',newdata=train,exclude=exclude)
    pred.train<-plogis(pred.train)
    #AUC
    testpres<-test[which(test$BINOMIAL==1),]
    testbackg<-test[which(test$BINOMIAL==0),]
    e<-evaluate(testpres,testbackg,modbi)
    auc<-e@auc
    #plot(e, "ROC", cex.lab=1.5, col="blue", type="l", lwd=2)
    AUC_Rec<-c(AUC_Rec,auc)
    #TSS
    #plot(e@t, e@TPR+e@TNR, type="l", lwd=2, cex.lab=1.5)
    TPR <- e@TPR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Positive Rate at threshold where TPR+TNR was maximized
    TNR<-  e@TNR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Negative Rate at threshold where TPR+TNR was maximized
    tss<-(TPR+TNR)-1
    TSS_Rec<-c(TSS_Rec,tss)
    #cor
    cor<-e@cor
    cor_Rec<-c(cor_Rec,cor)
    difsqtestRec<-NULL
    difsqtrainRec<-NULL
    APE.testRec<-NULL
    diftestRec<-NULL
    diftrainRec<-NULL
    #RMSE and MAE for test
    for(j in 1:length(pred.test)){
      difsqtest<-(pred.test[j]-test$BINOMIAL[j])^2 #first part of numerator (before summation)
      difsqtestRec<-c(difsqtestRec,difsqtest)
      diftest<-pred.test[j]-test$BINOMIAL[j]
      diftestRec<-c(diftestRec,diftest)
    }
    RMSE_test<-sqrt(sum(difsqtestRec)/nrow(test))
    RMSE_test_Rec<-c(RMSE_test_Rec,RMSE_test) #list of RMSE for testing set
    nRMSE_test<-RMSE_test/(max(test$BINOMIAL)-min(test$BINOMIAL)) #normalized RMSE by dividing RMSE by range of observed values
    nRMSE_test_Rec<-c(nRMSE_test_Rec,nRMSE_test)
    MAE_test<-sum(abs(diftestRec))/nrow(test)
    #RMSE and MAE for train
    for(j in 1:length(pred.train)){
      difsqtrain<-(pred.train[j]-train$BINOMIAL[j])^2 #first part of numerator (before summation)
      difsqtrainRec<-c(difsqtrainRec,difsqtrain)
      diftrain<-pred.train[j]-train$BINOMIAL[j]
      diftrainRec<-c(diftrainRec,diftrain)
    }
    RMSE_train<-sqrt(sum(difsqtrainRec)/nrow(train))
    RMSE_train_Rec<-c(RMSE_train_Rec,RMSE_train) #list of RMSE for training set
    MAE_train<-sum(abs(diftrainRec))/nrow(train)
    #MAPE
    for(j in 1:length(pred.test)){
      APE.test<-ifelse(test$BINOMIAL[j]>0,abs(test$BINOMIAL[j]-pred.test[j])/test$BINOMIAL[j],0) #first part of numerator (before summation)
      APE.testRec<-c(APE.testRec,APE.test)
    }
    MAPE_test<-(sum(APE.testRec)/nrow(test))*100
    MAPE_test_Rec<-c(MAPE_test_Rec,MAPE_test)
    
    
    ###Null model###
    modbiNull<-gam(BINOMIAL~offset(logEFFORT),data=train,family=family,method=method,drop.unused.levels=drop.unused.levels)
    #model run for test
    pred.testNull<-predict(modbiNull,type='link',newdata=test,exclude=exclude)
    pred.testNull<-plogis(pred.testNull)
    #model run for train
    pred.trainNull<-predict(modbiNull,type='link',newdata=train,exclude=exclude)
    pred.trainNull<-plogis(pred.trainNull)
    difsqtestNullRec<-NULL
    difsqtrainNullRec<-NULL
    APE.testNullRec<-NULL
    diftestNullRec<-NULL
    diftrainNullRec<-NULL
    #RMSE and MAE for test
    for(j in 1:length(pred.testNull)){
      difsqtestNull<-(pred.testNull[j]-test$BINOMIAL[j])^2 #first part of numerator (before summation)
      difsqtestNullRec<-c(difsqtestNullRec,difsqtestNull)
      diftestNull<-pred.testNull[j]-test$BINOMIAL[j]
      diftestNullRec<-c(diftestNullRec,diftestNull)
    }
    RMSE_testNull<-sqrt(sum(difsqtestNullRec)/nrow(test))
    RMSE_testNull_Rec<-c(RMSE_testNull_Rec,RMSE_testNull) #list of RMSE for testing set
    MAE_testNull<-sum(abs(diftestNullRec))/nrow(test)
    #RMSE and MAE for train
    for(j in 1:length(pred.trainNull)){
      difsqtrainNull<-(pred.trainNull[j]-train$BINOMIAL[j])^2 #first part of numerator (before summation)
      difsqtrainNullRec<-c(difsqtrainNullRec,difsqtrainNull)
      diftrainNull<-pred.trainNull[j]-train$BINOMIAL[j]
      diftrainNullRec<-c(diftrainNullRec,diftrainNull)
    }
    RMSE_trainNull<-sqrt(sum(difsqtrainNullRec)/nrow(train))
    RMSE_trainNull_Rec<-c(RMSE_trainNull_Rec,RMSE_trainNull) #list of RMSE for training set
    MAE_trainNull<-sum(abs(diftrainNullRec))/nrow(train)
    
    MASE<-MAE_test/MAE_testNull
    MASE_Rec<-c(MASE_Rec,MASE)
    
    #Diebold-Marino test statistic: evaluates the loss differential (errors) between two forecast (i.e. null and full GAM), following Kleisner et al. 2017
    DM<-dm.test(diftestNullRec,diftestRec,h=1,power=1,alternative = "greater")
    DM.p<-DM$p.value
    DMRec<-c(DMRec, DM.p)
    
    print(i)
  }
  return(list(AUC=AUC_Rec,TSS=TSS_Rec,cor=cor_Rec,RMSE_test=RMSE_test_Rec,RMSE_train=RMSE_train_Rec,nRMSE_test=nRMSE_test_Rec,MASE=MASE_Rec,DM=DMRec))
}

###Spatial Validation

#This approach uses spatialBlock to define blocks. This was a little more systematic and less arbitrary than 2.0 method
modValSpace3.0<-function(data=NA,gam.formula=NA,exclude=NULL,method=NULL,drop.unused.levels=TRUE,therange=NA,k=NA,family=NA){
  datasp<-subset(data,select=c(BEGIN_SET_LONGITUDE,BEGIN_SET_LATITUDE,BINOMIAL))
  colnames(datasp)<-c("x","y","Species")
  #coordinates(datasp)<- ~x+y
  #proj4string(datasp)<-CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
  datasp<-sf::st_as_sf(datasp, coords = c("x", "y"), crs = CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
  spBlock<-spatialBlock(speciesData = datasp,species="Species",theRange=therange,k=k,selection="systematic",iteration=10)
  spBlock$plots + geom_sf(data=datasp %>% dplyr::filter(Species == 1),aes(col=Species))
  
  data$spBlock<-spBlock$foldID
  
  AUC_Rec<-NULL
  TSS_Rec<-NULL
  cor_Rec<-NULL
  
  for (i in 1:k) {
    train <- data[which(data$spBlock != i),]
    test <- data[which(data$spBlock == i),]
    modbi<-gam(gam.formula,data=train,family=family,method=method,drop.unused.levels=drop.unused.levels)
    #model run for test
    pred.test<-predict(modbi,type='link',newdata=test,exclude=exclude)
    pred.test<-plogis(pred.test)
    #model run for train
    #pred.train<-predict(modbi,type='link',newdata=train,exclude=exclude)
    #pred.train<-plogis(pred.train)
    #AUC
    testpres<-test[which(test$BINOMIAL==1),]
    testbackg<-test[which(test$BINOMIAL==0),]
    e<-tryCatch({ #need to do this in case there are no positive cases in a certain zone (happens for dus)
      evaluate(testpres,testbackg,modbi)
    }, warning =function(w){
      message("handling warning:",conditionMessage(w))
      "Bad"
    },error=function(e){
      message("ignore error:",conditionMessage(e))
      "Bad"
    })
    if(nrow(testpres)!=0){
      auc<-e@auc
      #plot(e, "ROC", cex.lab=1.5, col="blue", type="l", lwd=2)
      #AUC_Rec<-c(AUC_Rec,auc)
      #TSS
      #plot(e@t, e@TPR+e@TNR, type="l", lwd=2, cex.lab=1.5)
      TPR <- e@TPR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Positive Rate at threshold where TPR+TNR was maximized
      TNR<-  e@TNR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Negative Rate at threshold where TPR+TNR was maximized
      tss<-(TPR+TNR)-1
      #TSS_Rec<-c(TSS_Rec,tss)
      #cor
      cor<-e@cor
      #cor_Rec<-c(cor_Rec,cor)
    }else{
      auc<-NA
      tss<-NA
      cor<-NA
    }
    
    AUC_Rec<-c(AUC_Rec,auc)
    TSS_Rec<-c(TSS_Rec,tss)
    cor_Rec<-c(cor_Rec,cor)
    
    print(i)
  }
  return(list(AUC=AUC_Rec,TSS=TSS_Rec,cor=cor_Rec))
}


#predict over each year with a model trained on data from other years
modValTime2.0<-function(data=NA,gam.formula=NA,exclude=NULL,method=NULL,drop.unused.levels=TRUE,family=NA){
  
  Years<-as.factor(2005:2019)
  AUC_Rec<-NULL
  TSS_Rec<-NULL
  cor_Rec<-NULL
  for (i in Years) {
    train <- data[which(data$YEAR != i),]
    test <- data[which(data$YEAR == i),]
    modbi<-gam(gam.formula,data=train,family=family,method=method,drop.unused.levels=drop.unused.levels)
    #model run for test
    pred.test<-predict(modbi,type='link',newdata=test,exclude=exclude)
    pred.test<-plogis(pred.test)
    #model run for train
    #pred.train<-predict(modbi,type='link',newdata=train,exclude=exclude)
    #pred.train<-plogis(pred.train)
    #AUC
    testpres<-test[which(test$BINOMIAL==1),]
    testbackg<-test[which(test$BINOMIAL==0),]
    e<-evaluate(testpres,testbackg,modbi)
    auc<-e@auc
    #plot(e, "ROC", cex.lab=1.5, col="blue", type="l", lwd=2)
    AUC_Rec<-c(AUC_Rec,auc)
    #TSS
    #plot(e@t, e@TPR+e@TNR, type="l", lwd=2, cex.lab=1.5)
    TPR <- e@TPR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Positive Rate at threshold where TPR+TNR was maximized
    TNR<-  e@TNR[which(e@TPR+e@TNR==max(e@TPR+e@TNR))][1] #True Negative Rate at threshold where TPR+TNR was maximized
    tss<-(TPR+TNR)-1
    TSS_Rec<-c(TSS_Rec,tss)
    #cor
    cor<-e@cor
    cor_Rec<-c(cor_Rec,cor)
    
    print(i)
  }
  return(list(AUC=AUC_Rec,TSS=TSS_Rec,cor=cor_Rec))
}

#####
#SB
#####
formula<-BINOMIAL~MONTH+YEAR+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(CHLA)+offset(logEFFORT)
sb_mod_val<-modVal(data=sb_datanona,gam.formula=formula,exclude=NULL,method="GCV.Cp",drop.unused.levels=FALSE,family="binomial")

#AUC
mean(sb_mod_val$AUC) #good, 0.87
#TSS
mean(sb_mod_val$TSS) #okay, 0.65
#Cor
mean(sb_mod_val$cor) #okay, 0.50


###Spatial validation
sb_mod_valSpace3.0<-modValSpace3.0(data=sb_datanona,gam.formula=formula,exclude=NULL,method="GCV.Cp",drop.unused.levels=FALSE,therange=65000,k=5,family="binomial")
mean(sb_mod_valSpace3.0$AUC)#0.81
mean(sb_mod_valSpace3.0$TSS)#0.55
mean(sb_mod_valSpace3.0$cor)#0.28

###Temporal Validation
sb_mod_valTime2<-modValTime2.0(data=sb_datanona,gam.formula=formula,exclude=NULL,method="GCV.Cp",drop.unused.levels=FALSE,family="binomial")
mean(sb_mod_valTime2$AUC[12:14])#0.88 going from 12:14 because that is from 2016-2018
mean(sb_mod_valTime2$TSS[12:14])#0.71
mean(sb_mod_valTime2$cor[12:14])#0.29

#save model output


#####
#DS
#####
formula<-BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+s(Set_Begin_Hour)+s(BATHYMETRY,k=15)+s(BT,k=9)+s(BS)+s(CHLA)+s(BTSD)+s(SSTSD,k=6)+offset(logEFFORT)
ds_mod_val<-modVal(data=ds_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,family="quasibinomial")

#AUC
mean(ds_mod_val$AUC) #good, 0.79
#TSS
mean(ds_mod_val$TSS) #okay, 0.51
#Cor
mean(ds_mod_val$cor) #okay, 0.33


###Spatial validation
ds_mod_valSpace3.0<-modValSpace3.0(data=ds_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,therange=65000,k=5,family="quasibinomial")
mean(ds_mod_valSpace3.0$AUC)#0.72
mean(ds_mod_valSpace3.0$TSS)#0.38
mean(ds_mod_valSpace3.0$cor)#0.22


###Temporal Validation
ds_mod_valTime2<-modValTime2.0(data=ds_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,family="quasibinomial")
mean(ds_mod_valTime2$AUC[12:14])#0.72 going from 12:14 because that is from 2016-2018
mean(ds_mod_valTime2$TSS[12:14])#0.48
mean(ds_mod_valTime2$cor[12:14])#0.29

#save model output


#####
#SHH
#####
formula<-BINOMIAL~MONTH+YEAR+s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)+BAITTYPE+s(Set_Begin_Hour)+s(BATHYMETRY)+s(BT)+s(SST)+s(BS)+s(SSH)+s(TURB)+s(BTSD)+s(SSTSD)+offset(logEFFORT)
shh_mod_val<-modVal(data=shh_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,family="quasibinomial")

#AUC
mean(shh_mod_val$AUC) #good, 0.78
#TSS
mean(shh_mod_val$TSS) #okay, 0.48
#Cor
mean(shh_mod_val$cor) #okay, 0.38


###Spatial validation
shh_mod_valSpace3.0<-modValSpace3.0(data=shh_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,therange=65000,k=4,family="quasibinomial")
mean(shh_mod_valSpace3.0$AUC)#0.75
mean(shh_mod_valSpace3.0$TSS)#0.40
mean(shh_mod_valSpace3.0$cor)#0.36


###Temporal Validation

shh_mod_valTime2<-modValTime2.0(data=shh_datanona,gam.formula=formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",method="GCV.Cp",drop.unused.levels=FALSE,family="quasibinomial")
mean(shh_mod_valTime2$AUC[12:14])#0.70 going from 12:14 because that is from 2016-2018
mean(shh_mod_valTime2$TSS[12:14])#0.42
mean(shh_mod_valTime2$cor[12:14])#0.25

#save model output

##################
#BootStrapping
##################
#no hook or bait
BinGAMboot<-function(data=NA,gam.formula=NA,exclude=NULL,family=NA,method=NULL){
  recbat<-matrix(nrow=100, ncol=1000, NA)
  #recrug<-matrix(nrow=100, ncol=1000, NA)
  recsst<-matrix(nrow=100, ncol=1000, NA)
  recssh<-matrix(nrow=100, ncol=1000, NA)
  recchl<-matrix(nrow=100, ncol=1000, NA)
  recbt<-matrix(nrow=100, ncol=1000, NA)
  recbs<-matrix(nrow=100, ncol=1000, NA)
  recsstsd<-matrix(nrow=100, ncol=1000, NA)
  recbtsd<-matrix(nrow=100, ncol=1000, NA)
  recsethour<-matrix(nrow=100, ncol=1000,NA)
  recyear<-matrix(nrow=15, ncol=1000, NA)
  #rechook<-matrix(nrow=4, ncol=1000,NA)
  #recbait<-matrix(nrow=3,ncol=1000,NA)
  recmonth<-matrix(nrow=12, ncol=1000, NA)
  
  for(i in 1:1000){
    
    boot.sample<-data[sample(nrow(data),nrow(data),replace=TRUE),]
    
    mBoot<-tryCatch({
      gam(gam.formula,data=boot.sample,family=family,method=method)
    }, warning=function(w){
      message("handling warning:",conditionMessage(w))
      "Bad"
    },error=function(e){
      message("ignore error:",conditionMessage(e))
      "Bad"
    })
    vars<-attr(m$terms,"term.labels")
    if(mBoot[1]!="Bad"){
      #Bathymetry
      xBat<-seq(min(data$BATHYMETRY),max(data$BATHYMETRY),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BATHYMETRY=xBat,BT=mean(data$BT),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
      outBat$pred.Trans<-plogis(outBat$pred.mean)
      recbat[1:100,i]<-outBat$pred.Trans
      #BT
      xBT<-seq(min(data$BT),max(data$BT),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BT=xBT,BATHYMETRY=mean(data$BATHYMETRY),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBT<-summaryBy(pred~BT,data=p.data)
      outBT$pred.Trans<-plogis(outBT$pred.mean)
      recbt[1:100,i]<-outBT$pred.Trans
      #SST
      if(any(vars=="SST")){
        xSST<-seq(min(data$SST),max(data$SST),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),SST=xSST,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),BS=mean(data$BS),
                            SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSST<-summaryBy(pred~SST,data=p.data)
        outSST$pred.Trans<-plogis(outSST$pred.mean)
        recsst[1:100,i]<-outSST$pred.Trans
      }else{
        recsst[1:100,i]<-NA}
      #BS
      xBS<-seq(min(data$BS),max(data$BS),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=xBS,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBS<-summaryBy(pred~BS,data=p.data)
      outBS$pred.Trans<-plogis(outBS$pred.mean)
      recbs[1:100,i]<-outBS$pred.Trans
      #SSH
      if(any(vars=="SSH")){
        xSSH<-seq(min(data$SSH),max(data$SSH),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            SSH=xSSH,CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSSH<-summaryBy(pred~SSH,data=p.data)
        outSSH$pred.Trans<-plogis(outSSH$pred.mean)
        recssh[1:100,i]<-outSSH$pred.Trans
      }else{
        recssh[1:100,i]<-NA}
      #CHLA
      xCHLA<-seq(min(data$CHLA),max(data$CHLA),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=xCHLA,BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outCHLA<-summaryBy(pred~CHLA,data=p.data)
      outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)
      recchl[1:100,i]<-outCHLA$pred.Trans
      #SSTSD
      if(any(vars=="SSTSD")){
        xSSTSD<-seq(min(data$SSTSD),max(data$SSTSD),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            SSTSD=xSSTSD,BTSD=mean(data$BTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
        outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)
        recsstsd[1:100,i]<-outSSTSD$pred.Trans
      }else{
        recsstsd[1:100,i]<-NA}
      #BTSD
      if(any(vars=="BTSD")){
        xBTSD<-seq(min(data$BTSD),max(data$BTSD),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            BTSD=xBTSD,SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outBTSD<-summaryBy(pred~BTSD,data=p.data)
        outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)
        recbtsd[1:100,i]<-outBTSD$pred.Trans
      }else{
        recbtsd[1:100,i]<-NA}
      #Set_Begin_Hour
      if(any(vars=="Set_Begin_Hour")){
        xSet_Begin_Hour<-seq(min(data$Set_Begin_Hour),max(data$Set_Begin_Hour),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),Set_Begin_Hour=xSet_Begin_Hour,
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
        outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)
        recsethour[1:100,i]<-outSet_Begin_Hour$pred.Trans
      }else{
        recsethour[1:100,i]<-NA}
      #MONTH
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outMONTH<-summaryBy(pred~MONTH,data=p.data)
      outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)
      recmonth[1:12,i]<-outMONTH$pred.Trans
      #YEAR
      outYEAR<-summaryBy(pred~YEAR,data=p.data)
      outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)
      recyear[1:15,i]<-outYEAR$pred.Trans
      #HOOK_CONFIG
      #outHOOK_CONFIG<-summaryBy(pred~HOOK_CONFIG,data=p.data)
      #outHOOK_CONFIG$pred.Trans<-plogis(outHOOK_CONFIG$pred.mean)
      #rechook[1:4,i]<-outHOOK_CONFIG$pred.Trans
      #BAITTYPE
      #outBAITTYPE<-summaryBy(pred~BAITTYPE,data=p.data)
      #outBAITTYPE$pred.Trans<-plogis(outBAITTYPE$pred.mean)
      #recbait[1:3,i]<-outBAITTYPE$pred.Trans
    }else{
      recbat[1:100,i]<-NA
      #recrug[1:100,i]<-NA
      recsst[1:100,i]<-NA
      recssh[1:100,i]<-NA
      recchl[1:100,i]<-NA
      recbt[1:100,i]<-NA
      recbs[1:100,i]<-NA
      recbtsd[1:100,i]<-NA
      recsstsd[1:100,i]<-NA
      recsethour[1:100,i]<-NA
      #rechook[1:4,i]<-NA
      #recbait[1:3,i]<-NA
      recmonth[1:12,i]<-NA
      recyear[1:15,i]<-NA
    }
    
    print(i)
  }
  
  return(list(recbat=recbat, recbt=recbt, recsst=recsst, recssh=recssh, recchl=recchl, 
              recbs=recbs, recbtsd=recbtsd, recsstsd=recsstsd, recsethour=recsethour, recmonth=recmonth, recyear=recyear))
}

#with hook, no bait
BinGAMbootH<-function(data=NA,gam.formula=NA,exclude=NULL,family=NA,method=NULL){
  recbat<-matrix(nrow=100, ncol=1000, NA)
  #recrug<-matrix(nrow=100, ncol=1000, NA)
  recsst<-matrix(nrow=100, ncol=1000, NA)
  recssh<-matrix(nrow=100, ncol=1000, NA)
  recchl<-matrix(nrow=100, ncol=1000, NA)
  recbt<-matrix(nrow=100, ncol=1000, NA)
  recbs<-matrix(nrow=100, ncol=1000, NA)
  recsstsd<-matrix(nrow=100, ncol=1000, NA)
  recbtsd<-matrix(nrow=100, ncol=1000, NA)
  recsethour<-matrix(nrow=100, ncol=1000,NA)
  recyear<-matrix(nrow=15, ncol=1000, NA)
  rechook<-matrix(nrow=4, ncol=1000,NA)
  #recbait<-matrix(nrow=3,ncol=1000,NA)
  recmonth<-matrix(nrow=12, ncol=1000, NA)
  
  for(i in 1:1000){
    
    boot.sample<-data[sample(nrow(data),nrow(data),replace=TRUE),]
    
    mBoot<-tryCatch({
      gam(gam.formula,data=boot.sample,family=family,method=method)
    }, warning=function(w){
      message("handling warning:",conditionMessage(w))
      "Bad"
    },error=function(e){
      message("ignore error:",conditionMessage(e))
      "Bad"
    })
    if(mBoot[1]!="Bad"){
      #Bathymetry
      xBat<-seq(min(data$BATHYMETRY),max(data$BATHYMETRY),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BATHYMETRY=xBat,BT=mean(data$BT),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
      outBat$pred.Trans<-plogis(outBat$pred.mean)
      recbat[1:100,i]<-outBat$pred.Trans
      #BT
      xBT<-seq(min(data$BT),max(data$BT),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BT=xBT,BATHYMETRY=mean(data$BATHYMETRY),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBT<-summaryBy(pred~BT,data=p.data)
      outBT$pred.Trans<-plogis(outBT$pred.mean)
      recbt[1:100,i]<-outBT$pred.Trans
      #SST
      xSST<-seq(min(data$SST),max(data$SST),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),SST=xSST,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSST<-summaryBy(pred~SST,data=p.data)
      outSST$pred.Trans<-plogis(outSST$pred.mean)
      recsst[1:100,i]<-outSST$pred.Trans
      #BS
      xBS<-seq(min(data$BS),max(data$BS),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=xBS,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBS<-summaryBy(pred~BS,data=p.data)
      outBS$pred.Trans<-plogis(outBS$pred.mean)
      recbs[1:100,i]<-outBS$pred.Trans
      #SSH
      xSSH<-seq(min(data$SSH),max(data$SSH),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=xSSH,CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSSH<-summaryBy(pred~SSH,data=p.data)
      outSSH$pred.Trans<-plogis(outSSH$pred.mean)
      recssh[1:100,i]<-outSSH$pred.Trans
      #CHLA
      xCHLA<-seq(min(data$CHLA),max(data$CHLA),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=xCHLA,BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outCHLA<-summaryBy(pred~CHLA,data=p.data)
      outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)
      recchl[1:100,i]<-outCHLA$pred.Trans
      #SSTSD
      xSSTSD<-seq(min(data$SSTSD),max(data$SSTSD),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSTSD=xSSTSD,BTSD=mean(data$BTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
      outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)
      recsstsd[1:100,i]<-outSSTSD$pred.Trans
      #BTSD
      xBTSD<-seq(min(data$BTSD),max(data$BTSD),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=xBTSD,SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBTSD<-summaryBy(pred~BTSD,data=p.data)
      outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)
      recbtsd[1:100,i]<-outBTSD$pred.Trans
      #Set_Begin_Hour
      xSet_Begin_Hour<-seq(min(data$Set_Begin_Hour),max(data$Set_Begin_Hour),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=xSet_Begin_Hour,
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
      outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)
      recsethour[1:100,i]<-outSet_Begin_Hour$pred.Trans
      #MONTH
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outMONTH<-summaryBy(pred~MONTH,data=p.data)
      outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)
      recmonth[1:12,i]<-outMONTH$pred.Trans
      #YEAR
      outYEAR<-summaryBy(pred~YEAR,data=p.data)
      outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)
      recyear[1:15,i]<-outYEAR$pred.Trans
      #HOOK_CONFIG
      outHOOK_CONFIG<-summaryBy(pred~HOOK_CONFIG,data=p.data)
      outHOOK_CONFIG$pred.Trans<-plogis(outHOOK_CONFIG$pred.mean)
      rechook[1:4,i]<-outHOOK_CONFIG$pred.Trans
      #BAITTYPE
      #outBAITTYPE<-summaryBy(pred~BAITTYPE,data=p.data)
      #outBAITTYPE$pred.Trans<-plogis(outBAITTYPE$pred.mean)
      #recbait[1:3,i]<-outBAITTYPE$pred.Trans
    }else{
      recbat[1:100,i]<-NA
      #recrug[1:100,i]<-NA
      recsst[1:100,i]<-NA
      recssh[1:100,i]<-NA
      recchl[1:100,i]<-NA
      recbt[1:100,i]<-NA
      recbs[1:100,i]<-NA
      recbtsd[1:100,i]<-NA
      recsstsd[1:100,i]<-NA
      recsethour[1:100,i]<-NA
      rechook[1:4,i]<-NA
      #recbait[1:3,i]<-NA
      recmonth[1:12,i]<-NA
      recyear[1:15,i]<-NA
    }
    
    print(i)
  }
  
  return(list(recbat=recbat, recbt=recbt, recsst=recsst, recssh=recssh, recchl=recchl, 
              recbs=recbs, recbtsd=recbtsd, recsstsd=recsstsd, recsethour=recsethour, recmonth=recmonth, recyear=recyear, rechook=rechook))
}

#with bait, no hook
BinGAMbootB<-function(data=NA,gam.formula=NA,exclude=NULL,family=NA,method=NULL){
  recbat<-matrix(nrow=100, ncol=1000, NA)
  #recrug<-matrix(nrow=100, ncol=1000, NA)
  recsst<-matrix(nrow=100, ncol=1000, NA)
  recssh<-matrix(nrow=100, ncol=1000, NA)
  recchl<-matrix(nrow=100, ncol=1000, NA)
  recturb<-matrix(nrow=100, ncol=1000, NA)
  recbt<-matrix(nrow=100, ncol=1000, NA)
  recbs<-matrix(nrow=100, ncol=1000, NA)
  recsstsd<-matrix(nrow=100, ncol=1000, NA)
  recbtsd<-matrix(nrow=100, ncol=1000, NA)
  recsethour<-matrix(nrow=100, ncol=1000,NA)
  recyear<-matrix(nrow=15, ncol=1000, NA)
  #rechook<-matrix(nrow=4, ncol=1000,NA)
  recbait<-matrix(nrow=3,ncol=1000,NA)
  recmonth<-matrix(nrow=12, ncol=1000, NA)
  
  for(i in 1:1000){
    
    boot.sample<-data[sample(nrow(data),nrow(data),replace=TRUE),]
    
    mBoot<-tryCatch({
      gam(gam.formula,data=boot.sample,family=family,method=method)
    }, warning=function(w){
      message("handling warning:",conditionMessage(w))
      "Bad"
    },error=function(e){
      message("ignore error:",conditionMessage(e))
      "Bad"
    })
    
    vars<-attr(m$terms,"term.labels")
    
    if(mBoot[1]!="Bad"){
      #Bathymetry
      xBat<-seq(min(data$BATHYMETRY),max(data$BATHYMETRY),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BATHYMETRY=xBat,BT=mean(data$BT),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),TURB=mean(data$TURB),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
      outBat$pred.Trans<-plogis(outBat$pred.mean)
      recbat[1:100,i]<-outBat$pred.Trans
      #BT
      xBT<-seq(min(data$BT),max(data$BT),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BT=xBT,BATHYMETRY=mean(data$BATHYMETRY),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),TURB=mean(data$TURB),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBT<-summaryBy(pred~BT,data=p.data)
      outBT$pred.Trans<-plogis(outBT$pred.mean)
      recbt[1:100,i]<-outBT$pred.Trans
      #SST
      if(any(vars=="SST")){
        xSST<-seq(min(data$SST),max(data$SST),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),SST=xSST,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),BS=mean(data$BS),
                            SSH=mean(data$SSH),TURB=mean(data$TURB),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSST<-summaryBy(pred~SST,data=p.data)
        outSST$pred.Trans<-plogis(outSST$pred.mean)
        recsst[1:100,i]<-outSST$pred.Trans
      }else{
        recsst[1:100,i]<-NA}
      #BS
      xBS<-seq(min(data$BS),max(data$BS),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=xBS,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),TURB=mean(data$TURB),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBS<-summaryBy(pred~BS,data=p.data)
      outBS$pred.Trans<-plogis(outBS$pred.mean)
      recbs[1:100,i]<-outBS$pred.Trans
      #SSH
      if(any(vars=="SSH")){
        xSSH<-seq(min(data$SSH),max(data$SSH),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            SSH=xSSH,TURB=mean(data$TURB),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outSSH<-summaryBy(pred~SSH,data=p.data)
        outSSH$pred.Trans<-plogis(outSSH$pred.mean)
        recssh[1:100,i]<-outSSH$pred.Trans
      }else{
        recssh[1:100,i]<-NA}
      #CHLA
      if(any(vars=="CHLA")){
        xCHLA<-seq(min(data$CHLA),max(data$CHLA),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            SSH=mean(data$SSH),TURB=mean(data$TURB),CHLA=xCHLA,BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outCHLA<-summaryBy(pred~CHLA,data=p.data)
        outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)
        recchl[1:100,i]<-outCHLA$pred.Trans
      }else{
        recchl[1:100,i]<-NA}
      #TURB
      if(any(vars=="TURB")){
        xTURB<-seq(min(data$TURB),max(data$TURB),length=100)
        p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                            SSH=mean(data$SSH),TURB=xTURB,CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                            BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
        p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
        outTURB<-summaryBy(pred~TURB,data=p.data)
        outTURB$pred.Trans<-plogis(outTURB$pred.mean)
        recturb[1:100,i]<-outTURB$pred.Trans
      }else{
        recturb[1:100,i]<-NA}
      #SSTSD
      xSSTSD<-seq(min(data$SSTSD),max(data$SSTSD),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSTSD=xSSTSD,TURB=mean(data$TURB),BTSD=mean(data$BTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
      outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)
      recsstsd[1:100,i]<-outSSTSD$pred.Trans
      #BTSD
      xBTSD<-seq(min(data$BTSD),max(data$BTSD),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=xBTSD,TURB=mean(data$TURB),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBTSD<-summaryBy(pred~BTSD,data=p.data)
      outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)
      recbtsd[1:100,i]<-outBTSD$pred.Trans
      #Set_Begin_Hour
      xSet_Begin_Hour<-seq(min(data$Set_Begin_Hour),max(data$Set_Begin_Hour),length=100)
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),TURB=mean(data$TURB),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=xSet_Begin_Hour,
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
      outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)
      recsethour[1:100,i]<-outSet_Begin_Hour$pred.Trans
      #MONTH
      p.data<-expand.grid(YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),TURB=mean(data$TURB),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          BEGIN_SET_LATITUDE=mean(data$BEGIN_SET_LATITUDE),BEGIN_SET_LONGITUDE=mean(data$BEGIN_SET_LONGITUDE),logEFFORT=mean(data$logEFFORT))
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outMONTH<-summaryBy(pred~MONTH,data=p.data)
      outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)
      recmonth[1:12,i]<-outMONTH$pred.Trans
      #YEAR
      outYEAR<-summaryBy(pred~YEAR,data=p.data)
      outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)
      recyear[1:15,i]<-outYEAR$pred.Trans
      #HOOK_CONFIG
      #outHOOK_CONFIG<-summaryBy(pred~HOOK_CONFIG,data=p.data)
      #outHOOK_CONFIG$pred.Trans<-plogis(outHOOK_CONFIG$pred.mean)
      #rechook[1:4,i]<-outHOOK_CONFIG$pred.Trans
      #BAITTYPE
      outBAITTYPE<-summaryBy(pred~BAITTYPE,data=p.data)
      outBAITTYPE$pred.Trans<-plogis(outBAITTYPE$pred.mean)
      recbait[1:3,i]<-outBAITTYPE$pred.Trans
    }else{
      recbat[1:100,i]<-NA
      #recrug[1:100,i]<-NA
      recsst[1:100,i]<-NA
      recssh[1:100,i]<-NA
      recchl[1:100,i]<-NA
      recturb[1:100,i]<-NA
      recbt[1:100,i]<-NA
      recbs[1:100,i]<-NA
      recbtsd[1:100,i]<-NA
      recsstsd[1:100,i]<-NA
      recsethour[1:100,i]<-NA
      #rechook[1:4,i]<-NA
      recbait[1:3,i]<-NA
      recmonth[1:12,i]<-NA
      recyear[1:15,i]<-NA
    }
    
    print(i)
  }
  
  return(list(recbat=recbat, recbt=recbt, recsst=recsst, recssh=recssh, recchl=recchl, recturb=recturb,
              recbs=recbs, recbtsd=recbtsd, recsstsd=recsstsd, recsethour=recsethour, recmonth=recmonth, recyear=recyear, recbait=recbait))
}


#with hook and bait
BinGAMbootHB<-function(data=NA,gam.formula=NA,exclude=NULL,family=NA,method=NULL){
  recbat<-matrix(nrow=100, ncol=1000, NA)
  #recrug<-matrix(nrow=100, ncol=1000, NA)
  recsst<-matrix(nrow=100, ncol=1000, NA)
  recssh<-matrix(nrow=100, ncol=1000, NA)
  recchl<-matrix(nrow=100, ncol=1000, NA)
  recbt<-matrix(nrow=100, ncol=1000, NA)
  recbs<-matrix(nrow=100, ncol=1000, NA)
  recsstsd<-matrix(nrow=100, ncol=1000, NA)
  recbtsd<-matrix(nrow=100, ncol=1000, NA)
  recsethour<-matrix(nrow=100, ncol=1000,NA)
  recyear<-matrix(nrow=15, ncol=1000, NA)
  rechook<-matrix(nrow=4, ncol=1000,NA)
  recbait<-matrix(nrow=3,ncol=1000,NA)
  recmonth<-matrix(nrow=12, ncol=1000, NA)
  
  for(i in 1:1000){
    
    boot.sample<-data[sample(nrow(data),nrow(data),replace=TRUE),]
    
    mBoot<-tryCatch({
      gam(gam.formula,data=boot.sample,family=family,method=method)
    }, warning=function(w){
      message("handling warning:",conditionMessage(w))
      "Bad"
    },error=function(e){
      message("ignore error:",conditionMessage(e))
      "Bad"
    })
    if(mBoot[1]!="Bad"){
      #Bathymetry
      xBat<-seq(min(data$BATHYMETRY),max(data$BATHYMETRY),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BATHYMETRY=xBat,BT=mean(data$BT),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBat<-summaryBy(pred~BATHYMETRY,data=p.data)
      outBat$pred.Trans<-plogis(outBat$pred.mean)
      recbat[1:100,i]<-outBat$pred.Trans
      #BT
      xBT<-seq(min(data$BT),max(data$BT),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BT=xBT,BATHYMETRY=mean(data$BATHYMETRY),SST=mean(data$SST),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBT<-summaryBy(pred~BT,data=p.data)
      outBT$pred.Trans<-plogis(outBT$pred.mean)
      recbt[1:100,i]<-outBT$pred.Trans
      #SST
      xSST<-seq(min(data$SST),max(data$SST),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),SST=xSST,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),BS=mean(data$BS),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSST<-summaryBy(pred~SST,data=p.data)
      outSST$pred.Trans<-plogis(outSST$pred.mean)
      recsst[1:100,i]<-outSST$pred.Trans
      #BS
      xBS<-seq(min(data$BS),max(data$BS),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=xBS,BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBS<-summaryBy(pred~BS,data=p.data)
      outBS$pred.Trans<-plogis(outBS$pred.mean)
      recbs[1:100,i]<-outBS$pred.Trans
      #SSH
      xSSH<-seq(min(data$SSH),max(data$SSH),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=xSSH,CHLA=mean(data$CHLA),BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSSH<-summaryBy(pred~SSH,data=p.data)
      outSSH$pred.Trans<-plogis(outSSH$pred.mean)
      recssh[1:100,i]<-outSSH$pred.Trans
      #CHLA
      xCHLA<-seq(min(data$CHLA),max(data$CHLA),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSH=mean(data$SSH),CHLA=xCHLA,BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outCHLA<-summaryBy(pred~CHLA,data=p.data)
      outCHLA$pred.Trans<-plogis(outCHLA$pred.mean)
      recchl[1:100,i]<-outCHLA$pred.Trans
      #SSTSD
      xSSTSD<-seq(min(data$SSTSD),max(data$SSTSD),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          SSTSD=xSSTSD,BTSD=mean(data$BTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSSTSD<-summaryBy(pred~SSTSD,data=p.data)
      outSSTSD$pred.Trans<-plogis(outSSTSD$pred.mean)
      recsstsd[1:100,i]<-outSSTSD$pred.Trans
      #BTSD
      xBTSD<-seq(min(data$BTSD),max(data$BTSD),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=xBTSD,SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outBTSD<-summaryBy(pred~BTSD,data=p.data)
      outBTSD$pred.Trans<-plogis(outBTSD$pred.mean)
      recbtsd[1:100,i]<-outBTSD$pred.Trans
      #Set_Begin_Hour
      xSet_Begin_Hour<-seq(min(data$Set_Begin_Hour),max(data$Set_Begin_Hour),length=100)
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=xSet_Begin_Hour,
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outSet_Begin_Hour<-summaryBy(pred~Set_Begin_Hour,data=p.data)
      outSet_Begin_Hour$pred.Trans<-plogis(outSet_Begin_Hour$pred.mean)
      recsethour[1:100,i]<-outSet_Begin_Hour$pred.Trans
      #MONTH
      p.data<-expand.grid(Dayn=mean(data$Dayn),YEAR=unique(data$YEAR),MONTH=levels(data$MONTH),BS=mean(data$BS),BATHYMETRY=mean(data$BATHYMETRY),BT=mean(data$BT),SST=mean(data$SST),
                          BTSD=mean(data$BTSD),SSTSD=mean(data$SSTSD),SSH=mean(data$SSH),CHLA=mean(data$CHLA),BAITTYPE=levels(data$BAITTYPE),HOOK_CONFIG=levels(data$HOOK_CONFIG),Set_Begin_Hour=mean(data$Set_Begin_Hour),
                          Lat_Lon1="30_-80",logEFFORT=mean(data$logEFFORT))#the Lat_Lon1 value I choose doesn't matter because it is excluded in predict
      p.data<-cbind(p.data,pred=predict(mBoot,type="link",newdata=p.data,exclude=exclude))
      outMONTH<-summaryBy(pred~MONTH,data=p.data)
      outMONTH$pred.Trans<-plogis(outMONTH$pred.mean)
      recmonth[1:12,i]<-outMONTH$pred.Trans
      #YEAR
      outYEAR<-summaryBy(pred~YEAR,data=p.data)
      outYEAR$pred.Trans<-plogis(outYEAR$pred.mean)
      recyear[1:15,i]<-outYEAR$pred.Trans
      #HOOK_CONFIG
      outHOOK_CONFIG<-summaryBy(pred~HOOK_CONFIG,data=p.data)
      outHOOK_CONFIG$pred.Trans<-plogis(outHOOK_CONFIG$pred.mean)
      rechook[1:4,i]<-outHOOK_CONFIG$pred.Trans
      #BAITTYPE
      outBAITTYPE<-summaryBy(pred~BAITTYPE,data=p.data)
      outBAITTYPE$pred.Trans<-plogis(outBAITTYPE$pred.mean)
      recbait[1:3,i]<-outBAITTYPE$pred.Trans
    }else{
      recbat[1:100,i]<-NA
      #recrug[1:100,i]<-NA
      recsst[1:100,i]<-NA
      recssh[1:100,i]<-NA
      recchl[1:100,i]<-NA
      recbt[1:100,i]<-NA
      recbs[1:100,i]<-NA
      recbtsd[1:100,i]<-NA
      recsstsd[1:100,i]<-NA
      recsethour[1:100,i]<-NA
      rechook[1:4,i]<-NA
      recbait[1:3,i]<-NA
      recmonth[1:12,i]<-NA
      recyear[1:15,i]<-NA
    }
    
    print(i)
  }
  
  return(list(recbat=recbat, recbt=recbt, recsst=recsst, recssh=recssh, recchl=recchl, 
              recbs=recbs, recbtsd=recbtsd, recsstsd=recsstsd, recsethour=recsethour, recmonth=recmonth, recyear=recyear, rechook=rechook, recbait=recbait))
}

CIfuncFix<-function(data=NA){
  CIrec<-NULL
  for(i in 1:nrow(data)){
    datrow<-data[i,]
    CI<-1.96*sd(datrow)
    CIrec<-c(CIrec,CI)
  }
  return(CIrec)
}



#######
#SB
#######
#read in model data output

#no hook or bait is in model so use BinGAMboot
BinGAMbootout<-BinGAMboot(data=sb_datanona,gam.formula = formula,exclude=NULL,family="binomial",method="GCV.Cp")
#save bootstrap output as "speciesname_BinGAMbootout.RData"

batbootmat<-BinGAMbootout$recbat[, colSums(is.na(BinGAMbootout$recbat)) != nrow(BinGAMbootout$recbat)]
btbootmat<-BinGAMbootout$recbt[, colSums(is.na(BinGAMbootout$recbt)) != nrow(BinGAMbootout$recbt)]
sstbootmat<-BinGAMbootout$recsst[, colSums(is.na(BinGAMbootout$recsst)) != nrow(BinGAMbootout$recsst)]
bsbootmat<-BinGAMbootout$recbs[, colSums(is.na(BinGAMbootout$recbs)) != nrow(BinGAMbootout$recbs)]
chlbootmat<-BinGAMbootout$recchl[, colSums(is.na(BinGAMbootout$recchl)) != nrow(BinGAMbootout$recchl)]
sshbootmat<-BinGAMbootout$recssh[, colSums(is.na(BinGAMbootout$recssh)) != nrow(BinGAMbootout$recssh)]
#btsdbootmat<-BinGAMbootout$recbtsd[, colSums(is.na(BinGAMbootout$recbtsd)) != nrow(BinGAMbootout$recbtsd)]
#sstsdbootmat<-BinGAMbootout$recsstsd[, colSums(is.na(BinGAMbootout$recsstsd)) != nrow(BinGAMbootout$recsstsd)]
monthbootmat<-BinGAMbootout$recmonth[, colSums(is.na(BinGAMbootout$recmonth)) != nrow(BinGAMbootout$recmonth)]
yearbootmat<-BinGAMbootout$recyear[, colSums(is.na(BinGAMbootout$recyear)) != nrow(BinGAMbootout$recyear)]
#sethourbootmat<-BinGAMbootout$recsethour[, colSums(is.na(BinGAMbootout$recsethour)) != nrow(BinGAMbootout$recsethour)]
#hookbootmat<-BinGAMbootout$rechook[, colSums(is.na(BinGAMbootout$rechook)) != nrow(BinGAMbootout$rechook)]
#baitbootmat<-BinGAMbootout$recbait[, colSums(is.na(BinGAMbootout$recbait)) != nrow(BinGAMbootout$recbait)]


outbootCIbat<-CIfuncFix(batbootmat)
outbootCIbt<-CIfuncFix(btbootmat)
outbootCIsst<-CIfuncFix(sstbootmat)
outbootCIbs<-CIfuncFix(bsbootmat)
outbootCIchl<-CIfuncFix(chlbootmat)
outbootCIssh<-CIfuncFix(sshbootmat)
#outbootCIbtsd<-CIfuncFix(btsdbootmat)
#outbootCIsstsd<-CIfuncFix(sstsdbootmat)
outbootCImonth<-CIfuncFix(monthbootmat)
outbootCIyear<-CIfuncFix(yearbootmat)
#outbootCIsethour<-CIfuncFix(sethourbootmat)
#outbootCIhook<-CIfuncFix(hookbootmat)
#outbootCIbait<-CIfuncFix(baitbootmat)


#add and subtract CI from mean
outbatupperCI<-outBat$pred.Trans+outbootCIbat
outbatlowerCI<-outBat$pred.Trans-outbootCIbat
outbtupperCI<-outBT$pred.Trans+outbootCIbt
outbtlowerCI<-outBT$pred.Trans-outbootCIbt
outsstupperCI<-outSST$pred.Trans+outbootCIsst
outsstlowerCI<-outSST$pred.Trans-outbootCIsst
outbsupperCI<-outBS$pred.Trans+outbootCIbs
outbslowerCI<-outBS$pred.Trans-outbootCIbs
outchlupperCI<-outCHLA$pred.Trans+outbootCIchl
outchllowerCI<-outCHLA$pred.Trans-outbootCIchl
outsshupperCI<-outSSH$pred.Trans+outbootCIssh
outsshlowerCI<-outSSH$pred.Trans-outbootCIssh
#outbtsdupperCI<-outBTSD$pred.Trans+outbootCIbtsd
#outbtsdlowerCI<-outBTSD$pred.Trans-outbootCIbtsd
#outsstsdupperCI<-outSSTSD$pred.Trans+outbootCIsstsd
#outsstsdlowerCI<-outSSTSD$pred.Trans-outbootCIsstsd
outmonthupperCI<-outMONTH$pred.Trans+outbootCImonth
outmonthlowerCI<-outMONTH$pred.Trans-outbootCImonth
outyearupperCI<-outYEAR$pred.Trans+outbootCIyear
outyearlowerCI<-outYEAR$pred.Trans-outbootCIyear
#outsethourupperCI<-outSet_Begin_Hour$pred.Trans+outbootCIsethour
#outsethourlowerCI<-outSet_Begin_Hour$pred.Trans-outbootCIsethour
#outhookupperCI<-outHOOK_CONFIG$pred.Trans+outbootCIhook
#outhooklowerCI<-outHOOK_CONFIG$pred.Trans-outbootCIhook
#outbaitupperCI<-outBAITTYPE$pred.Trans+outbootCIbait
#outbaitlowerCI<-outBAITTYPE$pred.Trans-outbootCIbait


#marginal mean plots with errors
tiff("sb_response_curvestiff.tif",width=8.5,height=6,units="in",res=300)
par(mfrow=c(3,3))
par(mar=c(5,1,1,2),oma=c(0,3.5,0,0))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1),ylab="",xlab="Bathymetry (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBat,rev(xBat)),y=c(outbatlowerCI,rev(outbatupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBT,rev(xBT)),y=c(outbtlowerCI,rev(outbtupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~SST, data=outSST,type="l",ylim=c(0,1),ylab="",xlab="SST (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSST,rev(xSST)),y=c(outsstlowerCI,rev(outsstupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1),ylab="",xlab="Bottom Salinity (ppt)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBS,rev(xBS)),y=c(outbslowerCI,rev(outbsupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
mtext(side=2,line=3,"Probability of Occurrence")
plot(pred.Trans~CHLA, data=outCHLA,type="l",ylim=c(0,1),ylab="",xlab=expression(paste("Chlorophyll a (mg m"^"-3",")")),cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xCHLA,rev(xCHLA)),y=c(outchllowerCI,rev(outchlupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~SSH, data=outSSH,type="l",ylim=c(0,1),ylab="",xlab="SSH (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSSH,rev(xSSH)),y=c(outsshlowerCI,rev(outsshupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature SD (ºC)",cex.lab=1.25,cex.axis=1.15)
#polygon(x=c(xBTSD,rev(xBTSD)),y=c(outbtsdlowerCI,rev(outbtsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,1),ylab="",xlab="SST SD (ºC)",cex.lab=1.25,cex.axis=1.15)
#polygon(x=c(xSSTSD,rev(xSSTSD)),y=c(outsstsdlowerCI,rev(outsstsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,1),ylab="",xlab="Begin Set Time (hr)",cex.lab=1.25,cex.axis=1.15)
#polygon(x=c(xSet_Begin_Hour,rev(xSet_Begin_Hour)),y=c(outsethourlowerCI,rev(outsethourupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~c(1:4), data=outHOOK_CONFIG,type="b",ylim=c(0,1),xlab="Hook Configuration",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
#axis(side=1,at=c(1:4),c(">16/0C","<=16/0C",">=12/0J","<12/0J"),cex=0.8)
#polygon(x=c(1:4,rev(1:4)),y=c(outhooklowerCI,rev(outhookupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~c(1:3), data=outBAITTYPE,type="b",ylim=c(0,1),xlab="Bait Type",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
#axis(side=1,at=c(1:3),c("Elasmo","Teleost","Unknown"),cex=0.8)
#polygon(x=c(1:3,rev(1:3)),y=c(outbaitlowerCI,rev(outbaitupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~c(1:12), data=outMONTH,type="b",ylim=c(0,1),xlab="Month",ylab="",cex.lab=1.25,cex.axis=1.15,xaxt="n")
axis(side=1,at=c(1,4,7,10),c("Jan","Apr","Jul","Oct"),cex.axis=1.15)
polygon(x=c(1:12,rev(1:12)),y=c(outmonthlowerCI,rev(outmonthupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~c(1:15), data=outYEAR,type="b",ylim=c(0,1),xlab="Year",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
axis(side=1,at=c(1,6,11),c("2005","2010","2015"),cex.axis=1.15)
polygon(x=c(1:15,rev(1:15)),y=c(outyearlowerCI,rev(outyearupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
dev.off()


#######
#DS
#######
#read in model data output

#hook and bait are not in model so use BinGAMboot
BinGAMbootout<-BinGAMboot(data=ds_datanona,gam.formula = formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",family="quasibinomial",method="GCV.Cp")
#save bootstrap output as "speciesname_BinGAMbootout.RData"

batbootmat<-BinGAMbootout$recbat[, colSums(is.na(BinGAMbootout$recbat)) != nrow(BinGAMbootout$recbat)]
btbootmat<-BinGAMbootout$recbt[, colSums(is.na(BinGAMbootout$recbt)) != nrow(BinGAMbootout$recbt)]
bsbootmat<-BinGAMbootout$recbs[, colSums(is.na(BinGAMbootout$recbs)) != nrow(BinGAMbootout$recbs)]
chlbootmat<-BinGAMbootout$recchl[, colSums(is.na(BinGAMbootout$recchl)) != nrow(BinGAMbootout$recchl)]
btsdbootmat<-BinGAMbootout$recbtsd[, colSums(is.na(BinGAMbootout$recbtsd)) != nrow(BinGAMbootout$recbtsd)]
sstsdbootmat<-BinGAMbootout$recsstsd[, colSums(is.na(BinGAMbootout$recsstsd)) != nrow(BinGAMbootout$recsstsd)]
monthbootmat<-BinGAMbootout$recmonth[, colSums(is.na(BinGAMbootout$recmonth)) != nrow(BinGAMbootout$recmonth)]
yearbootmat<-BinGAMbootout$recyear[, colSums(is.na(BinGAMbootout$recyear)) != nrow(BinGAMbootout$recyear)]
sethourbootmat<-BinGAMbootout$recsethour[, colSums(is.na(BinGAMbootout$recsethour)) != nrow(BinGAMbootout$recsethour)]


outbootCIbat<-CIfuncFix(batbootmat)
outbootCIbt<-CIfuncFix(btbootmat)
outbootCIbs<-CIfuncFix(bsbootmat)
outbootCIchl<-CIfuncFix(chlbootmat)
outbootCIbtsd<-CIfuncFix(btsdbootmat)
outbootCIsstsd<-CIfuncFix(sstsdbootmat)
outbootCImonth<-CIfuncFix(monthbootmat)
outbootCIyear<-CIfuncFix(yearbootmat)
outbootCIsethour<-CIfuncFix(sethourbootmat)


#add and subtract CI from mean
outbatupperCI<-outBat$pred.Trans+outbootCIbat
outbatlowerCI<-outBat$pred.Trans-outbootCIbat
outbtupperCI<-outBT$pred.Trans+outbootCIbt
outbtlowerCI<-outBT$pred.Trans-outbootCIbt
outbsupperCI<-outBS$pred.Trans+outbootCIbs
outbslowerCI<-outBS$pred.Trans-outbootCIbs
outchlupperCI<-outCHLA$pred.Trans+outbootCIchl
outchllowerCI<-outCHLA$pred.Trans-outbootCIchl
outbtsdupperCI<-outBTSD$pred.Trans+outbootCIbtsd
outbtsdlowerCI<-outBTSD$pred.Trans-outbootCIbtsd
outsstsdupperCI<-outSSTSD$pred.Trans+outbootCIsstsd
outsstsdlowerCI<-outSSTSD$pred.Trans-outbootCIsstsd
outmonthupperCI<-outMONTH$pred.Trans+outbootCImonth
outmonthlowerCI<-outMONTH$pred.Trans-outbootCImonth
outyearupperCI<-outYEAR$pred.Trans+outbootCIyear
outyearlowerCI<-outYEAR$pred.Trans-outbootCIyear
outsethourupperCI<-outSet_Begin_Hour$pred.Trans+outbootCIsethour
outsethourlowerCI<-outSet_Begin_Hour$pred.Trans-outbootCIsethour


#marginal means plot with errors
tiff("ds_response_curvestiff.tif",width=8,height=6,units="in",res=300)
par(mfrow=c(3,3))
par(mar=c(5,1,1,2),oma=c(0,3.5,0,0))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1),ylab="",xlab="Bathymetry (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBat,rev(xBat)),y=c(outbatlowerCI,rev(outbatupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBT,rev(xBT)),y=c(outbtlowerCI,rev(outbtupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1),ylab="",xlab="Bottom Salinity (ppt)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBS,rev(xBS)),y=c(outbslowerCI,rev(outbsupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~CHLA, data=outCHLA,type="l",ylim=c(0,1),ylab="",xlab=expression(paste("Chlorophyll a (mg m"^"-3",")")),cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xCHLA,rev(xCHLA)),y=c(outchllowerCI,rev(outchlupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
mtext(side=2,line=3,"Probability of Occurrence")
plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature SD (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBTSD,rev(xBTSD)),y=c(outbtsdlowerCI,rev(outbtsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,1),ylab="",xlab="SST SD (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSSTSD,rev(xSSTSD)),y=c(outsstsdlowerCI,rev(outsstsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,1),ylab="",xlab="Begin Set Time (hr)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSet_Begin_Hour,rev(xSet_Begin_Hour)),y=c(outsethourlowerCI,rev(outsethourupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
#plot(pred.Trans~c(1:4), data=outHOOK_CONFIG,type="b",ylim=c(0,1),xlab="Hook Configuration",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
#axis(side=1,at=c(1:4),c(">16/0C","<=16/0C",">=12/0J","<12/0J"))
#polygon(x=c(1:4,rev(1:4)),y=c(outhooklowerCI,rev(outhookupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~c(1:12), data=outMONTH,type="b",ylim=c(0,1),xlab="Month",ylab="",cex.lab=1.25,cex.axis=1.15,xaxt="n")
axis(side=1,at=c(1,4,7,10),c("Jan","Apr","Jul","Oct"),cex.axis=1.15)
polygon(x=c(1:12,rev(1:12)),y=c(outmonthlowerCI,rev(outmonthupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~c(1:15), data=outYEAR,type="b",ylim=c(0,1),xlab="Year",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
axis(side=1,at=c(1,6,11),c("2005","2010","2015"),cex.axis=1.15)
polygon(x=c(1:15,rev(1:15)),y=c(outyearlowerCI,rev(outyearupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
dev.off()


#######
#SHH
#######
#read in model data output

#hook is in model so use BinGAMbootB
BinGAMbootout<-BinGAMbootB(data=shh_datanona,gam.formula = formula,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",family="quasibinomial",method="GCV.Cp")
#save bootstrap output as "speciesname_BinGAMbootout.RData"

batbootmat<-BinGAMbootout$recbat[, colSums(is.na(BinGAMbootout$recbat)) != nrow(BinGAMbootout$recbat)]
btbootmat<-BinGAMbootout$recbt[, colSums(is.na(BinGAMbootout$recbt)) != nrow(BinGAMbootout$recbt)]
sstbootmat<-BinGAMbootout$recsst[, colSums(is.na(BinGAMbootout$recsst)) != nrow(BinGAMbootout$recsst)]
bsbootmat<-BinGAMbootout$recbs[, colSums(is.na(BinGAMbootout$recbs)) != nrow(BinGAMbootout$recbs)]
#chlbootmat<-BinGAMbootout$recchl[, colSums(is.na(BinGAMbootout$recchl)) != nrow(BinGAMbootout$recchl)]
turbbootmat<-BinGAMbootout$recturb[, colSums(is.na(BinGAMbootout$recturb)) != nrow(BinGAMbootout$recturb)]
sshbootmat<-BinGAMbootout$recssh[, colSums(is.na(BinGAMbootout$recssh)) != nrow(BinGAMbootout$recssh)]
btsdbootmat<-BinGAMbootout$recbtsd[, colSums(is.na(BinGAMbootout$recbtsd)) != nrow(BinGAMbootout$recbtsd)]
sstsdbootmat<-BinGAMbootout$recsstsd[, colSums(is.na(BinGAMbootout$recsstsd)) != nrow(BinGAMbootout$recsstsd)]
monthbootmat<-BinGAMbootout$recmonth[, colSums(is.na(BinGAMbootout$recmonth)) != nrow(BinGAMbootout$recmonth)]
sethourbootmat<-BinGAMbootout$recsethour[, colSums(is.na(BinGAMbootout$recsethour)) != nrow(BinGAMbootout$recsethour)]
#hookbootmat<-BinGAMbootout$rechook[, colSums(is.na(BinGAMbootout$rechook)) != nrow(BinGAMbootout$rechook)]
baitbootmat<-BinGAMbootout$recbait[, colSums(is.na(BinGAMbootout$recbait)) != nrow(BinGAMbootout$recbait)]
yearbootmat<-BinGAMbootout$recyear[, colSums(is.na(BinGAMbootout$recyear)) != nrow(BinGAMbootout$recyear)]


outbootCIbat<-CIfuncFix(batbootmat)
outbootCIbt<-CIfuncFix(btbootmat)
outbootCIsst<-CIfuncFix(sstbootmat)
outbootCIbs<-CIfuncFix(bsbootmat)
#outbootCIchl<-CIfuncFix(chlbootmat)
outbootCIturb<-CIfuncFix(turbbootmat)
outbootCIssh<-CIfuncFix(sshbootmat)
outbootCIbtsd<-CIfuncFix(btsdbootmat)
outbootCIsstsd<-CIfuncFix(sstsdbootmat)
outbootCImonth<-CIfuncFix(monthbootmat)
outbootCIsethour<-CIfuncFix(sethourbootmat)
#outbootCIhook<-CIfuncFix(hookbootmat)
outbootCIbait<-CIfuncFix(baitbootmat)
outbootCIyear<-CIfuncFix(yearbootmat)


#add and subtract CI from mean
outbatupperCI<-outBat$pred.Trans+outbootCIbat
outbatlowerCI<-outBat$pred.Trans-outbootCIbat
outbtupperCI<-outBT$pred.Trans+outbootCIbt
outbtlowerCI<-outBT$pred.Trans-outbootCIbt
outsstupperCI<-outSST$pred.Trans+outbootCIsst
outsstlowerCI<-outSST$pred.Trans-outbootCIsst
outbsupperCI<-outBS$pred.Trans+outbootCIbs
outbslowerCI<-outBS$pred.Trans-outbootCIbs
#outchlupperCI<-outCHLA$pred.Trans+outbootCIchl
#outchllowerCI<-outCHLA$pred.Trans-outbootCIchl
outturbupperCI<-outTURB$pred.Trans+outbootCIturb
outturblowerCI<-outTURB$pred.Trans-outbootCIturb
outsshupperCI<-outSSH$pred.Trans+outbootCIssh
outsshlowerCI<-outSSH$pred.Trans-outbootCIssh
outbtsdupperCI<-outBTSD$pred.Trans+outbootCIbtsd
outbtsdlowerCI<-outBTSD$pred.Trans-outbootCIbtsd
outsstsdupperCI<-outSSTSD$pred.Trans+outbootCIsstsd
outsstsdlowerCI<-outSSTSD$pred.Trans-outbootCIsstsd
outmonthupperCI<-outMONTH$pred.Trans+outbootCImonth
outmonthlowerCI<-outMONTH$pred.Trans-outbootCImonth
outsethourupperCI<-outSet_Begin_Hour$pred.Trans+outbootCIsethour
outsethourlowerCI<-outSet_Begin_Hour$pred.Trans-outbootCIsethour
#outhookupperCI<-outHOOK_CONFIG$pred.Trans+outbootCIhook
#outhooklowerCI<-outHOOK_CONFIG$pred.Trans-outbootCIhook
outbaitupperCI<-outBAIT$pred.Trans+outbootCIbait
outbaitlowerCI<-outBAIT$pred.Trans-outbootCIbait
outyearupperCI<-outYEAR$pred.Trans+outbootCIyear
outyearlowerCI<-outYEAR$pred.Trans-outbootCIyear


#marginal means plots with errors
tiff("shh_response_curvestiff.tif",width=8.5,height=6,units="in",res=300)
par(mfrow=c(3,4))
par(mar=c(5,1,1,1.5),oma=c(0,3.5,0,0))
plot(pred.Trans~BATHYMETRY, data=outBat,type="l",ylim=c(0,1),ylab="",xlab="Bathymetry (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBat,rev(xBat)),y=c(outbatlowerCI,rev(outbatupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BT, data=outBT,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBT,rev(xBT)),y=c(outbtlowerCI,rev(outbtupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~SST, data=outSST,type="l",ylim=c(0,1),ylab="",xlab="SST (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSST,rev(xSST)),y=c(outsstlowerCI,rev(outsstupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BS, data=outBS,type="l",ylim=c(0,1),ylab="",xlab="Bottom Salinity (ppt)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBS,rev(xBS)),y=c(outbslowerCI,rev(outbsupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~TURB, data=outTURB,type="l",ylim=c(0,1),ylab="",xlab="Turbidity (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xTURB,rev(xTURB)),y=c(outturblowerCI,rev(outturbupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
mtext(side=2,line=3,"Probability of Occurrence")
plot(pred.Trans~SSH, data=outSSH,type="l",ylim=c(0,1),ylab="",xlab="SSH (m)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSSH,rev(xSSH)),y=c(outsshlowerCI,rev(outsshupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~BTSD, data=outBTSD,type="l",ylim=c(0,1),ylab="",xlab="Bottom Temperature SD (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xBTSD,rev(xBTSD)),y=c(outbtsdlowerCI,rev(outbtsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~SSTSD, data=outSSTSD,type="l",ylim=c(0,1),ylab="",xlab="SST SD (ºC)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSSTSD,rev(xSSTSD)),y=c(outsstsdlowerCI,rev(outsstsdupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~Set_Begin_Hour, data=outSet_Begin_Hour,type="l",ylim=c(0,1),ylab="",xlab="Begin Set Time (hr)",cex.lab=1.25,cex.axis=1.15)
polygon(x=c(xSet_Begin_Hour,rev(xSet_Begin_Hour)),y=c(outsethourlowerCI,rev(outsethourupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(c(NA,outBAIT$pred.Trans)~c(1:4),type="p",ylim=c(-0.05,1),xlab="Bait Type",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15,xlim=c(1.75,4.25))
axis(side=1,at=c(2:4),c("Elasmo","Teleost","Unknown"),cex.axis=1.15,gap.axis=0.3)
arrows(y0=outbaitlowerCI,y1=outbaitupperCI, 
       x0=c(2:4),x1=c(2:4),code=3, angle=90,length=.1)
plot(pred.Trans~c(1:12), data=outMONTH,type="b",ylim=c(0,1),xlab="Month",ylab="",cex.lab=1.25,cex.axis=1.15,xaxt="n")
axis(side=1,at=c(1,4,7,10),c("Jan","Apr","Jul","Oct"),cex.axis=1.15)
polygon(x=c(1:12,rev(1:12)),y=c(outmonthlowerCI,rev(outmonthupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
plot(pred.Trans~c(1:15), data=outYEAR,type="b",ylim=c(0,1),xlab="Year",ylab="",xaxt="n",cex.lab=1.25,cex.axis=1.15)
axis(side=1,at=c(1,6,11),c("2005","2010","2015"),cex.axis=1.15)
polygon(x=c(1:15,rev(1:15)),y=c(outyearlowerCI,rev(outyearupperCI)),col=rgb(0,0,0,alpha=0.4),border=NA)
dev.off()

###############
#Predicting
###############
setwd("~/Enviornmental_Data/USmap")
useez<-readOGR(".","US_Fed_Waters")
eastcoastmask<-readOGR(".","east_coast_shp_to_mask_eez")
useez<-spTransform(useez,"+init=epsg:4326")
eastcoastmask<-spTransform(eastcoastmask,"+init=epsg:4326")
#crop out other parts of eez, only keep east coast eez (crop takes areas outside extent of an object [eastcoastmask] and ignores them)
useez<-crop(useez,eastcoastmask)
noestuaries<-readOGR(".","no_estuaries_wholeeastcoast")#need to use this one because it doesn't have the section that dips further south which gets into finished map and it covers entire map
noestuaries<-spTransform(noestuaries,"+init=epsg:4326")
useezsimple<-readOGR(".","US_State_Fed_waters_simple_dissolve")#us eez but also includes areas inland of state waters line
useezsimple<-spTransform(useezsimple,"+init=epsg:4326")
#remove useez too far west (gulf of mexico)
useezsimple<-crop(useezsimple,eastcoastmask)

setwd("~/Enviornmental_Data/USmap")
fisherykud95<-readOGR(".","fisherykud95_bllop")#use dissolved shp because it is smaller size

setwd("~/Enviornmental_Data/Mid_Atlantic_closure")
midclose<-readOGR(".","MIDClosure")
midclose<-spTransform(midclose,"+init=epsg:4326")

setwd("~/Enviornmental_Data/Prediction_Rasters/BLLOP_rasters/raster2016_2018")
depthraster16_18<-raster("depthraster16_18_hycom.tif")
rugosityraster16_18<-raster("rugosityraster16_18_hycom.tif")

theme_set(theme_bw())
#https://www.r-spatial.org/r/2018/10/25/ggplot2-sf.html
midclosedata<- st_as_sf(midclose)
midclosedata$FMC<-as.factor("South Atlantic")
useezdata<-st_as_sf(useez)
fisherykuddata<-st_as_sf(fisherykud95)
fisherykuddata$ID<-"map"
makeMap<-function(habrast=NA,type=NA,monthabr=NA,species=NA,maxval=NA){
  habrast<-mask(habrast,mask=fisherykud95)
  r.df <- as.data.frame(rasterToPoints(habrast))
  names(r.df) <- c('Longitude', 'Latitude', 'Occurrence Probability')
  world<-ne_countries(scale="medium",returnclass = "sf")
  mp<-ggplot(data=world) + 
    geom_sf(color="black",fill="tan") +
    coord_sf(xlim=c(-81.5, -67),ylim=c(23,39),expand=FALSE) +
    geom_raster(data=r.df, aes(x=Longitude, y=Latitude, fill=`Occurrence Probability`)) +
    theme(axis.title.x = element_blank(), panel.grid = element_blank())+
    theme(axis.title.y = element_blank())+
    scale_fill_viridis(option="C",limits=c(0,maxval)) +
    geom_sf(data = midclosedata, aes(colour = "FMC"), fill = NA,size=1) +
    geom_sf(data = fisherykuddata, aes(colour = "ID"), fill = NA,size=1) +
    geom_sf(data = useezdata, aes(colour = "Jurisdicti"), fill = NA) +
    #scale_colour_manual(values = c("FMC" = "green","ID"="cyan3","Jurisdicti" = "black"), name = NULL,
    #                    labels = c("FMC" ="Mid Atlantic","ID"="Fishery Domain","Jurisdicti" ="U.S. EEZ"),
    #                    guide = guide_legend(override.aes = list(shape = NA),reverse = F)) + #for some reason PLLOP one this is needed, but when use it for BLLOP it puts eez and closure above scale bar, so leave this line out
    scale_colour_manual(values = c("Jurisdicti"="black","ID"="cyan3","FMC"="green"), name = NULL,
                        labels = c("Jurisdicti"="U.S. EEZ","ID"="Fishery Domain","FMC"="Mid Atlantic"),
                        guide = guide_legend(override.aes = list(shape = NA),reverse = T)) +
    coord_sf(xlim=c(-81.5, -67),ylim=c(23,39),expand=FALSE) +
    #annotate("text",x=-80,y=38.5,label="b",size=6) + #if I want to add letter in map
    theme(text = element_text(size = 13)) + #if I want to change size of text in map
    annotation_scale(location="br" ,width_hint=0.25,style="bar",unit_category="metric",text_cex=0.85) +
    annotation_north_arrow(location = "tl", which_north = "true", height=unit(0.75,"cm"),width=unit(0.6,"cm"),style = north_arrow_orienteering)
  
  ggsave(filename = paste(species,monthabr,type,".pdf",sep=""),plot=mp,width=8,height=6,units="in",dpi=300)
  ggsave(filename = paste("png",species,monthabr,type,".png",sep=""),plot=mp,width=8,height=6,units="in",dpi=300)
  #ggsave(filename = paste(species,".pdf",sep=""),plot=mp)
  #ggsave(filename = "blah.pdf",plot=mp)
}

#PPP (Prediction Probability of Presence)
PPPraster<-function(month=NA,monthabr=NA,data=NA,exclude=NULL,species=NULL,maxval=NA,hooks=NA,bait=NA,excludeYear=NA){
  newraster<-setValues(depthraster16_18,NA) #create blank raster with correct parameters
  newrasterupper<-setValues(depthraster16_18,NA) #create blank raster with correct parameters
  newrasterlower<-setValues(depthraster16_18,NA) #create blank raster with correct parameters
  
  #Creates raster of lat and raster of lon to put into p.data
  latraster<-init(depthraster16_18,'y')
  lonraster<-init(depthraster16_18,'x')
  
  #no need to read in depth and rugosity rasters everytime (no time component)
  setwd("~/Enviornmental_Data/Prediction_Rasters/BLLOP_rasters/raster2016_2018")
  monthbt<-raster(paste(monthabr,"BT16_18_hycom",".tif",sep=""))
  monthbs<-raster(paste(monthabr,"BS16_18_hycom",".tif",sep=""))
  monthsst<-raster(paste(monthabr,"SST16_18_hycom",".tif",sep=""))
  monthssh<-raster(paste(monthabr,"SSH16_18_hycom",".tif",sep=""))
  monthchla<-raster(paste(monthabr,"CHLA16_18_hycom",".tif",sep=""))
  monthbtsd<-raster(paste(monthabr,"BTSD16_18_hycom",".tif",sep=""))
  monthsstsd<-raster(paste(monthabr,"SSTSD16_18_hycom",".tif",sep=""))
  monthturb<-raster(paste(monthabr,"Turb16_18_hycom",".tif",sep=""))
  
  dayval<-mean(data$Day[which(data$MONTH==month)])
  
  p.data<-data.frame(Day=mean(data$Day),MONTH=month,BEGIN_SET_LATITUDE=values(latraster),BEGIN_SET_LONGITUDE=values(lonraster),Set_Begin_Hour=mean(data$Set_Begin_Hour),BATHYMETRY=values(depthraster16_18),RUGOSITY=values(rugosityraster16_18),CHLA=values(monthchla),SST=values(monthsst),SSH=values(monthssh),
                     TURB=values(monthturb),BT=values(monthbt),BS=values(monthbs),BTSD=values(monthbtsd),SSTSD=values(monthsstsd),MONTH=month,YEAR="2016",logEFFORT=mean(data$logEFFORT),vals=1:length(values(monthbt)))#vals used as a dummy variable to summaryBy over
  
  if(excludeYear=="YES"){
    p.data<-p.data #no need to make three datasets one for each year because Year is excluded in the prediction (when Year is a random effect), meaning the prediction will be the same among years for a given grid cell
  }else{ #but when no a random effect, need to predict over each of three prediciton years cause prediction will be different
    p.data16<-p.data
    p.data17<-p.data16 
    p.data17$Year<-"2017"
    p.data18<-p.data16
    p.data18$Year<-"2018"
    
    p.data<-rbind(p.data16,p.data17,p.data18)
  }
  
  
  if(hooks=="YES"){
    p.data_sc<-p.data
    p.data_lc<-p.data
    p.data_sj<-p.data
    p.data_lj<-p.data
    p.data_sc$HOOK_CONFIG<-"Circle_small"
    p.data_lc$HOOK_CONFIG<-"Circle_large"
    p.data_sj$HOOK_CONFIG<-"J_small"
    p.data_lj$HOOK_CONFIG<-"J_large"
    
    p.data<-rbind(p.data_sc,p.data_lc,p.data_sj,p.data_lj)
    p.data$HOOK_CONFIG<-as.factor(p.data$HOOK_CONFIG)
  }else{
    p.data=p.data
  }
  
  if(bait=="YES"){
    p.data_e<-p.data
    p.data_t<-p.data
    p.data_u<-p.data
    p.data_e$BAITTYPE<-"ELASMO"
    p.data_t$BAITTYPE<-"TELEOST"
    p.data_u$BAITTYPE<-"UNKNOWN"
    
    p.data<-rbind(p.data_e,p.data_t,p.data_u)
    p.data$BAITTYPE<-as.factor(p.data$BAITTYPE)
  }else{
    p.data=p.data
  }
  
  p.data<-cbind(p.data,pred=predict(m,type="link",newdata=p.data,na.action=na.pass,exclude=exclude,se.fit=T))
  preds<-summaryBy(pred.fit~vals,data=p.data)
  sepreds<-summaryBy(pred.se.fit~vals,data=p.data)
  #suppose to add and subtract SEs prior to back transform from link scale to response scale
  preds$pred.fit.mean.upper<-preds$pred.fit.mean+sepreds$pred.se.fit.mean
  preds$pred.fit.mean.lower<-preds$pred.fit.mean-sepreds$pred.se.fit.mean
  
  preds$predtrans<-plogis(preds$pred.fit.mean) #can also use VGAMs logitlink funcition and select inverse =T
  preds$preduppertrans<-plogis(preds$pred.fit.mean.upper)
  preds$predlowertrans<-plogis(preds$pred.fit.mean.lower)
  
  newraster[1:553938]<-preds$predtrans
  newrasterupper[1:553938]<-preds$preduppertrans
  newrasterlower[1:553938]<-preds$predlowertrans
  
  
  #EVENTUALLY REMOVE AREAS NORTH OF GULF OF MAINE
  #turn all projections west of -81.5 and areas south of Panama to NA
  newraster[428:726,]<-NA #removes area south of~23 degrees, not concerns with areas south
  newraster[,1:235]<-NA #removes everything west of -81.5
  newrasterupper[428:726,]<-NA #removes area south of~23 degrees, not concerns with areas south
  newrasterupper[,1:235]<-NA #removes everything west of -81.5
  newrasterlower[428:726,]<-NA #removes area south of~23 degrees, not concerns with areas south
  newrasterlower[,1:235]<-NA #removes everything west of -81.5
  
  setwd(paste("~/BLLOP_Data/Results/",species,"/R_raster_outputs",sep=""))
  writeRaster(newraster, file=paste(species,monthabr,"PPP.tif",sep=""),overwrite=T)
  writeRaster(newrasterupper, file=paste(species,monthabr,"PPPupper.tif",sep=""),overwrite=T)
  writeRaster(newrasterlower, file=paste(species,monthabr,"PPPlower.tif",sep=""),overwrite=T)
  
  #IGNORE, gets removed when masking to fishery domain in makeMap function
  #removes estuaries for the most part
  #newraster<-mask(newraster,mask=noestuaries,inverse=TRUE)
  #newrasterupper<-mask(newrasterupper,mask=noestuaries,inverse=TRUE)
  #newrasterlower<-mask(newrasterlower,mask=noestuaries,inverse=TRUE)
  #remove areas east of eez
  #newraster<-mask(newraster,mask=useezsimple)
  #newrasterupper<-mask(newrasterupper,mask=useezsimple)
  #newrasterlower<-mask(newrasterlower,mask=useezsimple)
  
  setwd(paste("~/BLLOP_Data/Results/",species,"/GIS_maps",sep=""))
  makeMap(habrast=newraster,type="pred",monthabr=monthabr,species=species,maxval=maxval)
  makeMap(habrast=newrasterupper,type="upper",monthabr=monthabr,species=species,maxval=maxval)
  makeMap(habrast=newrasterlower,type="lower",monthabr=monthabr,species=species,maxval=maxval)
  #ignore warning about geom_tile, geom_raster does better (shifts less compared to geom_tile)
  
  return(list(newraster=newraster,newrasterupper=newrasterupper,newrasterlower=newrasterlower))
}



#####
#SB
#####
#read in model data output

sbJanPPP<-PPPraster(month="01",monthabr="Jan",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbFebPPP<-PPPraster(month="02",monthabr="Feb",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbMarPPP<-PPPraster(month="03",monthabr="Mar",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbAprPPP<-PPPraster(month="04",monthabr="Apr",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbMayPPP<-PPPraster(month="05",monthabr="May",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbJunPPP<-PPPraster(month="06",monthabr="Jun",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbJulPPP<-PPPraster(month="07",monthabr="Jul",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbAugPPP<-PPPraster(month="08",monthabr="Aug",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbSepPPP<-PPPraster(month="09",monthabr="Sep",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbOctPPP<-PPPraster(month="10",monthabr="Oct",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbNovPPP<-PPPraster(month="11",monthabr="Nov",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
sbDecPPP<-PPPraster(month="12",monthabr="Dec",data=sb_datanona,exclude=NULL,species="sb",maxval=1,hooks="NO",bait="NO",excludeYear="YES")


#####
#DS
#####
#read in model data output

dsJanPPP<-PPPraster(month="01",monthabr="Jan",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsFebPPP<-PPPraster(month="02",monthabr="Feb",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsMarPPP<-PPPraster(month="03",monthabr="Mar",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsAprPPP<-PPPraster(month="04",monthabr="Apr",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsMayPPP<-PPPraster(month="05",monthabr="May",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsJunPPP<-PPPraster(month="06",monthabr="Jun",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsJulPPP<-PPPraster(month="07",monthabr="Jul",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsAugPPP<-PPPraster(month="08",monthabr="Aug",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsSepPPP<-PPPraster(month="09",monthabr="Sep",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsOctPPP<-PPPraster(month="10",monthabr="Oct",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsNovPPP<-PPPraster(month="11",monthabr="Nov",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")
dsDecPPP<-PPPraster(month="12",monthabr="Dec",data=ds_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="ds",maxval=1,hooks="NO",bait="NO",excludeYear="YES")


#####
#SHH
#####
#read in model data output

shhJanPPP<-PPPraster(month="01",monthabr="Jan",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhFebPPP<-PPPraster(month="02",monthabr="Feb",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhMarPPP<-PPPraster(month="03",monthabr="Mar",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhAprPPP<-PPPraster(month="04",monthabr="Apr",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhMayPPP<-PPPraster(month="05",monthabr="May",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhJunPPP<-PPPraster(month="06",monthabr="Jun",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhJulPPP<-PPPraster(month="07",monthabr="Jul",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhAugPPP<-PPPraster(month="08",monthabr="Aug",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhSepPPP<-PPPraster(month="09",monthabr="Sep",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhOctPPP<-PPPraster(month="10",monthabr="Oct",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhNovPPP<-PPPraster(month="11",monthabr="Nov",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")
shhDecPPP<-PPPraster(month="12",monthabr="Dec",data=shh_datanona,exclude="s(BEGIN_SET_LATITUDE,BEGIN_SET_LONGITUDE)",species="shh",maxval=1,hooks="NO",bait="YES",excludeYear="YES")

