首页 > 其他分享 >R语言实现多要素偏相关分析

R语言实现多要素偏相关分析

时间:2024-03-24 13:30:38浏览次数:13  
标签:分析 要素 语言 代码 偏相关 栅格数据 数据 变量

偏相关分析是指当两个变量同时与第三个变量相关时,将第三个变量的影响剔除,只分析另外两个变量之间相关程度的过程,判定指标是相关系数的R值。

在GIS中,偏相关分析也十分常见,我们经常需要分析某一个指数与相关环境参数的相关程度,例如NDVI与气温,降水,地形之间的相关系数。这与我们日常研究息息相关,因此掌握偏相关分析,对我们GISers比较重要。

虽然目前网络上有许多教程,但大部分是针对三个变量,且需要收费查阅,十分不便捷。

本文以标准化降水蒸散发指数SPEI与风速,降水,气温,日照时数,相对湿度等五个变量的偏相关分析为例,利用R语言进行解答。以达到大家只需更改数据存储路径,即可进行偏相关分析的目的。

话不多说,让我们开始吧!

01数据的规范

R语言进行栅格数据处理时,要求输入数据的统一规范,这包括输入栅格数据的空间参考,像元大小(分辨率),投影完全一致,我们在进行偏相关分析时,数据来源宽泛,标准不一,在数据的预处理上要特别重视,它是我们进行下一步代码操作的基础。常见的方法和工具有“投影”“重采样”“按掩膜提取”等等。这些都可以使用ArcGIS进行操作,小编在之前的文章也有过部分介绍。

02R语言代码的编写

将我们前期处理好的栅格数据按一定的命名规范,存储在本地文件夹后,我们就可以进行代码的编写了。

代码分成四部分:第一步加载所需要的包;第二步读取研究数据;第三步编写偏相关分析函数并应用;第四步导出数据。

在代码的注释中,小编已写的尽量详细,大家可以根据自己的需求来对更多或者更少变量的情况进行个性化的处理。


# 加载所需包
library(terra)
library(ppcor)

# 读取栅格数据,分别是SPEI和其他五类环境数据
MRSEI <- rast(dir("G:/demo/002/SPEI", full.names = TRUE, pattern = '.tif$'))
# 这句代码就是找到对应目录下的文件后缀名为tif……的文件,并将他们存储在MRESI这个对象中,它现在就存了9个栅格
fs <- rast(dir("G:/demo/002/五类气象数据/风速", full.names = TRUE, pattern = '.tif$'))
pre <- rast(dir("G:/demo/002/五类气象数据/降水", full.names = TRUE, pattern = '.tif$'))
tem <- rast(dir("G:/demo/002/五类气象数据/气温", full.names = TRUE, pattern = '.tif$'))
tim <- rast(dir("G:/demo/002/五类气象数据/日照时数", full.names = TRUE, pattern = '.tif$'))
shi <- rast(dir("G:/demo/002/五类气象数据/相对湿度", full.names = TRUE, pattern = '.tif$'))

# 合并处理后的栅格数据
z <- c(MRSEI, pre, tem, fs, tim, shi)#MRSEI1-9, pre:10-18,tem:19-27,fs:28-36,tim:37-45,shi:46,54

# 定义计算偏相关的函数fun_cor
fun_cor <- function(x) {
  # 如果任何一个值是 NA,则返回 NA
  if (any(is.na(x))) {
    return(c(NA, NA, NA, NA, NA))
  } else {
    # 尝试执行偏相关计算,处理可能的错误
    tryCatch({
      npre = ppcor::pcor.test(x[1:9],x[10:18],list(x[19:27],x[28:36],x[37:45],x[46:54]),method = "pearson")
      ntem = ppcor::pcor.test(x[1:9],x[19:27],list(x[10:18],x[28:36],x[37:45],x[46:54]),method = "pearson")
      nfs = ppcor::pcor.test(x[1:9],x[28:36],list(x[19:27],x[10:18],x[37:45],x[46:54]),method = "pearson")
      ntim = ppcor::pcor.test(x[1:9],x[37:45],list(x[19:27],x[28:36],x[10:18],x[46:54]),method = "pearson")
      nshi = ppcor::pcor.test(x[1:9],x[46:54],list(x[19:27],x[28:36],x[10:18],x[37:45]),method = "pearson")
      #返回降水数据的相关性和显著性检验的P值
      nprer = npre$estimate 
      nprep = npre$p.value 
      #返回气温数据的相关性和显著性检验的P值 
      ntemr = ntem$estimate
      ntemp = ntem$p.value
      nfsr = nfs$estimate
      nfsp = nfs$p.value #显著性检验的方法也有很多种
      ntimr = ntim$estimate
      ntimp = ntim$p.value
      nshir = nshi$estimate
      nship = nshi$p.value
      #在这里我就只return 五个变量的相关性了,P值就不return ,有需求的小伙伴可以自行导出
      return(c(nprer,ntemr,nfsr,ntimr,nshir))
    }, error = function(e) {
      return(c(NA, NA, NA, NA, NA))  # 如果出现错误,返回 NA
    })
  }
}
#开始运行函数
result <- terra::app(z,fun_cor,cores = 8)
#预览结果
plot(result)
将结果导出到本地,这里就导出两个为例吧
writeRaster(result[[1]],filename = "G:/demo/降水相关.tif")
writeRaster(result[[2]],filename = "G:/demo/气温相关.tif")

03  结果展示

按照本文示例代码的,我将得到五个变量的相关系数栅格图,下面是plot预览的效果。

这就是本文的全部内容,小伙伴可以直接修改数据路径运行代码,创作不易,希望大家多多支持,点赞转发!我是加拿大一枝黄花,我们下次再会。

标签:分析,要素,语言,代码,偏相关,栅格数据,数据,变量
From: https://blog.csdn.net/Promising_GEO/article/details/136847973

相关文章

  • # c语言程序设计——实验报告一
    c语言程序设计——实验报告一实验项目名称:实验一熟悉C语言运行环境实验项目类型:验证性实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点二、实验硬、软件环境Win......
  • # c语言程序设计——实验报告二
    c语言程序设计——实验报告二实验项目名称:实验报告2数据描述实验项目类型:验证性实验日期:2024年3月21日一、实验目的1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。2、掌握不同数据类型之间赋值的规律。3、学会使用C的有关算......
  • c语言程序实验——实验报告二
    c语言程序实验————实验报告二实验项目名称:实验报告2数据描述实验项目类型:验证性实验日期:2024年3月21日一、实验目的1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。2、掌握不同数据类型之间赋值的规律。3、学会使用C的有关算术运......
  • C语言:结构体,联合体和枚举(2)
      一:结构体1.结构体对齐规则:规则4: 如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。例子4://结构体嵌套结构体structS3{ doubled;// 8 8 8 charc; // ......
  • Linux C编程一站式学习 part2: C语言本质
    LinuxC编程一站式学习(akaedu.github.io)22.Makefile基础1.基本规则欲更新目标,必须首先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随之被更新。“更新”:执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头对于Makefile中的每个以Tab开头......
  • C语言UNIX域套接字CS模型
    实验目标:1实现基于流的unix域套接字通信cs模型2实现基于数据报的unix域套接字通信cs模型3可以观察到CS两端的完整启动退出流程,为了实现这一目标仅进行一次通信实验心得:1使用unlink避免地址冲突清理资源2 传统udp在首次sendto时系统临时分配端口,在套接字关闭|程......
  • c语言学习路线
    学习C语言可以按照以下路线进行:基础知识:了解C语言的基本语法和特性学习C语言的数据类型、控制流和函数熟悉指针和内存管理的概念数组和字符串:学习如何操作数组和字符串掌握数组和字符串的常见操作和算法熟悉C语言中的字符处理函数结构体和指针:理解结构体的概念和用法......
  • 快速排序(C语言)
    快速排序(英语:Quicksort),又称分区交换排序,简称「快排」,是一种被广泛运用的排序算法。快速排序的工作原理是通过分治的方式来将一个数组排序。快速排序分为三个过程:将数列划分为两部分(要求保证相对大小关系);递归到两个子序列中分别进行快速排序;不用合并,因为此时数列已经完全有序......
  • # c语言程序设计——实验报告二
    实验项目名称:实验报告2数据描述实验项目类型:验证性实验日期:2024年3月21日一、实验目的1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。2、掌握不同数据类型之间赋值的规律。3、学会使用C的有关算术运算符,以及包含这些运算符的......
  • C语言作业(二)
    1.在数组中查找某个数字#include<stdio.h>intmain(){intarr[]={1,2,3,4,5,6,8,9,10,11};intk=7;intsz=sizeof(arr)/sizeof(arr[0]);//求解数组的元素个数intleft=0;intright=sz-1;while(left<=right){......