[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