Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
h3. Contents of check for Mann-Kendall Check

The purpose of this check is to test for trends in each of the input time series and send log messages whenever a trend is detected. Each time series is processed independently. One of the strengths of the Mann-Kendall check is that it can also be used when there are lots of missing values. If there are less than 10 non-missing values, the test will be skipped. During the check, the threshold criteria for the check are first sorted. The most severe log message is processed first and when the log message is generated the less serious log message will not be generated.

h3. General information on Mann-Kendall trend test

The MannKendall algorithm first calculates three statistics on the timeseries. 

*Mann-Kendall statistic S*
{latex}
\(S=\sum\limits_{k=1}^{N-1}\sum\limits_{l=k+1}^{N}sign(x_l-x_k)\)

{latex}

*Z statistic*
Z={latex}
\( \frac{S'-1}{\sqrt{VAR(S')}}\)
{latex} , if S' > 0,
{latex}Z=0{latex}, if S' = 0 
{latex}
Z=\( \frac{S'+1}{\sqrt{VAR(S')}}\)
{latex} , if S' < 0,


*delta*
where delta is defined by
{latex}
delta = inverseCDF(1 - confidenceCoefficient) if two-tailed{latex}
{latex}delta = inverseCDF(1 - confidenceCoefficient / 2) if upward or downward
{latex}

h3. Conditions for rejecting H0 (that there is no trend)
* there is a two-tailed trend if zStatistic <= -delta or zStatistic >= delta
* there is a downward trend if zStatistic <= -delta
* there is an upward trend if zStatistic >= delta 

h3. Configuration

* *id*: identifier of the check.
* *checkRelativePeriod*: The period to run the trend test for.
* *variableDefinition*: Definition of time series.

For each *threshold*,
* *testTrend*: either two-tailed, upward or downward (two-tailed is default)
* *confidenceCoefficient*: the confidence coefficient, also known as alpha, which is typically between 0 and 0.5, i.e. 0.05 (one-tailed) and 0.025 (two-tailed) correspond to a confidence level of 95%.
* *logLevel*: Log level for the log message that is logged if a trend is detected. Can be DEBUG, INFO, WARN, ERROR or FATAL. If level is error or fatal, then the module will stop running after logging the first log message. Fatal should never be used actually.
* *logEventCode*: Event code for the log message that is logged if a trend is detected. This event code has to contain a dot, e.g. "TimeSeries.Check", because the log message is only visible to the master controller if the event code contains a dot.
* *logMessage*: Log message that is logged if a trend is detected.

|| Tag || Replacement ||
| %CHECK_ID% | The id of the check that caused the flags to be altered. |
| %LOCATION_NAME% | The name of the locations where the alterations took place. |
| %PARAMETER_NAME% | The name of the parameter where the alterations took place. |


h3. Configuration examples for MannKendallCheck

A configuration example for the _MannKendallCheck_ is given below:
{code:xml}<secondaryValidation xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/secondaryValidation.xsd">
	<mannKendallCheck id="MannKendallCheck1">
		<variable>
			<timeSeriesSet>
				<moduleInstanceId>MannKendallCheckTest</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>H.meting</parameterId>
				<locationId>Nue_0015_01_01</locationId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="1"/>
				<readWriteMode>read only</readWriteMode>
			</timeSeriesSet>
		</variable>
		<checkRelativePeriod unit="day" start="100" end="0"/>
		<threshold>
			<testTrend>two-tailed</testTrend>
			<confidenceCoefficient>0.01</confidenceCoefficient>
			<logLevel>WARN</logLevel>
			<logEventCode>SecondaryValidation.MannKendallCheck</logEventCode>
			<logMessage>trend detected in %HEADER% by %CHECK_ID%.</logMessage>
		</threshold>
	</mannKendallCheck>
</secondaryValidation>{code}