This is a port of the WTC MATLAB package written by Aslak Grinsted and the wavelet program written by Christopher Torrence and Gibert P. Compo. This package can be used to perform univariate and bivariate (cross-wavelet, wavelet coherence, wavelet clustering) wavelet analyses.
As of biwavelet version 0.14, the bias-corrected wavelet and cross-wavelet spectra are automatically computed and plotted by default using the methods described by Liu et al. (2007) and Veleda et al. (2012). This correction is needed because the traditional approach for computing the power spectrum (e.g., Torrence and Compo 1998) leads to an artificial and systematic reduction in power at lower periods.
Tarik C. Gouhier
Maintainer: Tarik C. Gouhier <firstname.lastname@example.org>
Code based on WTC MATLAB package written by Aslak Grinsted and the wavelet MATLAB program written by Christopher Torrence and Gibert P. Compo.
Cazelles, B., M. Chavez, D. Berteaux, F. Menard, J. O. Vik, S. Jenouvrier, and N. C. Stenseth. 2008. Wavelet analysis of ecological time series. Oecologia 156:287-304.
Grinsted, A., J. C. Moore, and S. Jevrejeva. 2004. Application of the cross wavelet transform and wavelet coherence to geophysical time series. Nonlinear Processes in Geophysics 11:561-566.
Liu, Y., X. San Liang, and R. H. Weisberg. 2007. Rectification of the Bias in the Wavelet Power Spectrum. Journal of Atmospheric and Oceanic Technology 24:2093-2102.
Rouyer, T., J. M. Fromentin, F. Menard, B. Cazelles, K. Briand, R. Pianet, B. Planque, and N. C. Stenseth. 2008. Complex interplays among population dynamics, environmental forcing, and exploitation in fisheries. Proceedings of the National Academy of Sciences 105:5420-5425.
Rouyer, T., J. M. Fromentin, N. C. Stenseth, and B. Cazelles. 2008. Analysing multiple time series and extending significance testing in wavelet analysis. Marine Ecology Progress Series 359:11-23.
Torrence, C., and G. P. Compo. 1998. A Practical Guide to Wavelet Analysis. Bulletin of the American Meteorological Society 79:61-78.
Torrence, C., and P. J. Webster. 1998. The annual cycle of persistence in the El Nino/Southern Oscillation. Quarterly Journal of the Royal Meteorological Society 124:1985-2004.
Veleda, D., R. Montagne, and M. Araujo. 2012. Cross-Wavelet Bias Corrected by Normalizing Scales. Journal of Atmospheric and Oceanic Technology 29:1401-1408.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
# As of biwavelet version 0.14, the bias-corrected wavelet and cross-wavelet spectra # are automatically computed and plotted by default using the methods # described by Liu et al. (2007) and Veleda et al. (2012). This correction # is needed because the traditional approach for computing the power spectrum # (e.g., Torrence and Compo 1998) leads to an artificial and systematic reduction # in power at low periods. # EXAMPLE OF BIAS CORRECTION: require(biwavelet) # Generate a synthetic time series 's' with the same power at three distinct periods t1=sin(seq(from=0, to=2*5*pi, length=1000)) t2=sin(seq(from=0, to=2*15*pi, length=1000)) t3=sin(seq(from=0, to=2*40*pi, length=1000)) s=t1+t2+t3 # Compare non-corrected vs. corrected wavelet spectrum wt1=wt(cbind(1:1000, s)) par(mfrow=c(1,2)) plot(wt1, type="power.corr.norm", main="Bias-corrected") plot(wt1, type="power.norm", main="Not-corrected") # ADDITIONAL EXAMPLES t1 <- cbind(1:100, rnorm(100)) t2 <- cbind(1:100, rnorm(100)) # Continuous wavelet transform wt.t1 <- wt(t1) # Plot power # Make room to the right for the color bar par(oma = c(0, 0, 0, 1), mar = c(5, 4, 4, 5) + 0.1) plot(wt.t1, plot.cb=TRUE, plot.phase=FALSE) # Compute cross-wavelet xwt.t1t2 <- xwt(t1, t2) # Plot cross wavelet power and phase difference (arrows) plot(xwt.t1t2, plot.cb=TRUE) # Wavelet coherence; nrands should be large (>= 1000) wtc.t1t2=wtc(t1, t2, nrands=10) # Plot wavelet coherence and phase difference (arrows) # Make room to the right for the color bar par(oma=c(0, 0, 0, 1), mar=c(5, 4, 4, 5) + 0.1) plot(wtc.t1t2, plot.cb=TRUE) # Perform wavelet clustering of three time series t1=cbind(1:100, sin(seq(from=0, to=10*2*pi, length.out=100))) t2=cbind(1:100, sin(seq(from=0, to=10*2*pi, length.out=100)+0.1*pi)) t3=cbind(1:100, rnorm(100)) # Compute wavelet spectra wt.t1=wt(t1) wt.t2=wt(t2) wt.t3=wt(t3) # Store all wavelet spectra into array w.arr=array(NA, dim=c(3, NROW(wt.t1$wave), NCOL(wt.t1$wave))) w.arr[1, , ]=wt.t1$wave w.arr[2, , ]=wt.t2$wave w.arr[3, , ]=wt.t3$wave # Compute dissimilarity and distance matrices w.arr.dis <- wclust(w.arr) plot(hclust(w.arr.dis$dist.mat, method = "ward.D"), sub = "", main = "", ylab = "Dissimilarity", hang = -1)