偏相关(Partial Correlation)

偏相关是用于测量两个变量之间的线性关系,同时控制一个或多个其他变量的影响。简单来说,它告诉我们当其他变量保持恒定时,两个变量之间的关系如何。假设我们有三个变量 XXX、YYY 和 ZZZ,我们感兴趣的是 XXX 和 YYY 之间的关系,同时控制 ZZZ 的影响。

高阶偏相关(Higher-Order Partial Correlation)

高阶偏相关扩展了偏相关的概念,用于同时控制多个变量的影响。例如,假设我们有四个变量 X、Y、Z和 W,我们想了解 X 和 Y之间的关系,同时控制 Z 和 W 的影响。这时我们需要计算高阶偏相关系数。


偏相关和高阶偏相关常用于研究复杂系统中的变量关系。例如,在气候研究中,我们可能希望了解温度和植被指数(NDVI)之间的关系,同时控制降水、土壤湿度和人口密度的影响。偏相关和高阶偏相关可以帮助我们更好地理解这些复杂关系,排除混杂变量的干扰。
在 MATLAB 中,可以使用 partialcorr 函数来计算偏相关。对于高阶偏相关,可以通过先对控制变量进行线性回归,然后计算残差之间的相关系数来实现。
本文应用案例:以2001-2020年的5个影响因子来分别分析对于NDVI的偏相关影响程度,再对其进行检验。
% 读取初始数据和信息
[aa, R] = geotiffread('G:\wrb\偏相关\pre\2001pre.tif'); 
info = geotiffinfo('G:\wrb\偏相关\pre\2001pre.tif');
project=info.GeoTIFFTags.GeoKeyDirectoryTag;
[m, n] = size(aa);
begin_year=2001;
end_year=2020;
cd=end_year-begin_year+1;
ndvisum=zeros(m*n,cd);
% 读取NDVI数据
ca_ndvi = 'G:\wrb\偏相关\ndvi\';
k = 1;
for year = begin_year:end_year
    filename = [ca_ndvi, int2str(year), 'yndvi.tif'];
    ndvi1 = importdata(filename);
    ndvisum(:, k) = reshape(ndvi1, [], 1);
    k = k + 1;
% 读取降水数据
ca_pre = 'G:\wrb\偏相关\pre\';
k = 1;
for year = begin_year:end_year
    filename = [ca_pre, int2str(year), 'pre.tif'];
    pre = importdata(filename);
    presum(:, k) = reshape(pre, [], 1);
    k = k + 1;
% 读取SPEI数据
ca_spei = 'G:\wrb\偏相关\spei\';
k = 1;
for year = begin_year:end_year
    filename = [ca_spei, int2str(year), 'spei.tif'];
    spei = importdata(filename);
    speisum(:, k) = reshape(spei, [], 1);
    k = k + 1;
% 读取土壤湿度数据
ca_soil_moisture = 'G:\wrb\偏相关\sm\';
k = 1;
for year = begin_year:end_year
    filename = [ca_soil_moisture, int2str(year), 'sm.tif'];
    soil_moisture = importdata(filename);
    soilmoisturesum(:, k) = reshape(soil_moisture, [], 1);
    k = k + 1;
% 读取人口密度数据
ca_population_density = 'G:\wrb\偏相关\landscan\';
k = 1;
for year = begin_year:end_year
    filename = [ca_population_density, int2str(year), 'landscan.tif'];
    population_density = importdata(filename);
    populationdensitysum(:, k) = reshape(population_density, [], 1);
    k = k + 1;
% 读取温度数据
ca_temp = 'G:\wrb\偏相关\tm\';
k = 1;
for year = begin_year:end_year
    filename = [ca_temp, int2str(year), 'tm.tif'];
    temp = importdata(filename);
    tempsum(:, k) = reshape(temp, [], 1);
    k = k + 1;
% 转换为双精度浮点值
ndvisum = double(ndvisum);
presum = double(presum);
speisum = double(speisum);
soilmoisturesum = double(soilmoisturesum);
populationdensitysum = double(populationdensitysum);
tempsum = double(tempsum);
................................
................................
 

可参考:基于六因素的偏相关及显著性分析——一种更简单的计算代码(MATLAB)这篇博客