[ncl-talk] Help in saving values in looping
Dennis Shea
shea at ucar.edu
Mon Jun 5 18:29:55 MDT 2017
I am not sure what is meant by: "There was one not insignificant thing I
didn’t mention"
---
As you note:
"the regline_stats function for the b calculates both the b(0) +b(1*)x of
the linear regression, while the b95 calculates both the 2.5% and 97.5%
regression coefficient confidence intervals. So when it tries to save to
that cell, there are two values for the @b and @b95."
Change:
trend_slope=test_rc at b*10 ; prints slope of the linear trend for
the selected range of years
reg_coeff=test_rc at b95 ; prints 2.5% and 97.5% regression
coefficient confidence intervals
To extract only one value
trend_slope=test_rc at b(1) *10 ; prints slope of the linear trend
for the selected range of years
reg_coeff=test_rc at b95(1) ; prints 2.5% and 97.5%
regression coefficient confidence intervals
---
"4 different columns (start_date, end_date,trend_slope,reg_coeff)
---
The following create 4 (well 3) different columns. I may give you an idea
how to proceed.
Also, good programming practice is to use variables and not constants.
nyrSpan = 10
nyrCrit = 10
nyrStrt1 = 1980
nyrStrt2 = 2001
nyrLast1 = nyrStrt1+nyrSpan-1
nyrLast2 = 2010
NTIM = 1000 ; arbitrary max possible # elements
strtYear = new( NTIM, "integer")
lastYear = new( NTIM, "integer")
trend = new( NTIM, "float")
rc = new( NTIM, "float")
nt = -1
do nyrStrt=nyrStrt1,nyrStrt2
do nyrLast=nyrLast1,nyrLast2
nyrs = nyrLast-nyrStrt+1
if (nyrs.ge.nyrCrit) then
test_rc =
regline_stats(tofloat(ispan(1,nyrSpan,1)),random_normal(-1,1,nyrSpan))
nt = nt+1
strtYear(nt) = nyrStrt
lastYear(nt) = nyrLast
spanYear = nyrLast-nyrStrt+1
rc(nt) = (/ test_rc /) ; (/.../) no meta data ; same as
b(1)
;trend(nt) = ?????
print(strtYear(nt)+" "+lastYear(nt)+" "+spanYear+" "+rc(nt))
end if
end do
end do
print("=================================================")
ntim = nt+1 ; # of elements
print("ntim="+ntim)
On Mon, Jun 5, 2017 at 11:10 AM, Andreas Chrysanthou <eeac at leeds.ac.uk>
wrote:
> There was one not insignificant thing I didn’t mention.
>
> the regline_stats function for the b calculates both the b(0) +b(1*)x of
> the linear regression, while the b95 calculates both the 2.5% and 97.5%
> regression coefficient confidence intervals.
> So when it tries to save to that cell, there are two values for the @b and
> @b95.
>
> That’s why I got the error of : "fatal:Dimension sizes on right hand side
> of assignment do not match dimension sizes of left hand side"
>
> I only want the slope of the liner trend (b(1)) and my criterion if I need
> to save these values is that the confidence intervals should not be
> negative (that would probably need to be included in the if loop).
> But I don’t know how to keep only one value of those pair of calculated
> stats.
>
> Cheers,
> Andreas
>
>
> On 5 Jun 2017, at 17:17, Adam Phillips <asphilli at ucar.edu> wrote:
>
> Hi Andreas,
> As there are singular values for reg_coef and trend_slope for each start
> and end time, I think it would be best to simply create a 3D array
> dimensioned (start_date, end_date,2), with the last dimension (0) =
> trend_slope and (1) representing reg_coeff. If you *must* have a
> 4-dimensional array then you should create an array that is dimensioned 22
> x 22 x 2 x 2, but (:,:,1,0) and (:,:,0,1) will be missing. In the example
> below I show how to create both types of arrays:
>
> finarr = new((/22,22,2/),typeof(value_test))
> finarr!0 = "startyear"
> finarr&startyear = ispan(1980,2001,1)
> finarr!1 = "endyear"
> finarr&endyear = ispan(1989,2010,1)
> finarrZ = new((/22,22,2,2/),typeof(value_test))
> finarrZ!0 = "startyear"
> finarrZ&startyear = ispan(1980,2001,1)
> finarrZ!1 = "endyear"
> finarrZ&endyear = ispan(1989,2010,1)
>
> do i=1980,2001,1
> do j=1989,2010,1
> ntimes=ispan(i,j,1)
> if (j-i .ge. 9 ) then
> test_rc=regline_stats(ntimes,value_test({i:j}))
> print(test_rc)
> start_date=i
> end_date=j
> finarr({i},{j},0) = test_rc at b*10 ; prints slope of the linear
> trend for the selected range of years
> finarr({i},{j},1) = test_rc at b95 ; prints 2.5% and
> 97.5% regression coefficient confidence intervals
> finarrZ({i},{j},0,0) = test_rc at b*10
> finarrZ({i},{j},1,1) = test_rc at b95
> else
> print(“this age range has not been selected, since its less
> than 9 years")
> end if
> delete(ntimes)
> end do
> end do
>
> Hope that helps. If you have any further questions please respond to the
> ncl-talk email list.
> Adam
>
>
> On Mon, Jun 5, 2017 at 9:48 AM, Andreas Chrysanthou <eeac at leeds.ac.uk>
> wrote:
>
>> Hi NCL users,
>>
>>
>> I created a loop for calculating a linear trend sensitivity for different
>> start and end dates.
>>
>> My timeseries span over 1980-2010 and I want to calculate the linear
>> trend of the timeseries for when the start - end date are more than >=
>> 9years.
>>
>> (1980-1989, 1980-1990, 1980-1991,..., 1980-2010
>>
>> 1981-1990, 1981-1991, ..., 1981-2010
>>
>> ...
>>
>> ...
>>
>> ...
>>
>> 2000-2009, 2001-2010
>>
>> 2001-2010)
>>
>>
>> I’ve created the loops that calculate those values but I need to save
>> them in an array as 4 different columns (start_date,
>> end_date,trend_slope,reg_coeff)
>> My aim is to plot those as a a contour box plot with x axis the start
>> date and y axis the end date, and the calculated (i’m gonna filter out
>> those values with some criteria) trend values based on a colormap.
>>
>> Can you help me in order to save the values to that new array so I can
>> plot it?
>>
>> A snippet of the code follows:
>>
>> do i=1980,2001,1
>> do j=1989,2010,1
>> ntimes=ispan(i,j,1)
>> if (j-i .ge. 9 ) then
>> test_rc=regline_stats(ntimes,value_test({i:j}))
>> print(test_rc)
>> start_date=i
>> end_date=j
>> trend_slope=test_rc at b*10 ; prints slope of the linear trend for
>> the selected range of years
>> reg_coeff=test_rc at b95 ; prints 2.5% and 97.5% regression
>> coefficient confidence intervals
>> else print(“this age range has not been selected, since its less than 9
>> years")
>> end if
>> delete(ntimes)
>> end do
>> end do
>>
>> Cheers,
>> Andreas
>>
>>
>>
>>
>>
>>
>>
>>
>> Andreas
>>
>>
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>>
>
>
> --
> Adam Phillips
> Associate Scientist, Climate and Global Dynamics Laboratory, NCAR
> www.cgd.ucar.edu/staff/asphilli/ 303-497-1726 <(303)%20497-1726>
>
> <http://www.cgd.ucar.edu/staff/asphilli>
>
>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170605/a1c1de6e/attachment.html
More information about the ncl-talk
mailing list