StatSeasAtlTC.R 2.84 KB
Newer Older
StatSeasAtlTC <- function(atlano=NULL,tropano=NULL,hrvar='HR') {
  #
  # Verify that variables are either TC, HR or PDI.
  # -----------------------------------------------
  #
  if (hrvar != "HR" && hrvar != "TC" && hrvar != "PDI") {
    stop("Hurricane variable not recognized.")
  }
  #
  # Verify that both Atl and Trop SSTA are present.
  # -----------------------------------------------
  #
  if (is.null(atlano) ) {
    stop("Atlantic SST missing")
  }
  if (is.null(tropano)) {
    stop("Tropical SST missing")
  }
  #
  # Verify that Atl and Trop SSTA are of the same dimensions.
  # ---------------------------------------------------------
  #
  if(length(dim(atlano)) != length(dim(tropano)) ){
    stop("Input arrays are of different dimensions.")
  } else {
    for (i in 1:length(dim(atlano))){
      if (dim(atlano)[i] != dim(tropano)[i]) {
        stop("Input arrays are of different sizes.")
      }
    }
  }
  #
  # Get the values of the betas according to the hurricane activity measure we specified.
  # -------------------------------------------------------------------------------------
  #
  if(hrvar=='HR'){
    # beta's are derived from Villarini et al. (2012), Mon Wea Rev, 140, 44-65.
    # beta's are for corrected hurricane data + ERSST with SBC criteria (table 2)
    beta0=1.85    
    betaAtl=1.05 
    betaTrop=-1.17 
  } else if (hrvar=='TC'){
    # beta's are from Villarini et al. (2010), Mon Wea Rev, 138, 2681-2705. 
    # beta's are for corrected TC data (lifetime >=48h) + ERSST (table 5) 
    beta0= 2.10
    betaAtl= 1.02
    betaTrop= -1.05
  } else if (hrvar=='PDI'){
    #  beta's are from Villarini et al. (2012), J Clim, 25, 625-637.
    #  beta's are from ERSST, with SBC penalty criterion (table 1)
    beta0=0.76  
    betaAtl=1.94  
    betaTrop=-1.78
  } 
  #
  # Create matrix of similar dimension as atlano for beta0.
  # -------------------------------------------------------
  #
  intercept <- array(beta0, dim(atlano) )
  #
  # Compute statistical relationship b/w SSTAs and mean hurricane activity. 
  # -----------------------------------------------------------------------
  #
  atl <- betaAtl * atlano
  trop <- betaTrop * tropano
  #
  temp <- intercept + atl + trop 
  #
  statval <- list(mean=array(NaN,dim(atl)),var=array(NaN,dim(atl)) )
  statval$mean[] <- vapply(X=temp, FUN=exp, numeric(1))
  #
  # Compute the variance of the distribution.
  # TC and HR follow a Poisson distribution, so the variance is equal to the mean.
  # PDI follows a gamma distribution, with sigma=-0.57.  (variance= sigma^2 * mean^2).
  # ----------------------------------------------------------------------------------
  #
  if(hrvar == "HR" && hrvar == "TC"){
   statval$var <- statval$mean
  } else {
   sigma=-0.57
   statval$var[] <- sigma^2 * vapply(X=statval$mean, FUN=function(x) x^2, numeric(1))
  }
  #  
  #  Output
  # ~~~~~~~~
  #
  statval
}