Python利用灰色关联度分析进行相关性分析
时间: 2025-01-02 07:32:58 浏览: 22
### 实现灰色关联度分析
灰色关联度分析(Grey Relation Analysis, GRA)是一种用于处理不确定性和少量数据的有效工具[^2]。该方法通过比较参考数列与多个比较数列之间的发展趋势来衡量它们之间的相似程度,进而确定各个因素的重要性排序。
#### 数据预处理阶段
为了确保后续计算的准确性,在正式执行灰色关联度分析之前,通常会对原始数据实施标准化或无量纲化操作:
```python
import numpy as np
def normalize_data(data):
"""对输入的数据矩阵按列进行最小-最大规范化"""
min_vals = data.min(axis=0)
max_vals = data.max(axis=0)
ranges = max_vals - min_vals) / ranges
return normed_data
```
#### 计算绝对差值序列
接着定义函数用来获取参考序列与其他序列间的绝对差异值构成的新序列集合:
```python
def get_abs_diff_sequences(reference_seq, comparison_seqs):
abs_diffs = []
for seq in comparison_secs:
diff = np.abs(np.array(seq) - np.array(reference_seq))
abs_diffs.append(diff.tolist())
return abs_diffs
```
#### 获取关联系数并求平均值得到最终关联度
基于上述准备好的绝对差值序列,可以进一步按照公式\[ \gamma_{ij}=\frac{\min\limits_k(\Delta_{kj})+\rho*\max\limits_l(\Delta_{lj})}
{\Delta_{ij}+\rho*\max\limits_m(\Delta_{mj})}\](其中\(ρ\)为分辨系数,默认取0.5),逐一对比每一对序列间对应位置上的差距,最后汇总成总的关联度得分表:
```python
def calculate_relation_coefficients(abs_diff_matrix, rho=0.5):
min_diff = np.min([np.min(row) for row in abs_diff_matrix])
max_diff = np.max([np.max(row) for row in abs_diff_matrix])
relation_coeffs = []
for diffs in abs_diff_matrix:
coeffs_row = [(min_diff + rho * max_diff)/(diff + rho * max_diff) for diff in diffs]
avg_coeff = sum(coeffs_row)/len(coeffs_row)
relation_coeffs.append(avg_coeff)
return relation_coeffs
```
#### 结果展示
利用matplotlib库绘制图表直观呈现各变量相对于参照物的变化趋势及其相互间的关联强度:
```python
import matplotlib.pyplot as plt
def plot_results(ref_series, comp_series_list, rel_degrees):
fig, ax = plt.subplots()
x = range(len(ref_series))
colors = ['b', 'g', 'r', 'c', 'm']
for i, series in enumerate(comp_series_list):
ax.plot(x, series, color=colors[i], label=f'Series {i+1}, Degree={rel_degrees[i]:.3f}')
ax.plot(x, ref_series, '--k', linewidth=2, label='Reference Series')
ax.legend()
plt.show()
```
以上就是完整的Python实现灰色关联度分析的过程[^4]。值得注意的是,尽管这种方法能很好地帮助理解不同特征随时间或其他维度演变模式的一致性,但它并不能替代传统意义上的统计学意义上严格定义的相关性测试;因此所得出的结果主要用于定性的相对重要性评判而非定量的确切依赖关系测量。
阅读全文