# Authors: Fuyu Frank Xu and Kate Beard, School of Computing and Information Science, University of Maine, Orono, Maine # Function name: STS.eventize2(). # This function can be used to eventize a univariate spatial time series matrix considering event magnitude based on different levels of threshold. # These thresholds can be either user-specified numerical values or percentiles. This eventization is to categorize the original data to different # levels of event. # Description of variables: data--input STES matrix; evtDef--event definition, takes either percentile or absolute value for threshold with the two default percentiles # 0.85 and 0.95; magn--levels of event significance; level--letters representting levels of event significance; thres--values corresponding magn or level; # event--takes either "greater" or "lower" depending on how to define the event greater or lower than the threshold. # Modified date: May, 2019 STS.eventize2 <- function(data,evtDef="percentile",magn=2, level=c("A","B","C","D","E","F"),thres=c(0.85,0.95),event="greater"){ # ----------------------------------------------- Test for errors if input data is not matrix format ------------------------------ # if(!is.matrix(data)){ print("!--------------------- ERROR #001 -----------------!") print("! Input data file 'data' is not a matrix! !") print("!----------------------------------------------------!") return() } # end of matrix input check # ----------------------------------------------- Eventization -------------------------------------------------------------------- tmp = magn if(evtDef=="percentile"){ if(event=="greater"){ #ascending percentiles in threshold vector data[data>=quantile(data,thres[tmp],na.rm=TRUE)]=level[tmp] data[data<quantile(data,thres[1],na.rm=TRUE)]=0 for(i in 1:tmp-1){ data[data>=quantile(data,thres[i],na.rm=TRUE) & data<quantile(data,thres[i+1],na.rm=TRUE)]=level[i] } #end of for loop } # end if greater if(event=="smaller"){ #descending percentiles in threshold vector data[data<=quantile(data,thres[tmp],na.rm=TRUE)]=level[tmp] data[data>quantile(data,thres[1],na.rm=TRUE)]=0 for(i in 1:tmp-1){ data[data<=quantile(data,thres[i],na.rm=TRUE) & data>quantile(data,thres[i+1],na.rm=TRUE)]=level[i] } #end of for loop } # end if smaller } # end if percentile if(evtDef=="absolute"){ if(event=="greater"){ data[data>=thres[tmp]]=level[tmp] data[data<thres[1]]=0 for(i in 1:tmp-1){ data[data>=thres[i] & data<thres[i+1]]=level[i] } #end of for loop } # end if greater if(event=="smaller"){ data[data<=thres[tmp]]=level[tmp] data[data>thres[1]]=0 for(i in 1:tmp-1){ data[data<=thres[i] & data>thres[i+1]]=level[i] } #end of for loop } # end if smaller } # end if absolute data[data=="0"]=0 for(i in 1:tmp){ data[data==level[i]]=i } #end of for loop data=apply(data,2,as.numeric) return(data) } # end function STS.eventize2