R codes of the mixed models used to assess the relationship between human disturbance and three risk-taking behaviors: sum of active defensive behaviors used, escape latency and re-emergence of the turtle after escaping.
library(Hmisc)
library(writexl)
library(ggplot2)
library(dplyr)
library(lmerTest)
library(optimx)
library(lme4)
library(PerformanceAnalytics)
library(effects)
library(MuMIn)
library(ggeffects)
library(splines)
library(glmtoolbox)
library(afex)
library(nloptr)
library(dfoptim)
library(psych)
library(ordinal)
You need to set the directory by selecting the file where the datasets are located.
df <- read.table("Behaviors.txt", header = T)
The dataset has 1135 entries corresponding to the number of trial made on the 730 turtle sampled. However, all three behaviors were not always recorded at each trial. Thus, the number of observations for each behavior is less than the number of entries.
We want to make sure that the data are in the good format for the analyses.
# Risk-taking behaviors that will be used as response variable in their respective mixed model.
df$active.defenses <- as.numeric(df$active.defenses)
df$escape <- as.numeric(df$escape)
df$log.escape <- log(df$escape + 1) # log(x+1) transformation of the escape latency to be able to use a Gaussian distribution in the mixed model.
df$emergence <- as.numeric(df$emergence)
# Predictor variables
df$Year <- as.factor(df$Year)
df$JulianDay <- as.numeric(df$JulianDay)
df$Hour.active.defenses <- as.numeric(df$Hour.active.defenses)
df$Hour.Platform <- as.numeric(df$Hour.Platform)
df$Order.trial <- as.numeric(df$Order.trial)
df$CL <- as.numeric(df$CL)
df$Wind <- as.numeric(df$Wind)
df$ID.Temperature <- as.numeric(df$ID.Temperature)
df$Distance.channel <- as.numeric(df$Distance.channel)
df$Vessels.activities.2019 <- as.numeric(df$Vessels.activities.2019)
df$House.200 <- as.numeric(df$House.200)
df$House.300 <- as.numeric(df$House.300)
df$House.400 <- as.numeric(df$House.400)
df$Urban.200 <- as.numeric(df$Urban.200)
df$Urban.600 <- as.numeric(df$Urban.600)
df$Urban.900 <- as.numeric(df$Urban.900)
All continuous predictor variables were standardized (mean zero, unit variance) before model selection.
df$JulianDay.scaled <- scale(df$JulianDay, center=TRUE, scale=TRUE)
df$Hour.active.defenses.scaled <- scale(df$Hour.active.defenses, center=TRUE, scale=TRUE)
df$Hour.Platform.scaled <- scale(df$Hour.Platform, center=TRUE, scale=TRUE)
df$Order.trial.scaled <- scale(df$Order.trial, center=TRUE, scale=TRUE)
df$CL.scaled <- scale(df$CL, center=TRUE, scale=TRUE)
df$Wind.scaled <- scale(df$Wind, center=TRUE, scale=TRUE)
df$ID.Temperature.scaled <- scale(df$ID.Temperature, center=TRUE, scale=TRUE)
df$Distance.channel.scaled <- scale(df$Distance.channel, center=TRUE, scale=TRUE)
df$Vessels.activities.2019.scaled <- scale(df$Vessels.activities.2019, center=TRUE, scale=TRUE)
df$House.200.scaled <- scale(df$House.200, center=TRUE, scale=TRUE)
df$House.300.scaled <- scale(df$House.300, center=TRUE, scale=TRUE)
df$House.400.scaled <- scale(df$House.400, center=TRUE, scale=TRUE)
df$Urban.200.scaled <- scale(df$Urban.200, center=TRUE, scale=TRUE)
df$Urban.600.scaled <- scale(df$Urban.600, center=TRUE, scale=TRUE)
df$Urban.900.scaled <- scale(df$Urban.900, center=TRUE, scale=TRUE)
Only applicable for the continuous preditor variables
df.description <- psych::describe(df)
df.description
## vars n mean sd median trimmed mad
## Year* 1 1135 1.48 0.50 1.00 1.48 0.00
## Site* 2 1135 11.37 6.90 12.00 11.41 10.38
## JulianDay 3 1135 185.89 29.71 189.00 186.39 38.55
## Hour.active.defenses 4 962 1244.37 249.94 1235.00 1221.68 244.63
## ID 5 1135 379.73 207.78 387.00 381.34 257.97
## Order.trial 6 1135 1.60 0.97 1.00 1.40 0.00
## Sex* 7 1109 1.63 0.48 2.00 1.67 0.00
## CL 8 1135 138.24 18.69 140.00 139.12 16.31
## active.defenses 9 1117 1.08 0.92 1.00 1.01 1.48
## Hour.Platform 10 1103 1295.05 249.25 1251.00 1278.94 240.18
## Wind 11 948 1.91 1.81 2.00 1.68 1.48
## ID.Temperature 12 1097 22.94 4.69 23.30 23.11 4.89
## escape 13 1115 65.74 117.54 26.00 35.63 23.72
## emergence 14 1071 0.30 0.46 0.00 0.25 0.00
## Tank.Site* 15 1135 1.22 0.42 1.00 1.15 0.00
## Distance.channel 16 1135 744.17 1104.15 438.04 528.47 479.74
## Vessels.activities.2019 17 1135 14.99 7.46 10.79 13.85 1.30
## House.200 18 1135 0.97 1.28 1.00 0.70 1.48
## House.300 19 1135 2.91 4.33 1.00 1.89 1.48
## House.400 20 1135 6.41 8.41 2.00 4.82 2.97
## Urban.200 21 1135 0.05 0.14 0.00 0.01 0.00
## Urban.600 22 1135 0.14 0.23 0.04 0.09 0.06
## Urban.900 23 1135 0.16 0.23 0.05 0.11 0.04
## dummy 24 1135 1.00 0.00 1.00 1.00 0.00
## spatial.cor 25 1135 10.78 5.96 12.00 10.83 7.41
## log.escape 26 1115 3.40 1.16 3.30 3.32 1.08
## JulianDay.scaled 27 1135 0.00 1.00 0.10 0.02 1.30
## Hour.active.defenses.scaled 28 962 0.00 1.00 -0.04 -0.09 0.98
## Hour.Platform.scaled 29 1103 0.00 1.00 -0.18 -0.06 0.96
## Order.trial.scaled 30 1135 0.00 1.00 -0.62 -0.21 0.00
## CL.scaled 31 1135 0.00 1.00 0.09 0.05 0.87
## Wind.scaled 32 948 0.00 1.00 0.05 -0.13 0.82
## ID.Temperature.scaled 33 1097 0.00 1.00 0.08 0.04 1.04
## Distance.channel.scaled 34 1135 0.00 1.00 -0.28 -0.20 0.43
## Vessels.activities.2019.scaled 35 1135 0.00 1.00 -0.56 -0.15 0.17
## House.200.scaled 36 1135 0.00 1.00 0.02 -0.21 1.16
## House.300.scaled 37 1135 0.00 1.00 -0.44 -0.23 0.34
## House.400.scaled 38 1135 0.00 1.00 -0.52 -0.19 0.35
## Urban.200.scaled 39 1135 0.00 1.00 -0.34 -0.31 0.00
## Urban.600.scaled 40 1135 0.00 1.00 -0.46 -0.23 0.27
## Urban.900.scaled 41 1135 0.00 1.00 -0.47 -0.22 0.19
## min max range skew kurtosis se
## Year* 1.00 2.00 1.00 0.08 -2.00 0.01
## Site* 1.00 22.00 21.00 -0.05 -1.39 0.20
## JulianDay 128.00 234.00 106.00 -0.11 -1.13 0.88
## Hour.active.defenses 730.00 2020.00 1290.00 0.80 0.59 8.06
## ID 2.00 742.00 740.00 -0.11 -1.06 6.17
## Order.trial 1.00 7.00 6.00 1.81 3.42 0.03
## Sex* 1.00 2.00 1.00 -0.56 -1.69 0.01
## CL 30.00 188.00 158.00 -0.63 1.24 0.55
## active.defenses 0.00 4.00 4.00 0.48 -0.55 0.03
## Hour.Platform 730.00 2020.00 1290.00 0.54 -0.11 7.50
## Wind 0.00 6.00 6.00 0.79 -0.26 0.06
## ID.Temperature 9.50 34.00 24.50 -0.30 -0.30 0.14
## escape 1.00 600.00 599.00 3.34 11.15 3.52
## emergence 0.00 1.00 1.00 0.87 -1.24 0.01
## Tank.Site* 1.00 2.00 1.00 1.34 -0.20 0.01
## Distance.channel 15.13 6140.65 6125.52 3.39 13.33 32.77
## Vessels.activities.2019 8.74 34.07 25.33 1.17 -0.19 0.22
## House.200 0.00 5.00 5.00 1.63 2.06 0.04
## House.300 0.00 17.00 17.00 1.91 2.84 0.13
## House.400 0.00 28.00 28.00 1.39 0.57 0.25
## Urban.200 0.00 0.57 0.57 2.92 6.78 0.00
## Urban.600 0.00 0.78 0.78 1.86 1.96 0.01
## Urban.900 0.00 0.81 0.81 1.84 2.04 0.01
## dummy 1.00 1.00 0.00 NaN NaN 0.00
## spatial.cor 1.00 20.00 19.00 -0.07 -1.25 0.18
## log.escape 0.69 6.40 5.71 0.59 0.13 0.03
## JulianDay.scaled -1.95 1.62 3.57 -0.11 -1.13 0.03
## Hour.active.defenses.scaled -2.06 3.10 5.16 0.80 0.59 0.03
## Hour.Platform.scaled -2.27 2.91 5.18 0.54 -0.11 0.03
## Order.trial.scaled -0.62 5.55 6.17 1.81 3.42 0.03
## CL.scaled -5.79 2.66 8.46 -0.63 1.24 0.03
## Wind.scaled -1.06 2.26 3.32 0.79 -0.26 0.03
## ID.Temperature.scaled -2.87 2.36 5.22 -0.30 -0.30 0.03
## Distance.channel.scaled -0.66 4.89 5.55 3.39 13.33 0.03
## Vessels.activities.2019.scaled -0.84 2.56 3.39 1.17 -0.19 0.03
## House.200.scaled -0.76 3.15 3.91 1.63 2.06 0.03
## House.300.scaled -0.67 3.26 3.93 1.91 2.84 0.03
## House.400.scaled -0.76 2.57 3.33 1.39 0.57 0.03
## Urban.200.scaled -0.34 3.65 3.99 2.92 6.78 0.03
## Urban.600.scaled -0.64 2.80 3.44 1.86 1.96 0.03
## Urban.900.scaled -0.70 2.84 3.54 1.84 2.04 0.03
This step is important to make sure that we will use the most adequate data distribution in our models and also to find possible errors or aberrant values in the predictor variables.
ggplot(df, aes(x=active.defenses)) + geom_histogram() # histogram
sum(is.na(df$active.defenses)) # number of NAs
## [1] 18
dotchart(df$active.defenses, main = "Sum of active defensive behaviors") #distribution of the data
table(df$active.defenses) # Number of observations per value
##
## 0 1 2 3 4
## 340 431 261 82 3
ggplot(df, aes(x=escape)) + geom_histogram() # histogram
sum(is.na(df$escape)) # number of NAs
## [1] 20
dotchart(df$escape, main = "Escape latency") #distribution of the data
table(df$escape) # Number of observations per value
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 12 16 24 31 32 35 24 21 30 32 34 20 19 29 14 19 27 19 22
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 21 21 15 20 13 26 13 15 19 15 12 18 6 13 12 8 12 10 7 3
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 6 11 4 6 4 13 8 9 3 8 5 2 9 4 9 4 3 7 2 5
## 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
## 3 2 4 3 3 2 1 3 3 4 6 3 4 1 4 1 3 2 4 1
## 82 83 84 85 86 88 89 90 91 92 93 95 96 97 98 99 100 101 107 108
## 4 1 1 3 3 2 3 1 3 3 2 2 2 1 3 1 4 3 1 2
## 110 111 114 115 116 119 120 121 122 124 125 126 127 128 129 131 135 138 142 143
## 5 2 2 1 1 2 1 1 1 2 1 1 2 2 3 3 3 3 1 1
## 145 148 149 150 152 159 162 164 170 171 172 175 177 180 181 182 188 189 192 194
## 1 1 2 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1
## 204 206 207 211 214 216 220 222 225 230 231 232 233 238 250 251 252 266 269 272
## 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1
## 282 283 286 289 291 295 305 308 309 311 321 324 328 330 331 341 348 350 367 369
## 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1
## 378 410 411 437 438 459 471 472 479 483 510 512 542 545 556 584 600
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 29
ggplot(df, aes(x=log.escape)) + geom_histogram() # histogram
sum(is.na(df$log.escape)) # number of NAs
## [1] 20
dotchart(df$log.escape, main = "Escape latency") #distribution of the data
table(df$log.escape) # Number of observations per value
##
## 0.693147180559945 1.09861228866811 1.38629436111989 1.6094379124341
## 1 12 16 24
## 1.79175946922805 1.94591014905531 2.07944154167984 2.19722457733622
## 31 32 35 24
## 2.30258509299405 2.39789527279837 2.484906649788 2.56494935746154
## 21 30 32 34
## 2.63905732961526 2.70805020110221 2.77258872223978 2.83321334405622
## 20 19 29 14
## 2.89037175789616 2.94443897916644 2.99573227355399 3.04452243772342
## 19 27 19 22
## 3.09104245335832 3.13549421592915 3.17805383034795 3.2188758248682
## 21 21 15 20
## 3.25809653802148 3.29583686600433 3.3322045101752 3.36729582998647
## 13 26 13 15
## 3.40119738166216 3.43398720448515 3.46573590279973 3.49650756146648
## 19 15 12 18
## 3.52636052461616 3.55534806148941 3.58351893845611 3.61091791264422
## 6 13 12 8
## 3.63758615972639 3.66356164612965 3.68887945411394 3.71357206670431
## 12 10 7 3
## 3.73766961828337 3.76120011569356 3.78418963391826 3.80666248977032
## 6 11 4 6
## 3.8286413964891 3.85014760171006 3.87120101090789 3.89182029811063
## 4 13 8 9
## 3.91202300542815 3.93182563272433 3.95124371858143 3.97029191355212
## 3 8 5 2
## 3.98898404656427 4.00733318523247 4.02535169073515 4.04305126783455
## 9 4 9 4
## 4.06044301054642 4.07753744390572 4.0943445622221 4.11087386417331
## 3 7 2 5
## 4.14313472639153 4.15888308335967 4.17438726989564 4.18965474202643
## 3 2 4 3
## 4.20469261939097 4.21950770517611 4.23410650459726 4.24849524204936
## 3 2 1 3
## 4.26267987704132 4.27666611901606 4.29045944114839 4.30406509320417
## 3 4 6 3
## 4.31748811353631 4.33073334028633 4.34380542185368 4.35670882668959
## 4 1 4 1
## 4.36944785246702 4.38202663467388 4.39444915467244 4.40671924726425
## 3 2 4 1
## 4.4188406077966 4.43081679884331 4.44265125649032 4.45434729625351
## 4 1 1 3
## 4.46590811865458 4.48863636973214 4.49980967033027 4.51085950651685
## 3 2 3 1
## 4.52178857704904 4.53259949315326 4.54329478227 4.56434819146784
## 3 3 2 2
## 4.57471097850338 4.58496747867057 4.59511985013459 4.60517018598809
## 2 1 3 1
## 4.61512051684126 4.62497281328427 4.68213122712422 4.69134788222914
## 4 3 1 2
## 4.70953020131233 4.71849887129509 4.74493212836325 4.75359019110636
## 5 2 2 1
## 4.76217393479776 4.78749174278205 4.79579054559674 4.80402104473326
## 1 2 1 1
## 4.81218435537242 4.8283137373023 4.83628190695148 4.84418708645859
## 1 2 1 1
## 4.85203026391962 4.85981240436167 4.86753445045558 4.88280192258637
## 2 2 3 3
## 4.91265488573605 4.93447393313069 4.96284463025991 4.969813299576
## 3 3 1 1
## 4.98360662170834 5.00394630594546 5.01063529409626 5.01727983681492
## 1 1 2 1
## 5.03043792139244 5.07517381523383 5.09375020080676 5.10594547390058
## 2 1 1 1
## 5.14166355650266 5.14749447681345 5.15329159449778 5.17048399503815
## 1 1 2 2
## 5.18178355029209 5.19849703126583 5.2040066870768 5.20948615284142
## 1 1 1 1
## 5.24174701505964 5.24702407216049 5.26269018890489 5.27299955856375
## 1 1 1 1
## 5.32300997913841 5.33271879326537 5.33753807970132 5.35658627467201
## 1 1 1 1
## 5.37063802812766 5.37989735354046 5.39816270151775 5.40717177146012
## 1 1 1 1
## 5.42053499927229 5.44241771052179 5.44673737166631 5.4510384535657
## 1 1 1 2
## 5.4553211153577 5.47646355193151 5.52545293913178 5.52942908751142
## 1 1 1 1
## 5.53338948872752 5.58724865840025 5.59842195899838 5.60947179518496
## 1 2 1 1
## 5.64544689764324 5.64897423816121 5.65948221575962 5.66988092298052
## 1 1 1 1
## 5.67675380226828 5.69035945432406 5.72358510195238 5.73334127689775
## 1 1 1 1
## 5.73657229747919 5.74300318780948 5.77455154554441 5.78382518232974
## 1 2 1 2
## 5.79605775076537 5.80211837537706 5.80513496891649 5.8348107370626
## 1 1 1 1
## 5.85507192220243 5.86078622346587 5.90808293816893 5.91350300563827
## 1 1 1 1
## 5.93753620508243 6.01859321449623 6.02102334934953 6.08221891037645
## 1 1 1 1
## 6.08449941307517 6.13122648948314 6.15697898558556 6.15909538849193
## 1 1 1 1
## 6.17378610390194 6.18208490671663 6.2363695902037 6.24027584517077
## 1 1 1 1
## 6.29710931993394 6.30261897574491 6.32256523992728 6.37161184723186
## 1 1 1 1
## 6.39859493453521
## 29
ggplot(df, aes(x=emergence)) + geom_histogram() # histogram
sum(is.na(df$emergence)) # number of NAs
## [1] 64
dotchart(df$emergence, main = "Emergence of the turtle after escaping") #distribution of the data
table(df$emergence) # Number of observations per value
##
## 0 1
## 750 321
Here, we will give you one example, but the visualization was made on all the predictor variables
GVIF^(1/(2*df)) over two indicate the presence of multicollinearity
mod.active.defenses.vif <- lm(active.defenses ~ House.200.scaled + Urban.900.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled, data = df, na.action=na.exclude)
gvif(mod.active.defenses.vif)
## GVIF df GVIF^(1/(2*df))
## House.200.scaled 3.4036 1 1.8449
## Urban.900.scaled 4.3233 1 2.0793
## Distance.channel.scaled 1.5719 1 1.2538
## Vessels.activities.2019.scaled 1.6432 1 1.2819
## Order.trial.scaled 1.2413 1 1.1141
## Sex 1.2647 1 1.1246
## Tank.Site 2.2465 1 1.4988
## Year 1.4893 1 1.2204
## JulianDay.scaled 2.8594 1 1.6910
## Hour.active.defenses.scaled 1.6055 1 1.2671
## ID.Temperature.scaled 2.1006 1 1.4493
## CL.scaled 1.2635 1 1.1241
GVIF^(1/(2*df)) of Urban.900.scaled is over two. We need to delete it and recalculate the factors.
mod.active.defenses.vif.2 <- lm(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled, data = df, na.action=na.exclude)
gvif(mod.active.defenses.vif.2)
## GVIF df GVIF^(1/(2*df))
## House.200.scaled 1.5730 1 1.2542
## Distance.channel.scaled 1.5632 1 1.2503
## Vessels.activities.2019.scaled 1.5994 1 1.2647
## Order.trial.scaled 1.1896 1 1.0907
## Sex 1.2139 1 1.1018
## Tank.Site 2.2362 1 1.4954
## Year 1.4890 1 1.2202
## JulianDay.scaled 2.6970 1 1.6423
## Hour.active.defenses.scaled 1.6031 1 1.2661
## ID.Temperature.scaled 2.0675 1 1.4379
## CL.scaled 1.2606 1 1.1228
# Visualization of the correlations
cor.pearson.active.defenses <- df[, c(18,23,6,3,4,12,8,16,17)]
chart.Correlation(cor.pearson.active.defenses, histogram=TRUE, pch=19)
# Creation of the correlation table
table.corr.pearson.active.defenses <- rcorr(as.matrix(df[,c(18,23,6,3,4,12,8,16,17)]), type="pearson")
table.cor.pearson.active.defenses.r <- table.corr.pearson.active.defenses$r # Pearson correlation coefficients
table.cor.pearson.active.defenses.p <- table.corr.pearson.active.defenses$P # P values of the correlations
table.cor.pearson.active.defenses.r
## House.200 Urban.900 Order.trial JulianDay
## House.200 1.0000000 0.79775182 0.14441075 -0.4024391
## Urban.900 0.7977518 1.00000000 0.09768635 -0.5580418
## Order.trial 0.1444107 0.09768635 1.00000000 0.1637192
## JulianDay -0.4024391 -0.55804179 0.16371919 1.0000000
## Hour.active.defenses -0.2829645 -0.28477450 -0.09146472 0.3068386
## ID.Temperature -0.1886545 -0.34461657 0.04136506 0.4406745
## CL 0.1519129 0.22519047 0.03401162 -0.1720253
## Distance.channel -0.1016703 -0.22397571 0.09912351 0.1010733
## Vessels.activities.2019 -0.1076827 -0.34645587 0.01856539 0.3303980
## Hour.active.defenses ID.Temperature CL
## House.200 -0.282964533 -0.188654524 0.15191293
## Urban.900 -0.284774503 -0.344616571 0.22519047
## Order.trial -0.091464721 0.041365059 0.03401162
## JulianDay 0.306838617 0.440674474 -0.17202529
## Hour.active.defenses 1.000000000 -0.007616587 -0.13533410
## ID.Temperature -0.007616587 1.000000000 -0.06344290
## CL -0.135334096 -0.063442901 1.00000000
## Distance.channel 0.012363808 0.253073722 -0.01469142
## Vessels.activities.2019 0.127469693 0.318224913 -0.08012667
## Distance.channel Vessels.activities.2019
## House.200 -0.10167029 -0.10768266
## Urban.900 -0.22397571 -0.34645587
## Order.trial 0.09912351 0.01856539
## JulianDay 0.10107332 0.33039803
## Hour.active.defenses 0.01236381 0.12746969
## ID.Temperature 0.25307372 0.31822491
## CL -0.01469142 -0.08012667
## Distance.channel 1.00000000 0.48906628
## Vessels.activities.2019 0.48906628 1.00000000
table.cor.pearson.active.defenses.p
## House.200 Urban.900 Order.trial JulianDay
## House.200 NA 0.000000e+00 1.032023e-06 0.000000e+00
## Urban.900 0.000000e+00 NA 9.832099e-04 0.000000e+00
## Order.trial 1.032023e-06 9.832099e-04 NA 2.905276e-08
## JulianDay 0.000000e+00 0.000000e+00 2.905276e-08 NA
## Hour.active.defenses 0.000000e+00 0.000000e+00 4.523448e-03 0.000000e+00
## ID.Temperature 3.016367e-10 0.000000e+00 1.709756e-01 0.000000e+00
## CL 2.716231e-07 1.643130e-14 2.522456e-01 5.455805e-09
## Distance.channel 6.027679e-04 2.264855e-14 8.257794e-04 6.493434e-04
## Vessels.activities.2019 2.786523e-04 0.000000e+00 5.320837e-01 0.000000e+00
## Hour.active.defenses ID.Temperature CL
## House.200 0.000000e+00 3.016367e-10 2.716231e-07
## Urban.900 0.000000e+00 0.000000e+00 1.643130e-14
## Order.trial 4.523448e-03 1.709756e-01 2.522456e-01
## JulianDay 0.000000e+00 0.000000e+00 5.455805e-09
## Hour.active.defenses NA 8.171484e-01 2.537130e-05
## ID.Temperature 8.171484e-01 NA 3.563983e-02
## CL 2.537130e-05 3.563983e-02 NA
## Distance.channel 7.017246e-01 0.000000e+00 6.210013e-01
## Vessels.activities.2019 7.350096e-05 0.000000e+00 6.916929e-03
## Distance.channel Vessels.activities.2019
## House.200 6.027679e-04 2.786523e-04
## Urban.900 2.264855e-14 0.000000e+00
## Order.trial 8.257794e-04 5.320837e-01
## JulianDay 6.493434e-04 0.000000e+00
## Hour.active.defenses 7.017246e-01 7.350096e-05
## ID.Temperature 0.000000e+00 0.000000e+00
## CL 6.210013e-01 6.916929e-03
## Distance.channel NA 0.000000e+00
## Vessels.activities.2019 0.000000e+00 NA
# Creation of the correlation table
table.corr.spearman.active.defenses <- rcorr(as.matrix(df[,c(18,23,6,3,4,12,8,16,17)]), type="spearman")
table.cor.spearman.active.defenses.r <- table.corr.spearman.active.defenses$r # Pearson correlation coefficients
table.cor.spearman.active.defenses.p <- table.corr.spearman.active.defenses$P # P values of the correlations
table.cor.spearman.active.defenses.r
## House.200 Urban.900 Order.trial JulianDay
## House.200 1.00000000 0.4535131 0.06902811 -0.3156439
## Urban.900 0.45351306 1.0000000 -0.12653876 -0.7159501
## Order.trial 0.06902811 -0.1265388 1.00000000 0.2317717
## JulianDay -0.31564388 -0.7159501 0.23177171 1.0000000
## Hour.active.defenses -0.25020535 -0.2947812 -0.10794554 0.2546564
## ID.Temperature -0.09263193 -0.4414567 0.01087592 0.3952979
## CL 0.08753173 0.1558850 0.02353021 -0.1687139
## Distance.channel -0.20074713 -0.5183493 0.24200697 0.5566049
## Vessels.activities.2019 0.03760662 -0.3465167 -0.02161513 0.1889507
## Hour.active.defenses ID.Temperature CL
## House.200 -0.25020535 -0.09263193 0.08753173
## Urban.900 -0.29478119 -0.44145674 0.15588500
## Order.trial -0.10794554 0.01087592 0.02353021
## JulianDay 0.25465640 0.39529790 -0.16871392
## Hour.active.defenses 1.00000000 0.06180481 -0.14279438
## ID.Temperature 0.06180481 1.00000000 -0.06566684
## CL -0.14279438 -0.06566684 1.00000000
## Distance.channel 0.28241437 0.38823857 -0.11317974
## Vessels.activities.2019 0.04809711 0.19316565 -0.12635136
## Distance.channel Vessels.activities.2019
## House.200 -0.2007471 0.03760662
## Urban.900 -0.5183493 -0.34651666
## Order.trial 0.2420070 -0.02161513
## JulianDay 0.5566049 0.18895071
## Hour.active.defenses 0.2824144 0.04809711
## ID.Temperature 0.3882386 0.19316565
## CL -0.1131797 -0.12635136
## Distance.channel 1.0000000 0.36891367
## Vessels.activities.2019 0.3689137 1.00000000
table.cor.spearman.active.defenses.p
## House.200 Urban.900 Order.trial JulianDay
## House.200 NA 0.000000e+00 2.003175e-02 0.000000e+00
## Urban.900 0.000000e+00 NA 1.906574e-05 0.000000e+00
## Order.trial 2.003175e-02 1.906574e-05 NA 2.664535e-15
## JulianDay 0.000000e+00 0.000000e+00 2.664535e-15 NA
## Hour.active.defenses 3.330669e-15 0.000000e+00 7.979565e-04 8.881784e-16
## ID.Temperature 2.132226e-03 0.000000e+00 7.189809e-01 0.000000e+00
## CL 3.163985e-03 1.304308e-07 4.283820e-01 1.073361e-08
## Distance.channel 8.776313e-12 0.000000e+00 0.000000e+00 0.000000e+00
## Vessels.activities.2019 2.055095e-01 0.000000e+00 4.669252e-01 1.393752e-10
## Hour.active.defenses ID.Temperature CL
## House.200 3.330669e-15 2.132226e-03 3.163985e-03
## Urban.900 0.000000e+00 0.000000e+00 1.304308e-07
## Order.trial 7.979565e-04 7.189809e-01 4.283820e-01
## JulianDay 8.881784e-16 0.000000e+00 1.073361e-08
## Hour.active.defenses NA 6.038717e-02 8.749538e-06
## ID.Temperature 6.038717e-02 NA 2.964369e-02
## CL 8.749538e-06 2.964369e-02 NA
## Distance.channel 0.000000e+00 0.000000e+00 1.328682e-04
## Vessels.activities.2019 1.360378e-01 1.108240e-10 1.961956e-05
## Distance.channel Vessels.activities.2019
## House.200 8.776313e-12 2.055095e-01
## Urban.900 0.000000e+00 0.000000e+00
## Order.trial 0.000000e+00 4.669252e-01
## JulianDay 0.000000e+00 1.393752e-10
## Hour.active.defenses 0.000000e+00 1.360378e-01
## ID.Temperature 0.000000e+00 1.108240e-10
## CL 1.328682e-04 1.961956e-05
## Distance.channel NA 0.000000e+00
## Vessels.activities.2019 0.000000e+00 NA
The Pearson correlation coefficient of 0.8 between House.200 and Urban.900 confirm the deletion of Urban.900 with the calculation of the GVIF^(1/(2*df))
mod.ad.full <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|Site) + (1|ID), data = df, REML = TRUE, na.action=na.exclude)
summary(mod.ad.full)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled +
## ID.Temperature.scaled + CL.scaled + (1 | Site) + (1 | ID)
## Data: df
##
## REML criterion at convergence: 2263.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.47741 -0.53022 -0.06241 0.47665 2.84307
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.44852 0.6697
## Site (Intercept) 0.04453 0.2110
## Residual 0.32432 0.5695
## Number of obs: 889, groups: ID, 701; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.82717 0.08462 52.60258 9.775 2.01e-13
## House.200.scaled -0.13595 0.06086 15.86951 -2.234 0.04026
## Distance.channel.scaled -0.15182 0.05886 15.72871 -2.579 0.02037
## Vessels.activities.2019.scaled 0.20682 0.06839 12.89670 3.024 0.00985
## Order.trial.scaled 0.01857 0.03329 356.16926 0.558 0.57720
## SexM 0.29936 0.07440 673.21237 4.024 6.37e-05
## Tank.SiteT -0.19781 0.12592 477.39445 -1.571 0.11686
## Year2020 0.05110 0.08049 382.27678 0.635 0.52585
## JulianDay.scaled -0.01245 0.06886 45.61071 -0.181 0.85735
## Hour.active.defenses.scaled 0.01094 0.03737 563.75470 0.293 0.76971
## ID.Temperature.scaled 0.00352 0.04598 317.05133 0.077 0.93902
## CL.scaled 0.11759 0.03982 641.96377 2.953 0.00326
##
## (Intercept) ***
## House.200.scaled *
## Distance.channel.scaled *
## Vessels.activities.2019.scaled **
## Order.trial.scaled
## SexM ***
## Tank.SiteT
## Year2020
## JulianDay.scaled
## Hour.active.defenses.scaled
## ID.Temperature.scaled
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 JlnDy.
## Hs.200.scld 0.080
## Dstnc.chnn. 0.142 0.115
## Vssl..2019. -0.056 -0.060 -0.483
## Ordr.trl.sc 0.179 -0.034 -0.023 0.068
## SexM -0.570 0.037 -0.016 0.005 -0.042
## Tank.SiteT -0.145 0.006 -0.143 0.042 0.080 -0.040
## Year2020 -0.385 -0.193 -0.149 0.090 -0.131 0.041 -0.249
## JulnDy.scld 0.122 0.248 0.253 -0.300 -0.085 0.065 -0.401 0.062
## Hr.ctv.dfn. 0.096 0.061 0.075 -0.077 0.138 0.014 -0.542 0.178 0.149
## ID.Tmprtr.s 0.018 0.091 -0.107 -0.049 -0.002 0.009 0.367 -0.295 -0.427
## CL.scaled -0.261 -0.034 -0.035 0.009 -0.043 0.378 -0.061 0.070 0.090
## Hr.c.. ID.Tm.
## Hs.200.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## SexM
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.ctv.dfn.
## ID.Tmprtr.s -0.029
## CL.scaled 0.061 -0.036
plot(mod.ad.full)
hist(residuals(mod.ad.full))
qqnorm(resid(mod.ad.full))
GVIF^(1/(2*df)) over two indicate the presence of multicollinearity
mod.escape.vif <- lm(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled, data = df, na.action=na.exclude)
gvif(mod.escape.vif)
## GVIF df GVIF^(1/(2*df))
## House.400.scaled 1.8537 1 1.3615
## Urban.200.scaled 1.6299 1 1.2767
## Distance.channel.scaled 1.9686 1 1.4031
## Vessels.activities.2019.scaled 1.9477 1 1.3956
## Order.trial.scaled 1.2602 1 1.1226
## Sex 1.1486 1 1.0717
## Tank.Site 3.3981 1 1.8434
## Year 1.2799 1 1.1313
## JulianDay.scaled 2.2605 1 1.5035
## Hour.Platform.scaled 1.7462 1 1.3214
## ID.Temperature.scaled 1.3960 1 1.1815
## CL.scaled 1.2457 1 1.1161
## Wind.scaled 1.9035 1 1.3797
All the GVIF^(1/(2*df)) are under two.
# Visualization of the correlations
cor.pearson.escape <- df[, c(20,21,6,3,10,12,8,16,17,11)]
chart.Correlation(cor.pearson.escape, histogram=TRUE, pch=19)
# Creation of the correlation table
table.corr.pearson.escape <- rcorr(as.matrix(df[,c(20,21,6,3,10,12,8,16,17,11)]), type="pearson")
table.cor.pearson.escape.r <- table.corr.pearson.escape$r # Pearson correlation coefficients
table.cor.pearson.escape.p <- table.corr.pearson.escape$P # P values of the correlations
table.cor.pearson.escape.r
## House.400 Urban.200 Order.trial JulianDay
## House.400 1.000000000 0.4326890387 -0.009439911 -0.3542009
## Urban.200 0.432689039 1.0000000000 0.197608295 -0.3859154
## Order.trial -0.009439911 0.1976082954 1.000000000 0.1637192
## JulianDay -0.354200905 -0.3859154480 0.163719193 1.0000000
## Hour.Platform -0.124917325 -0.1546110815 -0.105384108 0.2253572
## ID.Temperature -0.155963844 -0.2236247483 0.041365059 0.4406745
## CL 0.167195575 0.1848282077 0.034011619 -0.1720253
## Distance.channel -0.253479294 -0.0588967867 0.099123509 0.1010733
## Vessels.activities.2019 0.022988129 -0.2109359759 0.018565394 0.3303980
## Wind 0.012066735 -0.0004708797 0.026545568 -0.2562203
## Hour.Platform ID.Temperature CL
## House.400 -0.12491732 -0.15596384 0.16719557
## Urban.200 -0.15461108 -0.22362475 0.18482821
## Order.trial -0.10538411 0.04136506 0.03401162
## JulianDay 0.22535717 0.44067447 -0.17202529
## Hour.Platform 1.00000000 0.03449218 -0.11957931
## ID.Temperature 0.03449218 1.00000000 -0.06344290
## CL -0.11957931 -0.06344290 1.00000000
## Distance.channel 0.10732729 0.25307372 -0.01469142
## Vessels.activities.2019 0.09445235 0.31822491 -0.08012667
## Wind -0.34038488 0.02051645 0.07352587
## Distance.channel Vessels.activities.2019 Wind
## House.400 -0.25347929 0.02298813 0.0120667353
## Urban.200 -0.05889679 -0.21093598 -0.0004708797
## Order.trial 0.09912351 0.01856539 0.0265455684
## JulianDay 0.10107332 0.33039803 -0.2562202731
## Hour.Platform 0.10732729 0.09445235 -0.3403848794
## ID.Temperature 0.25307372 0.31822491 0.0205164543
## CL -0.01469142 -0.08012667 0.0735258655
## Distance.channel 1.00000000 0.48906628 -0.0292223219
## Vessels.activities.2019 0.48906628 1.00000000 -0.1317897600
## Wind -0.02922232 -0.13178976 1.0000000000
table.cor.pearson.escape.p
## House.400 Urban.200 Order.trial JulianDay
## House.400 NA 0.000000e+00 7.507239e-01 0.000000e+00
## Urban.200 0.000000e+00 NA 1.862999e-11 0.000000e+00
## Order.trial 7.507239e-01 1.862999e-11 NA 2.905276e-08
## JulianDay 0.000000e+00 0.000000e+00 2.905276e-08 NA
## Hour.Platform 3.178493e-05 2.468277e-07 4.553125e-04 3.641532e-14
## ID.Temperature 2.085079e-07 6.705747e-14 1.709756e-01 0.000000e+00
## CL 1.457405e-08 3.516900e-10 2.522456e-01 5.455805e-09
## Distance.channel 0.000000e+00 4.728322e-02 8.257794e-04 6.493434e-04
## Vessels.activities.2019 4.391003e-01 6.998846e-13 5.320837e-01 0.000000e+00
## Wind 7.105978e-01 9.884478e-01 4.142753e-01 1.110223e-15
## Hour.Platform ID.Temperature CL
## House.400 3.178493e-05 2.085079e-07 1.457405e-08
## Urban.200 2.468277e-07 6.705747e-14 3.516900e-10
## Order.trial 4.553125e-04 1.709756e-01 2.522456e-01
## JulianDay 3.641532e-14 0.000000e+00 5.455805e-09
## Hour.Platform NA 2.602924e-01 6.857072e-05
## ID.Temperature 2.602924e-01 NA 3.563983e-02
## CL 6.857072e-05 3.563983e-02 NA
## Distance.channel 3.559317e-04 0.000000e+00 6.210013e-01
## Vessels.activities.2019 1.687374e-03 0.000000e+00 6.916929e-03
## Wind 0.000000e+00 5.333715e-01 2.357961e-02
## Distance.channel Vessels.activities.2019 Wind
## House.400 0.0000000000 4.391003e-01 7.105978e-01
## Urban.200 0.0472832150 6.998846e-13 9.884478e-01
## Order.trial 0.0008257794 5.320837e-01 4.142753e-01
## JulianDay 0.0006493434 0.000000e+00 1.110223e-15
## Hour.Platform 0.0003559317 1.687374e-03 0.000000e+00
## ID.Temperature 0.0000000000 0.000000e+00 5.333715e-01
## CL 0.6210013281 6.916929e-03 2.357961e-02
## Distance.channel NA 0.000000e+00 3.687865e-01
## Vessels.activities.2019 0.0000000000 NA 4.697953e-05
## Wind 0.3687865313 4.697953e-05 NA
# Creation of the correlation table
table.corr.spearman.escape <- rcorr(as.matrix(df[,c(20,21,6,3,10,12,8,16,17,11)]), type="spearman")
table.cor.spearman.escape.r <- table.corr.spearman.escape$r # Pearson correlation coefficients
table.cor.spearman.escape.p <- table.corr.spearman.escape$P # P values of the correlations
table.cor.spearman.escape.r
## House.400 Urban.200 Order.trial JulianDay
## House.400 1.000000000 0.45335084 0.005982156 -0.2436402
## Urban.200 0.453350837 1.00000000 0.017583899 -0.4426339
## Order.trial 0.005982156 0.01758390 1.000000000 0.2317717
## JulianDay -0.243640190 -0.44263394 0.231771710 1.0000000
## Hour.Platform -0.145961882 -0.05526323 -0.090744731 0.1850147
## ID.Temperature -0.058602842 -0.19567629 0.010875919 0.3952979
## CL 0.130176306 0.13710741 0.023530214 -0.1687139
## Distance.channel -0.277569869 -0.10029872 0.242006973 0.5566049
## Vessels.activities.2019 0.131077533 -0.30491389 -0.021615128 0.1889507
## Wind -0.016490187 0.06133348 -0.033315669 -0.2682615
## Hour.Platform ID.Temperature CL
## House.400 -0.145961882 -0.05860284 0.13017631
## Urban.200 -0.055263225 -0.19567629 0.13710741
## Order.trial -0.090744731 0.01087592 0.02353021
## JulianDay 0.185014667 0.39529790 -0.16871392
## Hour.Platform 1.000000000 0.08971374 -0.11614837
## ID.Temperature 0.089713738 1.00000000 -0.06566684
## CL -0.116148369 -0.06566684 1.00000000
## Distance.channel 0.277712076 0.38823857 -0.11317974
## Vessels.activities.2019 -0.007978281 0.19316565 -0.12635136
## Wind -0.412698498 0.10203512 0.08813909
## Distance.channel Vessels.activities.2019 Wind
## House.400 -0.2775699 0.131077533 -0.01649019
## Urban.200 -0.1002987 -0.304913889 0.06133348
## Order.trial 0.2420070 -0.021615128 -0.03331567
## JulianDay 0.5566049 0.188950707 -0.26826152
## Hour.Platform 0.2777121 -0.007978281 -0.41269850
## ID.Temperature 0.3882386 0.193165645 0.10203512
## CL -0.1131797 -0.126351359 0.08813909
## Distance.channel 1.0000000 0.368913666 -0.27032411
## Vessels.activities.2019 0.3689137 1.000000000 -0.08976149
## Wind -0.2703241 -0.089761492 1.00000000
table.cor.spearman.escape.p
## House.400 Urban.200 Order.trial JulianDay
## House.400 NA 0.000000e+00 8.404506e-01 0.000000e+00
## Urban.200 0.000000e+00 NA 5.539910e-01 0.000000e+00
## Order.trial 8.404506e-01 5.539910e-01 NA 2.664535e-15
## JulianDay 0.000000e+00 0.000000e+00 2.664535e-15 NA
## Hour.Platform 1.126180e-06 6.655125e-02 2.556506e-03 5.972247e-10
## ID.Temperature 5.232635e-02 6.280887e-11 7.189809e-01 0.000000e+00
## CL 1.084961e-05 3.553267e-06 4.283820e-01 1.073361e-08
## Distance.channel 0.000000e+00 7.147639e-04 0.000000e+00 0.000000e+00
## Vessels.activities.2019 9.413183e-06 0.000000e+00 4.669252e-01 1.393752e-10
## Wind 6.120910e-01 5.906359e-02 3.055012e-01 0.000000e+00
## Hour.Platform ID.Temperature CL
## House.400 1.126180e-06 5.232635e-02 1.084961e-05
## Urban.200 6.655125e-02 6.280887e-11 3.553267e-06
## Order.trial 2.556506e-03 7.189809e-01 4.283820e-01
## JulianDay 5.972247e-10 0.000000e+00 1.073361e-08
## Hour.Platform NA 3.357286e-03 1.105565e-04
## ID.Temperature 3.357286e-03 NA 2.964369e-02
## CL 1.105565e-04 2.964369e-02 NA
## Distance.channel 0.000000e+00 0.000000e+00 1.328682e-04
## Vessels.activities.2019 7.912606e-01 1.108240e-10 1.961956e-05
## Wind 0.000000e+00 1.899518e-03 6.618099e-03
## Distance.channel Vessels.activities.2019 Wind
## House.400 0.0000000000 9.413183e-06 0.612090962
## Urban.200 0.0007147639 0.000000e+00 0.059063589
## Order.trial 0.0000000000 4.669252e-01 0.305501234
## JulianDay 0.0000000000 1.393752e-10 0.000000000
## Hour.Platform 0.0000000000 7.912606e-01 0.000000000
## ID.Temperature 0.0000000000 1.108240e-10 0.001899518
## CL 0.0001328682 1.961956e-05 0.006618099
## Distance.channel NA 0.000000e+00 0.000000000
## Vessels.activities.2019 0.0000000000 NA 0.005680785
## Wind 0.0000000000 5.680785e-03 NA
No correlation over 0.8
mod.escape.full <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|Site) + (1|ID), data = df, REML = TRUE, na.action=na.exclude)
summary(mod.escape.full)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula:
## log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled +
## ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | Site) +
## (1 | ID)
## Data: df
##
## REML criterion at convergence: 2599.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3139 -0.5407 -0.0599 0.4794 3.2714
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.48062 0.6933
## Site (Intercept) 0.02718 0.1648
## Residual 0.72167 0.8495
## Number of obs: 864, groups: ID, 579; Site, 19
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 3.334345 0.106375 69.268107 31.345
## House.400.scaled 0.027680 0.083392 12.715007 0.332
## Urban.200.scaled 0.109313 0.080455 19.686313 1.359
## Distance.channel.scaled 0.015454 0.066316 17.121120 0.233
## Vessels.activities.2019.scaled -0.034816 0.075154 12.110833 -0.463
## Order.trial.scaled -0.256260 0.042111 627.012641 -6.085
## SexM 0.004507 0.093523 522.440378 0.048
## Tank.SiteT 0.378908 0.161077 412.099292 2.352
## Year2020 -0.061584 0.102827 101.467957 -0.599
## JulianDay.scaled 0.170890 0.093519 21.993588 1.827
## Hour.Platform.scaled -0.091577 0.049252 401.699831 -1.859
## ID.Temperature.scaled -0.117107 0.062842 139.656326 -1.864
## CL.scaled 0.167121 0.050554 501.046102 3.306
## Wind.scaled -0.114240 0.051968 548.743968 -2.198
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## House.400.scaled 0.74535
## Urban.200.scaled 0.18961
## Distance.channel.scaled 0.81849
## Vessels.activities.2019.scaled 0.65139
## Order.trial.scaled 2.02e-09 ***
## SexM 0.96158
## Tank.SiteT 0.01913 *
## Year2020 0.55057
## JulianDay.scaled 0.08125 .
## Hour.Platform.scaled 0.06371 .
## ID.Temperature.scaled 0.06449 .
## CL.scaled 0.00101 **
## Wind.scaled 0.02835 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 14 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
plot(mod.escape.full)
hist(residuals(mod.escape.full))
qqnorm(resid(mod.escape.full))
GVIF^(1/(2*df)) over two indicate the presence of multicollinearity
mod.emergence.vif <- glm(emergence ~ House.300.scaled + Urban.600.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled, data = df, family = binomial, na.action=na.exclude)
gvif(mod.emergence.vif)
## GVIF df GVIF^(1/(2*df))
## House.300.scaled 3.4918 1 1.8686
## Urban.600.scaled 4.5572 1 2.1348
## Distance.channel.scaled 1.5181 1 1.2321
## Vessels.activities.2019.scaled 1.5182 1 1.2322
## Order.trial.scaled 1.2502 1 1.1181
## Sex 1.1649 1 1.0793
## Tank.Site 1.9810 1 1.4075
## Year 1.2676 1 1.1259
## JulianDay.scaled 2.1176 1 1.4552
## Hour.Platform.scaled 1.4752 1 1.2146
## ID.Temperature.scaled 1.6635 1 1.2898
## CL.scaled 1.1858 1 1.0889
GVIF^(1/(2*df)) of Urban.600.scaled is over two. We need to delete it and recalculate the factors.
mod.emergence.vif <- glm(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled, data = df, family = binomial, na.action=na.exclude)
gvif(mod.emergence.vif)
## GVIF df GVIF^(1/(2*df))
## House.300.scaled 1.3616 1 1.1669
## Distance.channel.scaled 1.5179 1 1.2320
## Vessels.activities.2019.scaled 1.5162 1 1.2313
## Order.trial.scaled 1.2071 1 1.0987
## Sex 1.1408 1 1.0681
## Tank.Site 1.9730 1 1.4046
## Year 1.2305 1 1.1093
## JulianDay.scaled 1.9477 1 1.3956
## Hour.Platform.scaled 1.4804 1 1.2167
## ID.Temperature.scaled 1.6126 1 1.2699
## CL.scaled 1.1705 1 1.0819
All the GVIF^(1/(2*df)) are now under two.
# Visualization of the correlations
cor.pearson.emergence <- df[, c(19,22,6,3,10,12,8,16,17)]
chart.Correlation(cor.pearson.emergence, histogram=TRUE, pch=19)
# Creation of the correlation table
table.corr.pearson.emergence <- rcorr(as.matrix(df[,c(19,22,6,3,10,12,8,16,17)]), type="pearson")
table.cor.pearson.emergence.r <- table.corr.pearson.emergence$r # Pearson correlation coefficients
table.cor.pearson.emergence.p <- table.corr.pearson.emergence$P # P values of the correlations
table.cor.pearson.emergence.r
## House.300 Urban.600 Order.trial JulianDay
## House.300 1.00000000 0.8172697 0.09704351 -0.4205959
## Urban.600 0.81726971 1.0000000 0.11849156 -0.5377757
## Order.trial 0.09704351 0.1184916 1.00000000 0.1637192
## JulianDay -0.42059588 -0.5377757 0.16371919 1.0000000
## Hour.Platform -0.12340041 -0.1913218 -0.10538411 0.2253572
## ID.Temperature -0.32028077 -0.3236473 0.04136506 0.4406745
## CL 0.12697087 0.2248484 0.03401162 -0.1720253
## Distance.channel -0.17931867 -0.1776160 0.09912351 0.1010733
## Vessels.activities.2019 -0.17880670 -0.2672546 0.01856539 0.3303980
## Hour.Platform ID.Temperature CL
## House.300 -0.12340041 -0.32028077 0.12697087
## Urban.600 -0.19132180 -0.32364730 0.22484835
## Order.trial -0.10538411 0.04136506 0.03401162
## JulianDay 0.22535717 0.44067447 -0.17202529
## Hour.Platform 1.00000000 0.03449218 -0.11957931
## ID.Temperature 0.03449218 1.00000000 -0.06344290
## CL -0.11957931 -0.06344290 1.00000000
## Distance.channel 0.10732729 0.25307372 -0.01469142
## Vessels.activities.2019 0.09445235 0.31822491 -0.08012667
## Distance.channel Vessels.activities.2019
## House.300 -0.17931867 -0.17880670
## Urban.600 -0.17761598 -0.26725456
## Order.trial 0.09912351 0.01856539
## JulianDay 0.10107332 0.33039803
## Hour.Platform 0.10732729 0.09445235
## ID.Temperature 0.25307372 0.31822491
## CL -0.01469142 -0.08012667
## Distance.channel 1.00000000 0.48906628
## Vessels.activities.2019 0.48906628 1.00000000
table.cor.pearson.emergence.p
## House.300 Urban.600 Order.trial JulianDay
## House.300 NA 0.000000e+00 1.062247e-03 0.000000e+00
## Urban.600 0.000000e+00 NA 6.289997e-05 0.000000e+00
## Order.trial 1.062247e-03 6.289997e-05 NA 2.905276e-08
## JulianDay 0.000000e+00 0.000000e+00 2.905276e-08 NA
## Hour.Platform 3.967329e-05 1.492557e-10 4.553125e-04 3.641532e-14
## ID.Temperature 0.000000e+00 0.000000e+00 1.709756e-01 0.000000e+00
## CL 1.784482e-05 1.776357e-14 2.522456e-01 5.455805e-09
## Distance.channel 1.172760e-09 1.688853e-09 8.257794e-04 6.493434e-04
## Vessels.activities.2019 1.309164e-09 0.000000e+00 5.320837e-01 0.000000e+00
## Hour.Platform ID.Temperature CL
## House.300 3.967329e-05 0.00000000 1.784482e-05
## Urban.600 1.492557e-10 0.00000000 1.776357e-14
## Order.trial 4.553125e-04 0.17097560 2.522456e-01
## JulianDay 3.641532e-14 0.00000000 5.455805e-09
## Hour.Platform NA 0.26029241 6.857072e-05
## ID.Temperature 2.602924e-01 NA 3.563983e-02
## CL 6.857072e-05 0.03563983 NA
## Distance.channel 3.559317e-04 0.00000000 6.210013e-01
## Vessels.activities.2019 1.687374e-03 0.00000000 6.916929e-03
## Distance.channel Vessels.activities.2019
## House.300 1.172760e-09 1.309164e-09
## Urban.600 1.688853e-09 0.000000e+00
## Order.trial 8.257794e-04 5.320837e-01
## JulianDay 6.493434e-04 0.000000e+00
## Hour.Platform 3.559317e-04 1.687374e-03
## ID.Temperature 0.000000e+00 0.000000e+00
## CL 6.210013e-01 6.916929e-03
## Distance.channel NA 0.000000e+00
## Vessels.activities.2019 0.000000e+00 NA
# Creation of the correlation table
table.corr.spearman.emergence <- rcorr(as.matrix(df[,c(19,22,6,3,10,12,8,16,17)]), type="spearman")
table.cor.spearman.emergence.r <- table.corr.spearman.emergence$r # Spearman correlation coefficients
table.cor.spearman.emergence.p <- table.corr.spearman.emergence$P # P values of the correlations
table.cor.spearman.emergence.r
## House.300 Urban.600 Order.trial JulianDay
## House.300 1.00000000 0.6433532 0.11880047 -0.2160482
## Urban.600 0.64335317 1.0000000 -0.11561227 -0.7348046
## Order.trial 0.11880047 -0.1156123 1.00000000 0.2317717
## JulianDay -0.21604821 -0.7348046 0.23177171 1.0000000
## Hour.Platform -0.11310710 -0.2285147 -0.09074473 0.1850147
## ID.Temperature -0.15297542 -0.3819516 0.01087592 0.3952979
## CL 0.07524865 0.1925009 0.02353021 -0.1687139
## Distance.channel -0.11598368 -0.4994053 0.24200697 0.5566049
## Vessels.activities.2019 0.05023256 -0.1063352 -0.02161513 0.1889507
## Hour.Platform ID.Temperature CL
## House.300 -0.113107098 -0.15297542 0.07524865
## Urban.600 -0.228514667 -0.38195164 0.19250093
## Order.trial -0.090744731 0.01087592 0.02353021
## JulianDay 0.185014667 0.39529790 -0.16871392
## Hour.Platform 1.000000000 0.08971374 -0.11614837
## ID.Temperature 0.089713738 1.00000000 -0.06566684
## CL -0.116148369 -0.06566684 1.00000000
## Distance.channel 0.277712076 0.38823857 -0.11317974
## Vessels.activities.2019 -0.007978281 0.19316565 -0.12635136
## Distance.channel Vessels.activities.2019
## House.300 -0.1159837 0.050232564
## Urban.600 -0.4994053 -0.106335150
## Order.trial 0.2420070 -0.021615128
## JulianDay 0.5566049 0.188950707
## Hour.Platform 0.2777121 -0.007978281
## ID.Temperature 0.3882386 0.193165645
## CL -0.1131797 -0.126351359
## Distance.channel 1.0000000 0.368913666
## Vessels.activities.2019 0.3689137 1.000000000
table.cor.spearman.emergence.p
## House.300 Urban.600 Order.trial JulianDay
## House.300 NA 0.000000e+00 6.016428e-05 1.871836e-13
## Urban.600 0.000000e+00 NA 9.471172e-05 0.000000e+00
## Order.trial 6.016428e-05 9.471172e-05 NA 2.664535e-15
## JulianDay 1.871836e-13 0.000000e+00 2.664535e-15 NA
## Hour.Platform 1.670322e-04 1.554312e-14 2.556506e-03 5.972247e-10
## ID.Temperature 3.563436e-07 0.000000e+00 7.189809e-01 0.000000e+00
## CL 1.121550e-02 6.175815e-11 4.283820e-01 1.073361e-08
## Distance.channel 8.988816e-05 0.000000e+00 0.000000e+00 0.000000e+00
## Vessels.activities.2019 9.073633e-02 3.324111e-04 4.669252e-01 1.393752e-10
## Hour.Platform ID.Temperature CL
## House.300 1.670322e-04 3.563436e-07 1.121550e-02
## Urban.600 1.554312e-14 0.000000e+00 6.175815e-11
## Order.trial 2.556506e-03 7.189809e-01 4.283820e-01
## JulianDay 5.972247e-10 0.000000e+00 1.073361e-08
## Hour.Platform NA 3.357286e-03 1.105565e-04
## ID.Temperature 3.357286e-03 NA 2.964369e-02
## CL 1.105565e-04 2.964369e-02 NA
## Distance.channel 0.000000e+00 0.000000e+00 1.328682e-04
## Vessels.activities.2019 7.912606e-01 1.108240e-10 1.961956e-05
## Distance.channel Vessels.activities.2019
## House.300 8.988816e-05 9.073633e-02
## Urban.600 0.000000e+00 3.324111e-04
## Order.trial 0.000000e+00 4.669252e-01
## JulianDay 0.000000e+00 1.393752e-10
## Hour.Platform 0.000000e+00 7.912606e-01
## ID.Temperature 0.000000e+00 1.108240e-10
## CL 1.328682e-04 1.961956e-05
## Distance.channel NA 0.000000e+00
## Vessels.activities.2019 0.000000e+00 NA
The Pearson correlation coefficients over 0.8 between House.200 and Urban.900 confirm the deletion of Urban.900 with the calculation of the GVIF^(1/(2*df))
In preliminary tests, we observed that we had convergence problems for the model with emergence of the turtle as the response variable. Thus, here, we are testing different model optimizer to include in our initial model before the verification of the model assumptions.
#model without optimizer
mod.emergence.full <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID) + (1|Site), data = df, family = binomial, na.action=na.exclude)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.127006 (tol = 0.002, component 1)
gm_all <- allFit(mod.emergence.full)
## bobyqa : [OK]
## Nelder_Mead :
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.0991471 (tol = 0.002, component 1)
## [OK]
## nlminbwrap : [OK]
## nmkbw : [OK]
## optimx.L-BFGS-B : [OK]
## nloptwrap.NLOPT_LN_NELDERMEAD :
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00217746 (tol = 0.002, component 1)
## [OK]
## nloptwrap.NLOPT_LN_BOBYQA : [OK]
t(sapply(gm_all,fixef))
## (Intercept) House.300.scaled
## bobyqa -1.039658 -0.2392512
## Nelder_Mead -1.042755 -0.2425455
## nlminbwrap -1.039652 -0.2392475
## nmkbw -1.039433 -0.2392864
## optimx.L-BFGS-B -1.039518 -0.2392432
## nloptwrap.NLOPT_LN_NELDERMEAD -1.039492 -0.2392655
## nloptwrap.NLOPT_LN_BOBYQA -1.039796 -0.2392890
## Distance.channel.scaled
## bobyqa -0.2677396
## Nelder_Mead -0.2617173
## nlminbwrap -0.2677339
## nmkbw -0.2677091
## optimx.L-BFGS-B -0.2676984
## nloptwrap.NLOPT_LN_NELDERMEAD -0.2676344
## nloptwrap.NLOPT_LN_BOBYQA -0.2677534
## Vessels.activities.2019.scaled Order.trial.scaled
## bobyqa 0.2919486 0.2971546
## Nelder_Mead 0.2830340 0.2961752
## nlminbwrap 0.2919385 0.2971546
## nmkbw 0.2919320 0.2971694
## optimx.L-BFGS-B 0.2919241 0.2971528
## nloptwrap.NLOPT_LN_NELDERMEAD 0.2918503 0.2971417
## nloptwrap.NLOPT_LN_BOBYQA 0.2919436 0.2971338
## SexM Tank.SiteT Year2020 JulianDay.scaled
## bobyqa -0.06305510 -1.891496 0.2065169 0.5615806
## Nelder_Mead -0.07079884 -1.883243 0.2158798 0.5611798
## nlminbwrap -0.06304787 -1.891486 0.2065190 0.5615721
## nmkbw -0.06323512 -1.891309 0.2064152 0.5616165
## optimx.L-BFGS-B -0.06305881 -1.891512 0.2064315 0.5616041
## nloptwrap.NLOPT_LN_NELDERMEAD -0.06307785 -1.891350 0.2064084 0.5614811
## nloptwrap.NLOPT_LN_BOBYQA -0.06312965 -1.891319 0.2066913 0.5615796
## Hour.Platform.scaled ID.Temperature.scaled
## bobyqa 0.04908472 0.05329818
## Nelder_Mead 0.04477836 0.05480058
## nlminbwrap 0.04908572 0.05331641
## nmkbw 0.04905547 0.05326379
## optimx.L-BFGS-B 0.04912007 0.05326761
## nloptwrap.NLOPT_LN_NELDERMEAD 0.04907895 0.05346595
## nloptwrap.NLOPT_LN_BOBYQA 0.04897886 0.05330129
## CL.scaled
## bobyqa -0.3144895
## Nelder_Mead -0.3198453
## nlminbwrap -0.3144818
## nmkbw -0.3145370
## optimx.L-BFGS-B -0.3144582
## nloptwrap.NLOPT_LN_NELDERMEAD -0.3144930
## nloptwrap.NLOPT_LN_BOBYQA -0.3145129
sapply(gm_all,logLik)
## bobyqa Nelder_Mead
## -542.5624 -542.5706
## nlminbwrap nmkbw
## -542.5624 -542.5624
## optimx.L-BFGS-B nloptwrap.NLOPT_LN_NELDERMEAD
## -542.5624 -542.5624
## nloptwrap.NLOPT_LN_BOBYQA
## -542.5624
We decided to use optimx.L-BFGS-B optimizer to include in our initial model.
mod.emergence.full <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID) + (1|Site), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
summary(mod.emergence.full)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled +
## (1 | ID) + (1 | Site)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1113.1 1181.9 -542.6 1085.1 990
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.9600 -0.4582 -0.3078 0.6286 3.9749
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 1.85404 1.3616
## Site (Intercept) 0.05486 0.2342
## Number of obs: 1004, groups: ID, 684; Site, 22
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.03952 0.26366 -3.943 8.06e-05 ***
## House.300.scaled -0.23924 0.14124 -1.694 0.09029 .
## Distance.channel.scaled -0.26770 0.14832 -1.805 0.07109 .
## Vessels.activities.2019.scaled 0.29192 0.13949 2.093 0.03637 *
## Order.trial.scaled 0.29715 0.11282 2.634 0.00844 **
## SexM -0.06306 0.23593 -0.267 0.78925
## Tank.SiteT -1.89151 0.41471 -4.561 5.09e-06 ***
## Year2020 0.20643 0.26491 0.779 0.43583
## JulianDay.scaled 0.56160 0.17940 3.131 0.00175 **
## Hour.Platform.scaled 0.04912 0.12524 0.392 0.69489
## ID.Temperature.scaled 0.05327 0.13938 0.382 0.70234
## CL.scaled -0.31446 0.14102 -2.230 0.02576 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 JlnDy.
## Hs.300.scld 0.046
## Dstnc.chnn. 0.191 0.169
## Vssl..2019. -0.229 -0.144 -0.449
## Ordr.trl.sc 0.049 -0.146 -0.069 0.115
## SexM -0.540 0.075 -0.016 -0.010 -0.069
## Tank.SiteT 0.054 0.047 -0.135 -0.066 -0.095 0.007
## Year2020 -0.564 -0.067 -0.147 0.227 -0.060 0.014 -0.195
## JulnDy.scld -0.077 0.252 0.232 -0.222 -0.102 0.037 -0.484 0.085
## Hr.Pltfrm.s 0.111 -0.035 0.044 -0.012 0.243 -0.011 -0.515 0.051 0.103
## ID.Tmprtr.s -0.015 0.139 -0.118 -0.079 0.049 0.017 0.306 -0.214 -0.401
## CL.scaled 0.040 -0.003 -0.028 -0.106 -0.161 0.344 0.179 -0.166 -0.042
## Hr.Pl. ID.Tm.
## Hs.300.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## SexM
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.Pltfrm.s
## ID.Tmprtr.s -0.060
## CL.scaled -0.020 -0.057
plot(mod.emergence.full)
hist(residuals(mod.emergence.full))
qqnorm(resid(mod.emergence.full))
First, we are testing if the identity of the turtle and the sampling site need to be added in the initial model. We are using likelihood ratio tests to test if the addition of these random variables make a significant effect on the initial model. We are using a dummy variable (same value for all the observations) to create a null mixed model to compared with the different combinations of mixed models.
REML is set at FALSE for the selection of random and fixed effects
see this link for more informations: https://stats.stackexchange.com/questions/272633/how-to-decide-whether-to-set-reml-to-true-or-false
## Null mixed model
mod.ad.null <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy), data = df, na.action=na.exclude, control=lmerControl(check.nlev.gtr.1="ignore"), REML = FALSE)
## only site identity as random variable
mod.ad.dummy.site <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy) + (1|Site), data = df, control=lmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude, REML = FALSE)
## only turtle identity as random variable
mod.ad.dummy.ID <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy) + (1|ID), data = df, control=lmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude, REML = FALSE)
## Turtle identity without the dummy variable
mod.ad.ID <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
## Turtle and site identity without the dummy variable
mod.ad.ID.site <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
The less complex model is always first.
anova(mod.ad.null, mod.ad.dummy.site)
## Data: df
## Models:
## mod.ad.null: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy)
## mod.ad.dummy.site: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy) + (1 | Site)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.null 14 2312.9 2380.0 -1142.5 2284.9
## mod.ad.dummy.site 15 2308.7 2380.5 -1139.3 2278.7 6.2863 1 0.01217 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.ad.null, mod.ad.dummy.ID)
## Data: df
## Models:
## mod.ad.null: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy)
## mod.ad.dummy.ID: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.null 14 2312.9 2380.0 -1142.5 2284.9
## mod.ad.dummy.ID 15 2251.5 2323.4 -1110.8 2221.5 63.423 1 1.667e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.ad.ID, mod.ad.ID.site)
## Data: df
## Models:
## mod.ad.ID: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## mod.ad.ID.site: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.ID 14 2249.5 2316.6 -1110.8 2221.5
## mod.ad.ID.site 15 2244.8 2316.6 -1107.4 2214.8 6.7234 1 0.009515 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The test is considered significant when chisq is over 3.84
For this model, we will need to keep turtle and site identity as random variables.
We are selecting the final model with the backward selection procedure. At each step, we deleted the variable with the higher p value. The deletion of each predictor variable is confirmed with a likelihood ratio test. We need to create a new dataset at each step to have only the rows with complete observations for all the preditors. It allow us to perform the likelihood ratio test that does not run between two models with not the same number of observations.
mod.ad.full <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
summary(mod.ad.full)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled +
## ID.Temperature.scaled + CL.scaled + (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2244.8 2316.6 -1107.4 2214.8 874
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.50194 -0.54956 -0.06127 0.49751 2.86035
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.44568 0.6676
## Site (Intercept) 0.02425 0.1557
## Residual 0.32234 0.5678
## Number of obs: 889, groups: ID, 701; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 0.824885 0.077979 99.511870 10.578
## House.200.scaled -0.131909 0.052073 24.150494 -2.533
## Distance.channel.scaled -0.148630 0.050410 25.171019 -2.948
## Vessels.activities.2019.scaled 0.196832 0.057428 18.770258 3.427
## Order.trial.scaled 0.021650 0.032774 364.841612 0.661
## SexM 0.298798 0.073782 678.403121 4.050
## Tank.SiteT -0.180610 0.122661 450.731154 -1.472
## Year2020 0.064083 0.077865 360.271219 0.823
## JulianDay.scaled 0.007927 0.062518 59.663331 0.127
## Hour.active.defenses.scaled 0.015288 0.036601 564.780898 0.418
## ID.Temperature.scaled 0.005124 0.044321 298.022016 0.116
## CL.scaled 0.114473 0.039361 639.693627 2.908
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## House.200.scaled 0.01821 *
## Distance.channel.scaled 0.00680 **
## Vessels.activities.2019.scaled 0.00286 **
## Order.trial.scaled 0.50929
## SexM 5.72e-05 ***
## Tank.SiteT 0.14160
## Year2020 0.41105
## JulianDay.scaled 0.89953
## Hour.active.defenses.scaled 0.67632
## ID.Temperature.scaled 0.90804
## CL.scaled 0.00376 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 JlnDy.
## Hs.200.scld 0.099
## Dstnc.chnn. 0.171 0.124
## Vssl..2019. -0.081 -0.080 -0.484
## Ordr.trl.sc 0.188 -0.046 -0.031 0.082
## SexM -0.613 0.045 -0.018 0.008 -0.039
## Tank.SiteT -0.153 0.001 -0.168 0.050 0.069 -0.041
## Year2020 -0.412 -0.220 -0.177 0.124 -0.115 0.043 -0.244
## JulnDy.scld 0.127 0.244 0.271 -0.295 -0.103 0.073 -0.435 0.052
## Hr.ctv.dfn. 0.095 0.065 0.082 -0.081 0.140 0.015 -0.537 0.177 0.133
## ID.Tmprtr.s 0.014 0.097 -0.119 -0.066 0.005 0.008 0.381 -0.299 -0.463
## CL.scaled -0.278 -0.037 -0.036 0.011 -0.043 0.377 -0.062 0.071 0.105
## Hr.c.. ID.Tm.
## Hs.200.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## SexM
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.ctv.dfn.
## ID.Tmprtr.s -0.036
## CL.scaled 0.063 -0.047
We will delete the turtle temperature (ID.Temperature.scaled)
mod.ad.1 <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$Year, df$JulianDay.scaled, df$ID.Temperature.scaled ,df$Hour.active.defenses.scaled, df$CL.scaled),]
mod.full.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.ad.1.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.ad.1.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.ad.1.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + CL.scaled + (1 | Site) + (1 | ID)
## mod.full.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + ID.Temperature.scaled + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.1.adjust 14 2242.8 2309.9 -1107.4 2214.8
## mod.full.adjust 15 2244.8 2316.6 -1107.4 2214.8 0.0133 1 0.9081
summary(mod.ad.1)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled +
## CL.scaled + (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2335.5 2403.1 -1153.7 2307.5 912
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.33687 -0.57126 -0.07135 0.50007 2.75759
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4007 0.6330
## Site (Intercept) 0.0248 0.1575
## Residual 0.3592 0.5994
## Number of obs: 926, groups: ID, 708; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 0.823364 0.077573 100.658603 10.614
## House.200.scaled -0.132758 0.051597 24.410584 -2.573
## Distance.channel.scaled -0.149222 0.050024 25.295331 -2.983
## Vessels.activities.2019.scaled 0.196718 0.057258 18.998104 3.436
## Order.trial.scaled 0.022680 0.032252 404.619126 0.703
## SexM 0.306544 0.072637 685.451716 4.220
## Tank.SiteT -0.172916 0.112791 323.450859 -1.533
## Year2020 0.058627 0.074170 348.137361 0.790
## JulianDay.scaled 0.007504 0.054813 42.013756 0.137
## Hour.active.defenses.scaled 0.018249 0.035376 544.948570 0.516
## CL.scaled 0.112766 0.038546 640.985682 2.925
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## House.200.scaled 0.01657 *
## Distance.channel.scaled 0.00624 **
## Vessels.activities.2019.scaled 0.00277 **
## Order.trial.scaled 0.48232
## SexM 2.77e-05 ***
## Tank.SiteT 0.12624
## Year2020 0.42981
## JulianDay.scaled 0.89176
## Hour.active.defenses.scaled 0.60617
## CL.scaled 0.00356 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 JlnDy.
## Hs.200.scld 0.096
## Dstnc.chnn. 0.176 0.139
## Vssl..2019. -0.078 -0.072 -0.496
## Ordr.trl.sc 0.191 -0.058 -0.019 0.073
## SexM -0.609 0.046 -0.018 0.008 -0.041
## Tank.SiteT -0.181 -0.038 -0.149 0.093 0.110 -0.048
## Year2020 -0.428 -0.208 -0.223 0.106 -0.124 0.051 -0.134
## JulnDy.scld 0.159 0.326 0.245 -0.365 -0.105 0.088 -0.341 -0.108
## Hr.ctv.dfn. 0.097 0.067 0.093 -0.095 0.103 0.011 -0.552 0.176 0.157
## CL.scaled -0.272 -0.033 -0.040 0.006 -0.050 0.378 -0.048 0.055 0.094
## Hr.c..
## Hs.200.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## SexM
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.ctv.dfn.
## CL.scaled 0.065
We will delete the Julian Day (JulianDay.scaled)
mod.ad.2 <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.active.defenses.scaled, df$CL.scaled),]
mod.full.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.ad.2.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.ad.2.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.ad.2.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled + (1 | Site) + (1 | ID)
## mod.full.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.active.defenses.scaled + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.2.adjust 13 2333.5 2396.3 -1153.7 2307.5
## mod.full.adjust 14 2335.5 2403.1 -1153.7 2307.5 0.017 1 0.8961
summary(mod.ad.2)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled +
## (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2333.5 2396.3 -1153.7 2307.5 913
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.33642 -0.57110 -0.07145 0.49996 2.75813
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.40048 0.6328
## Site (Intercept) 0.02543 0.1595
## Residual 0.35924 0.5994
## Number of obs: 926, groups: ID, 708; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.82199 0.07679 103.85805 10.705 < 2e-16
## House.200.scaled -0.13492 0.04905 25.28375 -2.751 0.01084
## Distance.channel.scaled -0.15084 0.04878 25.79642 -3.093 0.00472
## Vessels.activities.2019.scaled 0.19964 0.05366 19.20684 3.720 0.00143
## Order.trial.scaled 0.02305 0.03209 402.94796 0.718 0.47301
## SexM 0.30576 0.07236 681.21852 4.226 2.71e-05
## Tank.SiteT -0.16882 0.10623 230.63230 -1.589 0.11337
## Year2020 0.05897 0.07383 332.72104 0.799 0.42503
## Hour.active.defenses.scaled 0.01742 0.03496 612.02658 0.498 0.61843
## CL.scaled 0.11244 0.03838 634.15412 2.929 0.00352
##
## (Intercept) ***
## House.200.scaled *
## Distance.channel.scaled **
## Vessels.activities.2019.scaled **
## Order.trial.scaled
## SexM ***
## Tank.SiteT
## Year2020
## Hour.active.defenses.scaled
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 Hr.c..
## Hs.200.scld 0.046
## Dstnc.chnn. 0.142 0.064
## Vssl..2019. -0.021 0.054 -0.450
## Ordr.trl.sc 0.211 -0.025 0.007 0.038
## SexM -0.632 0.018 -0.041 0.044 -0.033
## Tank.SiteT -0.136 0.083 -0.071 -0.035 0.081 -0.019
## Year2020 -0.418 -0.183 -0.203 0.071 -0.137 0.061 -0.183
## Hr.ctv.dfn. 0.073 0.016 0.056 -0.040 0.121 -0.003 -0.537 0.197
## CL.scaled -0.291 -0.067 -0.065 0.043 -0.040 0.373 -0.017 0.066 0.051
We will delete the hour of the test (Hour.active.defenses.scaled)
mod.ad.3 <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$Year, df$Hour.active.defenses.scaled, df$CL.scaled),]
mod.full.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.ad.3.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.ad.3.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.ad.3.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + CL.scaled + (1 | Site) + (1 | ID)
## mod.full.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + Hour.active.defenses.scaled + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.3.adjust 12 2331.7 2389.7 -1153.9 2307.7
## mod.full.adjust 13 2333.5 2396.3 -1153.7 2307.5 0.2475 1 0.6189
summary(mod.ad.3)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + CL.scaled + (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2736.4 2796.3 -1356.2 2712.4 1079
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.28155 -0.62349 -0.07709 0.53823 3.10931
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.32853 0.5732
## Site (Intercept) 0.02815 0.1678
## Residual 0.42794 0.6542
## Number of obs: 1091, groups: ID, 714; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.83879 0.07397 92.98861 11.340 < 2e-16
## House.200.scaled -0.14391 0.04914 25.29328 -2.929 0.00711
## Distance.channel.scaled -0.13090 0.04905 25.64563 -2.668 0.01303
## Vessels.activities.2019.scaled 0.19467 0.05338 19.02046 3.647 0.00171
## Order.trial.scaled 0.04384 0.02735 700.47453 1.603 0.10937
## SexM 0.32307 0.06924 653.75623 4.666 3.73e-06
## Tank.SiteT -0.15989 0.07162 569.22734 -2.232 0.02598
## Year2020 0.05069 0.07093 354.53719 0.715 0.47536
## CL.scaled 0.10840 0.03687 635.31677 2.940 0.00340
##
## (Intercept) ***
## House.200.scaled **
## Distance.channel.scaled *
## Vessels.activities.2019.scaled **
## Order.trial.scaled
## SexM ***
## Tank.SiteT *
## Year2020
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020
## Hs.200.scld 0.054
## Dstnc.chnn. 0.128 0.064
## Vssl..2019. -0.029 0.066 -0.448
## Ordr.trl.sc 0.143 0.012 -0.005 -0.015
## SexM -0.625 0.021 -0.037 0.037 -0.042
## Tank.SiteT -0.047 0.074 -0.031 -0.038 0.355 -0.027
## Year2020 -0.451 -0.175 -0.201 0.060 -0.215 0.053 -0.109
## CL.scaled -0.284 -0.076 -0.066 0.043 -0.034 0.367 0.004 0.061
We will delete the year (Year)
mod.ad.4 <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$Year, df$CL.scaled),]
mod.full.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.ad.4.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.ad.4.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.ad.4.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + CL.scaled + (1 | Site) + (1 | ID)
## mod.full.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.4.adjust 11 2734.9 2789.8 -1356.4 2712.9
## mod.full.adjust 12 2736.4 2796.3 -1356.2 2712.4 0.483 1 0.4871
summary(mod.ad.4)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + CL.scaled + (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2734.9 2789.8 -1356.4 2712.9 1080
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.28249 -0.61878 -0.07975 0.52423 3.06436
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.32964 0.5741
## Site (Intercept) 0.03064 0.1750
## Residual 0.42689 0.6534
## Number of obs: 1091, groups: ID, 714; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.86202 0.06694 67.25674 12.877 < 2e-16
## House.200.scaled -0.13743 0.04949 25.31289 -2.777 0.01019
## Distance.channel.scaled -0.12406 0.04916 25.13232 -2.524 0.01831
## Vessels.activities.2019.scaled 0.19254 0.05467 19.94307 3.522 0.00215
## Order.trial.scaled 0.04685 0.02675 697.30770 1.751 0.08037
## SexM 0.32092 0.06923 655.95931 4.636 4.3e-06
## Tank.SiteT -0.15784 0.07138 576.98001 -2.211 0.02742
## CL.scaled 0.10740 0.03687 641.22721 2.913 0.00370
##
## (Intercept) ***
## House.200.scaled *
## Distance.channel.scaled *
## Vessels.activities.2019.scaled **
## Order.trial.scaled .
## SexM ***
## Tank.SiteT *
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 Ordr.. SexM Tnk.ST
## Hs.200.scld -0.028
## Dstnc.chnn. 0.042 0.030
## Vssl..2019. -0.001 0.079 -0.447
## Ordr.trl.sc 0.052 -0.026 -0.048 -0.003
## SexM -0.665 0.030 -0.027 0.033 -0.032
## Tank.SiteT -0.106 0.055 -0.052 -0.032 0.346 -0.022
## CL.scaled -0.285 -0.065 -0.054 0.039 -0.023 0.365 0.010
We will delete the order of the trial (Order.trial.scaled)
mod.ad.5 <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$CL.scaled),]
mod.full.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.ad.5.adjust <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.ad.5.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.ad.5.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled + (1 | Site) + (1 | ID)
## mod.full.adjust: active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.ad.5.adjust 10 2735.7 2785.7 -1357.9 2715.7
## mod.full.adjust 11 2734.9 2789.8 -1356.4 2712.9 2.8421 1 0.09182 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod.ad.5)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled +
## (1 | Site) + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2735.7 2785.7 -1357.9 2715.7 1081
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.32255 -0.61721 -0.07972 0.53876 2.97925
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.33610 0.5797
## Site (Intercept) 0.03778 0.1944
## Residual 0.42286 0.6503
## Number of obs: 1091, groups: ID, 714; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.85488 0.06949 63.44592 12.303 < 2e-16
## House.200.scaled -0.13463 0.05259 25.70409 -2.560 0.01671
## Distance.channel.scaled -0.12077 0.05221 25.21780 -2.313 0.02914
## Vessels.activities.2019.scaled 0.19329 0.05851 20.70255 3.303 0.00343
## SexM 0.32590 0.06954 664.53628 4.686 3.37e-06
## Tank.SiteT -0.20887 0.06708 558.21213 -3.114 0.00194
## CL.scaled 0.11033 0.03708 657.68228 2.975 0.00303
##
## (Intercept) ***
## House.200.scaled *
## Distance.channel.scaled *
## Vessels.activities.2019.scaled **
## SexM ***
## Tank.SiteT **
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 SexM Tnk.ST
## Hs.200.scld -0.028
## Dstnc.chnn. 0.041 0.030
## Vssl..2019. 0.004 0.081 -0.448
## SexM -0.643 0.026 -0.027 0.031
## Tank.SiteT -0.126 0.065 -0.034 -0.031 -0.013
## CL.scaled -0.275 -0.062 -0.053 0.037 0.365 0.016
We need to fit the REML to TRUE to calculate the summary statistics of the model.
mod.ad.final <- lmer(active.defenses ~ House.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled + (1|Site) + (1|ID), data = df, REML = TRUE, na.action=na.exclude)
summary(mod.ad.final)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: active.defenses ~ House.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Sex + Tank.Site + CL.scaled +
## (1 | Site) + (1 | ID)
## Data: df
##
## REML criterion at convergence: 2743.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.30641 -0.60610 -0.08527 0.52494 2.97977
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.33808 0.5814
## Site (Intercept) 0.05099 0.2258
## Residual 0.42343 0.6507
## Number of obs: 1091, groups: ID, 714; Site, 22
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.85355 0.07394 45.37461 11.544 4.25e-15
## House.200.scaled -0.13390 0.05781 20.46251 -2.316 0.03102
## Distance.channel.scaled -0.12190 0.05744 19.99195 -2.122 0.04650
## Vessels.activities.2019.scaled 0.19395 0.06495 17.02346 2.986 0.00829
## SexM 0.32747 0.06987 660.18254 4.687 3.38e-06
## Tank.SiteT -0.21805 0.06754 550.58716 -3.228 0.00132
## CL.scaled 0.11243 0.03731 653.49939 3.014 0.00268
##
## (Intercept) ***
## House.200.scaled *
## Distance.channel.scaled *
## Vessels.activities.2019.scaled **
## SexM ***
## Tank.SiteT **
## CL.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.200. Dstn.. V..201 SexM Tnk.ST
## Hs.200.scld -0.030
## Dstnc.chnn. 0.036 0.031
## Vssl..2019. 0.011 0.083 -0.449
## SexM -0.607 0.023 -0.025 0.027
## Tank.SiteT -0.118 0.059 -0.029 -0.029 -0.014
## CL.scaled -0.261 -0.058 -0.050 0.033 0.366 0.012
Quick visualization of the preditor effects
plot(allEffects(mod.ad.final))
r.squaredGLMM(mod.ad.final)
## R2m R2c
## [1,] 0.08179043 0.5214769
marginal: only for the fixed effect. conditional: both fixed and random effect.
confint(mod.ad.final, level = 0.95, method = "Wald")
## 2.5 % 97.5 %
## .sig01 NA NA
## .sig02 NA NA
## .sigma NA NA
## (Intercept) 0.70863757 0.99845973
## House.200.scaled -0.24721384 -0.02059445
## Distance.channel.scaled -0.23448490 -0.00932149
## Vessels.activities.2019.scaled 0.06664645 0.32124405
## SexM 0.19051818 0.46441761
## Tank.SiteT -0.35042096 -0.08567342
## CL.scaled 0.03930962 0.18555949
## Number of house with access to canal within 200 m
pred.mod.ad.house200 <- ggpredict(mod.ad.final, terms = "House.200.scaled")
pred.mod.ad.house200
## # Predicted values of active.defenses
##
## House.200.scaled | Predicted | 95% CI
## -------------------------------------------
## -0.76 | 0.96 | [0.79, 1.13]
## 0.02 | 0.86 | [0.71, 1.00]
## 0.81 | 0.75 | [0.58, 0.92]
## 1.59 | 0.65 | [0.42, 0.87]
## 2.37 | 0.54 | [0.24, 0.84]
## 3.15 | 0.44 | [0.06, 0.82]
##
## Adjusted for:
## * Distance.channel.scaled = -0.01
## * Vessels.activities.2019.scaled = -0.01
## * Sex = F
## * Tank.Site = S
## * CL.scaled = 0.06
## * Site = 0 (population-level)
## * ID = 0 (population-level)
## Shortest aquatic distance to the navigation channel
pred.mod.ad.channel <- ggpredict(mod.ad.final, terms = "Distance.channel.scaled")
pred.mod.ad.channel
## # Predicted values of active.defenses
##
## Distance.channel.scaled | Predicted | 95% CI
## ---------------------------------------------------
## -1.00 | 0.98 | [ 0.80, 1.16]
## -0.50 | 0.92 | [ 0.77, 1.07]
## 0.50 | 0.80 | [ 0.64, 0.95]
## 1.50 | 0.68 | [ 0.45, 0.90]
## 2.00 | 0.62 | [ 0.34, 0.89]
## 2.50 | 0.55 | [ 0.23, 0.87]
## 3.50 | 0.43 | [ 0.01, 0.86]
## 5.00 | 0.25 | [-0.34, 0.84]
##
## Adjusted for:
## * House.200.scaled = 0.00
## * Vessels.activities.2019.scaled = -0.01
## * Sex = F
## * Tank.Site = S
## * CL.scaled = 0.06
## * Site = 0 (population-level)
## * ID = 0 (population-level)
## Mean daily number of vessel crossings
pred.mod.ad.vessels <- ggpredict(mod.ad.final, terms = "Vessels.activities.2019.scaled")
pred.mod.ad.vessels
## # Predicted values of active.defenses
##
## Vessels.activities.2019.scaled | Predicted | 95% CI
## ---------------------------------------------------------
## -0.84 | 0.70 | [0.52, 0.88]
## -0.71 | 0.72 | [0.55, 0.89]
## -0.63 | 0.74 | [0.58, 0.90]
## -0.61 | 0.74 | [0.58, 0.91]
## -0.56 | 0.75 | [0.59, 0.91]
## -0.54 | 0.76 | [0.60, 0.92]
## 0.03 | 0.87 | [0.72, 1.01]
## 2.56 | 1.36 | [1.00, 1.72]
##
## Adjusted for:
## * House.200.scaled = 0.00
## * Distance.channel.scaled = -0.01
## * Sex = F
## * Tank.Site = S
## * CL.scaled = 0.06
## * Site = 0 (population-level)
## * ID = 0 (population-level)
## New dataset to only have complete observations for all the variables
df.ajust.final.model <- df[complete.cases(df$active.defenses, df$House.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Sex, df$Tank.Site, df$CL.scaled),]
graph.house200 <- ggplot(data=pred.mod.ad.house200, aes(x, predicted)) + geom_point(data=df.ajust.final.model, aes(House.200.scaled, active.defenses), position = "jitter") +
geom_ribbon(data=pred.mod.ad.house200, aes(ymin=conf.low, ymax= conf.high), alpha=0.6) +
geom_line(data=pred.mod.ad.house200, color="black")+
theme_bw() + theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black")) +
theme(axis.text=element_text(size=15, colour="black",face = "bold")) +
ylab("Sum of active defensive behaviors") +
xlab("Number of houses within 200m")
graph.house200
graph.vessels <- ggplot(data=pred.mod.ad.vessels, aes(x, predicted)) + geom_point(data=df.ajust.final.model, aes(Vessels.activities.2019.scaled, active.defenses), position = "jitter") +
geom_ribbon(data=pred.mod.ad.vessels, aes(ymin=conf.low, ymax= conf.high), alpha=0.6) +
geom_line(data=pred.mod.ad.vessels, color="black")+
theme_bw() + theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black")) +
theme(axis.text=element_text(size=15, colour="black",face = "bold")) +
ylab("Sum of active defensive behaviors") +
xlab("Mean daily number of vessel crossings")
graph.vessels
First, we are testing if the identity of the turtle and the sampling site need to be added in the initial model. We are using likelihood ratio tests to test if the addition of these random variables make a significant effect on the initial model. We are using a dummy variable (same value for all the observations) to create a null mixed model to compared with the different combinations of mixed models.
REML is set at FALSE for the selection of random and fixed effects
see this link for more informations: https://stats.stackexchange.com/questions/272633/how-to-decide-whether-to-set-reml-to-true-or-false
## Null mixed model
mod.escape.null <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|dummy), data = df, na.action=na.exclude, control=lmerControl(check.nlev.gtr.1="ignore"), REML = FALSE)
## only site identity as random variable
mod.escape.dummy.site <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|dummy) + (1|Site), data = df, control=lmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude, REML = FALSE)
## only turtle identity as random variable
mod.escape.dummy.ID <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|dummy) + (1|ID), data = df, control=lmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude, REML = FALSE)
## Turtle identity without the dummy variable
mod.escape.ID <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
## Turtle and site identity without the dummy variable
mod.escape.ID.site <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|Site) + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
The less complex model is always first.
anova(mod.escape.null, mod.escape.dummy.site)
## Data: df
## Models:
## mod.escape.null: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | dummy)
## mod.escape.dummy.site: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | dummy) + (1 | Site)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.null 16 2630.6 2706.8 -1299.3 2598.6
## mod.escape.dummy.site 17 2630.8 2711.7 -1298.4 2596.8 1.8206 1 0.1772
anova(mod.escape.null, mod.escape.dummy.ID)
## Data: df
## Models:
## mod.escape.null: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | dummy)
## mod.escape.dummy.ID: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | dummy) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.null 16 2630.6 2706.8 -1299.3 2598.6
## mod.escape.dummy.ID 17 2580.5 2661.4 -1273.2 2546.5 52.087 1 5.309e-13
##
## mod.escape.null
## mod.escape.dummy.ID ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.escape.ID, mod.escape.ID.site)
## Data: df
## Models:
## mod.escape.ID: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.escape.ID.site: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.ID 16 2578.5 2654.7 -1273.2 2546.5
## mod.escape.ID.site 17 2580.2 2661.2 -1273.1 2546.2 0.2413 1 0.6233
Site identity does not have a significant effect on the initial model. We are only keeping turtle identity in our model.
We are selecting the final model with the backward selection procedure. At each step, we deleted the variable with the higher p value. The deletion of each predictor variable is confirmed with a likelihood ratio test. We need to create a new dataset at each step to have only the rows with complete observations for all the preditors. It allow us to perform the likelihood ratio test that does not run between two models with not the same number of observations.
mod.escape.full <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
summary(mod.escape.full)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula:
## log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Sex +
## Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled +
## ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2578.5 2654.7 -1273.2 2546.5 848
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3594 -0.5406 -0.0574 0.4792 3.2932
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4736 0.6882
## Residual 0.7210 0.8491
## Number of obs: 864, groups: ID, 579
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 3.359760 0.094461 682.902375 35.568
## House.400.scaled 0.026837 0.061716 570.910245 0.435
## Urban.200.scaled 0.093267 0.063690 472.867253 1.464
## Distance.channel.scaled 0.016669 0.051795 602.037986 0.322
## Vessels.activities.2019.scaled -0.040090 0.054866 508.910133 -0.731
## Order.trial.scaled -0.255849 0.041091 736.238739 -6.226
## SexM 0.004524 0.091650 547.696647 0.049
## Tank.SiteT 0.341335 0.152755 854.698187 2.235
## Year2020 -0.099757 0.091444 695.706148 -1.091
## JulianDay.scaled 0.157908 0.073646 613.763768 2.144
## Hour.Platform.scaled -0.092431 0.046730 861.998943 -1.978
## ID.Temperature.scaled -0.141341 0.056543 826.634692 -2.500
## CL.scaled 0.167077 0.049090 564.224148 3.403
## Wind.scaled -0.130198 0.049839 850.478505 -2.612
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## House.400.scaled 0.663834
## Urban.200.scaled 0.143752
## Distance.channel.scaled 0.747695
## Vessels.activities.2019.scaled 0.465302
## Order.trial.scaled 8.02e-10 ***
## SexM 0.960647
## Tank.SiteT 0.025706 *
## Year2020 0.275692
## JulianDay.scaled 0.032413 *
## Hour.Platform.scaled 0.048247 *
## ID.Temperature.scaled 0.012622 *
## CL.scaled 0.000713 ***
## Wind.scaled 0.009150 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 14 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
We will delete sex (Sex)
mod.escape.1 <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$House.400.scaled, df$Urban.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Sex, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.1.adjust <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.1.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.1.adjust: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.1.adjust 15 2576.5 2647.9 -1273.2 2546.5
## mod.full.adjust 16 2578.5 2654.7 -1273.2 2546.5 0.0024 1 0.9606
summary(mod.escape.1)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula:
## log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled +
## Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site +
## Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled +
## CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2656.1 2727.9 -1313.0 2626.1 874
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3078 -0.5526 -0.0605 0.4765 3.2749
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4451 0.6672
## Residual 0.7483 0.8650
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.37373 0.07396 771.99286 45.618 < 2e-16
## House.400.scaled 0.04578 0.06002 594.97690 0.763 0.44590
## Urban.200.scaled 0.08225 0.06190 476.89894 1.329 0.18462
## Distance.channel.scaled 0.02503 0.05131 617.01907 0.488 0.62584
## Vessels.activities.2019.scaled -0.05112 0.05357 517.75618 -0.954 0.34041
## Order.trial.scaled -0.26135 0.04092 776.13527 -6.386 2.92e-10
## Tank.SiteT 0.29331 0.15160 882.12001 1.935 0.05334
## Year2020 -0.08493 0.08971 713.47763 -0.947 0.34408
## JulianDay.scaled 0.16223 0.07241 619.91443 2.240 0.02541
## Hour.Platform.scaled -0.08526 0.04660 887.94279 -1.830 0.06766
## ID.Temperature.scaled -0.15778 0.05560 844.78424 -2.838 0.00465
## CL.scaled 0.15343 0.04196 568.75964 3.656 0.00028
## Wind.scaled -0.14789 0.04950 878.08835 -2.988 0.00289
##
## (Intercept) ***
## House.400.scaled
## Urban.200.scaled
## Distance.channel.scaled
## Vessels.activities.2019.scaled
## Order.trial.scaled ***
## Tank.SiteT .
## Year2020
## JulianDay.scaled *
## Hour.Platform.scaled .
## ID.Temperature.scaled **
## CL.scaled ***
## Wind.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 13 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
We will delete the distance to the navigation channel (Distance.channel.scaled)
mod.escape.2 <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$House.400.scaled, df$Urban.200.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.2.adjust <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.2.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.2.adjust: log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ House.400.scaled + Urban.200.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.2.adjust 14 2654.3 2721.4 -1313.2 2626.3
## mod.full.adjust 15 2656.1 2727.9 -1313.0 2626.1 0.2368 1 0.6266
summary(mod.escape.2)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula:
## log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled +
## Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2654.3 2721.4 -1313.2 2626.3 875
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3164 -0.5501 -0.0611 0.4815 3.2641
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4476 0.6690
## Residual 0.7469 0.8642
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.36989 0.07357 774.87274 45.804 < 2e-16
## House.400.scaled 0.03198 0.05292 632.25994 0.604 0.545860
## Urban.200.scaled 0.08655 0.06130 486.87999 1.412 0.158634
## Vessels.activities.2019.scaled -0.03515 0.04237 558.71779 -0.830 0.407154
## Order.trial.scaled -0.25938 0.04072 771.49261 -6.370 3.24e-10
## Tank.SiteT 0.30520 0.14960 884.67570 2.040 0.041640
## Year2020 -0.08125 0.08946 722.69354 -0.908 0.364049
## JulianDay.scaled 0.14790 0.06628 604.34004 2.231 0.026025
## Hour.Platform.scaled -0.08428 0.04657 888.11020 -1.810 0.070688
## ID.Temperature.scaled -0.15366 0.05499 846.42851 -2.794 0.005318
## CL.scaled 0.15478 0.04190 568.53209 3.694 0.000242
## Wind.scaled -0.14656 0.04943 878.82156 -2.965 0.003107
##
## (Intercept) ***
## House.400.scaled
## Urban.200.scaled
## Vessels.activities.2019.scaled
## Order.trial.scaled ***
## Tank.SiteT *
## Year2020
## JulianDay.scaled *
## Hour.Platform.scaled .
## ID.Temperature.scaled **
## CL.scaled ***
## Wind.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.400. U.200. V..201 Ordr.. Tnk.ST Yr2020 JlnDy. Hr.Pl.
## Hs.400.scld -0.238
## Urbn.200.sc 0.013 -0.198
## Vssl..2019. 0.026 -0.287 0.091
## Ordr.trl.sc 0.264 -0.045 -0.231 0.005
## Tank.SiteT -0.385 0.217 0.019 -0.074 -0.003
## Year2020 -0.643 0.204 -0.063 0.013 -0.223 -0.128
## JulnDy.scld -0.195 0.232 0.294 -0.201 -0.251 -0.203 0.258
## Hr.Pltfrm.s 0.362 -0.145 -0.004 0.022 0.216 -0.534 -0.092 -0.062
## ID.Tmprtr.s -0.176 0.011 0.174 -0.207 -0.002 0.377 -0.186 -0.147 -0.155
## CL.scaled -0.089 -0.085 -0.031 0.015 -0.035 -0.014 0.086 0.140 0.015
## Wind.scaled -0.168 0.165 0.084 -0.002 0.001 0.558 -0.183 0.013 -0.069
## ID.Tm. CL.scl
## Hs.400.scld
## Urbn.200.sc
## Vssl..2019.
## Ordr.trl.sc
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.Pltfrm.s
## ID.Tmprtr.s
## CL.scaled 0.020
## Wind.scaled 0.143 -0.023
We will delete the number of houses within 400m (House.400.scaled)
mod.escape.3 <- lmer(log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$House.400.scaled, df$Urban.200.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.3.adjust <- lmer(log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.3.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.3.adjust: log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ House.400.scaled + Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.3.adjust 13 2652.7 2714.9 -1313.3 2626.7
## mod.full.adjust 14 2654.3 2721.4 -1313.2 2626.3 0.365 1 0.5457
summary(mod.escape.3)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled +
## Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2652.7 2714.9 -1313.3 2626.7 876
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3200 -0.5538 -0.0604 0.4847 3.2628
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4472 0.6687
## Residual 0.7476 0.8646
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.38048 0.07146 752.34238 47.304 < 2e-16
## Urban.200.scaled 0.09392 0.06009 492.77974 1.563 0.118673
## Vessels.activities.2019.scaled -0.02778 0.04058 582.19727 -0.685 0.493899
## Order.trial.scaled -0.25827 0.04069 773.78365 -6.348 3.72e-10
## Tank.SiteT 0.28559 0.14606 888.80644 1.955 0.050862
## Year2020 -0.09229 0.08759 728.07789 -1.054 0.292396
## JulianDay.scaled 0.13861 0.06447 605.28452 2.150 0.031957
## Hour.Platform.scaled -0.08022 0.04609 888.63947 -1.741 0.082113
## ID.Temperature.scaled -0.15406 0.05500 845.30185 -2.801 0.005206
## CL.scaled 0.15693 0.04175 564.03520 3.759 0.000189
## Wind.scaled -0.15149 0.04876 880.39775 -3.107 0.001952
##
## (Intercept) ***
## Urban.200.scaled
## Vessels.activities.2019.scaled
## Order.trial.scaled ***
## Tank.SiteT .
## Year2020
## JulianDay.scaled *
## Hour.Platform.scaled .
## ID.Temperature.scaled **
## CL.scaled ***
## Wind.scaled **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) U.200. V..201 Ordr.. Tnk.ST Yr2020 JlnDy. Hr.Pl. ID.Tm.
## Urbn.200.sc -0.036
## Vssl..2019. -0.046 0.036
## Ordr.trl.sc 0.261 -0.245 -0.008
## Tank.SiteT -0.351 0.065 -0.012 0.006
## Year2020 -0.625 -0.024 0.076 -0.219 -0.180
## JulnDy.scld -0.148 0.357 -0.144 -0.248 -0.267 0.221
## Hr.Pltfrm.s 0.341 -0.034 -0.021 0.212 -0.521 -0.064 -0.030
## ID.Tmprtr.s -0.178 0.180 -0.213 -0.002 0.383 -0.192 -0.154 -0.155
## CL.scaled -0.113 -0.049 -0.010 -0.039 0.005 0.106 0.165 0.003 0.021
## Wind.scaled -0.134 0.121 0.048 0.008 0.542 -0.224 -0.026 -0.046 0.143
## CL.scl
## Urbn.200.sc
## Vssl..2019.
## Ordr.trl.sc
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.Pltfrm.s
## ID.Tmprtr.s
## CL.scaled
## Wind.scaled -0.009
We will delete the mean daily number of vessel crossings (Vessel.activities.2019.scaled)
mod.escape.4 <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$Urban.200.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.4.adjust <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.4.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.4.adjust: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ Urban.200.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.4.adjust 12 2651.2 2708.6 -1313.6 2627.2
## mod.full.adjust 13 2652.7 2714.9 -1313.3 2626.7 0.4685 1 0.4937
summary(mod.escape.4)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site +
## Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled +
## CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2651.1 2708.6 -1313.6 2627.1 877
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3308 -0.5591 -0.0591 0.4905 3.2651
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4470 0.6686
## Residual 0.7482 0.8650
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.37824 0.07140 758.82702 47.312 < 2e-16 ***
## Urban.200.scaled 0.09540 0.06006 491.85232 1.589 0.112804
## Order.trial.scaled -0.25850 0.04070 773.75364 -6.352 3.63e-10 ***
## Tank.SiteT 0.28440 0.14609 888.86539 1.947 0.051875 .
## Year2020 -0.08775 0.08735 738.14739 -1.005 0.315443
## JulianDay.scaled 0.13227 0.06381 609.96917 2.073 0.038610 *
## Hour.Platform.scaled -0.08089 0.04609 888.45303 -1.755 0.079585 .
## ID.Temperature.scaled -0.16208 0.05375 830.54029 -3.016 0.002643 **
## CL.scaled 0.15665 0.04176 563.99610 3.751 0.000194 ***
## Wind.scaled -0.14989 0.04872 880.29271 -3.077 0.002158 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) U.200. Ordr.. Tnk.ST Yr2020 JlnDy. Hr.Pl. ID.Tm. CL.scl
## Urbn.200.sc -0.035
## Ordr.trl.sc 0.261 -0.245
## Tank.SiteT -0.352 0.066 0.006
## Year2020 -0.624 -0.026 -0.219 -0.180
## JulnDy.scld -0.156 0.366 -0.252 -0.272 0.235
## Hr.Pltfrm.s 0.341 -0.033 0.212 -0.521 -0.063 -0.033
## ID.Tmprtr.s -0.193 0.192 -0.004 0.390 -0.181 -0.190 -0.163
## CL.scaled -0.113 -0.049 -0.039 0.005 0.107 0.165 0.003 0.020
## Wind.scaled -0.132 0.119 0.009 0.544 -0.228 -0.019 -0.045 0.157 -0.009
We will delete year (Year)
mod.escape.5 <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$Urban.200.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.5.adjust <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.5.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.5.adjust: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.5.adjust 11 2650.2 2702.8 -1314.1 2628.2
## mod.full.adjust 12 2651.2 2708.6 -1313.6 2627.2 1.0058 1 0.3159
summary(mod.escape.5)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site +
## JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled +
## CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2650.2 2702.8 -1314.1 2628.2 878
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3344 -0.5547 -0.0696 0.4788 3.2674
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4511 0.6716
## Residual 0.7466 0.8641
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.33356 0.05587 798.55711 59.668 < 2e-16 ***
## Urban.200.scaled 0.09373 0.06014 491.10802 1.559 0.119751
## Order.trial.scaled -0.26742 0.03971 759.10858 -6.734 3.27e-11 ***
## Tank.SiteT 0.25799 0.14379 888.98576 1.794 0.073126 .
## JulianDay.scaled 0.14718 0.06211 610.70883 2.370 0.018108 *
## Hour.Platform.scaled -0.08368 0.04602 887.83908 -1.818 0.069357 .
## ID.Temperature.scaled -0.17171 0.05291 814.07305 -3.245 0.001222 **
## CL.scaled 0.16114 0.04158 565.06718 3.875 0.000119 ***
## Wind.scaled -0.16100 0.04745 885.05546 -3.393 0.000723 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) U.200. Ordr.. Tnk.ST JlnDy. Hr.Pl. ID.Tm. CL.scl
## Urbn.200.sc -0.065
## Ordr.trl.sc 0.163 -0.257
## Tank.SiteT -0.603 0.062 -0.033
## JulnDy.scld -0.012 0.383 -0.211 -0.240
## Hr.Pltfrm.s 0.386 -0.035 0.203 -0.542 -0.019
## ID.Tmprtr.s -0.397 0.190 -0.045 0.369 -0.155 -0.178
## CL.scaled -0.060 -0.046 -0.016 0.024 0.145 0.010 0.039
## Wind.scaled -0.361 0.116 -0.044 0.525 0.036 -0.061 0.121 0.016
We will delete the proportion of urban area within 200m (Urban.200.scaled)
mod.escape.6 <- lmer(log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$Urban.200.scaled, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.6.adjust <- lmer(log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.6.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.6.adjust: log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ Urban.200.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.6.adjust 10 2650.6 2698.5 -1315.3 2630.6
## mod.full.adjust 11 2650.2 2702.8 -1314.1 2628.2 2.4176 1 0.12
summary(mod.escape.6)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled +
## Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2650.6 2698.5 -1315.3 2630.6 879
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3637 -0.5388 -0.0643 0.4778 3.2756
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4584 0.6770
## Residual 0.7444 0.8628
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.33919 0.05587 784.81329 59.767 < 2e-16 ***
## Order.trial.scaled -0.25158 0.03840 804.18070 -6.551 1.02e-10 ***
## Tank.SiteT 0.24428 0.14372 888.68953 1.700 0.089540 .
## JulianDay.scaled 0.10996 0.05754 595.28856 1.911 0.056506 .
## Hour.Platform.scaled -0.08101 0.04605 887.79102 -1.759 0.078918 .
## ID.Temperature.scaled -0.18708 0.05206 787.71270 -3.594 0.000346 ***
## CL.scaled 0.16416 0.04166 567.08104 3.940 9.16e-05 ***
## Wind.scaled -0.16939 0.04719 887.52895 -3.589 0.000350 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Ordr.. Tnk.ST JlnDy. Hr.Pl. ID.Tm. CL.scl
## Ordr.trl.sc 0.152
## Tank.SiteT -0.601 -0.016
## JulnDy.scld 0.013 -0.127 -0.285
## Hr.Pltfrm.s 0.385 0.201 -0.542 -0.006
## ID.Tmprtr.s -0.393 0.004 0.365 -0.252 -0.174
## CL.scaled -0.063 -0.029 0.027 0.177 0.008 0.049
## Wind.scaled -0.356 -0.014 0.522 -0.009 -0.057 0.101 0.021
We will delete the global environment of the test (Tank.Site)
mod.escape.7 <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.7.adjust <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.7.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.7.adjust: log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.7.adjust 9 2651.4 2694.6 -1316.7 2633.4
## mod.full.adjust 10 2650.6 2698.5 -1315.3 2630.6 2.8841 1 0.08946 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod.escape.7)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula:
## log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled +
## ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2651.5 2694.6 -1316.7 2633.5 880
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3041 -0.5405 -0.0643 0.4724 3.2829
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4590 0.6775
## Residual 0.7474 0.8645
## Number of obs: 889, groups: ID, 594
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.39623 0.04473 528.39160 75.922 < 2e-16 ***
## Order.trial.scaled -0.25048 0.03847 811.48122 -6.512 1.30e-10 ***
## JulianDay.scaled 0.13786 0.05523 548.86303 2.496 0.012854 *
## Hour.Platform.scaled -0.03864 0.03878 877.89161 -0.996 0.319295
## ID.Temperature.scaled -0.21943 0.04854 807.58948 -4.521 7.09e-06 ***
## CL.scaled 0.16226 0.04171 565.67264 3.890 0.000112 ***
## Wind.scaled -0.21129 0.04032 888.46792 -5.241 2.00e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Ordr.. JlnDy. Hr.Pl. ID.Tm. CL.scl
## Ordr.trl.sc 0.178
## JulnDy.scld -0.207 -0.138
## Hr.Pltfrm.s 0.089 0.228 -0.199
## ID.Tmprtr.s -0.233 0.011 -0.165 0.030
## CL.scaled -0.059 -0.029 0.192 0.027 0.042
## Wind.scaled -0.062 -0.006 0.171 0.314 -0.113 0.009
We will delete the hour (Hour.Platform)
mod.escape.8 <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = FALSE)
df.adjust <- df[complete.cases(df$log.escape, df$Order.trial.scaled, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled, df$Wind.scaled),]
mod.full.adjust <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
mod.escape.8.adjust <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df.adjust, na.action=na.exclude, REML = FALSE)
anova(mod.escape.8.adjust, mod.full.adjust)
## Data: df.adjust
## Models:
## mod.escape.8.adjust: log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## mod.full.adjust: log.escape ~ Order.trial.scaled + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.escape.8.adjust 8 2650.4 2688.8 -1317.2 2634.4
## mod.full.adjust 9 2651.4 2694.6 -1316.7 2633.4 0.9897 1 0.3198
summary(mod.escape.8)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula:
## log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled +
## CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## AIC BIC logLik deviance df.resid
## 2732.7 2771.3 -1358.4 2716.7 911
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3095 -0.5513 -0.0602 0.4761 3.2045
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4515 0.6720
## Residual 0.7514 0.8669
## Number of obs: 919, groups: ID, 596
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.40111 0.04426 549.82575 76.849 < 2e-16 ***
## Order.trial.scaled -0.23129 0.03598 855.69664 -6.428 2.14e-10 ***
## JulianDay.scaled 0.14069 0.05293 525.67320 2.658 0.0081 **
## ID.Temperature.scaled -0.19946 0.04676 868.37804 -4.266 2.21e-05 ***
## CL.scaled 0.16694 0.04144 582.86640 4.029 6.35e-05 ***
## Wind.scaled -0.17599 0.03580 893.79900 -4.916 1.05e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Ordr.. JlnDy. ID.Tm. CL.scl
## Ordr.trl.sc 0.150
## JulnDy.scld -0.204 -0.151
## ID.Tmprtr.s -0.241 0.038 -0.144
## CL.scaled -0.063 -0.036 0.207 0.033
## Wind.scaled -0.122 -0.195 0.205 -0.109 -0.001
No variable related to human disturbance is significant.
We need to fit the REML to TRUE to calculate the summary statistics of the model.
mod.escape.final <- lmer(log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled + CL.scaled + Wind.scaled + (1|ID), data = df, na.action=na.exclude, REML = TRUE)
summary(mod.escape.final)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula:
## log.escape ~ Order.trial.scaled + JulianDay.scaled + ID.Temperature.scaled +
## CL.scaled + Wind.scaled + (1 | ID)
## Data: df
##
## REML criterion at convergence: 2743.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3047 -0.5472 -0.0598 0.4751 3.1972
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 0.4576 0.6764
## Residual 0.7543 0.8685
## Number of obs: 919, groups: ID, 596
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 3.40101 0.04444 546.75913 76.525 < 2e-16 ***
## Order.trial.scaled -0.23150 0.03609 849.72025 -6.415 2.33e-10 ***
## JulianDay.scaled 0.14062 0.05316 522.77681 2.645 0.00841 **
## ID.Temperature.scaled -0.19920 0.04692 862.74430 -4.245 2.42e-05 ***
## CL.scaled 0.16696 0.04161 579.05456 4.013 6.79e-05 ***
## Wind.scaled -0.17591 0.03591 888.31626 -4.899 1.15e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Ordr.. JlnDy. ID.Tm. CL.scl
## Ordr.trl.sc 0.151
## JulnDy.scld -0.204 -0.151
## ID.Tmprtr.s -0.241 0.038 -0.144
## CL.scaled -0.063 -0.036 0.207 0.033
## Wind.scaled -0.123 -0.195 0.205 -0.110 -0.001
Quick visualization of the preditor effects
plot(allEffects(mod.escape.final))
r.squaredGLMM(mod.escape.final)
## R2m R2c
## [1,] 0.104123 0.4423867
marginal: only for the fixed effect. conditional: both fixed and random effect.
confint(mod.escape.final, level = 0.95, method = "Wald")
## 2.5 % 97.5 %
## .sig01 NA NA
## .sigma NA NA
## (Intercept) 3.31390076 3.4881153
## Order.trial.scaled -0.30222514 -0.1607714
## JulianDay.scaled 0.03643371 0.2447981
## ID.Temperature.scaled -0.29116991 -0.1072327
## CL.scaled 0.08541190 0.2485132
## Wind.scaled -0.24629549 -0.1055340
First, we are testing if the identity of the turtle and the sampling site need to be added in the initial model. We are using likelihood ratio tests to test if the addition of these random variables make a significant effect on the initial model. We are using a dummy variable (same value for all the observations) to create a null mixed model to compared with the different combinations of mixed models.
For generalized mixed models, there is no REML option.
## Null mixed model
mod.emergence.null <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy), data = df, family = binomial, control=glmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude)
## only site identity as random variable
mod.emergence.dummy.site <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy) + (1|Site), data = df, family = binomial, control=glmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude)
## only turtle identity as random variable
mod.emergence.dummy.ID <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|dummy) + (1|ID), data = df, family = binomial, control=glmerControl(check.nlev.gtr.1="ignore"), na.action=na.exclude)
## Turtle identity without the dummy variable
mod.emergence.ID <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
## Turtle and site identity without the dummy variable
mod.emergence.ID.site <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|Site) + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
The less complex model is always first.
anova(mod.emergence.null, mod.emergence.dummy.site)
## Data: df
## Models:
## mod.emergence.null: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy)
## mod.emergence.dummy.site: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy) + (1 | Site)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.null 13 1142.9 1206.8 -558.45 1116.9
## mod.emergence.dummy.site 14 1137.2 1206.0 -554.60 1109.2 7.6971 1
## Pr(>Chisq)
## mod.emergence.null
## mod.emergence.dummy.site 0.005531 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.emergence.null, mod.emergence.dummy.ID)
## Data: df
## Models:
## mod.emergence.null: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy)
## mod.emergence.dummy.ID: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | dummy) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.emergence.null 13 1142.9 1206.8 -558.45 1116.9
## mod.emergence.dummy.ID 14 1113.4 1182.1 -542.68 1085.4 31.55 1 1.944e-08
##
## mod.emergence.null
## mod.emergence.dummy.ID ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod.emergence.ID, mod.emergence.ID.site)
## Data: df
## Models:
## mod.emergence.ID: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## mod.emergence.ID.site: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | Site) + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod.emergence.ID 13 1111.3 1175.2 -542.65 1085.3
## mod.emergence.ID.site 14 1113.1 1181.9 -542.56 1085.1 0.1714 1 0.6788
When combined with turtle identity, site identity is not significant. Thus, site identity was not kept in the initial model.
We are selecting the final model with the backward selection procedure. At each step, we deleted the variable with the higher p value. The deletion of each predictor variable is confirmed with a likelihood ratio test. We need to create a new dataset at each step to have only the rows with complete observations for all the preditors. It allow us to perform the likelihood ratio test that does not run between two models with not the same number of observations.
mod.emergence.full <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
summary(mod.emergence.full)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Sex + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1111.3 1175.1 -542.6 1085.3 991
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.0712 -0.4348 -0.2919 0.6191 4.2215
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 2.167 1.472
## Number of obs: 1004, groups: ID, 684
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.08832 0.25334 -4.296 1.74e-05 ***
## House.300.scaled -0.24078 0.13427 -1.793 0.072940 .
## Distance.channel.scaled -0.26125 0.13935 -1.875 0.060821 .
## Vessels.activities.2019.scaled 0.30458 0.12788 2.382 0.017224 *
## Order.trial.scaled 0.31098 0.11169 2.784 0.005363 **
## SexM -0.07172 0.24168 -0.297 0.766639
## Tank.SiteT -1.94050 0.41256 -4.704 2.56e-06 ***
## Year2020 0.26499 0.23502 1.128 0.259509
## JulianDay.scaled 0.57255 0.17220 3.325 0.000885 ***
## Hour.Platform.scaled 0.05927 0.12331 0.481 0.630738
## ID.Temperature.scaled 0.05879 0.13573 0.433 0.664916
## CL.scaled -0.34771 0.13113 -2.652 0.008009 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. SexM Tnk.ST Yr2020 JlnDy.
## Hs.300.scld 0.054
## Dstnc.chnn. 0.247 0.169
## Vssl..2019. -0.227 -0.156 -0.478
## Ordr.trl.sc 0.125 -0.159 -0.108 0.094
## SexM -0.594 0.086 -0.007 -0.002 -0.056
## Tank.SiteT 0.028 0.055 -0.121 -0.070 -0.060 0.000
## Year2020 -0.505 -0.075 -0.230 0.211 -0.180 0.050 -0.121
## JulnDy.scld -0.083 0.233 0.222 -0.199 -0.141 0.044 -0.501 0.041
## Hr.Pltfrm.s 0.160 -0.048 0.023 -0.020 0.221 -0.004 -0.479 -0.015 0.064
## ID.Tmprtr.s 0.001 0.138 -0.136 -0.112 0.037 0.022 0.329 -0.259 -0.420
## CL.scaled -0.084 -0.001 0.028 -0.067 -0.076 0.350 0.123 0.024 -0.003
## Hr.Pl. ID.Tm.
## Hs.300.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## SexM
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.Pltfrm.s
## ID.Tmprtr.s -0.074
## CL.scaled 0.054 -0.034
We will delete sex (Sex)
mod.emergence.1 <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Sex, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Sex + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.1.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.1.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.1.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Sex + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.1.adjust 12 1109.4 1168.3 -542.69 1085.4
## mod.full.emergence.adjust 13 1111.3 1175.2 -542.65 1085.3 0.0886 1
## Pr(>Chisq)
## mod.emergence.1.adjust
## mod.full.emergence.adjust 0.7659
summary(mod.emergence.1)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1136.4 1195.6 -556.2 1112.4 1017
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.0741 -0.4311 -0.2848 0.6068 4.2163
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 2.298 1.516
## Number of obs: 1029, groups: ID, 699
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.16434 0.20830 -5.590 2.27e-08 ***
## House.300.scaled -0.24095 0.13407 -1.797 0.072293 .
## Distance.channel.scaled -0.25319 0.13951 -1.815 0.069548 .
## Vessels.activities.2019.scaled 0.30594 0.12882 2.375 0.017551 *
## Order.trial.scaled 0.29618 0.11165 2.653 0.007986 **
## Tank.SiteT -1.99644 0.41547 -4.805 1.55e-06 ***
## Year2020 0.29694 0.23583 1.259 0.207974
## JulianDay.scaled 0.58897 0.17388 3.387 0.000706 ***
## Hour.Platform.scaled 0.07558 0.12413 0.609 0.542617
## ID.Temperature.scaled 0.08207 0.13544 0.606 0.544519
## CL.scaled -0.31465 0.11541 -2.726 0.006405 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. Tnk.ST Yr2020 JlnDy. Hr.Pl.
## Hs.300.scld 0.136
## Dstnc.chnn. 0.300 0.179
## Vssl..2019. -0.287 -0.153 -0.483
## Ordr.trl.sc 0.110 -0.147 -0.109 0.087
## Tank.SiteT 0.062 0.059 -0.114 -0.086 -0.055
## Year2020 -0.596 -0.094 -0.233 0.213 -0.175 -0.136
## JulnDy.scld -0.083 0.234 0.227 -0.193 -0.137 -0.503 0.045
## Hr.Pltfrm.s 0.186 -0.048 0.020 -0.014 0.226 -0.488 -0.008 0.071
## ID.Tmprtr.s 0.007 0.130 -0.140 -0.104 0.041 0.324 -0.259 -0.413 -0.079
## CL.scaled 0.180 -0.010 0.025 -0.070 -0.068 0.164 0.031 -0.035 0.030
## ID.Tm.
## Hs.300.scld
## Dstnc.chnn.
## Vssl..2019.
## Ordr.trl.sc
## Tank.SiteT
## Year2020
## JulnDy.scld
## Hr.Pltfrm.s
## ID.Tmprtr.s
## CL.scaled -0.032
We will delete the turtle temperature (ID.Temperature.scaled)
mod.emergence.2 <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$ID.Temperature.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.2.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.2.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.2.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + ID.Temperature.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.2.adjust 11 1134.7 1189.0 -556.36 1112.7
## mod.full.emergence.adjust 12 1136.4 1195.6 -556.18 1112.4 0.3658 1
## Pr(>Chisq)
## mod.emergence.2.adjust
## mod.full.emergence.adjust 0.5453
summary(mod.emergence.2)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + Year + JulianDay.scaled +
## Hour.Platform.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1141.1 1195.5 -559.5 1119.1 1030
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.1399 -0.4056 -0.2637 0.5823 4.0785
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 2.794 1.672
## Number of obs: 1041, groups: ID, 701
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.23341 0.22847 -5.399 6.71e-08 ***
## House.300.scaled -0.24829 0.13735 -1.808 0.07065 .
## Distance.channel.scaled -0.24398 0.14361 -1.699 0.08932 .
## Vessels.activities.2019.scaled 0.32562 0.13592 2.396 0.01659 *
## Order.trial.scaled 0.28855 0.11556 2.497 0.01253 *
## Tank.SiteT -2.17897 0.42230 -5.160 2.47e-07 ***
## Year2020 0.34784 0.23886 1.456 0.14532
## JulianDay.scaled 0.68081 0.16868 4.036 5.43e-05 ***
## Hour.Platform.scaled 0.08016 0.12783 0.627 0.53062
## CL.scaled -0.32716 0.12254 -2.670 0.00759 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. Tnk.ST Yr2020 JlnDy. Hr.Pl.
## Hs.300.scld 0.139
## Dstnc.chnn. 0.305 0.196
## Vssl..2019. -0.307 -0.137 -0.508
## Ordr.trl.sc 0.106 -0.141 -0.097 0.085
## Tank.SiteT 0.138 0.016 -0.059 -0.076 -0.056
## Year2020 -0.597 -0.066 -0.287 0.199 -0.174 -0.064
## JulnDy.scld -0.140 0.294 0.168 -0.228 -0.123 -0.473 -0.069
## Hr.Pltfrm.s 0.171 -0.029 0.015 -0.027 0.228 -0.480 -0.031 0.064
## CL.scaled 0.219 -0.004 0.025 -0.087 -0.064 0.213 0.014 -0.089 0.024
We will delete the hour of the test (Hour.Platform.scaled)
mod.emergence.3 <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$Hour.Platform.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.3.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.3.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.3.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + Hour.Platform.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.3.adjust 10 1139.5 1189.0 -559.74 1119.5
## mod.full.emergence.adjust 11 1141.1 1195.5 -559.54 1119.1 0.3936 1
## Pr(>Chisq)
## mod.emergence.3.adjust
## mod.full.emergence.adjust 0.5304
summary(mod.emergence.3)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + Year + JulianDay.scaled +
## CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1187.9 1237.7 -584.0 1167.9 1061
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.8830 -0.4206 -0.2687 0.6047 3.6654
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 2.872 1.695
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.2293 0.2087 -5.889 3.88e-09 ***
## House.300.scaled -0.1979 0.1340 -1.477 0.1397
## Distance.channel.scaled -0.2311 0.1406 -1.644 0.1001
## Vessels.activities.2019.scaled 0.3024 0.1339 2.259 0.0239 *
## Order.trial.scaled 0.1968 0.1073 1.835 0.0665 .
## Tank.SiteT -2.0564 0.3685 -5.580 2.40e-08 ***
## Year2020 0.2985 0.2310 1.293 0.1961
## JulianDay.scaled 0.6907 0.1689 4.090 4.30e-05 ***
## CL.scaled -0.2914 0.1208 -2.412 0.0159 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. Tnk.ST Yr2020 JlnDy.
## Hs.300.scld 0.097
## Dstnc.chnn. 0.248 0.178
## Vssl..2019. -0.249 -0.112 -0.488
## Ordr.trl.sc 0.047 -0.145 -0.150 0.118
## Tank.SiteT 0.276 -0.006 -0.060 -0.095 0.142
## Year2020 -0.544 -0.034 -0.246 0.151 -0.142 -0.080
## JulnDy.scld -0.204 0.302 0.157 -0.223 -0.217 -0.503 -0.063
## CL.scaled 0.191 -0.019 0.004 -0.062 -0.050 0.238 0.049 -0.088
We will delete year (Year)
mod.emergence.4 <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$Year, df$JulianDay.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.4.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.4.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.4.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + Year + JulianDay.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.4.adjust 9 1187.6 1232.4 -584.79 1169.6
## mod.full.emergence.adjust 10 1187.9 1237.7 -583.96 1167.9 1.6459 1
## Pr(>Chisq)
## mod.emergence.4.adjust
## mod.full.emergence.adjust 0.1995
summary(mod.emergence.4)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula:
## emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled +
## (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1187.6 1232.4 -584.8 1169.6 1062
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.8516 -0.4131 -0.2652 0.6022 3.3689
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.052 1.747
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1066 0.1835 -6.030 1.64e-09 ***
## House.300.scaled -0.1935 0.1351 -1.433 0.1520
## Distance.channel.scaled -0.1881 0.1381 -1.361 0.1734
## Vessels.activities.2019.scaled 0.2814 0.1346 2.090 0.0366 *
## Order.trial.scaled 0.2175 0.1076 2.022 0.0432 *
## Tank.SiteT -2.0603 0.3769 -5.466 4.60e-08 ***
## JulianDay.scaled 0.7197 0.1737 4.145 3.40e-05 ***
## CL.scaled -0.3067 0.1232 -2.490 0.0128 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. Dstn.. V..201 Ordr.. Tnk.ST JlnDy.
## Hs.300.scld 0.094
## Dstnc.chnn. 0.136 0.173
## Vssl..2019. -0.204 -0.108 -0.470
## Ordr.trl.sc -0.041 -0.148 -0.192 0.143
## Tank.SiteT 0.309 -0.006 -0.082 -0.084 0.129
## JulnDy.scld -0.315 0.291 0.142 -0.206 -0.221 -0.529
## CL.scaled 0.274 -0.014 0.016 -0.073 -0.046 0.253 -0.101
We will delete the distance to the navigation channel (Distance.channel.scaled)
mod.emergence.5 <- glmer(emergence ~ House.300.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Distance.channel.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.5.adjust <- glmer(emergence ~ House.300.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.5.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.5.adjust: emergence ~ House.300.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Distance.channel.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.5.adjust 8 1187.5 1227.3 -585.75 1171.5
## mod.full.emergence.adjust 9 1187.6 1232.4 -584.79 1169.6 1.9262 1
## Pr(>Chisq)
## mod.emergence.5.adjust
## mod.full.emergence.adjust 0.1652
summary(mod.emergence.5)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: emergence ~ House.300.scaled + Vessels.activities.2019.scaled +
## Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled +
## (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1187.5 1227.3 -585.7 1171.5 1063
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.7916 -0.4051 -0.2658 0.5978 3.2281
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.167 1.78
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.0994 0.1878 -5.853 4.83e-09 ***
## House.300.scaled -0.1601 0.1339 -1.196 0.2315
## Vessels.activities.2019.scaled 0.1958 0.1190 1.646 0.0998 .
## Order.trial.scaled 0.1901 0.1066 1.784 0.0745 .
## Tank.SiteT -2.1470 0.3806 -5.642 1.69e-08 ***
## JulianDay.scaled 0.7748 0.1753 4.420 9.86e-06 ***
## CL.scaled -0.3132 0.1251 -2.504 0.0123 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) H.300. V..201 Ordr.. Tnk.ST JlnDy.
## Hs.300.scld 0.071
## Vssl..2019. -0.155 -0.022
## Ordr.trl.sc -0.023 -0.116 0.061
## Tank.SiteT 0.342 0.008 -0.131 0.112
## JulnDy.scld -0.362 0.267 -0.152 -0.192 -0.536
## CL.scaled 0.289 -0.014 -0.075 -0.048 0.265 -0.117
We will delete the number of house with access to the canal within 300m (House.300.scaled)
mod.emergence.6 <- glmer(emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$House.300.scaled, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ House.300.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.6.adjust <- glmer(emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.6.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.6.adjust: emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ House.300.scaled + Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.6.adjust 7 1186.9 1221.8 -586.47 1172.9
## mod.full.emergence.adjust 8 1187.5 1227.3 -585.75 1171.5 1.4458 1
## Pr(>Chisq)
## mod.emergence.6.adjust
## mod.full.emergence.adjust 0.2292
summary(mod.emergence.6)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled +
## Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1186.9 1221.8 -586.5 1172.9 1064
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.7912 -0.4000 -0.2686 0.5881 3.1179
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.307 1.819
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1053 0.1941 -5.694 1.24e-08 ***
## Vessels.activities.2019.scaled 0.1959 0.1209 1.620 0.1051
## Order.trial.scaled 0.1764 0.1066 1.654 0.0981 .
## Tank.SiteT -2.1788 0.3902 -5.584 2.35e-08 ***
## JulianDay.scaled 0.8474 0.1731 4.896 9.79e-07 ***
## CL.scaled -0.3218 0.1268 -2.538 0.0112 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) V..201 Ordr.. Tnk.ST JlnDy.
## Vssl..2019. -0.161
## Ordr.trl.sc -0.026 0.062
## Tank.SiteT 0.368 -0.138 0.106
## JulnDy.scld -0.416 -0.143 -0.157 -0.571
## CL.scaled 0.300 -0.079 -0.055 0.273 -0.128
We will delete the mean daily number of vessel crossings (Vessels.activities.2019.scaled)
mod.emergence.7 <- glmer(emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$Vessels.activities.2019.scaled, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.7.adjust <- glmer(emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.7.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.7.adjust: emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ Vessels.activities.2019.scaled + Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.7.adjust 6 1187.7 1217.5 -587.83 1175.7
## mod.full.emergence.adjust 7 1186.9 1221.8 -586.47 1172.9 2.7133 1
## Pr(>Chisq)
## mod.emergence.7.adjust
## mod.full.emergence.adjust 0.09951 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod.emergence.7)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled +
## CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1187.7 1217.5 -587.8 1175.7 1065
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.7853 -0.4036 -0.2656 0.5732 2.9896
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.34 1.827
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1039 0.1942 -5.685 1.31e-08 ***
## Order.trial.scaled 0.1674 0.1067 1.570 0.1165
## Tank.SiteT -2.1776 0.3909 -5.571 2.53e-08 ***
## JulianDay.scaled 0.9245 0.1733 5.335 9.55e-08 ***
## CL.scaled -0.3214 0.1268 -2.535 0.0112 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Ordr.. Tnk.ST JlnDy.
## Ordr.trl.sc -0.022
## Tank.SiteT 0.369 0.112
## JulnDy.scld -0.460 -0.145 -0.611
## CL.scaled 0.295 -0.053 0.269 -0.147
We will delete the order of the trial (Order.trial.scaled)
mod.emergence.8 <- glmer(emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
df.adjust <- df[complete.cases(df$emergence, df$Order.trial.scaled, df$Tank.Site, df$JulianDay.scaled, df$CL.scaled),]
mod.full.emergence.adjust <- glmer(emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
mod.emergence.8.adjust <- glmer(emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df.adjust, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
anova(mod.emergence.8.adjust, mod.full.emergence.adjust) # less complex first
## Data: df.adjust
## Models:
## mod.emergence.8.adjust: emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## mod.full.emergence.adjust: emergence ~ Order.trial.scaled + Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## npar AIC BIC logLik deviance Chisq Df
## mod.emergence.8.adjust 5 1188.1 1213.0 -589.04 1178.1
## mod.full.emergence.adjust 6 1187.7 1217.5 -587.83 1175.7 2.4288 1
## Pr(>Chisq)
## mod.emergence.8.adjust
## mod.full.emergence.adjust 0.1191
summary(mod.emergence.8)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1188.1 1213.0 -589.0 1178.1 1066
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.4438 -0.4014 -0.2571 0.5682 2.9466
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.563 1.888
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1353 0.2078 -5.464 4.67e-08 ***
## Tank.SiteT -2.3175 0.4170 -5.558 2.73e-08 ***
## JulianDay.scaled 0.9938 0.1816 5.473 4.42e-08 ***
## CL.scaled -0.3230 0.1306 -2.473 0.0134 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Tnk.ST JlnDy.
## Tank.SiteT 0.446
## JulnDy.scld -0.514 -0.641
## CL.scaled 0.325 0.311 -0.192
mod.emergence.final <- glmer(emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1|ID), data = df, family = binomial, control = glmerControl(optimizer ='optimx', optCtrl=list(method='L-BFGS-B')), na.action=na.exclude)
summary(mod.emergence.final)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: emergence ~ Tank.Site + JulianDay.scaled + CL.scaled + (1 | ID)
## Data: df
## Control:
## glmerControl(optimizer = "optimx", optCtrl = list(method = "L-BFGS-B"))
##
## AIC BIC logLik deviance df.resid
## 1188.1 1213.0 -589.0 1178.1 1066
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.4438 -0.4014 -0.2571 0.5682 2.9466
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 3.563 1.888
## Number of obs: 1071, groups: ID, 704
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1353 0.2078 -5.464 4.67e-08 ***
## Tank.SiteT -2.3175 0.4170 -5.558 2.73e-08 ***
## JulianDay.scaled 0.9938 0.1816 5.473 4.42e-08 ***
## CL.scaled -0.3230 0.1306 -2.473 0.0134 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Tnk.ST JlnDy.
## Tank.SiteT 0.446
## JulnDy.scld -0.514 -0.641
## CL.scaled 0.325 0.311 -0.192
Quick visualization of the preditor effects
plot(allEffects(mod.emergence.final))
r.squaredGLMM(mod.emergence.final)
## R2m R2c
## theoretical 0.1440800 0.5891187
## delta 0.1206006 0.4931154
marginal: only for the fixed effect. conditional: both fixed and random effect.
The delta method can be used with all distributions and link functions.
confint(mod.emergence.final, level = 0.95, method = "Wald")
## 2.5 % 97.5 %
## .sig01 NA NA
## (Intercept) -1.5426261 -0.7280630
## Tank.SiteT -3.1347722 -1.5001995
## JulianDay.scaled 0.6379106 1.3496770
## CL.scaled -0.5790026 -0.0670086