I am analyzing some environmental time series and I use Mann-Kendall test to check for monotonic trends. However, I am a little bit concerned about autocorrelations in my data, since standard Mann-Kendall test assumes independence between measurements, and when this assumptions does not hold it may distort the test's results.
So to investigate the impact of autocorrelations I used three different methods to asses the trends and the problem is they gave quite divergent and unexpected results. So I would like to know what is the reason for that, or if I maybe made some mistakes along the way.
So this is what I did:
- I used standard Mann-Kendall test as implemented in
R
Kendall
package, - then I used Mann-Kendall test with prewhitening, that is removing autocorrelations, as implemented in
R
packagezyp
, - and then I used block-bootstrap for time series to estimate the distribution of the $\tau$ statistic (using
R
tsboot
function fromboot
package).
And the results I got are really surprising in a very bad way. I will show it using one of the series I analyzed, but what I will show applies to all series I analyzed. Below is one of the time series I used.
x <- c(8.0, 8.0, 8.2, 7.7, 8.5, 7.2, 7.8, 7.7, 7.6, 7.2, 7.8, 7.7, 8.5, 7.9, 7.6, 7.7, 7.4, 8.2, 8.6, 8.8, 8.1, 8.5, 8.2, 7.9, 8.6, 7.4, 8.2, 8.4, 8.3, 8.7, 8.8, 8.7, 8.1, 8.4, 8.5, 8.7, 9.4, 8.9, 8.7, 8.2, 8.3, 8.8, 8.5, 9.6, 8.9)
First I checked autocorrelations and I found that they are not too strong (or am I wrong?).
acf(x)
Then I did the standard Mann-Kendall test:
require(Kendall)
MannKendall(x)
And I got $\tau = 0.488$ with $p \leq 0.001$.
So far, so good. But being concerned about autocorrelations that may yield spurious trend effect I then moved to the prewhiteing approach. So I did:
require(zyp) zyp.trend.vector(x)
and I found $\tau = 0.460$ with $p \leq 0.001$. So it is okay, since it is lower than the not-adjusted estimate.
So then I moved to the block-bootstrap estimate and this is where I got really confused. I used the following command:
require(boot)
set.seed(303)
bootest <- tsboot(x, function(x) MannKendall(x)$tau, R=1000, l=10, sim="fixed")
And I found that bootstrap estimated expected value of the $\tau$ coefficient has a bias of -0.477, so it means that the bootstrap estimate is about 0.
So my question is how is that possible, that bootstrap yields $\tau = 0$, while other methods yield highly significant $\tau$ of about 0.46-0.49 magnitude?