The climatology function gives typical values of a variable as it varies throughout the year. The output of this function includes the overall mean (whereas the output of the season function does not.)
[Ac,tc] = climatology(A,t) [Ac,tc] = climatology(...,'daily') [Ac,tc] = climatology(...,'monthly') [Ac,tc] = climatology(...,'detrend',DetrendOption) [Ac,tc] = climatology(...,'dim',dimension) Ac = climatology(...,'full')
[Ac,tc] = climatology(A,t) gives the typical values of variable A as it changes throughout the year. Times times t are in datenum or datetime format. If t is daily, output tc is 1 to 366 and Ac will contain average values for each of the 366 days of the year. If inputs are monthly, tc is 1:12 and Ac will contain average values for each of the 12 months of the year.
[Ac,tc] = climatology(...,'daily') specifies directly that inputs are daily resolution. The climatology function will typically figure this out automatically, but if you have large missing gaps in your data you may wish to ensure correct results by specifying daily.
[Ac,tc] = climatology(...,'monthly') as above, but forces monthly solution.
[Ac,tc] = climatology(...,'detrend',DetrendOption) specifies a baseline relative to which seasonal anomalies are determined. Options are 'linear', 'quadratic', or 'none'. By default, anomalies are calculated after removing the linear least squares trend, but if, for example, warming is strongly nonlinear, you may prefer the 'quadratic' option. Default is 'linear'.
[Ac,tc] = climatology(...,'dim',dimension) specifies a dimension along which to assess seasons. By default, if A is 1D, seasonal cycle is returned along the nonsingleton dimension; if A is 2D, climatology is performed along dimension 1 (time marches down the rows); if A is 3D, climatology is performed along dimension 3.
Ac = climatology(...,'full') returns Ac for the entire time series A. This is a convenient option for looking at the components of a long time series separately.
Example 1: Daily sea ice extent
Here's some sea ice data that is mostly daily. Before 1988 there is only data for every other day, but that's fine--the climatology function will figure it out. Start by loading and plotting the data. Also add a least-squares trend line with polyplot.
load seaice_extent plot(t,extent_N) box off ylabel 'sea ice extent (\times10^6 km^2)' hold on polyplot(t,extent_N)
The climatology is then:
extent_N_clim = climatology(extent_N,t,'full'); plot(t,extent_N_clim)
In the plot above, you'll notice that the climatology has the same mean value as the original sea ice extent time series, but it does not have any trend through time. Its only variablity is that with the seasons.
Removing the climatology from the original signal produces the same result as removing the mean and the seasonal cycle--the only parts left would be the long-term trends, interannual variability, and noise.
Example 2: Gridded data
For this example, load the pacific_sst example dataset, which contains gridded data for 802 months of gridded sea surface temperatures. Use these 66.8 years of data to get a sense of how SSTs tend to vary throughout the year, like this:
load pacific_sst sst_c = climatology(sst,t);
Now, sst_c is a 60x55x12 grid of sea surface temperatures. That third dimension indicates sea surface temperatures for each month of the typical year. Animate them and make a gif like this, starting by plotting the first frame:
figure h = imagescn(lon,lat,sst_c(:,:,1)); cb = colorbar; ylabel(cb,'sea surface temperature (\circC)') cmocean thermal % sets the colormap title(datestr(datenum(0,1,1),'mmmm')) % converts "1" to "January" caxis([2 29])
% Add a silly earth image: hold on he = earthimage; uistack(he,'bottom') % puts the earth image below SST data
% Write the first frame: gif('pacific_sst_climatology.gif','frame',gcf,'delaytime',1/12,'nodither')
% Write frames for all the other months: for k = 2:12 h.CData = sst_c(:,:,k); % updates monthly values title(datestr(datenum(0,k,1),'mmmm')) % updates title gif % adds this frame to the gif end
...and that produces this nice animation:
Seasons vs Climatology
CDT has a function called climatology and another function called season. The only difference is that the output of climatology includes the mean of the variable, whereas the output of season will always have a 0 mean value. Accordingly, the deseason function removes the seasonal component of variability while preserving the overall mean and trends.
In general, CDT assumes that a multi-year record of a variable sampled at subannual resolution can described by
y = y_0 + y_tr + y_season + y_var + y_noise
- y_0 is the long-term mean,
- y_trend is the long-term trend,
- y_season is the typical seasonal anomaly, which the season function obtains after detrending and removing the mean,
- y_var represents interannual variability, and
- y_noise is everything else
In this model,
y_climatology = y_0 + y_season
Other ways to define seasonality
This function is part of the Climate Data Toolbox for Matlab. The function and supporting documentation were written by Chad A. Greene of the University of Texas at Austin.