Hi Steve,
Where are you looking in the documentation? Sometimes we who write docs are too close to it all and can't see where confusion arises. There is this paragraph a little ways down under
*Ch3 Sec2.4.1. * *General information about transformations
*
...If integration or averaging limits are given as world
coordinates, the grid boxes at the edges of the region specified are
weighted according to the fraction of grid box that actually lies
within the specified region. If the transformation limits are given
as subscripts, the full box size of each grid point along the axis
is used---including the first and last subscript given. The region
information that is listed with the output reflects this.
But, I guess that we could also add to the @AVE section, perhaps something like the *BOLD* text below.
*Ch3 Sec2.4.6. * *@AVE---average *
The transformation @AVE computes the average weighted by grid box size---a single number representing the average of the variable between two endpoints. *When the endpoints are expressed as coordinates, e.g. var[X=3.5:8@AVE], then the average is weighted with partial box sizes so that the average extends from exactly x=3.5 to 8. If the endpoints are expressed as indices, e.g. var[L=5:12@AVE] then entire boxes contribute to the average.
*
*
*
guimond@coaps.fsu.edu wrote:
Hi Jaison,--
Thank you for your response. This is a very nice review of the @AVE functions and something I think should be added to the documentation. It is not obvious how the grid box weights are computed from what is given and one could easily trust the values when in fact they would be wrong. I will post this response to the group. So, basically using the calendar format (i.e. var[t=02-JAN-2001:05-JAN-2001@AVE]) of @AVE will ALWAYS underestimate the mean because of the 0.50 weight on each end. I think another way to get at the correct method would be to:
let new_var = var[t=02-JAN-2001:05-JAN-2001]
let new_var_mean = new_var[t=@AVE]
This computes the mean over all the grid cells in range by removing the values from the rest of the data.
Any idea why @AVE was created like this?
Thanks again,
Steve
Quoting Jaison Kurian <jaison@caos.iisc.ernet.in>:
Hi Steve,
I faced a simular confusion earlier...that time Ansley
clarified my doubts.
Basically over "co-ordinate axes" ie. X/Y/Z/T, @AVE is weigthed
by grid box lenth, based on the specified region. But over "abstract
axes or indices" ie. I/J/K/L it is not. Let us see one example.
define axis/t=01-JAN-2001:06-JAN-2001:1/units=days/t0=31-DEC-2000 time
let var = SIN(t[gt=time])
set list/precision=10
! first 3-methods to find ave
list var[l=2:5@AVE]
list var[t=02-JAN-2001:05-JAN-2001@SUM]/var[t=02-JAN-2001:05-JAN-2001@NGD]
list var[t="01-JAN-2001:12":"05-JAN-2001:12"@AVE]
! fourth method to find ave
list var[t=02-JAN-2001:05-JAN-2001@AVE]
The first 3 list commands will give the same answer, the sum of variable
values from 2nd to 5th devided by number of points, ie. 4. But the last one
will give a different anwer. Let me explain in detail.
The first time point is "01-JAN-2001:00:00"
its bounds are "31-DEC-2000:12:00" and "01-JAN-2001:12:00"
The second time point is "02-JAN-2001:00:00"
its bounds are "01-JAN-2001:12:00" and "02-JAN-2001:12:00"
Hence when you are specifying as the starting T for an average
operation as "02-JAN-2001",only half of the grid box comes after
this time (ie. from "02-JAN-2001:00:00" to "02-JAN-2001:12:00")
hence this value gets only 0.5 weightage..similar is the case
with the value on "05-JAN-2001". So, the average
var[t=02-JAN-2001:05-JAN-2001@AVE]
will be computed as
(var[t=02-JAN-2001]*0.5+var[t=03-JAN-2001]*1+var[t=04-JAN-2001]*1+
var[t=05-JAN-2001]*0.5)/3
This problem is overcome by specifying exact grid boundaries in method
3 above. In method 2 a combination of @SUM and @NGD has been used. Since
@SUM is a non-weighted calculation, this will give the answer without
any problems like method 4 above.
Back to your question
---------------------
So what should a proper method for simple mean ? Any of first 3 methods
from above example. Then you may ask, how to make it easier with the
time specified on calendar format : here is the trick
let l1 = L[gt=var,t=02-JAN-2001]
let l2 = L[gt=var,t=05-JAN-2001]
list var[l=`l1`:`l2`@AVE]
Hope this helps,
Regards,
Jaison
On Mon, 16 Oct 2006 guimond@coaps.fsu.edu wrote:
Hi Jaison, I decided to e-mail you separatley about this question and then I will post the responses to the group. I have computed some means and I am questioning how ferret goes about them. Specifically, I have computed the time mean of a var between two endpoints, call them t1 and t2: let mean1 = var[t=`t1`:`t2`@AVE] According to the FERRET users guide, this will be the mean over the "exact" region or from gridpoint to gridpoint, correct? Now if I do something like this: let mean2 = var[l=10:15@AVE], using time steps instead of time values. I will get a different answer because this method averages from gridcell to gridcell and not gridpoint to gridpoint, correct? I am confused on what is the more accurate depiction of the mean here. I want to average from one single time point, t1, to another time point, t2. This is why I used the formula for mean1. Is this correct for simple means? Thanks for your help, Steve Guimond --------------------------------------------------------------------------------------------------------------------------------
~> ~> ~> ~> ~> ~> ~> ~> ~> ~> ~> Ansley Manke, NOAA/PMEL ansley.b.manke@noaa.gov
7600 Sand Point Way NE, Seattle WA
Phone 206-526-6246, FAX 206-526-6744
----------------------------------------------------------------