📜  如何在Python中执行 Mann-Kendall 趋势测试

📅  最后修改于: 2022-05-13 01:54:52.192000             🧑  作者: Mango

如何在Python中执行 Mann-Kendall 趋势测试

在本文中,我们将研究在Python中执行 Mann-Kendall 测试的各种方法。

Mann-Kendall 趋势检验用于确定时间序列数据中是否存在趋势。这是一个非参数测试,这意味着没有对数据的正态性做出基本假设。

使用 mk.original_test()函数的 Mann-Kendall 趋势测试

在这种方法中,mk.original_test()函数具有来自 pymannkendall 库的所需参数,以在Python编程语言中对给定数据进行 Mann-Kendall 趋势测试。要为 mk.original_test()函数安装 pymannkendall 库:

pip install pymannkendall

这是一个假设检验,两个假设如下:

  • Ho(接受):数据中不存在趋势。(p值>0.05)
  • Ha(拒绝):数据中存在趋势。

示例 1:数据中不存在趋势的 Mann-Kendall 趋势检验

在此示例中,我们将简单地使用 Lyman Kendall 库中的 mk.original_test()函数对Python中具有 10 个数据点的随机数据进行 Mann-Kendall 趋势测试。

Python3
import pymannkendall as mk
 
gfg_data = [54, 52, 53, 59, 56, 57, 51, 52, 50, 53]
 
# perform Mann-Kendall Trend Test
mk.original_test(gfg_data)


Python3
import matplotlib.pyplot as plt
 
gfg_data = [54, 52, 53, 59, 56, 57,
            51, 52, 50, 53]
 
plt.plot(gfg_data)


Python3
import pymannkendall as mk
 
gfg_data = [1, 2, 3, 4, 5]
 
# perform Mann-Kendall Trend Test
mk.original_test(gfg_data)


Python3
import matplotlib.pyplot as plt
 
gfg_data = [1, 2, 3, 4, 5]
 
plt.plot(gfg_data)


输出:

输出解释:

输出解释可以通过以下不同方式完成:

  • 趋势:这告诉趋势增加,减少或没有趋势。
  • h:如果趋势存在,则为真。如果不存在趋势,则为假。
  • p:检验的 p 值。
  • z:归一化检验统计量。
  • 陶:肯德尔陶。
  • s: Mann-Kendal 的得分
  • var_s:方差 S
  • 斜率:Theil-Sen 估计器/斜率
  • 拦截:拦截 Kendall-Theil 稳健线

由于在上面的示例中,p 值为 0.36,大于阈值(0.5),即 alpha(0.5),因此我们无法拒绝接受的假设,即我们确实有足够的证据表明样本没有任何趋势呈现。

可视化数据趋势

在此,我们将绘制数据、可视化其趋势并匹配趋势。

Python3

import matplotlib.pyplot as plt
 
gfg_data = [54, 52, 53, 59, 56, 57,
            51, 52, 50, 53]
 
plt.plot(gfg_data)

输出:

示例 2:对数据中存在的趋势进行 Mann-Kendall 趋势检验:

Python3

import pymannkendall as mk
 
gfg_data = [1, 2, 3, 4, 5]
 
# perform Mann-Kendall Trend Test
mk.original_test(gfg_data)

输出:

输出解释:

由于在上面的示例中,p 值为 0.027,小于阈值(0.5),即 alpha(0.5),因此我们无法拒绝接受的假设,即我们确实有足够的证据表明样本具有趋势展示。

可视化数据趋势:

在此,我们将绘制数据、可视化其趋势并匹配趋势。

Python3

import matplotlib.pyplot as plt
 
gfg_data = [1, 2, 3, 4, 5]
 
plt.plot(gfg_data)

输出: