爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5301|回复: 6

[程序设计] 利用regress(一元回归)计算hadisst 的sst数据与nino3画b值得等值线图

[复制链接]

新浪微博达人勋

发表于 2016-3-19 19:22:43 | 显示全部楼层 |阅读模式

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

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

x
%ncdump
%regresstion analysis for enso
close all
clear
%read sst from hadisst
nc=netcdf('global sst.nc','r');
timer=nc{'TIME'}(:);
%base=datenum(1,1,1,0,0,0);
%time=timer+base;
%datestr(time/24);
lon=nc{'LON'}(:);
lat=nc{'LAT'}(:);
miss=nc{'SST'}.missing_value(:);
fill=nc{'SST'}.FillValue_(:);
sst=nc{'SST'}(:,:,:);%ncfloat('TIME', 'LAT', 'LON');time=360
sst(sst==fill)=nan;
sst(sst==miss)=nan;
sst(sst<-10)=nan;  %min sst是 -1000,去除太小值
%%
%通常下载数据直接绘图是从-180 to 180 ;将地图经度换为 0 to 360
inn=find(lon<0);
inp=find(lon>=0);
sstn=sst(:,:,inn);
sstp=sst(:,:,inp);
sstr=cat(3,sstp,sstn);
lon1=lon(inn)+360;
lonr=[lon(inp)
    lon1];
   [long,latt]=meshgrid(lonr,lat);
%%
%扣除季节性变化
tmp=reshape(sstr,[12,30,180,360]);
season=squeeze(nanmean(tmp,2));
clim=repmat(season,[30,1,1]);
ssta=sstr-clim;
%load ninoindex
nino=load('nino index.txt');
enso=nino(1:360,5);%time 1982-2011
%plot(enso);
%regress
[tt,ii,jj]=size(ssta);
cof=nan*zeros(ii,jj);
cofs=nan*zeros(ii,jj);
reg=[ones(tt,1),enso];
for i=1:ii
    for j=1:jj
        tmp=squeeze(ssta(:,i,j));
        %if~isnan(tmp)
          [b,~,~,stats]=regress(tmp,reg);  
        %end
        cof(i,j)=b(2);
        cofs(i,j)=stats(3);
    end
end
cof(cof==0)=nan;
%%
%画图
m_proj('Robinson','long',[min(lonr),max(lonr)],...
                   'lat',[min(lat)+5,max(lat)-5]);
%[X,Y]=m_112xy(lon,lat,'clip','on');
m_grid('box','off','tickdir','on',...
        'fontsize',20);
hold on
m_contourf(long,latt,cof,'linestyle','none');
m_coast('patch',[.6 .6 .6]);
hold on
m_contour(long,latt,cofs,[0.05,0.05]);
colorbar;
myc1
caxis([-0.5,0.5]);
title('regresstion enso')
%问题,怎么把地图上的lable弄好点,或没有

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

新浪微博达人勋

发表于 2016-12-5 16:46:55 | 显示全部楼层
谢谢楼主,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-9 11:18:32 | 显示全部楼层
楼主,我在使用您的程序的时候我自己出现了一个问题,就是在regress那一行,matlab提示我tmp和reg:
Y must be a vector and must have the same number of rows as X. 请问如何解决啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-5-28 09:46:22 | 显示全部楼层
感谢楼主分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-28 18:32:24 | 显示全部楼层
好像很厉害的样子
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-27 13:02:40 | 显示全部楼层
{:5_275:}{:5_275:}{:5_275:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-29 10:46:00 | 显示全部楼层
太感谢了,我照着中间一段程序做出来了,是不是regression的结果,在图形上看起来应该跟correlation的差不多?

另外请问楼主ENSO指数也标准化了吗?我看你在代码中对SST去除了平均值,一般在regression中标准化就是减去均值吗,还是zscore也可以?两组数据都要标准化吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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