<div dir="ltr">Hello Ivan,<div><br></div><div>Thanks for coming back to this :)</div><div><br></div><div>I see what you did with creating the days time series. In that way you acknowledge irregular gaps, right? Otherwise, as t.rast.series method=slope,offset uses r.series in the background, it will use index as independent variable and therefore maps are considered equally separated in time.</div><div><br></div><div>However, why do you multiply by days strds? From my understanding, detrending by subtracting the results of a model obbeys this rule: value(t) = observed(t) - predicted(t). Then, this mystrds-(regression_offset+regression_slope*days) should be mystrds-(regression_offset+regression_slope*mystrds).</div><div><br></div><div>Best,</div><div>Vero</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El jue, 28 dic 2023 a las 8:14, Ivan Marchesini (<<a href="mailto:ivan.marchesini@gmail.com">ivan.marchesini@gmail.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div>
    <p>Dear Veronica</p>
    <p>I think I found a simple solution using temporal raster modules.
      Here is an example:</p>
    <p>#evaluating info of the strds<br>
      eval `<a href="http://t.info" target="_blank">t.info</a> mystrds -g`</p>
    <p>#getting the starting day (of the year, 0-365) of my strds<br>
      startday=$(date -d "$start_time" "+%j")<br>
    </p>
    <p>#Creating a new strds where each pixel has the value of the count
      of the days starting from the start_day of my strds (the start day
      in my dataset is in 2016)<br>
      t.rast.mapcalc inputs=mystrds
      expression="(start_year()-2016)*365-${startday} +start_doy()"
      output=days basename=days nprocs=xxx --o<br>
    </p>
    <p>#fitting the trend equation<br>
      r.regression.series xseries="`t.rast.list in=days columns=name
      sep=, format=line`" yseries="` t.rast.list in=mystrds columns=name
      sep=, format=line`" 
      out=regression_offset,regression_slope,regression_rsq,regression_t
      meth=offset,slope,rsq,t<br>
    </p>
    <p>#detrending<br>
      t.rast.mapcalc input=mystrds,days expression="mystrds_detrend
      = mystrds-(regression_offset+regression_slope*days)"
      output=mystrds_detrend basename=mystrds_detrend nprocs=xxx
      method=start --o<br>
    </p>
    <p><br>
    </p>
    <p>Best</p>
    <p>Ivan<br>
    </p>
    <p><br>
    </p>
    <p><br>
    </p>
    <p><br>
    </p>
    <div>On 23/12/23 14:53, Ivan Marchesini
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <p>Hi Veronica</p>
      <p>Thank you. It goes in the direction of my idea evn if  my
        problem is exactly trying to take into account the correct gaps
        between that data <br>
      </p>
      <p>I have another idea.</p>
      <p>if it works I will come back here to explain how I did</p>
      <p>thank you again</p>
      <p>Ivan<br>
      </p>
      <p><br>
      </p>
      <div>On 22/12/23 13:45, Veronica Andreo
        wrote:<br>
      </div>
      <blockquote type="cite">
        
        <div dir="ltr">Hello Ivan, 
          <div><br>
          </div>
          <div>AFAIU you could use the slope and offset maps from
            t.rast.series within t.rast.algebra to detrend the values of
            the maps within the strds, something like "detrended_strds =
            trend_strds - (trend_strds*map(slope) + map(offset))".
            Others suggest, to detrend by subtracting the previous
            value, i.e. that would imply using the temporal algebra with
            the temporal index, something like "detrended_strds =
            trend_strds[1] - trend_strds[0]". </div>
          <div><br>
          </div>
          <div>I haven't tested any of these, just a couple of ideas ;-)
            However, I do not know how this might interact with
            seasonality within data, or irregular gaps. </div>
          <div><br>
          </div>
          <div>hth somehow</div>
          <div>Vero</div>
        </div>
        <br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">El vie, 22 dic 2023 a las
            5:10, Ivan Marchesini via grass-user (<<a href="mailto:grass-user@lists.osgeo.org" target="_blank">grass-user@lists.osgeo.org</a>>)
            escribió:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear
            colleagues<br>
            <br>
            I would like to the advantage of the t.* modules for
            detrending a strd.<br>
            <br>
            In the strd I have earth observation data irregularly
            sampled (2 or 3 <br>
            times per month), in the period November-February, for 7
            years. They are <br>
            not equally spaced (i.e gaps have different duration)<br>
            <br>
            A simple t.rast.series analysis (opion=slope,offset)
            highlights that <br>
            probably there is a descending trend when considering the
            maps ordered <br>
            by id.<br>
            <br>
            I would like to fit a proper time depending fitting curve
            for each pixel <br>
            and then subtract the function from the real data.<br>
            <br>
            any hints on how I can do this task exploiting the GRASS GIS
            modules or <br>
            some simple bash/python scripting?<br>
            <br>
            thank you<br>
            <br>
            Ivan<br>
            <br>
            <br>
            <br>
            <br>
            _______________________________________________<br>
            grass-user mailing list<br>
            <a href="mailto:grass-user@lists.osgeo.org" target="_blank">grass-user@lists.osgeo.org</a><br>
            <a href="https://lists.osgeo.org/mailman/listinfo/grass-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/grass-user</a><br>
          </blockquote>
        </div>
      </blockquote>
    </blockquote>
  </div>

</blockquote></div>