如何在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
Syntax: mk.original_test() function:
Syntax: mk.original_test(x, alternative = c(“two.sided”, “greater”, “less”), continuity = TRUE)
Parameters:
- x :a vector of class “numeric”
- alternative: the alternative hypothesis, defaults to two.sided
- continuity: logical, indicates whether a continuity correction should be applied, defaults to TRUE.
这是一个假设检验,两个假设如下:
- 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)
输出:
Mann_Kendall_Test(trend=’no trend’, h=False, p=0.3672323880406272, z=-0.9016696346674322, Tau=-0.24444444444444444,
s=-11.0, var_s=123.0, slope=-0.2857142857142857, intercept=54.285714285714285)
输出解释:
输出解释可以通过以下不同方式完成:
- 趋势:这告诉趋势增加,减少或没有趋势。
- 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)
输出:
Mann_Kendall_Test(trend=’increasing’, h=True, p=0.0274863361115103, z=2.2045407685048604, Tau=1.0, s=10.0,
var_s=16.666666666666668, slope=1.0, intercept=1.0)
输出解释:
由于在上面的示例中,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)
输出: