### looking into influence of window size for runmed and ODBA ---- #Functions needed to determine the behaviour of in the accelerometer data. summaryStats= function (axy) { axy<-axy %>% mutate(Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs, odba=abs(Xd)+abs(Yd)+abs(Zd)) %>% mutate(Dx=rollapply(data=Xd, width=11, by=11, FUN=diffX, align="left", fill=NA), Dy=rollapply(data=Yd, width=11, by=11, FUN=diffX, align="left", fill=NA), Dz=rollapply(data=Zd, width=11, by=11, FUN=diffX, align="left", fill=NA), Dodba=Dx+Dy+Dz) axy<-axy %>% mutate(Dodba=zoo::na.locf(Dodba)) #maxYd at 4sec, Todba at 10sec axy<-axy %>% mutate(maxY=rollapply(data=abs(Yd), width=5, by=5, FUN=max, align="left", fill=NA), Todba=rollapply(data=odba, width=11, by=11, FUN=sum, align="left", fill=NA)) axy<-axy %>% mutate(maxY=zoo::na.locf(maxY), Todba=zoo::na.locf(Todba)) return (axy) } diffX<-function(data){ ab=0 for (i in 2:11){ ab[i]<-data[i]- data[i-1] } r=sum(abs(ab)) return(r) } #load the data e1=read_csv("axy_data_for_ODBA_window_size.csv") # Run a running medians smoothing window across the acceleration data at varying windows of 3 to 211 seconds and calculate the ODBA e1<-mutate(e1, Xs=runmed(X,k=211, "median"), Ys=runmed(Y,k=211, "median"), Zs=runmed(Z,k=211, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA211=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=181, "median"), Ys=runmed(Y,k=181, "median"), Zs=runmed(Z,k=181, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA181=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=121, "median"), Ys=runmed(Y,k=121, "median"), Zs=runmed(Z,k=121, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA121=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=151, "median"), Ys=runmed(Y,k=151, "median"), Zs=runmed(Z,k=151, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA151=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=91, "median"), Ys=runmed(Y,k=91, "median"), Zs=runmed(Z,k=91, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA91=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=61, "median"), Ys=runmed(Y,k=61, "median"), Zs=runmed(Z,k=61, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA61=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=31, "median"), Ys=runmed(Y,k=31, "median"), Zs=runmed(Z,k=31, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA31=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=17, "median"), Ys=runmed(Y,k=17, "median"), Zs=runmed(Z,k=17, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA16=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=9, "median"), Ys=runmed(Y,k=9, "median"), Zs=runmed(Z,k=9, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA9=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=5, "median"), Ys=runmed(Y,k=5, "median"), Zs=runmed(Z,k=5, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA5=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) e1<-mutate(e1, Xs=runmed(X,k=3, "median"), Ys=runmed(Y,k=3, "median"), Zs=runmed(Z,k=3, "median")) e1<-mutate(e1, Xd=X-Xs, Yd=Y-Ys, Zd=Z-Zs) e1$ODBA3=abs(e1$Xd)+abs(e1$Yd)+abs(e1$Zd) # Calculate the ODBA over 12 seconds for each window type. e1<-mutate(e1,Todba211=rollapply(data=ODBA211, width=11, by=11, FUN=sum, align="left", fill=NA),Todba181=rollapply(data=ODBA181, width=11, by=11, FUN=sum, align="left", fill=NA),Todba151=rollapply(data=ODBA151, width=11, by=11, FUN=sum, align="left", fill=NA),Todba121=rollapply(data=ODBA121, width=11, by=11, FUN=sum, align="left", fill=NA),Todba91=rollapply(data=ODBA91, width=11, by=11, FUN=sum, align="left", fill=NA),Todba61=rollapply(data=ODBA61, width=11, by=11, FUN=sum, align="left", fill=NA),Todba31=rollapply(data=ODBA31, width=11, by=11, FUN=sum, align="left", fill=NA),Todba16=rollapply(data=ODBA16, width=11, by=11, FUN=sum, align="left", fill=NA),Todba9=rollapply(data=ODBA9, width=11, by=11, FUN=sum, align="left", fill=NA),Todba5=rollapply(data=ODBA5, width=11, by=11, FUN=sum, align="left", fill=NA),Todba3=rollapply(data=ODBA3, width=11, by=11, FUN=sum, align="left", fill=NA)) # Run axy data through calibration to get behaviour types. e1=summaryStats(e1) e1<-e1 %>% mutate(Move=ifelse(Dodba<=1.06, "notMoving", "Moving"), Feed=ifelse(Move=="notMoving", "notmoving", ifelse(Todba91>=6.2, "Forage", "Feed")), Travel=ifelse(Feed!="Forage", Feed, ifelse(maxY<1.15, "Forage", "Travel"))) e1=na.omit(e1) ## Look at how ODBA changes with window size for feeding behaviour e1_1=filter(e1, Travel=="Feed") e1_1=gather(e1_1, win, ODBA, 24:34) e1_1$win<-factor(e1_1$win, levels=c("Todba3","Todba5","Todba9","Todba16","Todba31", "Todba61", "Todba91", "Todba121", "Todba151", "Todba181", "Todba211")) e1_1$win1=as.numeric(substr(e1_1$win, 6,9)) boxplot(ODBA~win1, e1_1) ## Look at how ODBA changes with window size for running behaviour e1_1=filter(e1, Travel=="Travel") e1_1=gather(e1_1, win, ODBA, 24:34) e1_1$win<-factor(e1_1$win, levels=c("Todba3","Todba5","Todba9","Todba16","Todba31", "Todba61", "Todba91", "Todba121", "Todba151", "Todba181", "Todba211")) e1_1$win1=as.numeric(substr(e1_1$win, 6,9)) boxplot(ODBA~win1, e1_1) ## Look at how ODBA changes with window size for foraging behaviour e1_1=filter(e1, Travel=="Forage") e1_1=gather(e1_1, win, ODBA, 24:34) e1_1$win<-factor(e1_1$win, levels=c("Todba3","Todba5","Todba9","Todba16","Todba31", "Todba61", "Todba91", "Todba121", "Todba151", "Todba181", "Todba211")) e1_1$win1=as.numeric(substr(e1_1$win, 6,9)) boxplot(ODBA~win1, e1_1)