爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 18282|回复: 12

[程序设计] 分享一下滑动t检验检测突变的代码,根据魏凤英书P58修改

[复制链接]

新浪微博达人勋

发表于 2016-11-24 19:17:35 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
%滑动t检验
%程序来源-http://bbs.06climate.com/forum.php?mod=viewthread&tid=41568
%根据魏凤英书P58修改,输入时间序列。
clc;
clear;
load('test.mat');
%以上数据中有data变量
%data变量共二维,结构为2*2000
%data(1,:)储存了1,2,3...2000
%data(2,:)储存了每年对应的数值

years=length(data);%数据的时长
data=data';
x=data(:,1);%year
y=data(:,2);%data
t=zeros(years,1);
checkline99=zeros(years,1);
checkline999=zeros(years,1);

%MMT方法检验%
%先设定子序列的长度
sublen=20;
n1=sublen;n2=sublen;
m=sqrt((1.0/n1)+(1.0/n2));

%开始计算每个基准点的统计量序列t
for i=sublen:years-sublen
    x1avg=mean(y(i-sublen+1:i));
    x2avg=mean(y(i+1:i+sublen));
    x1var=var(y(i-sublen+1:i));  
    x2var=var(y(i+1:i+sublen));
    s=sqrt((n1*x1var+n2*x2var)/(n1+n2-2));
    t(i-sublen+1)=(x2avg-x1avg)/(s*m);  
end

plot(x,t,'r-');
checkline99(:)=2.62;                   %n=sublen*2-2时,显著性检验标准,0.01

hold on;
plot(x,checkline99,'k:');
hold on;
plot(x,-checkline99,'k:');
axis([sublen,years-sublen,round(min(t))-1,round(max(t))+1]);
xlabel('year');ylabel('t');title('滑动t检验');

评分

参与人数 1金钱 +10 贡献 +3 收起 理由
二爷名声在外 + 10 + 3 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-11-24 19:19:38 | 显示全部楼层
此楼附件为程序中用到的数据。

test.mat

10.83 KB, 下载次数: 83, 下载积分: 金钱 -5

滑动T检验需要的数据文件

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-24 21:43:34 | 显示全部楼层
谢谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-15 11:02:12 | 显示全部楼层
感谢楼主的无私分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-10 19:41:53 | 显示全部楼层
谢谢楼主分享,要是写成函数会更好
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-14 10:21:17 | 显示全部楼层
请问子序列的长度怎么设定?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-23 16:27:28 | 显示全部楼层
初学者,进步中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-7 21:28:15 | 显示全部楼层
正好做这个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-4-11 12:47:06 | 显示全部楼层
楼主你好,倒数第二行中,round是什么意思呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-7-27 23:25:19 | 显示全部楼层
t(i-sublen+1)=(x2avg-x1avg)/(s*m);  要改为:t(i+1)=(x2avg-x1avg)/(s*m); 否则断点对不上
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表