爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 40614|回复: 46

【已解决】NCL如何去除某一变量中的ENSO趋势

  [复制链接]

新浪微博达人勋

发表于 2016-9-5 12:29:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 我想养猫 于 2016-10-25 15:47 编辑

  我想用某一气候指数回归冬季温度场,但是考虑到同期ENSO是个强烈的信号,因此想去除当月ENSO趋势。
  目前想到的方法是把气候指数与ENSO做回归(or相关?),然后去除ENSO部分,及Y=aX+b,X是nino3.4指数,Y是我选用的气候指数(X/Y可以理解为一维向量),则我使用reocf函数获得回归系数a,则去ENSO趋势后的气候指数为b=Y-aX,然后将b标准化。请问这个思路对吗?目前我在后续回归风场时发现没有显著特征,因此有了疑问。NCL程序如下:

pin=f1->index(0,:)      ;读原气候指数
pin!0="time"
pin=dtrend_n(pin,False,0)

zvar=f2->air
var0=zvar(384:804:12,:,:) ;  读入温度场
var0=dtrend_n(var0,False,0) ;做回归 两个变量都要去趋势
zvar:=var0
;>>>>>>>>>>>>去尼诺趋势
;读尼诺3.4指数
filepath1= "d:/data/h2/nino3.4.txt" ;1951-2016
var1= asciiread(filepath1,(/68,12/),"float") ;1948.1-2015.12
index_nino=var1(32:67,0)   ;1月enso指数:1980-2015
;index_nino=var1(31:66,11)   ;12月enso指数:1979-2014
index_nino!0="time"
index_nino=dtrend_n(index_nino,False,0)
index_nino=dim_standardize(index_nino,1)

regh1=new(1,"float",0)
tval1=new(1,"float",0)
nptxy1=new(1,"integer",0)
;回归
regh1=regcoef(index_nino,pin,tval1,nptxy1)
pin=pin-regh1*index_nino
pin=dim_standardize(pin,1)

由此获得新的去趋势标准化指数pin,下面是正常回归气象要素场程序,不再赘述。麻烦各位大大帮我看下,我最近深陷瓶颈不能自拔 QAQ
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-5 16:43:11 | 显示全部楼层
我想养猫 发表于 2016-9-5 15:13
应该用原气候指数序列减去ENSO的线性回归方程,即Y-(aX+b)才是去除ENSO趋势的气候指数序列,我之前得到的 ...

还有一个问题,你算回归方程Y=aX+b时,b是怎么算的
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2016-9-5 14:07:11 | 显示全部楼层
我之前做过一种方法是:气候指数与ENSO做回归后,再用原来的气候指数减去回归后的Y,这样得到的就是去掉ENSO趋势的变量。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-9-5 15:10:39 | 显示全部楼层
xiaocaoqiqiao 发表于 2016-9-5 14:07
我之前做过一种方法是:气候指数与ENSO做回归后,再用原来的气候指数减去回归后的Y,这样得到的就是去掉ENS ...


噢懂了!我之前的做法只是减去了回归系数与变量X的乘积aX,但没有减去常数b,所以不准确。懂啦懂啦 谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-9-5 15:13:31 | 显示全部楼层
应该用原气候指数序列减去ENSO的线性回归方程,即Y-(aX+b)才是去除ENSO趋势的气候指数序列,我之前得到的是Y-aX,这样是不准确的。程序修正如下:

regh1=new(1,"float",0)
tval1=new(1,"float",0)
nptxy1=new(1,"integer",0)
;回归
b1=regcoef(index_nino,pin,tval1,nptxy1)
pinAve=dim_avg(pin)       ;平均指数
a1=pinAve-b1*index_ninoAve
pin=pin-(b1*index_nino+a1)
pin=dim_standardize(pin,1)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-5 16:30:18 | 显示全部楼层
我想养猫 发表于 2016-9-5 15:13
应该用原气候指数序列减去ENSO的线性回归方程,即Y-(aX+b)才是去除ENSO趋势的气候指数序列,我之前得到的 ...

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

新浪微博达人勋

 楼主| 发表于 2016-9-7 13:14:56 | 显示全部楼层
本帖最后由 我想养猫 于 2016-9-7 13:17 编辑
xiaocaoqiqiao 发表于 2016-9-5 16:43
还有一个问题,你算回归方程Y=aX+b时,b是怎么算的


                               
登录/注册后可看大图


在这个公式中截距是a,获得回归系数b之后可以计算截距a
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-7 13:39:09 | 显示全部楼层
不错,学习一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-9-14 17:23:24 | 显示全部楼层
{:eb502:}{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-9-15 19:31:18 | 显示全部楼层
谢谢楼主!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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