Time Series Trend Analysis in R
Time series trend analysis, The Mann-Kendall Pattern Test is used to detect whether or not time series data has a trend. It’s a non-parametric test, which means there’s no underlying assumption about the data’s normality.
Hypothesis
The following are the test hypotheses:
H0: There is no discernible pattern in the data.
H1: There is a trend in the data. (This could indicate a positive or negative trend.)
This tutorial will show you how to use R to run a Mann-Kendall Trend Test.
Example: Mann-Kendall Trend Test in R
We’ll use the MannKendall() function from the Kendall library to run a Mann-Kendall Trend Test in R, which has the following syntax:
MannKendall(x)
where: x = time series vector data
We’ll use the rainfall dataset, which contains information about annual data from 2012 to 2059, to demonstrate how to run the test.
Let’s load the Kendall library and create a rainfall dataset
library(Kendall)
rainfall <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,700,784.2,985,882.8,980, 800,1174.8,865.1,1334.6,1200,918.5,685.5,998.6,500,985,700,800, 799,1174.8,865.1,1334.6,635.4,918.5,600,998.6,800,985,1000,1120, 799,1174.8,865.1,1334.6,635.4,918.5,600,998.6,800,985,1000,1120)
Convert it to a time series object.
rainfall.timeseries <- ts(rainfall,start = c(2012,1)) rainfall.timeseries
Time Series: Start = 2012 End = 2059 Frequency = 1 [1] 799.0 1174.8 865.1 1334.6 635.4 918.5 685.5 700.0 784.2 985.0 882.8 980.0 800.0 1174.8 865.1 1334.6 [17] 1200.0 918.5 685.5 998.6 500.0 985.0 700.0 800.0 799.0 1174.8 865.1 1334.6 635.4 918.5 600.0 998.6 [33] 800.0 985.0 1000.0 1120.0 799.0 1174.8 865.1 1334.6 635.4 918.5 600.0 998.6 800.0 985.0 1000.0 1120.0
We can use the Mann-Kendall Trend Test to see if there is a pattern in the data.
Let’s Perform the Mann-Kendall Trend Test
MannKendall(rainfall.timeseries)
tau = 0.0834, 2-sided pvalue =0.41737
The test statistic is 0.0834, and the two-sided p-value associated with it is not less than 0.05. We cannot reject the null hypothesis of the test and conclude that no trend exists in the data because the p-value is greater than 0.05.
Visualization
Create a time series plot of the annual data per year and add a smooth line to indicate the existing pattern to visualize the trend.
Plot the time series data
plot(rainfall.timeseries)
Now we can add a smooth line to visualize the trend
lines(lowess(time(rainfall.timeseries), rainfall.timeseries), col='red')
Time series plot with a smooth line
Note that we may use the SeasonalMannKendall(x) command to do a seasonally-adjusted Mann-Kendall Trend Test to account for any seasonality in the data:
Let’s run a Mann-Kendall Trend Test that is modified for the season.
SeasonalMannKendall(rainfall.timeseries)
tau = 0.0834, 2-sided pvalue =0.41227
The test statistic is 0.0834, and the two-sided p-value corresponds to 0.41227.
Because the p-value is more than 0.05, we cannot reject the null hypothesis of the test and conclude that the data does not show any particular pattern.
Animated Graph GIF with gganimate & ggplot »
Subscribe to our newsletter!