第八星系人气爱 发表于 2024-3-1 10:34:27

利用Python计算滑动相关


作者:第八星系 - 石头人
邮箱:2205455617@qq.com

方法介绍:
      滑动相关性系数(Sliding correlation coefficient)是一种统计分析方法,它有助于分析数据中衡量变量之间的关系,它可以反应两组变量在不同的时间段内相关性的变化,更好了解二者关系的变化。


计算滑动相关性
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
import xarray as xarray

# 随机生成两组[0,1)之间的数用于计算滑动相关性
x = np.random.random(40)
y = np.random.random(40)
print(x, y, x.shape, y.shape)

# 设置步长,并计算每段步长内两组数据的相关性
# pearsonr函数会返回相关系数和P值两个值
t = 13
sli_cor = np.zeros()
p_value = np.zeros()
for i in range (int(0+(t-1)/2), int(40-(t-1)/2), 1):
    sli_cor, p_value = pearsonr(x, y)
sli_cor = np.nan
year = np.arange(1981, 2021, 1)

绘图
# 绘图
plt.plot(year, sli_cor, marker = '.', markersize = 10)
plt.xlim(1981, 2020)
plt.ylim(-1, 1)
plt.axhline(0.48, label='0.1显著性水平', color='red', linestyle='--')
plt.axhline(-0.48,color='red', linestyle='--')
plt.axhline(0.55, label='0.05显著性水平', color='red', linestyle='-')
plt.axhline(-0.55,color='red', linestyle='-')

# 设置标题、坐标轴
ax1 = plt.gca()
ax1.set_title('滑动相关' ,fontname='MicroSoft YaHei', fontsize=20, \
            weight='bold', style='italic', loc='left')
ax1.set_title('T = 13' ,fontname='MicroSoft YaHei', fontsize=20, \
            weight='bold', style='italic', loc='right')
ax1.set_xlabel('年份' ,fontname='MicroSoft YaHei', fontsize=15)
ax1.set_ylabel('相关系数' ,fontname='MicroSoft YaHei', fontsize=15)
ax1.set_xticks()
ax1.tick_params(axis='both', direction='in')

# 设置图例
leg = ax1.legend()
leg.get_frame().set_facecolor('white')# 设置背景颜色为白色
leg.get_frame().set_edgecolor('black')# 设置边框颜色为黑色
for text in leg.get_texts():
    text.set_fontsize(10)# 设置字体大小
    text.set_fontfamily('MicroSoft YaHei')# 设置字体名称

# 保存图片
plt.savefig("E:/图.png", dpi=600, bbox_inches='tight')
plt.show()

完整代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
import xarray as xarray

# 随机生成两组[0,1)之间的数用于计算滑动相关性
x = np.random.random(40)
y = np.random.random(40)
print(x, y, x.shape, y.shape)

# 设置步长,并计算每段步长内两组数据的相关性
# pearsonr函数会返回相关系数和P值两个值
t = 13
sli_cor = np.zeros()
p_value = np.zeros()
for i in range (int(0+(t-1)/2), int(40-(t-1)/2), 1):
    sli_cor, p_value = pearsonr(x, y)
sli_cor = np.nan
year = np.arange(1981, 2021, 1)

# 绘图
plt.plot(year, sli_cor, marker = '.', markersize = 10)
plt.xlim(1981, 2020)
plt.ylim(-1, 1)
plt.axhline(0.48, label='0.1显著性水平', color='red', linestyle='--')
plt.axhline(-0.48,color='red', linestyle='--')
plt.axhline(0.55, label='0.05显著性水平', color='red', linestyle='-')
plt.axhline(-0.55,color='red', linestyle='-')

# 设置标题、坐标轴
ax1 = plt.gca()
ax1.set_title('滑动相关' ,fontname='MicroSoft YaHei', fontsize=20, \
            weight='bold', style='italic', loc='left')
ax1.set_title('T = 13' ,fontname='MicroSoft YaHei', fontsize=20, \
            weight='bold', style='italic', loc='right')
ax1.set_xlabel('年份' ,fontname='MicroSoft YaHei', fontsize=15)
ax1.set_ylabel('相关系数' ,fontname='MicroSoft YaHei', fontsize=15)
ax1.set_xticks()
ax1.tick_params(axis='both', direction='in')

# 设置图例
leg = ax1.legend()
leg.get_frame().set_facecolor('white')# 设置背景颜色为白色
leg.get_frame().set_edgecolor('black')# 设置边框颜色为黑色
for text in leg.get_texts():
    text.set_fontsize(10)# 设置字体大小
    text.set_fontfamily('MicroSoft YaHei')# 设置字体名称

# 保存图片
plt.savefig("E:/图.png", dpi=600, bbox_inches='tight')
plt.show()

微信搜索“第八星系人造大气理论爱好者”公众号,关注获取文章数据


页: [1]
查看完整版本: 利用Python计算滑动相关