[GRASS-user] detrending time series maps

Ivan Marchesini ivan.marchesini at gmail.com
Thu Dec 28 03:14:08 PST 2023


Dear Veronica

I think I found a simple solution using temporal raster modules. Here is 
an example:

#evaluating info of the strds
eval `t.info mystrds -g`

#getting the starting day (of the year, 0-365) of my strds
startday=$(date -d "$start_time" "+%j")

#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)
t.rast.mapcalc inputs=mystrds 
expression="(start_year()-2016)*365-${startday} +start_doy()" 
output=days basename=days nprocs=xxx --o

#fitting the trend equation
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

#detrending
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


Best

Ivan




On 23/12/23 14:53, Ivan Marchesini wrote:
>
> Hi Veronica
>
> 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
>
> I have another idea.
>
> if it works I will come back here to explain how I did
>
> thank you again
>
> Ivan
>
>
> On 22/12/23 13:45, Veronica Andreo wrote:
>> Hello Ivan,
>>
>> 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]".
>>
>> 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.
>>
>> hth somehow
>> Vero
>>
>> El vie, 22 dic 2023 a las 5:10, Ivan Marchesini via grass-user 
>> (<grass-user at lists.osgeo.org>) escribió:
>>
>>     Dear colleagues
>>
>>     I would like to the advantage of the t.* modules for detrending a
>>     strd.
>>
>>     In the strd I have earth observation data irregularly sampled (2
>>     or 3
>>     times per month), in the period November-February, for 7 years.
>>     They are
>>     not equally spaced (i.e gaps have different duration)
>>
>>     A simple t.rast.series analysis (opion=slope,offset) highlights that
>>     probably there is a descending trend when considering the maps
>>     ordered
>>     by id.
>>
>>     I would like to fit a proper time depending fitting curve for
>>     each pixel
>>     and then subtract the function from the real data.
>>
>>     any hints on how I can do this task exploiting the GRASS GIS
>>     modules or
>>     some simple bash/python scripting?
>>
>>     thank you
>>
>>     Ivan
>>
>>
>>
>>
>>     _______________________________________________
>>     grass-user mailing list
>>     grass-user at lists.osgeo.org
>>     https://lists.osgeo.org/mailman/listinfo/grass-user
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20231228/febf5bcd/attachment.htm>


More information about the grass-user mailing list