⽓象数据分析之突变检验及python的实现:MK突变、Pettitt⽅法、滑动T检验⽂章⽬录
前⾔:什么是突变?
常见的⽓候突变是把它定义为⽓候从⼀个平均值到另 ⼀个平均值的急剧变化, 它表现为⽓候变化的不连续性(符淙斌,1992)。
下图总结了四种常见的突变:
(a)均值突变:从⼀个均值到另⼀个均值的变化,表现⽓候变化的不连续性count函数怎么使用说明
(b)变率突变:平均值没有变但是⽅差变了
©跷跷板突变
(d)转折突变:某⼀ 时段持续减少 ( 增加 ) , 然后突然在某点开始持续增加 (减少 )
检验突变的⽅法有很多,但是啊每种⽅法都有优缺,有可能不同⽅法的检验结果不同,所以建议使⽤多种⽅法进⾏⽐较。
另外,要指定严格的显著性⽔平进⾏检验。
本⽂介绍⼏种常⽤的⽅法,内容均来⾃《现代⽓候统计诊断与预测技术(第⼆版)》(魏凤英 著)。
1. MK突变分析
Mann-Kendall法是⼀种⾮参数统计检验⽅法,该类型⽅法亦称为五分部检验,其优点是不需要样本遵从⼀定的分布,也不受到少数异常值的⼲扰,更实⽤于类型变量和顺序变量,计算也⽐较简便。但是不适⽤于检测有多个突变点的序列。
例图如下,置信区间内(红⾊虚线内)的交点就是突变点,正值代表增长,负值反之sklearn划分数据集
from scipy import stats
import numpy as np
from matplotlib import pyplot as plt气象python零基础入门教程
def sk(data):
n=len(data)
Sk =[0]
UFk =[0]
s =0
E =[0]
Var =[0]
for i in range(1,n):
for j in range(i):
format格式可数吗if data[i]> data[j]:
s = s+1
else:
s = s+0
Sk.append(s)
E.append((i+1)*(i+2)/4)# Sk[i]的均值
Var.append((i+1)*i*(2*(i+1)+5)/72)# Sk[i]的⽅差
UFk.append((Sk[i]-E[i])/np.sqrt(Var[i]))
UFk=np.array(UFk)
return UFk
#a为置信度随意编辑网页代码
def MK(data,a):
ufk=sk(data)#顺序列
ubk1=sk(data[::-1])#逆序列
ubk=-ubk1[::-1]#逆转逆序列
#输出突变点的位置
p=[]
u=ufk-ubk
for i in range(1,len(ufk)):
if u[i-1]*u[i]<0:
p.append(i)
if p:
print("突变点位置:",p)
else:
print("未检测到突变点")
#画图
conf_intveral = interval(a, loc=0, scale=1)#获取置信区间
plt.figure(figsize=(10,5))
汇编程序运行过程plt.plot(range(len(data)),ufk,label ='UFk',color ='r')
plt.plot(range(len(data)),ubk,label ='UBk',color ='b')
plt.ylabel('UFk-UBk',fontsize=25)
x_lim = plt.xlim()
plt.ylim([-6,7])
plt.plot(x_lim,[conf_intveral[0],conf_intveral[0]],'m--',color='r',label='95%显著区间') plt.plot(x_lim,[conf_intveral[1],conf_intveral[1]],'m--',color='r')
plt.axhline(0,ls="--",c="k")
plt.legend(loc='upper center',frameon=False,ncol=3,fontsize=20)# 图例
plt.show()
#输⼊数据和置信度即可
MK(data,0.95)
2. Pettitt⽅法
是⼀种与MK⽅法相似的⾮参数检验⽅法。
例图如下,“突变点位置:32, 显著”
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论