matlab滑动t检验和全球海表平均温度突变检验

滑动t检验程序一:

clear all;close all;clc
%%   读取数据
data = xlsread('Tair.xlsx'); % 读取数据
time = data(:,1);%时间序列数据
temperature = data(:,2);%最高气温数据
%%   画时间序列
figure(1)
set(gcf,'color','w')
plot(time,temperature)
xlabel('year')
ylabel('temperature(\circC)')
title('1911-1995年平均气温时间序列')
%%  滑动t检验
step = 10;n1 = 10;n2 = 10;%设置子序列步长
v = step+step-2;%自由度
t=[];
ttest=2.10;%t检验值  alpha=0.05
for i = 1:length(time)-step-step+1
    x1 = temperature(i:i+step-1);
    x2 = temperature(i+step:i+step+step-1);
    meanx1 = mean(x1);
    meanx2 = mean(x2);
    a = meanx1-meanx2;
    b = (n1+n2)/(n1*n2);
    varx1 = var(x1);
    varx2 = var(x2);
    c= ((n1-1)*varx1+(n2-1)*varx2)/(n1+n2-2);
    t1=a/sqrt(c*b);
    t=cat(1,t,t1);
end
x = time(step:length(time)-step);
figure(2)
set(gcf,'color','w')
plot(x,t,'r')
axis([min(x),max(x),min(t),max(t)]);
xlabel('year');
ylabel('t统计量');
hold on
x1=x(:,1);y1=ttest*ones(size(x1));
plot(x1,y1,'b--')
x2=x(:,1);y2=-ttest*ones(size(x2));
plot(x2,y2,'b--')
legend('t统计量','0.05显著水平');
title('1911-1995年平均气温突变检验')

程序二

clear
mydata = xlsread('Tair.xlsx'); % 读取数据
timeSeries = mydata(:,1);%时间序列数据
dataSeries = mydata(:,2);%最高气温数据
dataCount = length(dataSeries);
%%设置步长与检验值
step = 10; %步长
v = step+step-2;  %计算自由度
ttest = 2.878; %查表得t检验值,修改
len1 = step;
len2 = step;
x = timeSeries(step:dataCount-step)

for i = step:dataCount-step
    n1 = dataSeries(i-step+1:i);
    n2 = dataSeries(i+1:i+step);
    mean1 = mean(n1);
    mean2 = mean(n2);
    c = (len1+len2)/(len1*len2);
    var1 = 1/len1*sum((n1 - mean1).^2);
    var2 = 1/len2*sum((n2 - mean2).^2);
    delta1 = len1*var1 + len2*var2;
    delta = delta1/(len1 + len2 - 2);
    t(i-step+1) = (mean1 - mean2)/sqrt(delta*c);
end
t
%%制图
figure(1)
plot(x,t,'r-','linewidth',1.5);
xlabel('t(year)','FontName','TimesNewRoman','FontSize',12);
ylabel('统计量','FontName','TimeNewRoman','FontSize',12);
axis([min(x),max(x),-4,4]);%-4,4,y轴坐标范围
hold on
plot(x,0*ones(i-step+1,1),'-.','linewidth',1);
plot(x,ttest*ones(i-step+1,1),':','linewidth',1);%更改线宽
plot(x,-ttest*ones(i-step+1,1),':','linewidth',1);
legend('t统计量','0.01显著水平');%这里的显著水平与前面的自由度v有关

1870-2019全球海表平均温度突变检验

clear all;close all;clc
%%     读取nc文件

lon = ncread('HadISST_sst.nc','longitude');
lan = ncread('HadISST_sst.nc','latitude');
sst = ncread('HadISST_sst.nc','sst');
time = ncread('HadISST_sst.nc','time');
time=time(1:1800);
sst(sst == -1000) = NaN;sst(sst < -1e30)=NaN;
%%      
time=time+datenum(1870,1,1);
time = double(time);
tstr=datestr(time,30);
mm=str2num(tstr(:,5:6));
msst=zeros(1800,1);
%求全球平均海表温度
for i=1:1800
    sst1 = sst(:,:,i);
    msst(i,1) = nanmean(nanmean(sst1,1),2);
end
%%    画全球平均海表温度的时间序列
figure(1)
set(gcf,'color','w')
plot(time,msst)
xlabel('时间(年)');
ylabel('温度(\circC)');
title('1870.01-2019.12全球平均海表温度时间序列曲线');
datetick('x','yyyy')

%%      滑动t检验
step = 16;n1 = 16;n2 = 16;%设置子序列步长
v = step+step-2;%自由度
ttest=1.70;%t检验值  alpha=0.1
k=1;
for j=1:300:1501
    time1=time(j:j+299,1);
    msst1=msst(j:j+299,1);
    k=k+1;
    t=[];
    for i = 1:length(time1)-step-step+1
         x1 = msst1(i:i+step-1);
         x2 = msst1(i+step:i+step+step-1);
         meanx1 = mean(x1);
         meanx2 = mean(x2);
         a = meanx1-meanx2;
         b = (n1+n2)/(n1*n2);
         varx1 = var(x1);
         varx2 = var(x2);
         c= ((n1-1)*varx1+(n2-1)*varx2)/(n1+n2-2);
         t1=a/sqrt(c*b);
         t=cat(1,t,t1);
    end
         x = time1(step:length(time1)-step);
         time1=time1+datenum(1870,1,1);
         time1 = double(time1);
         tstr=datestr(time1,30);
         
         figure(k)
         set(gcf,'color','w')
         plot(x,t,'r')
         axis([min(x),max(x),min(t),max(t)]);
         xlabel('year');
         ylabel('t统计量');
         datetick('x','yyyy')
         hold on
         x1=x(:,1);y1=ttest*ones(size(x1));
         plot(x1,y1,'b--')
         x2=x(:,1);y2=-ttest*ones(size(x2));
         plot(x2,y2,'b--')
         legend('t统计量','0.1显著水平');
end
  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 滑动t检验是一种统计检验方法,通常用来比较在一个间序列中不同间点的两组数据是否存在显著差异。在Excel中,可以使用Data Analysis工具中的“t检验:配对两样本”来实现滑动t检验。 首先,需要在Excel中准备好两组要比较的数据,并按照间顺序排列。然后,打开Excel的“数据”选项卡,点击“数据分析”按钮,在弹出的对话框中选择“t检验:配对两样本”,点击确定。 在弹出的窗口中,需要设置各参数。首先,选择需要比较的两列数据,再选择假设检验的类型和显著性水平。在“输出到”选项中,可以选择输出到现有工作表或新工作簿中。 除了常规的参数设置滑动t检验还需要设置窗口大小和窗口步长。窗口大小是指每次比较所选取的数据点数量,而窗口步长则是指窗口在间序列中的移动距离。这两个参数的设置需要根据具体数据和问题进行调整。 最后,点击确定即可得到滑动t检验的结果。在结果中,会显示每个窗口下的t值和p值,以及是否显著差异的判断。根据结果的分析,可以得出不同间点的两组数据是否存在显著差异的结论。 ### 回答2: 滑动t检验是一种用于间序列数据的统计方法。它主要用于检测某个间段内的均值是否与整体均值有显著差异。在Excel中,可以使用数据分析工具中的t检验进行计算。 首先,需要准备数据,并在Excel中打开数据分析工具。在工具中找到“t检验”选项并点击进入。在弹出的窗口中,选择需要检验的数据范围和置信水平,通常为95%或99%。如果是进行滑动t检验,则需要选择“滑动均值t检验”选项,并设置滑动窗口的大小。设置好参数后,可以点击“确定”进行计算。 计算出结果后,Excel会输出t值、p值和置信区间等数据。其中,t值代表检验统计量的大小,p值代表检验结果的显著性,置信区间则代表均值的可信程度。如果p值较小(通常小于0.05),则意味着数据的均值在该间段内与整体均值有显著差异。如果p值较大,则意味着两者均值差异不显著。 在实际应用中,滑动t检验可用于检测某个间段内的销售量、股票涨跌幅、气温变化等数据的均值差异。通过该方法的应用,可以帮助我们更好地理解数据的趋势和变化,以指导我们的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值