[GRASS-user] detrending time series maps
Ivan Marchesini
ivan.marchesini at gmail.com
Fri Dec 29 10:34:32 PST 2023
Hi veronica
>
> I see what you did with creating the days time series. In that way you
> acknowledge irregular gaps, right?
yes this is the reason
>
> 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).
hmm
may be I'm wrong but I used r.regression.series to assess a relationship
between mystrds values and time (days)
As a consequence the offset and slope maps I obtain are b and a in the
following linear equation
y=ax+b
i.e.
predicted_mystrds=slope*days+offset
This is why I suppose that for detrending I need to do:
mystrds-(predicted_mystrds)
i.e.
mystrds-(slope*days+offset)
I'm I wrong?
thank you
Ivan
>
> Best,
> Vero
>
> El jue, 28 dic 2023 a las 8:14, Ivan Marchesini
> (<ivan.marchesini at gmail.com>) escribió:
>
> 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 <http://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/20231229/6fba7f1d/attachment.htm>
More information about the grass-user
mailing list