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%的显著性检验。

### 如何对栅格数据执行趋势性分析及显著性检验 #### 趋势性分析 对于栅格数据的趋势性分析,通常采用时间序列分析技术来识别随时间变化的空间模式。具体来说,在GIS环境中可以通过以下几种方式实现: - **线性回归模型**:这是最常用的时间序列趋势检测方之一。通过对多个时间段内的栅格值应用最小二乘拟合直线方程,从而评估变量的变化速率和方向。这种方能够有效捕捉到长期稳定增长或减少的趋势。 ```matlab % 假设有n年的栅格数据存储在一个三维数组中,其中第三维代表不同年份的数据 for i = 1:size(rasterData,3)-1 % 计算每一对相邻年份之间的差分作为响应变量y y(:, :, i) = double(rasterData(:, :, i+1)) - double(rasterData(:, :, i)); end % 将所有差异组合成一个向量用于后续建模 Y = reshape(y,[],size(y,3)); % 创建解释变量X矩阵(这里简化为简单的序号表示每年的位置) X = (1:size(Y,2))'; % 使用polyfit函数来进行一元线性回归得到斜率参数b [b,bint,r,rint,stats] = polyfit(X,Y(:),1); slopeMap = reshape(b,size(rasterData(:,:,1))); ``` 此代码片段展示了如何利用MATLAB中的`polyfit()`函数计算多年间各像元处气温或其他属性值的增长/下降速度,并最终形成一张反映整体变化趋势的地图[^2]。 #### 显著性检验方 为了验证所观察到的趋势是否具有统计学意义,则需进一步实施假设测试。常用的有t-test(针对单样本均值)、Mann-Kendall秩次相关系数检验以及Sen's slope estimator等非参数方。后者特别适合于存在异常点或者分布不满足正态性的环境监测类数据集。 ```r library(zoo) # 定义MK检验辅助函数 mk_test <- function(x){ n=length(x) s=0 for(k in 1:(n-1)){ for(j in (k+1):n){ if(x[j]>x[k]) {s=s+1} else if(x[j]<x[k]){s=s-1} } } var_s=(n*(n-1)*(2*n+5))/18 if(s>0){ z=(s-1)/sqrt(var_s) }else{ z=(s+1)/sqrt(var_s) } p_value=pnorm(abs(z))*2 # two tailed test and normal distribution assumption list(statistic=z,p.value=p_value) } apply(temporalRasterStack[], FUN=function(cell_series){ mk_test(as.vector(cell_series))$p.value }, margin=c(1,2)) ``` 上述R脚本实现了对每个像素位置上的时间序列进行Mann-Kendall检验的过程,返回的是P值矩阵,可用于判断哪些区域显示出明显上升或下降倾向[^1]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值