原理

这两个B站教程讲解的很清楚,而且还有实例演示
B站教程:MK趋势检验
B站教程:MK突变检验
MK检验反应的应该是数据的整体趋势,而不是某一处时间节点的趋势

代码

代码中的测试数据就是B站教程中的测试数据

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as pltclass MK(object):def __init__(self, s: list, p=0.05) -> None:self.s = sself.p = pdef mkQs(self):"""mk趋势检验Return: return_description1 -- 有递增趋势-1 -- 有递减趋势0 -- 没有明显趋势"""s = self.sp = self.pS = 0n = len(s)dsL = []for i in range(0, n-1):si = s[i]for j in range(i+1, n):sj = s[j]ds = sj-siif ds < 0:S -= 1elif ds > 0:S += 1dsL.append((sj-si)/(j-i))sen = np.median(dsL)sDict = dict()for v in s:if v in sDict:sDict[v] += 1else:sDict[v] = 1vS1 = n*(n-1)*(2*n+5)vS2 = 0for v, vn in sDict.items():if vn == 1:continuevS2 += vn*(vn-1)*(2*vn+5)vS = (vS1-vS2)/18if S > 0:Z = (S-1)/np.sqrt(vS)elif S == 0:Z = 0else:Z = (S+1)/np.sqrt(vS)print(S, vS, Z)pV = norm.ppf([1-p/2])if np.abs(Z) > pV:if sen < 0:return -1else:return 1else:return 0def mkTb(self):"""Mk突变检验Keyword arguments:argument -- descriptions -- 时序列表p -- 显著水平Return: return_descriptionUFkList 正序UBkList 逆序"""UFkList = [0]s = self.sn = len(s)# 顺序计算for k in range(2, n+1):sk = 0for i in range(0, k):si = s[i]for j in range(0, i+1):sj = s[j]if si > sj:sk += 1usk = k*(k-1)/4vsk = k*(k-1)*(2*k+5)/72UFk = (sk-usk)/np.sqrt(vsk)UFkList.append(UFk)# 逆序计算s.reverse()UBkList = [0]for k in range(2, n+1):sk = 0for i in range(0, k):si = s[i]for j in range(0, i+1):sj = s[j]if si > sj:sk += 1usk = k*(k-1)/4vsk = k*(k-1)*(2*k+5)/72UBk = (sk-usk)/np.sqrt(vsk)UBkList.append(-UBk)UBkList.reverse()return UFkList, UBkListif __name__ == '__main__':data = [6.8, 5.9, 5.7, 5.5, 5.5, 4.5, 4, 5.1, 4.5, 4.5, 3.3, 4.8]mk = MK(data)# 趋势性检验flag = mk.mkQs()if flag == -1:print("下降趋势!")elif flag == 0:print("无明显趋势!")else:print("上升趋势!")# 突变型检验UFks, UBks = mk.mkTb()plt.figure(figsize=(12, 10))plt.plot(UFks, label='UFK')plt.plot(UBks, label='UBK')# 显著水平p=0.05pV = norm.ppf([1-0.05/2])plt.hlines([pV, -pV], xmin=0, xmax=12)plt.legend()plt.show()

检验结果

和教程中的完全一致

MK趋势检验和MK突变检验相关推荐

  1. MK趋势检验和MK突变检验(代码分享及结果分析)

    MK趋势检验 在时间序列趋势分析中,Mann-Kendall检验是世界气象组织推荐并已被广泛使用的非参数检验方法,最初由Mann和Kendall提出,现已被很多学者用来分析降雨.气温.径流和水质等要素 ...

  2. python mk趋势检验_求问!MK趋势检验和突变检验!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 分享一段用matlab进行MK趋势的代码给你,希望你能用上 %α=0.05 % Time Series Trend Detection Tests % % ...

  3. 基于 Python 的 M-K(Mann-Kendall)突变检验 的简单实现

       M-K(Mann-Kendall)法是一种气候诊断与预测技术,可以判断气候序列中是否存在气候突变,如果存在,可确定出突变发生的时间.Mann-Kendall检验法也经常用于气候变化影响下的降水. ...

  4. mk突变点检测_科学网—从网上找的M-K突变检验的程序 - 张乐乐的博文

    %从matlab论坛上找的MK突变检验的程序,这个程序运行的结果跟我自己编写程序运行出来的结果一样,但是跟魏凤英老师书上的例子出图结果不一样 A=xlsread('test-mk.xlsx'); x= ...

  5. MATLAB Mann-Kendall突变检验 (mk突变检验)

    任务描述:对时间序列进行MK突变检验: 将MK突变检验的代码封装为函数,直接调用即可,代码如下: %% MK突变检验 %% 修改日期 2022/7/29function [UF,UB] = MKbre ...

  6. M-K趋势检验以及突变检验

    正态分布概率分布表,自查概率密度函数 调用函数如下 % M-K总体趋势检验 clc clear %file= readmatrix("7777.csv"); data=[1 2 3 ...

  7. 【Matlab】水文气象数据分析——MK趋势检验及突变检验

    MK检验 前言 一.MK趋势检验 1. 定义 2.代码 3.结果 二.MK突变检验 1. 定义 2.代码 3.结果 前言 在时间序列趋势分析中,Mann-Kendall检验是使用广泛的非参数检验方法, ...

  8. Manner-Kendall(M-K)---突变检验

    Manner-Kendall M-K突变检验 原理 代码 结果 非平稳时间序列突变检测 -- Bernaola Galvan分割算法 Pettitt突变检验 原理 去看原文 代码 data=xlsre ...

  9. 多时间序列数据MK突变检验突变点提取

    多时间序列数据MK突变检验突变点提取 需求 代码 结果 需求 之前推送了一篇MK突变分析的文章[Manner-Kendall(M-K)-突变检验],针对的是如何获得单个时间序列数据的突变点,这个时候突 ...

最新文章

  1. SQL语句大全,所有的SQL都在这里
  2. 软件设计原则——接口隔离原则
  3. go语言中利用匿名函数和闭包实现文件名修改
  4. mysql-5.7 持久化统计信息详解
  5. ubuntu设置静态ip
  6. 最容易进的大厂工作,百度经典百题
  7. 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
  8. pg库sharelock_PostgreSQL LOCK(锁)
  9. python3.7.1安装
  10. Java数据类型从小到大排序_编写一个字符串排序程序,对一个字符串的数值进行从小到大的排序,要求使用包装类对数值类型的字符串转换成整型进行排序...
  11. Rust : CTP中交互中字符串及处理
  12. win pe备份linux,Windows10操作系统如何使用微PE实现备份与恢复
  13. IntelliJ IDEA 常用设置 主题颜色模式、字体、样式、背景自定义颜色及其背景图片(图文步骤)
  14. 将U盘分成 启动盘+文件存储区
  15. js实现表格隔行变色效果
  16. php json接口转化为数组 生成xml接口
  17. 1.6 airtest控制MUMU模拟器
  18. 背出来matlab就无敌了
  19. 一天一夜chromebook折腾心得
  20. 原始传奇服务器维护,《原始传奇》7月29日09:00合区公告

热门文章

  1. 语音口令红包软件系统开发
  2. Unsatisfied dependency expressed through field
  3. python实现召回率、精度、f1代码
  4. 当你想学习爬虫,写个爬虫时,你到底要知道多少东西
  5. Onethink上传服务器后登录不了的问题
  6. python和spyder环境搭建,Python环境搭建与Spyder的安装使用
  7. 为什么要学习函数式编程?因为如果你手里只有锤子,看什么都像钉子
  8. HarmonyOS(一) 快速开始学习鸿蒙开发,官方文档学习路线解析
  9. dnf服务器只显示1 2,一般游戏就玩1~2个角色数量吧?为什么DNF全是多号党啊
  10. matlab simulink 模糊变论域控制电梯四分之一模型