matlab 误差椭圆,求3倍标准差误差椭圆分析的程序

根据《白话空间统计之九:方向分布(标准差椭圆)修正版》(有些地方没有理解清楚),写了下面的程序。但是好像结果不对

Z=mvnrnd([0.5 1.5], [0.025 0.03 ; 0.03 0.16], 50);

X=Z(:,1);  Y=Z(:,2);

mean_X=nanmean(X);  mean_Y=nanmean(Y);   %椭圆圆心

%确定长短半轴

SDE_X=nanstd(X,1);

SDE_Y=nanstd(Y,1);

%确定方向

N=size(X,1)*size(X,2)-size(find(isnan(X)),1);  %非NaN元素个数

X2=nanvar(X(:),1)*N;

Y2=nanvar(Y(:),1)*N;

A1=nancov(X,Y,1);  % 是2*2矩阵,含4个元素,元素1是S(X(:)),及X的方差;元素4是Y的方差;元素2与3相等,是X与Y的协方差;

X1=A1(1)*N; % (X-mean_X)平方求和

Y1=A1(4)*N; % (Y-mean_Y) 平方求和

XY=A1(2)*N; %(X-mean_X)(Y-mean_Y) 求和

A=X1-Y1;

B=sqrt(A^2+4*XY^2);

C=2*XY;

theta=atan((A+B)/C);  % 椭圆方向,狐度,以X轴为准,正北方(12点方向)为0度,顺时针旋转    *180/pi=角度

%确定x、y轴的标准差

XStd=sqrt((cos(theta)^2*X1+sin(theta)^2*Y1-sin(2*theta)*XY)/N)*sqrt(2);  %X轴标准差,不知道是否有*sqrt(2)

YStd=sqrt((sin(theta)^2*X1+cos(theta)^2*Y1+sin(2*theta)*XY)/N)*sqrt(2);  %Y轴标准差,不知道是否有*sqrt(2)

% XStd=sqrt((cos(theta)^2*X1+sin(theta)^2*Y1-sin(2*theta)*XY)/N);  %X轴标准差,不知道是否有*sqrt(2)

% YStd=sqrt((sin(theta)^2*X1+cos(theta)^2*Y1+sin(2*theta)*XY)/N);  %Y轴标准差,不知道是否有*sqrt(2)

STD = 3;                     %# 3 standard deviations

conf = 2*normcdf(STD)-1;     %# covers around 99% of population

a=XStd*sqrt(conf);   b=YStd*sqrt(conf);

% a=0.504770;  b=13.867618;

A=a^2*sin(theta)^2+b^2*cos(theta)^2;

B=-(a^2-b^2)*sin(2*theta);

C=a^2*cos(theta)^2+b^2*sin(theta)^2;

f=-a^2*b^2;

X0=mean_X;  Y0=mean_Y;

plot(X,Y,'r.')

hold on

ezplot(subs('A*(x-X0)^2+B*(x-X0)*(y-Y0)+C*(y-Y0)^2+f=0'))

其中,我们前面说的好几种算法,如中心要素、中位数中心和平均中心,都是关于点方位的分析,那么今天我们要讲的这个算法,就是同时对点的方向和分布进行分析的一种经典算法——标准差椭圆。

这算法最早是由美国南加州大学(Universityof Southern California)社会学教授韦尔蒂.利菲弗(D. Welty Lefever)在1926年提出,所以有的书里面,也把这个算法称为Lefever's "Standard DeviationalEllipse"(利菲弗方向性分布)(又到每天的历史起源科普时间……)。

这个算法最大的特点,就如同他的名词一样,是用来度量一组数据的方向和分布的,生成的结果又正如他的别名一样,会输出一个椭圆,如下:

f1581ced883c1339ac805d4860e5c172.png

红色的点是伤寒发病的案例,蓝色的河流是长江太湖流域段,从计算的结果来看,发病的数据方向与长江的流向方向基本一致,而范围较大。

从上图,我们基本上就可以看出方向分布工具的主要作用了,它可以识别一组数据的方向以及分布的趋势,并且了解到这份数据是否具有一些特性,至于有哪些特性,我们后面再说。

我们先来看看这个标准差椭圆的生成算法。

其实算法很简单,要画出一个椭圆,虽然比画圆麻烦点,但是也麻烦不了多少,关键的参数如下:

1、确定圆心。

2、确定旋转角度。

3、确定XY轴的长度。

首先是确定圆心,方向分布工具的圆心,直接利用的是算数平均中心来计算椭圆的圆心(算术平均中心请查看我在2015年8月17日写的《空间统计之八:平均中心和中位数中心》一文)

然后就确定椭圆的形式了,公式如下:

4b199f5ec661f47fa0051d5f9ff3ad2b.png

其中,Xi和Yi是每个要素的空间位置坐标,X和Y是算数平均中心。

SDEx和SDEy就是计算出来的椭圆的方差,总所周知,椭圆的大小取决于方差大小,长半轴表示最大方差,短半轴表示最小方差,在空间统计上面,用X、Y的方差进行计算,得到长短半轴。

然后确定椭圆的方向,以X轴为准,正北方(12点方向)为0度,顺时针旋转,计算公式如下:

e8899e3793cd8db389d15839663258ea.png

最后确定XY轴的标准差,公式如下:

b5d4a1dd3caa4e607591da78270a7506.png

标准差的作用是确定椭圆的方程,一般椭圆方程如下:

8c3e36c80a7e29fb24faf3df8d182f97.png

S是置信度的值,可以根据数据量来查询卡方概率表(Table:Chi-Square Probabilities),这个大家有兴趣去百度一下就有了。

把所有的数据都带入到公式中,就很容易的把所有的参数都计算出来,接下去只需要再地图上画出结果就行。

那么这个椭圆揭示了一些什么意义呢?

使用ArcGIS的话,方向分布工具除了生成这样一个椭圆以外,还会给出如下结果:

afa170a8ddd998fc9908b6248bf98412.png

其中,Shape_Leng和Shape_Area是生成的椭圆的周长和面积,单位与你数据的单位相同,这里我的数据是经纬度的,所以生成的结果只能作为相对参考结果。

CenterX和CenterY表示的是椭圆的中心点。

XstdDist和YStdDist表示的X轴的长度和Y轴的长度。

Rotation表示的是椭圆的方向角度。如下:

5fac3596d97f12ef663bc99dcce00903.png

结果解读如下:

1、椭圆的长半轴表示的是数据分布的方向,短半轴表示的是数据分布的范围,长短半轴的值差距越大(扁率越大),表示数据的方向性越明显。反之,如果长短半轴越接近,表示方向性越不明显。如果长短半轴完全相等,就等于是一个圆了,圆的话就表示没有任何的方向特征。

2、短半轴表示数据分布的范围,短半轴越短,表示数据呈现的向心力越明显;反之,短半轴越长,表示数据的离散程度越大。同样,如果短半轴与长半轴完全相等了,就表示数据没有任何的分布特征。

3、中心点表示了整个数据的中心位置,一般来说,只要数据的变异程度不是很大的话,这个中心点的位置大约与算数平均数的位置基本上是一致的,至于数据变异是什么情况,请看下面第4点。

4、有的同学会很疑惑,为什么你画的这个椭圆,还有很多的点都在外面,没有把所有的点都包含进去?那么就是就是“标准差椭圆”这个名词里面的“标准差”的含义所在了。

在ArcGIS工具里面(其他的工具也都差不多),提供了“椭圆大小”(Ellipse_Size)这个参数,这个参数表示你生成的椭圆的级别,一共有三个,如下表:

a2b6b9770806ffe1ae38b9186361c256.png

三个级别的椭圆,分别表示了你生成的椭圆,能够包含68%,95%和99%三个级别的数据,我们通过可以指定要表示的标准差数(1、2 或 3)来决定你生成的椭圆包含的数据比例。

当要素具有空间正态分布时(即这些要素在中心处最为密集,而在接近外围时会逐渐变得稀疏),第一级标准差(默认值)范围可将约占总数 68%的输入要素的质心包含在内。第二级标准差范围会将约占总数 95%的要素包含在内,而第三级标准差范围则会覆盖约占总数 99%的要素的质心。

所以,当你选择不同标准差等级的时候,你发现你的中心点的位置也可能不同。

当然,作为空间分析工具,方向分布一样可以进行加权计算,这个计算主要还是与中心点的位置确定以及椭圆标准差等级生成的椭圆大小有关系。

下面我们来通过一个实例来了解方向分布工具的应用:

一共有两年的伤寒病数据,如下,红色的是2000年的,蓝色是2001年的:

ea49b9edc11d48f0210a2a80e5f08543.png

使用1个标准差的结果,生成的椭圆如上,具体数据如下:

f06425489a2f4e3cd8f40a8dd8f0e9b0.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ee cdi_Java EE CDI处理程序方法示例

java ee cdi这是CDI Disposer方法的教程。 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除。 Disposer方法始终与Producer方法匹配。 Disposer方法使用的一个示例是当应用程…

python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程。类似这样:每个方程有两个变量,x和y,形式为:axbycd由于这次有了两个方程,我们提取参数的代码就适合提炼为一…

快速提示:使用Chrome开发工具调试GWT应用程序

调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前,经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点,并使用调试模式来跟踪错误和错误。 现在,在超级开发模式下,情况有…

用matlab做纹理合成,关于图像纹理合成的Matlab例程

纹理是普遍存在的视觉现象,其可以描述地形、植物、矿石、纤维和皮肤等等物体的表面特征。纹理结构在图像中反映其图像像素取值的空间变化情况,这种变化具有某中统计规律,在纹理区域内的各部分具有大致相同的结构。纹理合成是利用计算机产生纹…

matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...

这篇博客是接着上一篇来哒,https://blog.csdn.net/luolan9611/article/details/94285158本篇博客及上篇博客搜集的资料、实验代码、实验报告、PPT均已上传至百度网盘:链接:https://pan.baidu.com/s/1AmT4TtBAxj1FKf4KUFcsBw 提取码&#x…

qt中实现左右分割线_Qt项目中,实现屏幕截图并生成gif的详细示例(值得细读)...

总第50篇平时我们在工作和学习的过程中,有时需要将桌面的某些动作截图生成gif动图,以更生动地呈现出来。目前有很多这样的软件,并且方便易使用,比如我经常使用的GifCam,软件小巧,生成的图片文件也比较小&am…

构建Spring Boot RESTful服务+ Spring Boot执行器

总览 什么是REST? REST(代表状态转移)是Web构建的体系结构样式,已成为用于Web应用程序的标准软件设计模式 。 代表性国家转移一词最早由REST的发起人,HTTP规范的主要作者之一Roy Fielding在其博士论文中使用 。 REST上…

tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...

格力变频空调快速维修方法及技巧一、 室内部分: 1、F1开路:制冷时不启动或启动一下就停机;制热正常,且一直高频运转。 2、F2开路:工作6—10分钟就停机,显示E2停止外机。 3、F2短路&#xff1…

php自动释放mysql连接,php怎么关闭mysql连接

php怎么关闭mysql连接2021-03-17 07:45:43php中可使用mysqli_close()函数来关闭mysql连接,语法格式“mysqli_close(connection);”。mysqli_close()函数可关闭先前打开的数据库连接,如果成功返回TRUE,反之则返回FALSE。本教程操作环境&#x…

Java 8 –按值对HashMap进行升序和降序排序

在上一篇文章中,我向您展示了如何通过键对Java 8中的Map进行排序 ,今天,我将教您如何使用Java 8功能(例如,lambda表达式,方法引用,流和新方法) 按值对Map进行排序。添加到java.util.…

scrcpy投屏_scrcpy 使用教程:将安卓设备投屏到 PC 端

阿拉平平读完需要6分钟速读仅需 2 分钟scrcpy 是一款开源的安卓设备投屏工具,通过 USB 或 Wi-Fi 与设备连接后就可以在 PC 端操作安卓设备,无需 root 权限且支持多平台运行。本文将演示如何使用 scrcpy 进行投屏操作。1. 下载安装到 Releases 下载最新的…

打砖块小游戏php程序,利用原生js实现html5打砖块小游戏(代码示例)

本篇文章给大家通过代码示例介绍一下利用原生js实现html5打砖块小游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。前言PS:本次项目中使用了大量 es6 语法,故对于 es6 语法不太熟悉的小伙伴最好能先了…

si9000阻抗匹配计算_如何在设计之初计算出两层PCB板差分线的阻抗,线宽,间距...

最近在设计一款两层板PCB。板上一些高速信号线,分别是MIMP接口的差分线和USB2.0的差分线。既然是高速线,那么就需要设计成阻抗匹配走线。MIMP差分线需要做100ohm匹配,USB线需要做90ohm匹配。差分线阻抗的计算主要跟线宽,间距&…

jax-ws cxf_Apache CXF – JAX-WS –简单教程

jax-ws cxf许多Java开发人员都认为Web Service实现的任务艰巨-好吧,没有人能真正责怪他们,尤其是在企业应用程序开发的多年中,这给开发和设计带来了很多复杂性。 对于某些人来说,了解它是构建完整的企业应用程序的下一步-Web服务-…

写屏障是什么_面试官为什么问内存模型总离不开final关键字,该如何应对?

Java 语言的每个关键字都设计的很巧妙,金雕玉琢,只有深度钻研其中,才知其中懊悔,本文带领大家一起深入理解 Java 内存模型之 final。加我微信好友的不要着急,手机没电了,等我借个充电器之后,再一…

非静态方法可以访问Java中的静态变量/方法吗?

“非静态方法可以访问静态变量或调用静态方法”是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法。 Java中的方法。 这没有问题,因为有静态成员,即静态变量和静态方法都…

which oracle linux,(总结)Linux下Oracle11gR2的ORA-00845错误解决方法

PS:前些时间一台演示环境的Oracle 11g for Linux不知什么原因,启动不起来,报错ORA-00845。搜索了下,这个问题是由于设置SGA的大小超过了操作系统/dev/shm的大小。当时解决了没空写总结,今天有点空,总结分享…

oracle存储过程深入,深入了解oracle存储过程的优缺点

定义:存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程…

如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程

Java项目中的常见任务之一是将日期格式化或解析为String,反之亦然。 解析日期表示您有一个表示日期的字符串,例如“ 2017-08-3”,并且要将其转换为表示Java中日期的对象,例如Java 8之前版本中的java.util.Date以及LocalDate或Loca…

如何获取当前刀具号_数控刀具的选用原则,如何使用数控刀具?一文全面介绍数控刀具...

数控刀具选用概述学习数控相关知识,最基础的是认识和了解刀具的材料以及选用原则,我们应当了解数控刀具的种类及特点、如何正确选择和使用数控加工刀具;学会根据被加工材料来合理选择数控刀具的材料和切削参数。选用原则:数控车床…