Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
######################################################################
# Code from Francomano et al. (Ecological Indicators 2020) #
######################################################################
# Question 2 Analysis #
######################################################################
# Created by: Dante Francomano (dfrancom@purdue.edu)
# Date: 20180518
######################################################################
######################################################################
# Set working directory and load packages
setwd("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Datasets")
library(dplyr)
library(lme4)
library(MuMIn)
library(lattice)
####################################################################################################
# Create dataframe for results
####################################################################################################
sites<-read.csv("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Metadata.csv")[,2]
timeOfDay<-c("dawn","daytime","dusk","nighttime")
index<-c("ACI","BI","Hf")
subdivisions<-function(x,y)
{
possibleFactors<-seq(1,x)
nFactors<-length(which((x/possibleFactors)==trunc(x/possibleFactors)&(y/possibleFactors)==trunc(y/possibleFactors)&(y/x)==trunc(y/x)))
nFactors[which(nFactors==0)]<-1
if(x==1|x>(y/2)) return(1)
if(x<=(y/2)) return(nFactors)
}
factors<-function(x)
{
possibleFactors<-seq(1,x)
which((x/possibleFactors)==trunc(x/possibleFactors))
}
numberOfSubdivisions12<-sapply(1:12,subdivisions,12)
numberOfSubdivisions60<-sapply(1:60,subdivisions,60)
totalAnalysisTime12<-as.numeric(unlist(apply(data.frame(1:12,numberOfSubdivisions12),1,function(y) rep(y[1],times=1,each=y[2]))))
totalAnalysisTime60<-as.numeric(unlist(apply(data.frame(1:60,numberOfSubdivisions60),1,function(y) rep(y[1],times=1,each=y[2]))))
specificSubdivisions12<-unlist(apply(data.frame(1:12,numberOfSubdivisions12),1,function(x) ifelse(x[2]==1,return(1),return(factors(x[1])))))
specificSubdivisions60<-unlist(apply(data.frame(1:60,numberOfSubdivisions60),1,function(x) ifelse(x[2]==1,return(1),return(factors(x[1])))))
results12<-data.frame(Location=rep(sites,each=length(totalAnalysisTime12)*4),
Time_of_Day=rep(timeOfDay,times=8,each=length(totalAnalysisTime12)),
Total_Analysis_Time=rep(totalAnalysisTime12,times=32),
Number_of_Subdivisions=rep(specificSubdivisions12,times=32),
ACI_Deviation=NA,BI_Deviation=NA,Hf_Deviation=NA)
results60<-data.frame(Location=rep(sites,each=length(totalAnalysisTime60)*4),
Time_of_Day=rep(timeOfDay,times=8,each=length(totalAnalysisTime60)),
Total_Analysis_Time=rep(totalAnalysisTime60,times=32),
Number_of_Subdivisions=rep(specificSubdivisions60,times=32),
ACI_Deviation=NA,BI_Deviation=NA,Hf_Deviation=NA)
# Read in data
datasetList<-list.files()
datasets<-lapply(datasetList,function(x)
{
read.csv(x)
})
names(datasets)<-substr(datasetList,1,(nchar(datasetList)-4))
####################################################################################################
# Calculate global index means for data used in analysis
####################################################################################################
oneMinuteTimeOfDayValues<-NULL
dawnDatasets<-datasets[which(grepl(paste("Dawn","_1-minute_",sep=""),names(datasets)))]
daytimeDatasets<-datasets[which(grepl(paste("Daytime","_1-minute_2-hour",sep=""),names(datasets)))]
duskDatasets<-datasets[which(grepl(paste("Dusk","_1-minute_",sep=""),names(datasets)))]
nighttimeDatasets<-NULL
for(i in 1:8) nighttimeDatasets[i]<-list(datasets[which(grepl(paste("Nighttime","_1-minute_2-hour_",sites[i],sep=""),names(datasets)))][[1]][,-4])
timeOfDayDatasets<-c(dawnDatasets,daytimeDatasets,duskDatasets,nighttimeDatasets)
for(i in 1:32) oneMinuteTimeOfDayValues<-rbind(oneMinuteTimeOfDayValues,timeOfDayDatasets[i][[1]])
colMeans(oneMinuteTimeOfDayValues[,4:6],na.rm=TRUE)
####################################################################################################
# Calculate subsample error values
####################################################################################################
# Begin site loop
for(g in 1:length(sites))
{
# Begin index loop
for(h in 1:length(index))
{
# Begin time of day loop
for(i in 1:length(timeOfDay))
{
# Create object for time of day- and value length-specific datasets
if(i<4)
{
oneMinute<-datasets[which(grepl(paste("D",substr(timeOfDay[i],2,nchar(timeOfDay[i])),"_1-minute_",sites[g],sep=""),names(datasets)))][[1]]
}else{
oneMinute<-datasets[which(grepl(paste("Nighttime_1-minute_2-hour_",sites[g],sep=""),names(datasets)))][[1]]
oneMinute<-oneMinute[,-4]
}
# Conduct consecutive sampling measurements
series12<-NULL
for(j in 1:(dim(oneMinute)[1]/12))
{
if(!is.na(sum(oneMinute[(j*12-11):(j*12),(3+h)])))
{
mean12<-sum(oneMinute[(j*12-11):(j*12),(3+h)],na.rm=TRUE)/12
}else{
mean12<-sum(oneMinute[(j*12-11):(j*12),(3+h)],na.rm=TRUE)/11
}
for(k in 1:12)
{
if(!is.na(sum(oneMinute[(j*12-11):(j*12-11+k-1),(3+h)])))
{
cumMean<-sum(oneMinute[(j*12-11):(j*12-11+k-1),(3+h)],na.rm=TRUE)/k
}else{
cumMean<-sum(oneMinute[(j*12-11):(j*12-11+k-1),(3+h)],na.rm=TRUE)/(k-1)
}
series12[(j-1)*12+k]<-abs(cumMean-mean12)
}
}
consecMeans12<-(colMeans(matrix(series12,ncol=12,byrow=TRUE),na.rm=TRUE))
results12[which(results12[,1]==sites[g]&results12[,2]==timeOfDay[i]&results12[,4]==1),(4+h)]<-consecMeans12
series60<-NULL
for(j in 1:(dim(oneMinute)[1]/60))
{
if(!is.na(sum(oneMinute[(j*60-59):(j*60),(3+h)])))
{
mean60<-sum(oneMinute[(j*60-59):(j*60),(3+h)],na.rm=TRUE)/60
}else{
mean60<-sum(oneMinute[(j*60-59):(j*60),(3+h)],na.rm=TRUE)/59
}
for(k in 1:60)
{
if(!is.na(sum(oneMinute[(j*60-59):(j*60-59+k-1),(3+h)])))
{
cumMean<-sum(oneMinute[(j*60-59):(j*60-59+k-1),(3+h)],na.rm=TRUE)/k
}else{
cumMean<-sum(oneMinute[(j*60-59):(j*60-59+k-1),(3+h)],na.rm=TRUE)/(k-1)
}
series60[(j-1)*60+k]<-abs(cumMean-mean60)
}
}
consecMeans60<-(colMeans(matrix(series60,ncol=60,byrow=TRUE),na.rm=TRUE))
results60[which(results60[,1]==sites[g]&results60[,2]==timeOfDay[i]&results60[,4]==1),(4+h)]<-consecMeans60
# Conduct distributed sampling measurements
distributedResults<-results12[which(results12[,1]==sites[g]&results12[,2]==timeOfDay[i]&results12[,4]>1),]
for(j in 1:dim(distributedResults)[1])
{
tempResults<-NULL
totalAnalysisTime<-distributedResults[j,3]
numberOfSubdivisions<-distributedResults[j,4]
sampleLength<-totalAnalysisTime/numberOfSubdivisions
sampleInterval<-12/numberOfSubdivisions
sampleContents<-NULL
for(k in 1:numberOfSubdivisions)
{
consecutiveSequence<-seq(((k-1)*sampleInterval+1),((k-1)*sampleInterval+sampleLength))
sampleContents<-c(sampleContents,consecutiveSequence)
}
for(k in 1:(dim(oneMinute)[1]/12))
{
if(!is.na(sum(oneMinute[(k*12-11):(k*12),(3+h)])))
{
mean12<-sum(oneMinute[(k*12-11):(k*12),(3+h)],na.rm=TRUE)/12
}else{
mean12<-sum(oneMinute[(k*12-11):(k*12),(3+h)],na.rm=TRUE)/11
}
if(!is.na(sum(oneMinute[((k-1)*12+sampleContents),(3+h)])))
{
sampleMean<-sum(oneMinute[((k-1)*12+sampleContents),(3+h)],na.rm=TRUE)/totalAnalysisTime
}else{
sampleMean<-sum(oneMinute[((k-1)*12+sampleContents),(3+h)],na.rm=TRUE)/(totalAnalysisTime-1)
}
tempResults[k]<-abs(sampleMean-mean12)
}
results12[which(results12[,1]==sites[g]&results12[,2]==timeOfDay[i]&results12[,3]==distributedResults[j,3]&results12[,4]==distributedResults[j,4]),(4+h)]<-mean(tempResults)
}
distributedResults<-results60[which(results60[,1]==sites[g]&results60[,2]==timeOfDay[i]&results60[,4]>1),]
for(j in 1:dim(distributedResults)[1])
{
tempResults<-NULL
totalAnalysisTime<-distributedResults[j,3]
numberOfSubdivisions<-distributedResults[j,4]
sampleLength<-totalAnalysisTime/numberOfSubdivisions
sampleInterval<-60/numberOfSubdivisions
sampleContents<-NULL
for(k in 1:numberOfSubdivisions)
{
consecutiveSequence<-seq(((k-1)*sampleInterval+1),((k-1)*sampleInterval+sampleLength))
sampleContents<-c(sampleContents,consecutiveSequence)
}
for(k in 1:(dim(oneMinute)[1]/60))
{
if(!is.na(sum(oneMinute[(k*60-59):(k*60),(3+h)])))
{
mean60<-sum(oneMinute[(k*60-59):(k*60),(3+h)],na.rm=TRUE)/60
}else{
mean60<-sum(oneMinute[(k*60-59):(k*60),(3+h)],na.rm=TRUE)/59
}
if(!is.na(sum(oneMinute[((k-1)*60+sampleContents),(3+h)])))
{
sampleMean<-sum(oneMinute[((k-1)*60+sampleContents),(3+h)],na.rm=TRUE)/totalAnalysisTime
}else{
sampleMean<-sum(oneMinute[((k-1)*60+sampleContents),(3+h)],na.rm=TRUE)/(totalAnalysisTime-1)
}
tempResults[k]<-abs(sampleMean-mean60)
}
results60[which(results60[,1]==sites[g]&results60[,2]==timeOfDay[i]&results60[,3]==distributedResults[j,3]&results60[,4]==distributedResults[j,4]),(4+h)]<-mean(tempResults)
}
}
}
}
####################################################################################################
# Create and test models
####################################################################################################
results60<-results60[-which(results60$ACI_Deviation==0),]
results12<-results12[-which(results12$ACI_Deviation==0),]
attach(results12)
# 12-minute ACI
# Compute non-transformed global model
baseModelACI12<-lmer(ACI_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelACI12)
# Check normality of residuals
qqmath(baseModelACI12)
shapiro.test(resid(baseModelACI12))
# Compute log-transformed global model
logModelACI12<-lmer(log(ACI_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelACI12)
# Check normality of residuals
qqmath(logModelACI12)
shapiro.test(resid(logModelACI12))
# Compare models
dredge(logModelACI12)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelACI12raw<-lmer(log(ACI_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# 12-minute BI
# Compute non-transformed global model
baseModelBI12<-lmer(BI_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelBI12)
# Check normality of residuals
qqmath(baseModelBI12)
shapiro.test(resid(baseModelBI12))
# Compute log-transformed global model
logModelBI12<-lmer(log(BI_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelBI12)
# Check normality of residuals
qqmath(logModelBI12)
shapiro.test(resid(logModelBI12))
# Compare models
dredge(logModelBI12)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelBI12raw<-lmer(log(BI_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# 12-minute Hf
# Compute non-transformed global model
baseModelHf12<-lmer(Hf_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelHf12)
# Check normality of residuals
qqmath(baseModelHf12)
shapiro.test(resid(baseModelHf12))
# Compute log-transformed global model
logModelHf12<-lmer(log(Hf_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelHf12)
# Check normality of residuals
qqmath(logModelHf12)
shapiro.test(resid(logModelHf12))
# Compare models
dredge(logModelHf12)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelHf12raw<-lmer(log(Hf_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
detach(results12)
attach(results60)
# 60-minute ACI
# Compute non-transformed global model
baseModelACI60<-lmer(ACI_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelACI60)
# Check normality of residuals
qqmath(baseModelACI60)
shapiro.test(resid(baseModelACI60))
# Compute log-transformed global model
logModelACI60<-lmer(log(ACI_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelACI60)
# Check normality of residuals
qqmath(logModelACI60)
shapiro.test(resid(logModelACI60))
# Compare models
dredge(logModelACI60)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelACI60raw<-lmer(log(ACI_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# 60-minute BI
# Compute non-transformed global model
baseModelBI60<-lmer(BI_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelBI60)
# Check normality of residuals
qqmath(baseModelBI60)
shapiro.test(resid(baseModelBI60))
# Compute log-transformed global model
logModelBI60<-lmer(log(BI_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelBI60)
# Check normality of residuals
qqmath(logModelBI60)
shapiro.test(resid(logModelBI60))
# Compare models
dredge(logModelBI60)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelBI60raw<-lmer(log(BI_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# 60-minute Hf
# Compute non-transformed global model
baseModelHf60<-lmer(Hf_Deviation~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(baseModelHf60)
# Check normality of residuals
qqmath(baseModelHf60)
shapiro.test(resid(baseModelHf60))
# Compute log-transformed global model
logModelHf60<-lmer(log(Hf_Deviation)~scale(poly(Total_Analysis_Time,3)[,1])+scale(poly(Total_Analysis_Time,3)[,2])+scale(poly(Total_Analysis_Time,3)[,3])+scale(Number_of_Subdivisions)+scale(poly(Total_Analysis_Time,3)[,1]):scale(Number_of_Subdivisions)+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
# Check homogeneity of variance
plot(logModelHf60)
# Check normality of residuals
qqmath(logModelHf60)
shapiro.test(resid(logModelHf60))
# Compare models
dredge(logModelHf60)
# Create raw model with non-orthogonal polynomials and no scaling (but maintaining the log transform)
logModelHf60raw<-lmer(log(Hf_Deviation)~poly(Total_Analysis_Time,3,raw=TRUE)[,1]+poly(Total_Analysis_Time,3,raw=TRUE)[,2]+poly(Total_Analysis_Time,3,raw=TRUE)[,3]+Number_of_Subdivisions+poly(Total_Analysis_Time,3,raw=TRUE)[,1]:Number_of_Subdivisions+Time_of_Day+(1|Location),REML=FALSE,na.action=na.fail)
detach(results60)
####################################################################################################
# Create graphics
####################################################################################################
rawModels<-array(data=list(coef(logModelACI12raw)$Location,coef(logModelBI12raw)$Location,coef(logModelHf12raw)$Location,coef(logModelACI60raw)$Location,coef(logModelBI60raw)$Location,coef(logModelHf60raw)$Location,"ACI","BI","Hf","ACI","BI","Hf",12,12,12,60,60,60),dim=c(6,3),dimnames=list(NULL,c("Model","Index","Duration")))
for(i in 1:6)
{
# Obtain necessary values for plotting
rawCoefficients<-rawModels[i,1]$Model
index<-rawModels[i,2]$Index
duration<-rawModels[i,3]$Duration
dawnCoefficients<-rawCoefficients[,1]
daytimeCoefficients<-rawCoefficients[,1]+rawCoefficients[1,6]
duskCoefficients<-rawCoefficients[,1]+rawCoefficients[1,7]
nighttimeCoefficients<-rawCoefficients[,1]+rawCoefficients[1,8]
totalAnalysisTime1Coefficient<-rawCoefficients[1,2]
totalAnalysisTime2Coefficient<-rawCoefficients[1,3]
totalAnalysisTime3Coefficient<-rawCoefficients[1,4]
numberOfSubdivisionsCoefficient<-rawCoefficients[1,5]
interactionCoefficient<-rawCoefficients[1,9]
if(duration==12) totalAnalysisTimes<-seq(0,12,1)
if(duration==60) totalAnalysisTimes<-seq(0,60,1)
numbersOfSubdivisions<-factors(duration)[-length(factors(duration))]
dawnPredictedValues<-array(data=NA,dim=c(8,duration+1,length(factors(duration))-1),dimnames=list(c("site1","site2","site3","site4","site5","site6","site7","site8"),totalAnalysisTimes,factors(duration)[-length(factors(duration))]))
daytimePredictedValues<-dawnPredictedValues
duskPredictedValues<-dawnPredictedValues
nighttimePredictedValues<-dawnPredictedValues
meanPredictedValuesAllSites<-dawnPredictedValues
for(j in 1:8)
{
for(k in 1:(length(factors(duration))-1))
{
numberOfSubdivisions<-numbersOfSubdivisions[k]
dawnPredictedValues[j,,k]<-exp(dawnCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
daytimePredictedValues[j,,k]<-exp(daytimeCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
duskPredictedValues[j,,k]<-exp(duskCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
nighttimePredictedValues[j,,k]<-exp(nighttimeCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
}
}
meanDawnPredictedValues<-t(colMeans(dawnPredictedValues))
meanDaytimePredictedValues<-t(colMeans(daytimePredictedValues))
meanDuskPredictedValues<-t(colMeans(duskPredictedValues))
meanNighttimePredictedValues<-t(colMeans(nighttimePredictedValues))
meanPredictedValuesAllSites<-(dawnPredictedValues+daytimePredictedValues+duskPredictedValues+nighttimePredictedValues)/4
meanPredictedValues<-t(colMeans(meanPredictedValuesAllSites))
upper95Values<-matrix(NA,(length(numbersOfSubdivisions)-1),(duration+1))
lower95Values<-upper95Values
for(j in 1:(length(numbersOfSubdivisions)-1)) upper95Values[j,]<-meanPredictedValues[j,]+1.96*apply(meanPredictedValuesAllSites[,,j],2,sd)/sqrt(8)
for(j in 1:(length(numbersOfSubdivisions)-1)) lower95Values[j,]<-meanPredictedValues[j,]-1.96*apply(meanPredictedValuesAllSites[,,j],2,sd)/sqrt(8)
colorSequence<-c("#008000","#d95f02","#7570b3","#e7298a","#7dc17d","#e6ab02","#a6761d","#666666")
if(index=="ACI"|index=="BI") ymax<-trunc(max(upper95Values)+1)
if(index=="Hf") ymax<-round(max(upper95Values)+0.005,2)
# Plot 1-subdivision values for times of day
pdf(paste("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Figures/Deviation/",index,"_",duration,"_Times_of_Day.pdf",sep=""),5,4,pointsize=8)
plot(1:2,1:2,type="n",xlim=c(0,duration),ylim=c(0,ymax),axes=FALSE,main=paste(index," ",duration,"-minute Window",sep=""),col.main="grey20",xlab="",ylab="")
if(index=="ACI"|index=="BI") abline(h=seq(0,ymax,ymax/5),col="grey90")
if(index=="Hf") abline(h=seq(0,ymax,ymax/6),col="grey90")
abline(v=seq(0,duration,duration/6),col="grey90")
box(col="grey30")
axis(1,col="grey30",col.axis="grey30")
axis(2,col="grey30",col.axis="grey30")
mtext("Total Analysis Time (minutes)",side=1,col="grey30",padj=4)
mtext(paste(index,"Deviation"),side=2,col="grey30",padj=-4)
lines(totalAnalysisTimes,meanDawnPredictedValues[1,],col=colorSequence[1],lwd=3)
lines(totalAnalysisTimes,meanDaytimePredictedValues[1,],col=colorSequence[2],lwd=3)
lines(totalAnalysisTimes,meanDuskPredictedValues[1,],col=colorSequence[3],lwd=3)
lines(totalAnalysisTimes,meanNighttimePredictedValues[1,],col=colorSequence[6],lwd=3)
legend("topright",inset=0.025,legend=c("Dawn","Daytime","Dusk","Nighttime"),lty=1,lwd=3,col=colorSequence[c(1,2,3,6)],text.col="grey30",bg="white",box.col="grey30")
dev.off()
# Plot 1-subdivision global mean and confidence intervals
pdf(paste("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Figures/Deviation/",index,"_",duration,"_Confidence_Interval.pdf",sep=""),5,4,pointsize=8)
plot(1:2,1:2,type="n",xlim=c(0,duration),ylim=c(0,ymax),axes=FALSE,main=paste(index," ",duration,"-minute Window",sep=""),col.main="grey20",xlab="",ylab="")
if(index=="ACI"|index=="BI") abline(h=seq(0,ymax,ymax/5),col="grey90")
if(index=="Hf") abline(h=seq(0,ymax,ymax/6),col="grey90")
abline(v=seq(0,duration,duration/6),col="grey90")
box(col="grey30")
axis(1,col="grey30",col.axis="grey30")
axis(2,col="grey30",col.axis="grey30")
mtext("Total Analysis Time (minutes)",side=1,col="grey30",padj=4)
mtext(paste(index,"Deviation"),side=2,col="grey30",padj=-4)
polygon(c(totalAnalysisTimes,rev(totalAnalysisTimes)),c(upper95Values[1,],rev(lower95Values[1,])),density=1000,col=rgb(t(col2rgb("grey30")/255),alpha=0.05))
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,col="grey30")
legend("topright",inset=0.025,legend=c("Mean","95% Confidence Interval"),lty=c(1,0),lwd=c(3,0),pch=c(NA,15),pt.cex=2.5,col=c("grey30",rgb(t(col2rgb("grey30")/255),alpha=0.5)),text.col="grey30",bg="white",box.col="grey30")
dev.off()
# Plot multiple subdivisions
pdf(paste("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Figures/Deviation/",index,"_",duration,"_Confidence_Interval_Subdivisions_Lines.pdf",sep=""),5,4,pointsize=8)
plot(1:2,1:2,type="n",xlim=c(0,duration),ylim=c(0,ymax),axes=FALSE,main=paste(index," ",duration,"-minute window",sep=""),col.main="grey20",xlab="",ylab="")
if(index=="ACI"|index=="BI") abline(h=seq(0,ymax,ymax/5),col="grey90")
if(index=="Hf") abline(h=seq(0,ymax,ymax/6),col="grey90")
abline(v=seq(0,duration,duration/6),col="grey90")
box(col="grey30")
axis(1,col="grey30",col.axis="grey30")
axis(2,col="grey30",col.axis="grey30")
mtext("total analysis time (minutes)",side=1,col="grey30",padj=4)
mtext(paste(index," deviation (absolute value)",sep=""),side=2,col="grey30",padj=-4)
polygon(c(totalAnalysisTimes,rev(totalAnalysisTimes)),c(upper95Values[1,],rev(lower95Values[1,])),density=1000,col=rgb(t(col2rgb("grey80")/255),alpha=0.05))
if(duration==12)
{
lines(totalAnalysisTimes,meanPredictedValues[5,],lwd=3,lty=1,col="grey70")
lines(totalAnalysisTimes,meanPredictedValues[4,],lwd=3,lty=1,col="grey60")
lines(totalAnalysisTimes,meanPredictedValues[3,],lwd=3,lty=1,col="grey50")
lines(totalAnalysisTimes,meanPredictedValues[2,],lwd=3,lty=1,col="grey40")
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,lty=1,col="grey30")
legend("topright",inset=0.025,legend=c("1 subdivision mean","95% confidence interval","2 subdivision mean","3 subdivision mean","4 subdivision mean","6 subdivision mean"),lty=c(1,0,1,1,1,1),lwd=3,pch=c(NA,15,NA,NA,NA,NA),pt.cex=2.5,col=c("grey30",rgb(t(col2rgb("grey80")/255),alpha=0.5),"grey40","grey50","grey60","grey70"),text.col="grey30",bg="white",box.col="grey30")
}else{
lines(totalAnalysisTimes,meanPredictedValues[9,],lwd=3,lty=1,col="grey80")
lines(totalAnalysisTimes,meanPredictedValues[7,],lwd=3,lty=1,col="grey70")
lines(totalAnalysisTimes,meanPredictedValues[6,],lwd=3,lty=1,col="grey60")
lines(totalAnalysisTimes,meanPredictedValues[4,],lwd=3,lty=1,col="grey50")
lines(totalAnalysisTimes,meanPredictedValues[2,],lwd=3,lty=1,col="grey40")
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,lty=1,col="grey30")
legend("topright",inset=0.025,legend=c("1 subdivision mean","95% confidence interval","2 subdivision mean","4 subdivision mean","6 subdivision mean","10 subdivision mean","15 subdivision mean"),lty=c(1,0,1,1,1,1,1),lwd=3,pch=c(NA,15,NA,NA,NA,NA,NA),pt.cex=2.5,col=c("grey30",rgb(t(col2rgb("grey80")/255),alpha=0.5),"grey40","grey50","grey60","grey70","grey80"),text.col="grey30",bg="white",box.col="grey30")
}
dev.off()
pdf(paste("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Figures/Deviation/",index,"_",duration,"_Confidence_Interval_Subdivisions_Text.pdf",sep=""),5,4,pointsize=8)
plot(1:2,1:2,type="n",xlim=c(0,duration),ylim=c(0,ymax),axes=FALSE,main=paste(index," ",duration,"-minute Window",sep=""),col.main="grey20",xlab="",ylab="")
if(index=="ACI"|index=="BI") abline(h=seq(0,ymax,ymax/5),col="grey90")
if(index=="Hf") abline(h=seq(0,ymax,ymax/6),col="grey90")
abline(v=seq(0,duration,duration/6),col="grey90")
box(col="grey30")
axis(1,col="grey30",col.axis="grey30")
axis(2,col="grey30",col.axis="grey30")
mtext("Total Analysis Time (minutes)",side=1,col="grey30",padj=4)
mtext(paste(index,"Deviation"),side=2,col="grey30",padj=-4)
polygon(c(totalAnalysisTimes,rev(totalAnalysisTimes)),c(upper95Values[1,],rev(lower95Values[1,])),density=1000,col=rgb(t(col2rgb("grey30")/255),alpha=0.05))
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,lty=1,col="grey30")
if(duration==12)
{
text(x=c(2,4,6),y=meanPredictedValues[2,c(3,5,7)],labels="2",font=2,col="grey30")
text(x=c(3,6,9),y=meanPredictedValues[3,c(4,7,10)],labels="3",font=2,col="grey30")
text(x=c(4,8),y=meanPredictedValues[4,c(5,9)],labels="4",font=2,col="grey30")
text(x=6,y=meanPredictedValues[5,7],labels="6",font=2,col="grey30")
legend("topright",inset=0.025,legend=c("1 Subdivision Mean","95% Confidence Interval","Number of Subdivisions"),lty=c(1,0,0),lwd=3,pch=c(NA,15,NA),pt.cex=2.5,col=c("grey30",rgb(t(col2rgb("grey30")/255),alpha=0.5),"grey30"),text.col="grey30",bg="white",box.col="grey30")
legend("topright",inset=c(0.028,0.025),legend=c("","","# "),text.col="grey30",text.font=2,bg="transparent",box.col=NA)
}else{
text(x=seq(2,58,2),y=meanPredictedValues[2,seq(3,59,2)],labels="2",font=2,col="grey30")
text(x=seq(4,56,4),y=meanPredictedValues[4,seq(5,57,4)],labels="4",font=2,col="grey30")
text(x=seq(6,54,6),y=meanPredictedValues[6,seq(7,55,6)],labels="6",font=2,col="grey30")
text(x=seq(12,48,12),y=meanPredictedValues[8,seq(13,49,12)],labels="12",font=2,col="grey30")
legend("topright",inset=0.025,legend=c("1 Subdivision Mean","95% Confidence Interval","Number of Subdivisions"),lty=c(1,0,0),lwd=3,pch=c(NA,15,NA),pt.cex=2.5,col=c("grey30",rgb(t(col2rgb("grey30")/255),alpha=0.5),"grey30"),text.col="grey30",bg="white",box.col="grey30")
legend("topright",inset=c(0.028,0.025),legend=c("","","# "),text.col="grey30",text.font=2,bg="transparent",box.col=NA)
}
dev.off()
}
####################################################################################################
# Create combined plot
####################################################################################################
pdf("/Users/dantefrancomano/Documents/Purdue/Projects/Temporal_Variability_Duty_Cycle/Figures/Question_2_Combined_Plots.pdf",7.5,10,pointsize=8)
par(mfcol=c(3,2))
par(oma=c(4,4,0,0))
par(mar=c(2,4,4,2)+0.1)
letters<-c("A","B","C","D","E","F")
for(i in 1:6)
{
# Obtain necessary values for plotting
rawCoefficients<-rawModels[i,1]$Model
index<-rawModels[i,2]$Index
duration<-rawModels[i,3]$Duration
dawnCoefficients<-rawCoefficients[,1]
daytimeCoefficients<-rawCoefficients[,1]+rawCoefficients[1,6]
duskCoefficients<-rawCoefficients[,1]+rawCoefficients[1,7]
nighttimeCoefficients<-rawCoefficients[,1]+rawCoefficients[1,8]
totalAnalysisTime1Coefficient<-rawCoefficients[1,2]
totalAnalysisTime2Coefficient<-rawCoefficients[1,3]
totalAnalysisTime3Coefficient<-rawCoefficients[1,4]
numberOfSubdivisionsCoefficient<-rawCoefficients[1,5]
interactionCoefficient<-rawCoefficients[1,9]
if(duration==12) totalAnalysisTimes<-seq(0,12,1)
if(duration==60) totalAnalysisTimes<-seq(0,60,1)
numbersOfSubdivisions<-factors(duration)[-length(factors(duration))]
dawnPredictedValues<-array(data=NA,dim=c(8,duration+1,length(factors(duration))-1),dimnames=list(c("site1","site2","site3","site4","site5","site6","site7","site8"),totalAnalysisTimes,factors(duration)[-length(factors(duration))]))
daytimePredictedValues<-dawnPredictedValues
duskPredictedValues<-dawnPredictedValues
nighttimePredictedValues<-dawnPredictedValues
meanPredictedValuesAllSites<-dawnPredictedValues
for(j in 1:8)
{
for(k in 1:(length(factors(duration))-1))
{
numberOfSubdivisions<-numbersOfSubdivisions[k]
dawnPredictedValues[j,,k]<-exp(dawnCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
daytimePredictedValues[j,,k]<-exp(daytimeCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
duskPredictedValues[j,,k]<-exp(duskCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
nighttimePredictedValues[j,,k]<-exp(nighttimeCoefficients[j]+totalAnalysisTime1Coefficient*totalAnalysisTimes+totalAnalysisTime2Coefficient*(totalAnalysisTimes^2)+totalAnalysisTime3Coefficient*(totalAnalysisTimes^3)+numberOfSubdivisionsCoefficient*numberOfSubdivisions+interactionCoefficient*totalAnalysisTimes*numberOfSubdivisions)
}
}
meanDawnPredictedValues<-t(colMeans(dawnPredictedValues))
meanDaytimePredictedValues<-t(colMeans(daytimePredictedValues))
meanDuskPredictedValues<-t(colMeans(duskPredictedValues))
meanNighttimePredictedValues<-t(colMeans(nighttimePredictedValues))
meanPredictedValuesAllSites<-(dawnPredictedValues+daytimePredictedValues+duskPredictedValues+nighttimePredictedValues)/4
meanPredictedValues<-t(colMeans(meanPredictedValuesAllSites))
upper95Values<-matrix(NA,(length(numbersOfSubdivisions)-1),(duration+1))
lower95Values<-upper95Values
for(j in 1:(length(numbersOfSubdivisions)-1)) upper95Values[j,]<-meanPredictedValues[j,]+1.96*apply(meanPredictedValuesAllSites[,,j],2,sd)/sqrt(8)
for(j in 1:(length(numbersOfSubdivisions)-1)) lower95Values[j,]<-meanPredictedValues[j,]-1.96*apply(meanPredictedValuesAllSites[,,j],2,sd)/sqrt(8)
colorSequence<-c("#008000","#d95f02","#7570b3","#e7298a","#7dc17d","#e6ab02","#a6761d","#666666")
if(index=="ACI"|index=="BI") ymax<-trunc(max(upper95Values)+1)
if(index=="Hf") ymax<-round(max(upper95Values)+0.005,2)
plot(1:2,1:2,type="n",xlim=c(0,duration),ylim=c(0,ymax),axes=FALSE,xlab="",ylab="")
if(index=="ACI"|index=="BI")
{
if(index=="ACI") abline(h=seq(0,ymax,ymax/5),col="grey90")
if(index=="BI") abline(h=seq(0,ymax,ymax/6),col="grey90")
title(paste(letters[i],". ",index,": ",duration,"-minute full file length",sep=""),adj=0,cex.main=2,col.main="grey20")
}else{
abline(h=seq(0,ymax,ymax/6),col="grey90")
if(duration==12)
{
title(expression(bold("C. H"["f"]*": 12-minute full file length")),adj=0,cex.main=2,col.main="grey20")
}else{
title(expression(bold("F. H"["f"]*": 60-minute full file length")),adj=0,cex.main=2,col.main="grey20")
}
}
abline(v=seq(0,duration,duration/6),col="grey90")
box(col="grey30")
axis(1,col="grey30",col.axis="grey30",cex.axis=2,padj=0.5)
axis(2,col="grey30",col.axis="grey30",cex.axis=2,las=2)
polygon(c(totalAnalysisTimes,rev(totalAnalysisTimes)),c(upper95Values[1,],rev(lower95Values[1,])),density=1000,col=rgb(t(col2rgb("grey80")/255),alpha=0.05))
if(duration==12)
{
lines(totalAnalysisTimes,meanPredictedValues[5,],lwd=3,lty=1,col="grey70")
lines(totalAnalysisTimes,meanPredictedValues[4,],lwd=3,lty=1,col="grey60")
lines(totalAnalysisTimes,meanPredictedValues[3,],lwd=3,lty=1,col="grey50")
lines(totalAnalysisTimes,meanPredictedValues[2,],lwd=3,lty=1,col="grey40")
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,lty=1,col="grey30")
legend("topright",inset=0.025,legend=c("1 subdivision mean predicted values","1 subdivision 95% confidence interval","2 subdivision mean predicted values","3 subdivision mean predicted values","4 subdivision mean predicted values","6 subdivision mean predicted values"),lty=c(1,0,1,1,1,1),lwd=3,pch=c(NA,15,NA,NA,NA,NA),pt.cex=4,col=c("grey30",rgb(t(col2rgb("grey80")/255),alpha=0.5),"grey40","grey50","grey60","grey70"),text.col="grey30",bg="white",box.col="grey30",cex=1.5)
}else{
lines(totalAnalysisTimes,meanPredictedValues[8,],lwd=3,lty=1,col="grey70")
lines(totalAnalysisTimes,meanPredictedValues[6,],lwd=3,lty=1,col="grey60")
lines(totalAnalysisTimes,meanPredictedValues[4,],lwd=3,lty=1,col="grey50")
lines(totalAnalysisTimes,meanPredictedValues[2,],lwd=3,lty=1,col="grey40")
lines(totalAnalysisTimes,meanPredictedValues[1,],lwd=3,lty=1,col="grey30")
legend("topright",inset=0.025,legend=c("1 subdivision mean predicted values","1 subdivision 95% confidence interval","2 subdivision mean predicted values","4 subdivision mean predicted values","6 subdivision mean predicted values","12 subdivision mean predicted values"),lty=c(1,0,1,1,1,1),lwd=3,pch=c(NA,15,NA,NA,NA,NA),pt.cex=4,col=c("grey30",rgb(t(col2rgb("grey80")/255),alpha=0.5),"grey40","grey50","grey60","grey70"),text.col="grey30",bg="white",box.col="grey30",cex=1.5)
}
}
mtext("total analysis time (minutes)",side=1,outer=TRUE,col="grey30",cex=2,padj=1.4)
mtext("subsample error (absolute value)",side=2,outer=TRUE,col="grey30",cex=2,padj=-0.3)
dev.off()
par(mfrow=c(1,1))
par(oma=c(1,1,1,1))
par(mar=c(5,4,4,2)+0.1)