Sen+MK趋势分析

Sen+MK趋势分析

    • 结果
    • 原理
    • 实现

​Sen 斜率估计用于计算趋势值,通常与MK非参数检验结合使用。即首先计算Sen趋势值,然后使用MK方法判断趋势显著性。

结果

Sen+MK趋势分析_第1张图片

去看原文

原理

Theil-Sen Median方法又被称为 Sen 斜率估计,是一种稳健的非参数统计的趋势计算方法。该方法计算效率高,对于测量误差和离群数据不敏感,常被用于长时间序列数据的趋势分析中。
β = m e a n ( x j − x i j − i ) , ∀ j > i \beta=mean(\frac{x_j-x_i}{j-i}),\forall{j>i} β=mean(jixjxi),j>i

式中: x j x_j xj x i x_i xi为时间序列数据。β大于0表示时间序列呈现上升趋势;β小于0表示时间序列呈现下降趋势。

Mann-Kendall是一种非参数统计检验方法,最初由Mann在1945年提出,后由Kendall和Sneyers进一步完善,其优点是不需要测量值服从正态分布,也不要求趋势是线性的,并且不受缺失值和异常值的影响,在长时间序列数据的趋势显著检验中得到了十分广泛的应用。其统计检验方法如下:

对于时间序列 X i , i = 1 , 2 , . . . i , . . . j , . . . , n X_i,i=1, 2, ...i, ...j, ..., n Xii=1,2,...i,...j,...,n。定义标准化检验统计量 Z:
Sen+MK趋势分析_第2张图片
Sen+MK趋势分析_第3张图片
在这里插入图片描述
式中: x j x_j xj x i x_i xi为时间序列数据, n n n为数据个数;当 n ≥ 8 n≥8 n8时,检验统计量 S S S近似为正态分布,其均值和方差如下:

在给定显著性水平α下,如果 ∣ Z ∣ > Z 1 − α 2 |Z|>Z_{1-\frac{α}{2}} Z>Z12α,表明不存在趋势的假设被拒绝,时间序列数据存在明显的趋势变化。 Z 1 − α 2 Z_{1-\frac{α}{2}} Z12α为在置信水平α下,标准正态函数分布表对应的值。当 Z Z Z的绝对值大于1.65、1.96和2.58时,表示趋势分别通过了信度为90%、95%和99%的显著性检验。

实现

Sen趋势值计算:

% @author geo_data_analysis@163.com
% 基于Sen的趋势值
[a,R]=geotiffread('C:\Users\ca\Desktop\sen+mk趋势分析\data\1982_mvc.tif');  
info=geotiffinfo('C:\Users\ca\Desktop\sen+mk趋势分析\data\1982_mvc.tif');
[m,n]=size(a);
datasum=zeros(m*n,34)+NaN; 
k=1;
for year=1982:2015 
    filename=['C:\Users\ca\Desktop\sen+mk趋势分析\data\',int2str(year),'_mvc.tif'];
    data=importdata(filename);
    data=reshape(data,m*n,1);
    datasum(:,k)=data;
    k=k+1;
end
% ...完整源码见原文

MK检验结果:

% @author geo_data_analysis@163.com
% MK趋势显著性检验
[a,R]=geotiffread('C:\Users\ca\Desktop\sen+mk趋势分析\data\1982_mvc.tif');  
info=geotiffinfo('C:\Users\ca\Desktop\sen+mk趋势分析\data\1982_mvc.tif');
[m,n]=size(a);  
cd=34;
datasum=zeros(m*n,cd)+NaN; 
p=1;
for year=1982:2015      
    filename=['C:\Users\ca\Desktop\sen+mk趋势分析\data\',int2str(year),'_mvc.tif'];
    data=importdata(filename);
    data=reshape(data,m*n,1);
    datasum(:,p)=data;      
    p=p+1;
end
% ...完整源码见原文

去看原文

原文有源码,更多内容,请关注地学分析与算法。
Sen+MK趋势分析_第4张图片

你可能感兴趣的:(Matlab,数据)