论ArcGIS10.2的Band Collection Statistics工具计算相关系数的正确性

由课程作业引发的思考:基于ArcGIS的Band Collection Statistics工具计算地形因子与NDVI之间的相关系数,并结合其他工具进行相关性显著性检验

1、提出问题

课程作业原文如下: Task 3 Correlation analysis 14. Use the tool Band Collection Statistics to calculate the correlation coefficients between the elevation and NDVI values at multiple scales. Read the help information if this is the first time you use this tool. Finish the following table. 15. Challenge question: Thought we have calculated the correlation coefficients; we don’t know whether the correlation is statistically significant or not. We would need to export the values and run the correlation analysis in a software package like SPSS to test whether the correlation is statistically significant or not. You are not required to do this in this project, but you are encouraged to figure out how to do it. 问题:为了完成第15题,自己基于Matlab计算DEM与NDVI之间的相关性系数,并进行显著性检验,但是发现其计算结果与ArcGIS的Band Collection Statistics工具计算结果相差较大,如下图。在这里插入图片描述 在这里插入图片描述 同时,为了验证计算的准确性,将计算原数据从Matlab导出,采用Excel和SPSS进行计算,结果如下图。 在这里插入图片描述 在这里插入图片描述 Matlab 代码

NDVI = reshape(importdata('NDVI.tif保存路径'),48*114,1);
DEM = reshape(importdata('DEM.tif保存路径'),48*114,1);
nodataIndex = find(NDVI270 < -1);%找出原栅格数据的Nodata的索引值,此判断条件不可套用,需根据自己从ArcGIS导出tiff时的nodata设置值设定
NDVI(nodataIndex) = [];%剔除原栅格数据的Nodata值
DEM(nodataIndex) = [];
[R,P] = corrcoef(NDVI,DEM);
%导出数据,用于EXCEl和SPSS检验
fid = fopen('NDVI270.txt','w');
fprintf(fid,'%f \r\n',NDVI);
fclose(fid);
fid2 = fopen('DEM270.txt','w');
fprintf(fid2,'%f \r\n',DEM);
fclose(fid2);

2、寻因

先贴上Matlab和ArcGIS计算相关性系数的原理图 在这里插入图片描述 在这里插入图片描述 可能的原因:ArcGIS在计算系数时,用到的DEM均值和标准差值将NDVI值为nodata的像元对应的DEM值考虑在内

验证方法1: Matlab计算

NDVI = reshape(importdata('NDVI.tif保存路径'),48*114,1);
DEM = reshape(importdata('DEM.tif保存路径'),48*114,1);
DEMTest = DEM; %不剔除NDVI为nodata对应的DEM像元值,用于计算系数所需的均值和方差
nodataIndex = find(NDVI < -1);
NDVI(nodataIndex) = [];
DEM(nodataIndex) = [];

stdDEMT = std(DEMTest);
stdNDVI = std(NDVI);
stdDEM = std(DEM);

MeanDEMT = mean(DEMTest);
MeanNDVI = mean(NDVI);
MeanDEM = mean(DEM);

covNDVIDEMT = sum((NDVI-MeanNDVI).*(DEM-MeanDEMT))/(length(NDVI)-1);
RTest = covNDVIDEMT/(stdNDVI *stdDEMT );

covNDVIDEM = sum((NDVI-MeanNDVI).*(DEM-MeanDEM))/(length(NDVI)-1);
R = covNDVIDEMT/(stdNDVI *stdDEM );

计算结果:

在这里插入图片描述

验证方法2: ArcGIS计算

在这里插入图片描述 采用掩模工具,将NDVI值为nodata对应的DEM像元裁掉,再进行分析,结果如下图。结果出现了惊人的-1.96255!!!(==小于-1了==)

在这里插入图片描述 ==协方差矩阵问题== 对角线位置的值(==方差==)竟然出现了惊人的==负值==!!! 在这里插入图片描述 在这里插入图片描述 倒推-0.45446 既然以上猜想无法得到-0.45336这个值,自己根据计算的两种情况下的标准差进行倒推。也无法推出对应的协方差。。。。。。

结语

1、当然自己也尝试去找自带的源码,但是发现有些已经被编译成了字节码文件,只找到以下的部分: 在这里插入图片描述

2、由于自己在10.2平台上做的运算,或许在10.6平台上计算的结果很不错(自己未验证,后期需要此工具的10.6平台用户可自行验证哦),题外话:毕竟工作时,出现一个让我几乎崩溃的bug,发现是公司用的Esri的java源码文件的bug,而公司一直用的是老包,相关包更新后,一切恢复平静。。。。。。) 3、上面附上的matlab代码片,改改可套用,“自己动手,丰衣足食”。 ==以上内容只是个人想法,应该会有不当或不对处。还是继续写作业吧,按时完成作业重要。。。==

  • 作者:seibert(联系作者)
  • 发表时间:2020-06
  • 版权声明:未经站长允许,不可转载
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论

    可能感兴趣内容