- 积分
- 72
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-12-31
- 最后登录
- 1970-1-1

|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 HJY@E 于 2022-5-4 12:19 编辑
网上找到了两段滑动t检验代码,但是同样的数据,结果有点点差异,如图1所示。
两种代码差距
图1
根据公式研究了一下,发现造成这种差异原因的是两段代码使用的方差计算方法不一样,如图2
两种方差方法
图2
哪种方法对呢,欢迎讨论^^
下附代码:
- %% 滑动T检验,两种方法代码有删改
- clc,clear;
- %% 读取数据
- A=[1900 15.4;1901 14.6;1902 15.8;1903 14.8;1904 15;1905 15.1;1906 15.1;1907 15;1908 15.2;
- 1909 15.4;1910 14.8;1911 15;1912 15.1;1913 14.7;1914 16;1915 15.7;1916 15.4;1917 14.5;
- 1918 15.1;1919 15.3;1920 15.5;1921 15.1;1922 15.6;1923 15.1;1924 15.1;1925 14.9;1926 15.5;
- 1927 15.3;1928 15.3;1929 15.4;1930 15.7;1931 15.2;1932 15.5;1933 15.5;1934 15.6;1935 15.1;
- 1936 15.1;1937 16;1938 16;1939 16.8;1940 16.2;1941 16.2;1942 16;1943 15.6;1944 15.9;
- 1945 16.2;1946 16.7;1947 15.8;1948 16.2;1949 15.9;1950 15.8;1951 15.5;1952 15.9;1953 16.8;
- 1954 15.5;1955 15.8;1956 15;1957 14.9;1958 15.3;1959 16;1960 16.1;1961 16.5;1962 15.5;
- 1963 15.6;1964 16.1;1965 15.6;1966 16;1967 15.4;1968 15.5;1969 15.2;1970 15.4;1971 15.6;
- 1972 15.1;1973 15.8;1974 15.5;1975 16;1976 15.2;1977 15.8;1978 16.2;1979 16.2;1980 15.2;
- 1981 15.7;1982 16;1983 16;1984 15.7;1985 15.9;1986 15.7;1987 16.7;1988 15.3;1989 16.1];
- %% 方法1 来源https://blog.csdn.net/qq_44913577/article/details/106134923
- myData=A;
- timeSeries=myData(:,1); % 时间序列数据
- dataSeries=myData(:,2); %
- dataCount=length(dataSeries);%检验数据长度
- %% 设置步长与检验值
- step=5; % 步长
- v=step+step-2; % 计算自由度
- len1=step;%前一组样本数
- len2=step; %后一组样本数
- x=timeSeries(step:dataCount-step);
- for i=step:dataCount-step %设置每个基准点i
- 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);
- t1(i-step+1)=-(mean1-mean2)/sqrt(delta*c);
- end
- %% 制图
- figure(1);
- p1=plot(x,t1,'b-','linewidth',1.5,'DisplayName','方法1');
- xlabel('t (year)','FontName','TimesNewRoman','FontSize',12);
- ylabel('统计量','FontName','TimesNewRoman','Fontsize',12);
- axis([min(x),max(x),min(t1),max(t1)]);
- hold on
- %%方法2 来源http://bbs.06climate.com/forum.php?mod=viewthread&tid=49034&highlight=%BB%AC%B6%AFT%BC%EC%D1%E9
- year=A(:,1);%year
- y=A(:,2); %data
- years=length(year);%数据的时长
- %MMT方法检验%
- %先设定子序列的长度
- sublen=5;
- 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)=(x2avg-x1avg)/(s*m);
- end
- i=sublen:years-sublen;
- p2=plot(year(i),t(i),'r-','DisplayName','方法2');
复制代码
|
|