当前位置:   article > 正文

Mann-Kendall 检验_mann-kendall检验

mann-kendall检验

一、M-K 趋势检验

Mann-Kendall 突变检验是一种非参数的假设检验方法,用于检验时间序列数据中的趋势性变化。该检验方法通过比较每个数据点与其之前数据点的大小,来检测时间序列数据中的单调趋势(上升、下降或没有趋势)。具体来说,Mann-Kendall测试将时间序列中的每个数据点与所有之前的数据点进行比较,计算出每个数据点之前比它小的数据点数目和比它大的数据点数目,然后比较这两个数量的大小关系以确定是否存在单调趋势。

Mann-Kendall检验的优点是不需要对数据进行任何假设,可以用于各种类型的时间序列数据,包括非正态数据。但是它的缺点是无法检测出具体的趋势形式,如线性、非线性等。此外,它对时间序列数据中的周期性变化不敏感。

当Z的绝对值大于等于1.64、 1.96、 2.58时则说明该时间序列分别通过了置信水平90%、95%、99%的显著性检验。

  1. import numpy as np
  2. from scipy.stats import norm
  3. def mann_kendall_test(x):
  4. """
  5. Mann-Kendall trend test for a given data sequence x.
  6. Args:
  7. x: A list or numpy array of data sequence.
  8. Returns:
  9. trend: The calculated trend (positive, negative or no trend).
  10. p_value: The p-value of the test.
  11. """
  12. n = len(x)
  13. s = 0
  14. for i in range(n - 1):
  15. for j in range(i + 1, n):
  16. s += np.sign(x[j] - x[i])
  17. # Calculate the variance of the test statistic.
  18. var_s = (n * (n - 1) * (2 * n + 5)) / 18
  19. # Calculate the standardized test statistic.
  20. if s > 0:
  21. z = (s - 1) / np.sqrt(var_s)
  22. elif s < 0:
  23. z = (s + 1) / np.sqrt(var_s)
  24. else:
  25. z = 0
  26. # Calculate the p-value of the test.
  27. p_value = 2 * (1 - norm.cdf(abs(z)))
  28. # Determine the trend based on the sign of the test statistic.
  29. if z > 0:
  30. trend = 'increasing'
  31. elif z < 0:
  32. trend = 'decreasing'
  33. else:
  34. trend = 'no trend'
  35. return trend, p_value

参考链接:

M-K趋势检验以及突变检验_m-k检验_@二十五的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/592384
推荐阅读
相关标签
  

闽ICP备14008679号