利用Python进行滑动t检验

文摘   其他   2024-07-02 10:00   四川  

利用Python进行滑动t检验

文末附完整代码            

作者:第八星系 - 石头人

邮箱:2205455617@qq.com


获取数据

df = pd.read_excel('E:/data.xlsx')x = df['时间']y = df['平均']n = len(y)


滑动t检验

step = 3n1 = 3                             # 设置子序列步长 n2 = 3                                                        v = step+step-2             # 自由度                                ttest=2.78                      # alpha=0.05,自由度=4时,检验值t=2.78t = []for i in range(0, n-step-step+1):    x1 = y.iloc[i:i+step]    x2 = y.iloc[i+step:i+step+step]    meanx1 = np.mean(x1)    meanx2 = np.mean(x2)    a = meanx1-meanx2    b = (n1+n2)/(n1*n2)    varx1 = np.var(x1)      # 方差    varx2 = np.var(x2)    c = (n1*varx1+n2*varx2)/(n1+n2-2)    t1 = a/np.sqrt(c*b)    t = np.append(t,t1)print(t)


画图

plt.figure(figsize=(8, 6), dpi=600)plt.plot(range(27), t,  label='t 统计量(step=3)', color='blue', marker='o')
ax1 = plt.gca()ax1.set_ylabel('统计量',fontname='MicroSoft YaHei', fontsize=10)ax1.set_xlabel('年份',fontname='MicroSoft YaHei', fontsize=10)plt.xlim(-1,27)               # 设置x轴、y轴范围plt.ylim(-7,3.5)
# 添加辅助线x_lim = plt.xlim()# 添加显著水平线和y=0plt.plot(x_lim,[-ttest,-ttest],':',color='red',label='0.05显著性水平')plt.plot(x_lim, [0,0],'-',color='black')plt.plot(x_lim,[ttest,ttest],':',color='red')plt.xticks([0, 5, 10, 15, 20, 25],labels=[1993, 1998, 2003, 2008, 2013, 2018])
legend = plt.legend(bbox_to_anchor=(0.7, 0.2))legend.get_frame().set_facecolor('white')     # 设置背景颜色为白色legend.get_frame().set_edgecolor('black')    # 设置边框颜色为黑色for text in legend.get_texts():    text.set_fontsize(12)        # 设置字体大小    text.set_fontfamily('MicroSoft YaHei')     # 设置字体名称
plt.savefig("E:/图.png", dpi=600, bbox_inches='tight')


图像


完整代码

import numpy as npimport pandas as pdfrom matplotlib import pyplot as plt
# 获取数据df = pd.read_excel('E:/data.xlsx')x = df['时间']y = df['平均']n = len(y)
# 滑动t检验step = 3n1 = 3                             # 设置子序列步长 n2 = 3                                                        v = step+step-2             # 自由度                                ttest=2.78                      # alpha=0.05,自由度=4时,检验值t=2.78t = []for i in range(0, n-step-step+1):    x1 = y.iloc[i:i+step]    x2 = y.iloc[i+step:i+step+step]    meanx1 = np.mean(x1)    meanx2 = np.mean(x2)    a = meanx1-meanx2    b = (n1+n2)/(n1*n2)    varx1 = np.var(x1)      # 方差    varx2 = np.var(x2)    c = (n1*varx1+n2*varx2)/(n1+n2-2)    t1 = a/np.sqrt(c*b)    t = np.append(t,t1)print(t)
# 画图plt.figure(figsize=(8, 6), dpi=600)plt.plot(range(27), t,  label='t 统计量(step=3)', color='blue', marker='o')
ax1 = plt.gca()ax1.set_ylabel('统计量',fontname='MicroSoft YaHei', fontsize=10)ax1.set_xlabel('年份',fontname='MicroSoft YaHei', fontsize=10)plt.xlim(-1,27)               # 设置x轴、y轴范围plt.ylim(-7,3.5)
# 添加辅助线x_lim = plt.xlim()# 添加显著水平线和y=0plt.plot(x_lim,[-ttest,-ttest],':',color='red',label='0.05显著性水平')plt.plot(x_lim, [0,0],'-',color='black')plt.plot(x_lim,[ttest,ttest],':',color='red')plt.xticks([0, 5, 10, 15, 20, 25],labels=[1993, 1998, 2003, 2008, 2013, 2018])
legend = plt.legend(bbox_to_anchor=(0.7, 0.2))legend.get_frame().set_facecolor('white')     # 设置背景颜色为白色legend.get_frame().set_edgecolor('black')    # 设置边框颜色为黑色for text in legend.get_texts():    text.set_fontsize(12)        # 设置字体大小    text.set_fontfamily('MicroSoft YaHei')     # 设置字体名称
plt.savefig("E:/图.png", dpi=600, bbox_inches='tight')

END


数据:时间序列数据

加入交流群,获取本文数据


             公众号后台回复“群聊二维码”             

欢迎加入我们 进群交流


微信公众号|第八星系人造大气理论爱好者

本文编辑|枫阁

第八星系人造大气理论爱好者
记录与交流python、matlab等科研工具。记录与交流大气科学的学科知识
 最新文章