
eofunc_north
Use North et al (MWR, 1982) equation 24 to evaluate eigenvalue separation.
Available in version 6.3.0 and later.
Prototype
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" ; This library is automatically loaded ; from NCL V6.2.0 onward. ; No need for user to explicitly load. function eofunc_north ( eval [*] : numeric, N [1] : integer or long, prinfo [1] : logical )
Arguments
evalEigenvalues to be tested. These are returned as attributes of the EOFs returned by eofunc or eofunc_Wrap: specifically, eval. Actually, any of the following attributes could probably be used: pcvar, eval_transpose or eval. Using pcvar is probably the clearest if prinfo=True.
NMaximum possible number of eigenvalues. Typically, in climate applications, this is the number time steps.
prinfoPrint the calculated 'delta lambda', the eigenvalues, the lower and upper test bounds and the 'separated significance' (sig).
Return value
A one dimensional logical array containing True or False. This indicates if eigenvalues are significantly separated.
Description
Uses North et al equation 24 to see if eigenvalues are significantly separated.
North, G.R. et al (1982): Sampling Errors in the Estimation of Empirical Orthogonal Functions. Mon. Wea. Rev., 110, 699-706. doi: http://dx.doi.org/10.1175/1520-0493(1982)110<0699:SEITEO>2.0.CO;2
See Also
eofunc, eofunc_Wrap, eofunc_n_Wrap
Examples
See: Applications Example 6
Example 1
f = addfile("erai_1989-2009.mon.msl_psl.nc","r") p = f->SLP(::12,{0:90},:) ; p(time,latitude,longtitude) printVarSummary(p) ; p(21,61,240) w = sqrt(cos(0.01745329*p&latitude) ; weights(61) wp = p*conform(p, w, 1) ; wp(21,61,240) copy_VarCoords(p, wp) ; wp(time,lat,lon) printVarSummary(wp) ; [time | 21] x [latitude | 61] x [longitude | 240] x = wp(latitude|:,longitude|:,time|:) ; reorder data neof = 4 eof = eofunc_Wrap(x, neof, False) eof_ts = eofunc_ts_Wrap printVarSummary(eof) printVarSummary(eof_ts) ;******************************************* ; North significance test: Note any of the following could be used ;******************************************* dimp = dimsizes(p) ntim = dimp(0) prinfo = True sig_ev = eofunc_north(eof@eval, ntim, prinfo) sig_pcv = eofunc_north(eof@pcvar, ntim, prinfo) sig_evt = eofunc_north(eof@eval_transform, ntim, prinfo)The (edited) output
Variable: eof Type: float Number of Dimensions: 3 Dimensions and sizes: [evn | 4] x [latitude | 61] x [longitude | 240] Coordinates: evn: [1..4] latitude: [ 0..90] longitude: [ 0..358.5] Number Of Attributes: 6 eval_transpose : ( 47.2223, 32.42917, 21.44406, 15.27389 ) eval : ( 34519.5, 23705.72, 15675.61, 11165.21 ) pcvar : ( 26.83549, 18.42885, 12.18624, 8.679848 ) matrix : covariance method : transpose _FillValue : 1e+20 ======= From eofunc_north, all return the same 'sig' answers. Using eof@pcvar yields the easiest numbers to read. index dlam low pcvar high sig_pcv <== titles added for clarity (0) 8.28161 18.5539 26.8355 35.1171 True <== EOF 1 (1) 5.68727 12.7416 18.4289 24.1161 True <== EOF 2 (2) 3.76075 8.42548 12.1862 15.947 True <== EOF 3 (3) 2.67866 6.00119 8.67985 11.3585 False <== EOF 4 index dlam low eval_tr high sig_evt <== titles added for clarity (0) 14.5731 32.6492 47.2223 61.7954 True <== EOF 1 (1) 10.0079 22.4213 32.4292 42.437 True <== EOF 2 (2) 6.61778 14.8263 21.4441 28.0618 True <== EOF 3 (3) 4.71362 10.5603 15.2739 19.9875 False <== EOF 4 index dlam low eval high sig_ev <== titles added for clarity (0) 10652.9 23866.6 34519.5 45172.4 True <== EOF 1 (1) 7315.75 16390 23705.7 31021.5 True <== EOF 2 (2) 4837.6 10838 15675.6 20513.2 True <== EOF 3 (3) 3445.66 7719.55 11165.2 14610.9 False <== EOF 4