统计相关系数(2)——Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现

本文介绍了斯皮尔曼等级相关系数,一种衡量两个变量等级关系的统计方法。详细阐述了其概念、适用范围,并提供了两种MATLAB实现方式,包括自定义函数和内置函数`corr`的使用。强调了处理相同值时的不同计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spearman Rank(斯皮尔曼等级)相关系数

 

1、简介

在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希腊字母ρ(rho)表示其值。斯皮尔曼等级相关系数用来估计两个变量X、Y之间的相关性,其中变量间的相关性可以使用单调函数来描述。如果两个变量取值的两个集合中均不存在相同的两个元素,那么,当其中一个变量可以表示为另一个变量的很好的单调函数时(即两个变量的变化趋势相同),两个变量之间的ρ可以达到+1或-1。

 

 

假设两个随机变量分别为X、Y(也可以看做两个集合),它们的元素个数均为N,两个随即变量取的第i(1<=i<=N)个值分别用Xi、Yi表示。对X、Y进行排序(同时为升序或降序),得到两个元素排行集合x、y,其中元素xi、yi分别为Xi在X中的排行以及Yi在Y中的排行。将集合x、y中的元素对应相减得到一个排行差分集合d,其中di=xi-yi,1<=i<=N。随机变量X、Y之间的斯皮尔曼等级相关系数可以由x、y或者d计算得到,其计算方式如下所示:

 

由排行差分集合d计算而得(公式一):

### 计算栅格图像之间Spearman相关系数的方法 为了计算两幅栅格图像之间的Spearman相关系数,通常需要遵循特定的数据预处理和统计分析流程。Spearman相关系数衡量的是两个变量间的单调关系强度和方向,适用于非参数数据。 #### 数据准备 首先,确保每张栅格图像是相同尺寸,并且像素位置一一对应。对于每个像元,记录其在两张图片中的灰度值或其他数值属性形成配对观测值列表。 #### 排序并赋秩 针对每一个像元位置上的配对观测值,在各自的一组数据内部按照大小顺序排列,并赋予相应的排名次序;如果存在相同的数值,则取平均排名作为这些相等值的共同等级。 #### Spearman相关系数公式应用 使用下面给出的公式来求解最终的相关性得分: \[ \rho_{s} = 1-\frac{6\sum d_i^2}{n(n^2-1)} \] 其中 \(d_i\) 表示同一像元处不同影像间对应的等级差分,\(n\) 是总的像元数量[^4]。 ```python import numpy as np from scipy.stats import spearmanr def calculate_spearman(image1, image2): """ Calculate the Spearman rank correlation coefficient between two raster images. Parameters: image1 (numpy.ndarray): First input raster image array. image2 (numpy.ndarray): Second input raster image array. Returns: float: The calculated Spearman's rho value. """ # Flatten both arrays to one-dimensional vectors and remove any NaN values flat_img1 = image1.flatten() flat_img2 = image2.flatten() mask = ~np.isnan(flat_img1) & ~np.isnan(flat_img2) valid_flat_img1 = flat_img1[mask] valid_flat_img2 = flat_img2[mask] # Compute Spearman’s rank correlation coefficient using SciPy function rho, p_value = spearmanr(valid_flat_img1, valid_flat_img2) return rho # Example usage with dummy data representing raster images img_a = np.random.rand(100, 100)*100 # Generate random test data for demonstration purposes only img_b = img_a + np.random.normal(size=img_a.shape)*10 result_rho = calculate_spearman(img_a, img_b) print("The computed Spearman Rank Correlation Coefficient is:", result_rho) ``` 此代码片段展示了如何利用Python编程语言以及SciPy库快速有效地完成上述过程。注意这里假设输入为NumPy数组形式表示的栅格图像,并进行了简单的异常值(如NaN)过滤操作以保证计算的有效性和准确性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值