MK趋势性分析、MK突变性分析(线性回归法、M-K法、Spearman法)~“附代码实例”

一、趋势性分析方法

1.线性回归法

3d488cc21aa64fd6b305a11de7dd3e50.png

        注意:结果判断查的是自由度为(n-2)的T分布表。

15cdac5535ad44e48d59d4069130728f.jpeg

 2.Mann-Kendall检验法

b7f8e4f553184df0bae65f11ce50320a.png

 a98f7d97b1ba4f9083ef8c972e37ef09.png

        注意:结果判断查的是标准正态分布表。Z的绝对值在大于1.64、1.96、2.58时
别表示通过了置信度90%、95%和99%的显著性检验。

ce7b321999b4416187dae549c4268e37.jpeg

3. Spearman秩检验法

a3cb746f43fa4395853a1193c33dd43d.png

 注意:结果判断查的是自由度为(n-2)的T分布表。

二、突变性分析方法

1.Mann-Kendall突变检验法

1679f44cdb014f0a92759043cb78303d.png

 2.累积距平法

        注意:突变性分析(突变年份)常多种方法互相对比印证。

三、 实例分析

1.问题

现有KK站1956年~2016年年径流量数据,请分析其趋势性与突变性。

2.趋势性分析

2.1 线性回归法

       由最小二乘法得线性趋势线为(x为流量Q,t为年份):

        取显著性水平α=0.05,统计量T满足|T|<t(0.025,58)=2.01,可见序列的变化趋势不显著,即不显著的减小趋势。

2.2 Mann-Kendall检验法

       (1)MATLAB代码如下:

% M-K趋势分析
clear all;
clc;
load Time_Q_data;         %KK站时间流量序列(时间、年、枯期、汛期)
%y=KK1956_2016;
y=DATA(:,4);              %数据列,可调整为各期计算
n=length(y);        % y是待检测数据序列
s=0;
for k=1:n-1
    for j=k+1:n
        s=s+sign(y(j)-y(k));
    end
end
v=(n*(n-1)*(2*n+5))/18;
if s==0
    z=0;
elseif s>0
    z=(s-1)/sqrt(v);
else
    z=(s+1)/sqrt(v);
end
z
% z>0为上升趋势,z<0为下降趋势。
% KK显著性水平临界值为1.96(0.05),临界值不随系列长度而变(服从均值为0的正态分布)。

       (2)计算结果

       取显著性水平α=0.05,Mann-Kendall检验法计算年统计量Z分别为-0.62,年统计量|Z|<z0.025=1.96,因此Mann-Kendall检验法计算结果为KK水文站年平均流量序列呈不显著减小趋势。

2.3 Spearman秩检验法

       (1)计算结果

       取显著性水平α=0.05,Spearman秩检验法计算年统计量T为0.50,年统计量|T|<t0.025,58=2.01,因此Spearman秩检验法计算结果为KK水文站年平均流量序列呈不显著的减小趋势。

3.突变性分析

       (1)MATLAB代码如下:

% M-K突变分析
clear all;
clc;
load KK_Q;         %KK站时间流量序列(时间、年)
x=DATA(:,1);              %时间列,DATA同KK
y=DATA(:,4);              %数据列,可调整为各期计算
n=length(y);
SK=zeros(size(y));
UFK=zeros(size(y));
s=0;
for i=2:n
    for j=1:i
        if y(i)>y(j)
            s=s+1;
        else
            s=s+0;
        end
    end
    SK(i)=s;
    E=(i*(i-1))/4;
    Var=(i*(i-1)*(2*i+5))/72;
    UFK(i)=(SK(i)-E)/sqrt(Var);
end
y2=zeros(size(y));
SK2=zeros(size(y));
UBK=zeros(size(y));
s=0;
for i=1:n
    y2(i)=y(n-i+1);
end
for i=2:n
   for j=1:i
         if y2(i)>y2(j)
           s=s+1;
         else
           s=s+0;
         end
   end
   Sk2(i)=s;
   E=i*(i-1)/4; 
  Var=i*(i-1)*(2*i+5)/72;
  UBk(i)=0-(Sk2(i)-E)/sqrt(Var);
end
UBk2=zeros(size(y));
for i=1:n
   UBk2(i)=UBk(n-i+1);
end
% 绘图用的是UFK和UBK2
% 绘图临界值0.05水平下为±1.96(因为服从均值为0的正态分布)

       (2)计算结果:M-K突变检验、累积距平曲线图如下

        综合判断1968年、1998年为年径流量突变年份。

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用 scipy 库中的 spearmanr 函数来计算Spearman相关系数,代码示例如下: ``` from scipy.stats import spearmanr x = [1, 2, 3, 4, 5] y = [5, 4, 3, 2, 1] result = spearmanr(x, y) print("Spearman Correlation Coefficient:", result[0]) print("p-value:", result[1]) ``` 输出结果: ``` Spearman Correlation Coefficient: -1.0 p-value: 0.0 ``` ### 回答2: 斯皮尔曼相关系数(Spearman Correlation Coefficient)是指通过计算两个变量的等级之间的关系来衡量它们之间的关联程度的统计方。相比于皮尔逊相关系数,斯皮尔曼相关系数更适合于评估非线性关系和数据值的偏态分布。 在Python中,使用Scipy中的stats库可以很方便地计算斯皮尔曼相关系数。相关函数为spearmanr,参数为待计算的两个变量,函数返回值为两个变量之间的关联度以及p值。其中,关联度的取值范围是[-1,1],当为1时表示两个变量完全正相关,-1表示两个变量完全负相关,0表示两个变量之间没有线性关系。p值则表示假设两个变量之间没有关系的概率,p值越小表示关联度的显著性越高。 以下为使用Scipy计算斯皮尔曼相关系数的代码示例: ```python import numpy as np import scipy.stats as stats # 生成两个变量 x = np.array([1, 2, 3, 4, 5]) y = np.array([10, 8, 6, 4, 2]) # 计算斯皮尔曼相关系数 corr, p_value = stats.spearmanr(x, y) print('斯皮尔曼相关系数:', corr) print('p值:', p_value) ``` 代码输出结果为: ``` 斯皮尔曼相关系数: -1.0 p值: 0.0 ``` 可以看到,在这个示例中,两个变量呈现完全负相关的关系,且p值为0,表示相关度的显著性非常高。 ### 回答3: Spearman相关系数是一种非参数的统计分析,主要用于评估两个变量之间的相关性。与皮尔逊相关系数不同的是,Spearman相关系数适用于非线性关系的变量,并且不需要对变量进行正态分布处理。 在Python中,我们可以使用scipy库中的spearmanr函数来计算两个变量之间的Spearman相关系数。该函数的用如下所示: ```python from scipy.stats import spearmanr # 计算相关系数和p值 corr, p_val = spearmanr(x, y) # 输出相关系数和p值 print('Spearman相关系数:', corr) print('P值:', p_val) ``` 在这个例子中,x和y是我们要计算相关系数的两个变量。spearmanr函数将返回两个值,第一个值是Spearman相关系数,第二个值是P值,表示假设两个变量没有相关性的概率。 Spearman相关系数的取值范围为-1到1之间,其中-1表示完全反向相关,0表示没有相关性,1表示完全正向相关。通常来说,绝对值大于0.7的相关系数被认为是强相关,绝对值小于0.3的相关系数被认为是无相关或者弱相关。 总之,Spearman相关系数是一种非常有用的统计分析,可以帮助我们评估变量之间的相关性,特别是在处理非线性关系方面表现出更好的效果。在Python中,我们可以使用scipy库中的spearmanr函数来计算Spearman相关系数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值