Use autocorelation between EVI and Rainfall to figure it out.
Step 1: Import EVI and Chirps data layers
// Precipitation var chirps = ee.ImageCollection('UCSB-CHG/CHIRPS/PENTAD'); // import MODIS EVI var EVI = ee.ImageCollection("MODIS/MYD13A1").select("EVI");
Step 2: Import the area of interest.
// countries of interest var country_names = ['Myanmar (Burma)','Thailand','Laos','Vietnam','Cambodia']; var countries = ee.FeatureCollection('ft:1tdSwUL7MVpOauSgRzqVTOwdfy17KDbw-1d9omPw'); var mekongCountries = countries.filter(ee.Filter.inList('Country', country_names)); var roi = mekongCountries.geometry();
Step 3: Define number of lag days
// define number of lagdays var lagdays = 30;
Step 4 Define period of interest.
// set start and end date var startdate = ee.Date.fromYMD(2000,1,1); var enddate = ee.Date.fromYMD(2005,12,31); var year = 2010; // filter based on date var EVI = EVI.filterDate(startdate,enddate); var chirps = chirps.filterDate(startdate,enddate);
Step 5: Created a lagged collection
// Autocovariance and autocorrelation --------------------------------------------- // Function to get a lagged collection. Images that are within // lagDays of image are stored in a List in the 'images' property. var lag = function(leftCollection, rightCollection, lagDays) { var filter = ee.Filter.and( ee.Filter.maxDifference({ difference: 1000 * 60 * 60 * 24 * lagDays, leftField: timeField, rightField: timeField }), ee.Filter.greaterThan({ leftField: timeField, rightField: timeField })); return ee.Join.saveAll({ matchesKey: 'images', measureKey: 'delta_t', ordering: timeField, ascending: false, // Sort reverse chronologically }).apply({ primary: leftCollection, secondary: rightCollection, condition: filter }); };
Step 6: apply the lagged function
// Advanced cross-correlation---------------------------------------------------- // Join the precipitation images from the previous month var lag30PrecipEVI = lag(EVI, chirps, lagdays);
Step 7: add the sum of the lagged image collection as a band.
</pre> // calculate the sum of lagged image collection and ass them as a band var sum30PrecipEVI = ee.ImageCollection(lag30PrecipEVI.map(function(image) { var laggedImages = ee.ImageCollection.fromImages(image.get('images')); return ee.Image(image).addBands(laggedImages.sum().rename('sum')); })); var yearlyPrecipEVI = sum30PrecipEVI.filter(ee.Filter.calendarRange(year, year, 'year')); <pre>
Step 8: compute covariates.
</pre> // Function to compute covariance over time. This will return // a 2x2 array image. Pixels contains variance-covariance matrices. var covariance = function(mergedCollection, band, lagBand) { return mergedCollection.select([band, lagBand]).map(function(image) { return image.toArray(); }).reduce(ee.Reducer.covariance(), 8); }; var cov30PrecipEVI = covariance(yearlyPrecipEVI, 'EVI', 'sum'); <pre>
Step 9: calculate the correlation.
</pre> // Compute correlation from a 2x2 covariance image. var correlation = function(vcArrayImage) { var covariance = ee.Image(vcArrayImage).arrayGet([0, 1]); var sd0 = ee.Image(vcArrayImage).arrayGet([0, 0]).sqrt(); var sd1 = ee.Image(vcArrayImage).arrayGet([1, 1]).sqrt(); return covariance.divide(sd0).divide(sd1).rename('correlation'); }; var corr30PrecipEVI = correlation(cov30PrecipEVI).set('system:time_start',ee.Date.fromYMD(year,1,1)); <pre>
Step 10: Add the map.
Map.addLayer(corr30PrecipEVI)
Assignment 1:
Investigate the irrigated and non irigated areas. Which one has the highest autocorrelation?
Assignment 2:
Do the same analysis for 2011.
Follow this url for the full code.
Wow, great example.
I was just wondering whether it is possible to lag months as appose to days – for example if you want to determine the delay period between precipitation and streamflow?
Pretty please 🙂
LikeLike