基于MATLAB的变异函数计算与经验半方差图绘制
ztj100 2025-01-03 20:49 31 浏览 0 评论
??在前期的头条文章《插值、变异函数、克里格、线性无偏最优…地学计算概念及公式推导》中,我们详细介绍了地学计算的几个基本概念,并对其数学推导公式加以了梳理。接下来,我将通过几篇新的头条文章,对地学计算相关的代码、操作加以实践与详细讲解。本文便是第一篇——基于MATLAB的空间数据变异函数计算与经验半方差图绘制。
??另一方面,由于上述文章所涉及的相关理论概念较为抽象,往往需要结合实践才可以更好理解,因此大家可以将上述文章与本篇及后期的其它地学计算文章一同来看,可以更好理解相关理论的含义。
??其中,由于本文所用的数据并不是我的,因此遗憾不能将数据一并展示给大家;但是依据本文的思想与对代码的详细解释,大家用自己的数据,可以将空间数据变异函数计算与经验半方差图绘制的全部过程与分析方法加以完整重现。
1 数据处理
1.1 数据读取
??本文中,我的初始数据为某区域658个土壤采样点的空间位置(X与Y,单位为米)、pH值、有机质含量与全氮含量。这些数据均存储于“data.xls”文件中;而后期操作多于MATLAB软件中进行。因此,首先需将源数据选择性地导入MATLAB软件中。
??利用MATLAB软件中xlsread函数可以实现这一功能。具体代码附于“1.3 正态分布检验及转换”处。
1.2 异常数据剔除
??得到的采样点数据由于采样记录、实验室测试等过程,可能具有一定误差,从而出现个别异常值。选用“平均值加标准差法”对这些异常数据加以筛选、剔除。
??分别利用“平均值加标准差法”中“2S”与“3S”方法加以处理,发现“2S”方法处理效果相对后者较好,故后续实验取“2S”方法处理结果继续进行。
??其中,“2S”方法是指将数值大于或小于其平均值±2倍标准差的部分视作异常值,“3S”方法则是指将数值大于或小于其平均值±3倍标准差的部分视作异常值。
??得到异常值后,将其从658个个采样点中剔除;剩余的采样点数据继续后续操作。
??本部分具体代码附于“1.3 正态分布检验及转换”处。
1.3 正态分布检验及转换
??计算变异函数需建立在初始数据符合正态分布的假设之上;而采样点数据并不一定符合正态分布。因此,我们需要对原始数据加以正态分布检验。
??一般地,正态分布检验可以通过数值检验与直方图、QQ图等图像加以直观判断。本文综合采取以上两种数值、图像检验方法,共同判断正态分布特性。
??针对数值检验方法,我在一开始准备选择采用Kolmogorov-Smirnov检验方法;但由于了解到,这一方法仅仅适用于标准正态检验,因此随后改用Lilliefors检验。
??Kolmogorov-Smirnov检验通过样本的经验分布函数与给定分布函数的比较,推断该样本是否来自给定分布函数的总体;当其用于正态性检验时只能做标准正态检验。
??Lilliefors检验则将上述Kolmogorov-Smirnov检验改进,其可用于一般的正态分布检验。
??QQ图(Quantile Quantile Plot)是一种散点图,其横坐标表示某一样本数据的分位数,纵坐标则表示另一样本数据的分位数;横坐标与纵坐标组成的散点图代表同一个累计概率所对应的分位数。因此,QQ图具有这样的特点:
??y=x
??针对这一直线,若散点图中各点均在直线附近分布,则说明两个样本为同等分布;因此,若将横坐标(纵坐标)表示为一个标准正态分布样本的分位数,则散点图中各点均在上述直线附近分布可以说明,纵坐标(横坐标)表示的样本符合或基本近似符合正态分布。本文采用将横坐标表示为正态分布的方式。
??此外,PP图(Probability Probability Plot)同样可以用于正态分布的检验。PP图横坐标表示某一样本数据的累积概率,纵坐标则表示另一样本数据的累积概率;其根据变量的累积概率对应于所指定的理论分布累积概率并绘制的散点图,用于直观地检测样本数据是否符合某一概率分布。和QQ图类似,如果被检验的数据符合所指定的分布,则其各点均在上述直线附近分布。若将横坐标(纵坐标)表示为一个标准正态分布样本的分位数,则散点图中各点均在直线附近分布可以说明,纵坐标(横坐标)表示的样本符合或基本近似符合正态分布。
??三种土壤属性,我选择首先以pH数值为例进行操作。通过上述数值检验、图像检验方法,检验得到剔除异常值后的原始pH数值数据并不符合正态分布这一结论。因此,尝试对原数据加以对数、开平方等转换处理;随后发现,原始pH值开平方数据的正态分布特征虽然依旧无法通过较为严格的Lilliefors检验,但其直方图、QQ图的图像检验结果较为接近正态分布,并较之前二者更加明显。故后续取开平方处理结果继续进行。
??值得一提的是,本文后半部分得到pH值开平方数据的实验变异函数及其散点图后,在对其余两种空间属性数据(即有机质含量与全氮含量)进行同样的操作时,发现全氮含量数据在经过“2S”方法剔除异常值后,其原始形式的数据是可以通过Lilliefors检验的,且其直方图、QQ图分布特点十分接近正态分布。
??我亦准备尝试对空间属性数据进行反正弦转换。但随后发现,已有三种属性数值的原始数据并不严格分布在-1至1的区间内,因此并未对其进行反正弦方式的转换。
??经过上述检验、转换处理过后的图像检验结果如下所示。
??以上部分代码如下:
1clc;clear;
2info=xlsread('data.xls');
3oPH=info(:,3);
4oOM=info(:,4);
5oTN=info(:,5);
6
7mPH=mean(oPH);
8sPH=std(oPH);
9num2=find(oPH>(mPH+2*sPH)|oPH<(mPH-2*sPH));
10num3=find(oPH>(mPH+3*sPH)|oPH<(mPH-3*sPH));
11PH=oPH;
12for i=1:length(num2)
13 n=num2(i,1);
14 PH(n,:)=[0];
15end
16PH(all(PH==0,2),:)=[];
17
18%KSTest(PH,0.05)
19H1=lillietest(PH);
20
21for i=1:length(PH)
22 lPH(i,:)=log(PH(i,:));
23end
24
25H2=lillietest(lPH);
26
27for i=1:length(PH)
28 sqPH(i,:)=(PH(i,:))^0.5;
29end
30
31H3=lillietest(sqPH);
32
33% for i=1:length(PH)
34% arcPH(i,:)=asin(PH(i,:));
35% end
36%
37% H4=lillietest(arcPH);
38
39subplot(2,3,1),histogram(PH),title("Distribution Histogram of pH");
40subplot(2,3,2),histogram(lPH),title("Distribution Histogram of Natural Logarithm of pH");
41subplot(2,3,3),histogram(sqPH),title("Distributio n Histogram of Square Root of pH");
42subplot(2,3,4),qqplot(PH),title("Quantile Quantile Plot of pH");
43subplot(2,3,5),qqplot(lPH),title("Quantile Quantile Plot of Natural Logarithm of pH");
44subplot(2,3,6),qqplot(sqPH),title("Quantile Quantile Plot of Square Root of pH");
2 距离量算
??接下来,需要对筛选出的采样点相互之间的距离加以量算。这是一个复杂的过程,需要借助循环语句。
??本部分具体代码如下。
1poX=info(:,1);
2poY=info(:,2);
3dis=zeros(length(PH),length(PH));
4for i=1:length(PH)
5 for j=i+1:length(PH)
6 dis(i,j)=sqrt((poX(i,1)-poX(j,1))^2+(poY(i,1)-poY(j,1))^2);
7 end
8end
3 距离分组
??计算得到全部采样点相互之间的距离后,我们需要依据一定的范围划定原则,对距离数值加以分组。
??距离分组首先需要确定步长。经过实验发现,若将步长选取过大会导致得到的散点图精度较低,而若步长选取过小则可能会使得每组点对总数量较少。因此,这里取步长为500米;其次确定最大滞后距,这里以全部采样点间最大距离的一半为其值。随后计算各组对应的滞后级别、各组上下界范围等。
??本部分具体代码附于本文“4 平均距离、半方差计算及其绘图”处。
4 平均距离、半方差计算及其绘图
??分别计算各个组内对应的点对个数、点对间距离总和以及点对间属性值差值总和等。随后,依据上述参数,最终求出点对间距离平均值以及点对间属性值差值平均值。
??依据各组对应点对间距离平均值为横轴,各组对应点对间属性值差值平均值为纵轴,绘制出经验半方差图。
??本部分及上述部分具体代码如下。
1madi=max(max(dis));
2midi=min(min(dis(dis>0)));
3radi=madi-midi;
4ste=500;
5clnu=floor((madi/2)/ste)+1;
6ponu=zeros(clnu,1);
7todi=ponu;
8todiav=todi;
9diff=ponu;
10diffav=diff;
11for k=1:clnu
12 midite=ste*(k-1);
13 madite=ste*k;
14 for i=1:length(sqPH)
15 for j=i+1:length(sqPH)
16 if dis(i,j)>midite && dis(i,j)<=madite
17 ponu(k,1)=ponu(k,1)+1;
18 todi(k,1)=todi(k,1)+dis(i,j); diff(k,1)=diff(k,1)+(sqPH(i)-sqPH(j))^2;
19 end
20 end
21 end
22 todiav(k,1)=todi(k,1)/ponu(k,1);
23 diffav(k,1)=diff(k,1)/ponu(k,1)/2;
24end
25plot(todiav(:,1),diffav(:,1)),title("Empirical Semivariogram of Square Root of pH");
26xlabel("Separation Distance (Metre)"),ylabel("Standardized Semivariance");
5 绘图结果
??通过上述过程,得到pH值开平方后的实验变异函数折线图及散点图。
??可以看到,pH值开平方后的实验变异函数较符合于有基台值的球状模型或指数模型。函数数值在距离为0至8000米区间内快速上升,在距离为8000米后数值上升放缓,变程为25000米左右;即其“先快速上升,再增速减缓,后趋于平稳”的图像整体趋势较为明显。但其数值整体表现较低——块金常数为0.004左右,而基台值仅为0.013左右。为验证数值正确性,同样对有机质、全氮进行上述全程操作。
??得到二者对应变异函数折线图与散点图。
??由以上三组、共计六幅的pH值开平方、有机质与全氮对应的实验变异函数折线图与散点图可知,不同数值对应实验变异函数数值的数量级亦会有所不同;但其整体“先快速上升,再增速减缓,后趋于平稳”的图像整体趋势是十分一致的。
??此外,如上文所提到的,针对三种空间属性数据(pH值、有机质含量与全氮含量)中最符合正态分布,亦是三种属性数据各三种(原始值、取对数与开平方)、共九种数据状态中唯一一个通过Lilliefors正态分布检验的数值——全氮含量经过异常值剔除后的原始值,将其正态分布的图像检验结果特展示如下。
至此,我们就完成了全部的操作、分析过程~
- 上一篇:OpenCV 边缘检测常见算法
- 下一篇:RSA 复杂题目 ?
相关推荐
- Jquery 详细用法
-
1、jQuery介绍(1)jQuery是什么?是一个js框架,其主要思想是利用jQuery提供的选择器查找要操作的节点,然后将找到的节点封装成一个jQuery对象。封装成jQuery对象的目的有...
- 前端开发79条知识点汇总
-
1.css禁用鼠标事件2.get/post的理解和他们之间的区别http超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。HTTP的工作方式是客户机与服务器之间的请求-应答协议。...
- js基础面试题92-130道题目
-
92.说说你对作用域链的理解参考答案:作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。...
- Web前端必备基础知识点,百万网友:牛逼
-
1、Web中的常见攻击方式1.SQL注入------常见的安全性问题。解决方案:前端页面需要校验用户的输入数据(限制用户输入的类型、范围、格式、长度),不能只靠后端去校验用户数据。一来可以提高后端处理...
- 事件——《JS高级程序设计》
-
一、事件流1.事件流描述的是从页面中接收事件的顺序2.事件冒泡(eventbubble):事件从开始时由最具体的元素(就是嵌套最深的那个节点)开始,逐级向上传播到较为不具体的节点(就是Docu...
- 前端开发中79条不可忽视的知识点汇总
-
过往一些不足的地方,通过博客,好好总结一下。1.css禁用鼠标事件...
- Chrome 开发工具之Network
-
经常会听到比如"为什么我的js代码没执行啊?","我明明发送了请求,为什么反应?","我这个网站怎么加载的这么慢?"这类的问题,那么问题既然存在,就需要去解决它,需要解决它,首先我们得找对导致问题的原...
- 轻量级 React.js 虚拟美化滚动条组件RScroll
-
前几天有给大家分享一个Vue自定义滚动条组件VScroll。今天再分享一个最新开发的ReactPC端模拟滚动条组件RScroll。...
- 一文解读JavaScript事件对象和表单对象
-
前言相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScrip...
- Python函数参数黑科技:*args与**kwargs深度解析
-
90%的Python程序员不知道,可变参数设计竟能决定函数的灵活性和扩展性!掌握这些技巧,让你的函数适应任何场景!一、函数参数设计的三大进阶技巧...
- 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
-
在现代计算领域,信息安全逐渐成为焦点话题。密码学,作为信息保护的关键技术之一,允许我们加密(保密)和解密(解密)数据。...
- 阿里Nacos惊爆安全漏洞,火速升级!(附修复建议)
-
前言好,我是threedr3am,我发现nacos最新版本1.4.1对于User-Agent绕过安全漏洞的serverIdentitykey-value修复机制,依然存在绕过问题,在nacos开启了...
- Python模块:zoneinfo时区支持详解
-
一、知识导图二、知识讲解(一)zoneinfo模块概述...
- Golang开发的一些注意事项(一)
-
1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...
- Python鼠标与键盘自动化指南:从入门到进阶——键盘篇
-
`pynput`是一个用于控制和监控鼠标和键盘的Python库...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)