爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 34557|回复: 15

[作图] 关于用ncl做回归分析的显著性检验

[复制链接]

新浪微博达人勋

发表于 2017-10-31 13:50:07 | 显示全部楼层 |阅读模式
1金钱
各位大神,下面是我做回归检验的部分程序:
rc = regCoef(x, SST(level|:,lat|:,lon|:,shijian|:) )   
rcc     = rc(:,:,0)                             
rcc!0   = "level"    ; name dimensions
rcc!1   = "lat"
rcc&level = SST&level
rcc&lat = SST&lat  
tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36
tval!0   = "level"    ; name dimensions
tval!1   = "lat"
tval&level = SST&level
tval&lat = SST&lat   
tval = onedtond(rcc@tval , dimsizes(rcc))   ;t-statistic
df   = onedtond(rcc@nptxy, dimsizes(rcc)) - 2  ;自由度
b = tval    ; b must be same size as tval (and df)
b = 0.5
prob =  betainc(df/(df+tval^2),df/2.0,b)
prob!0   = "level"    ; name dimensions
prob!1   = "lat"
prob&level = SST&level
prob&lat = SST&lat   ; assign coordinate values to named dimensions
res2                    = True
res2@gsnDraw            = False
res2@gsnFrame           = False
res2@cnFillOn           = True
res2@cnLinesOn          = False
res2@cnLineLabelsOn     = False
res2@cnInfoLabelOn      = False
res2@lbLabelBarOn       = False
res2@cnMonoFillPattern  = False
res2@cnLevelSelectionMode = "ExplicitLevels"
res2@cnLevels           = (/0.05/)                       ;; set to significance level
res2@cnFillPatterns     = (/17,-1/)
res2@cnFillColors       = (/1,0/)
res2@cnFillScaleF       = 1        ; add extra density
res2@gsnAddCyclic         = True
res2@gsnLeftString      = ""
res2@gsnLeftString      = ""
res2@gsnRightString     = ""   
plots_11= gsn_csm_contour(wks,prob,res2)
overlay(plot,plots_11)
draw(plot)
frame(wks)
思路比较常规,就是官网上给出的,但是不知道为什么画出来的图通过显著性区域的地方,打点位置明显有问题,只在700hpa 那块出现,是哪一步出问题了呢??

QQ图片20171102120251.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-4 18:45:18 | 显示全部楼层
regCoef返回的有个属性就是t检验的值,直接通过查表看一下是否通过检验即可,不需要再次进行val = onedtond(rcc@tval , dimsizes(rcc))   ;t-statistic
df   = onedtond(rcc@nptxy, dimsizes(rcc)) - 2  ;自由度
b = tval    ; b must be same size as tval (and df)
b = 0.5
prob =  betainc(df/(df+tval^2),df/2.0,b)
的计算
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 10:24:11 | 显示全部楼层
songwei 发表于 2017-11-4 18:45
regCoef返回的有个属性就是t检验的值,直接通过查表看一下是否通过检验即可,不需要再次进行val = onedtond ...

regCoef返回的值rc应该是回归值吧??怎么变成t检验的值。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-11-5 11:09:48 | 显示全部楼层
李小毛123 发表于 2017-11-5 10:24
regCoef返回的值rc应该是回归值吧??怎么变成t检验的值。

有一项是tval
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 11:26:26 | 显示全部楼层

你的意思是只用tval = onedtond(rcc@tval , dimsizes(rcc))   ;t-statistic,不用prob =  betainc(df/(df+tval^2),df/2.0,b) 是吗??
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 11:29:23 | 显示全部楼层

我试了一下,画tval肯定是错的。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-11-5 12:43:03 | 显示全部楼层
tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36
tval!0   = "level"    ; name dimensions
tval!1   = "lat"
tval&level = SST&level
tval&lat = SST&lat   
df = onedtond(rcc@nptxy, dimsizes(rcc)) - 2  ;自由度
tt = cdft_t(0.975,df)

res_t@cnLevels                      = (/-tt,tt/) ;      
res_t@cnFillPatterns               = (/17,-1,17/)     
试试
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 16:09:44 | 显示全部楼层
lleoiu 发表于 2017-11-5 12:43
tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36

tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36
tval!0   = "level"    ; name dimensions
tval!1   = "lat"
tval&level = SST&level
tval&lat = SST&lat   
df = onedtond(rcc@nptxy, dimsizes(rcc)) - 2  ;自由度
tt = cdft_t(0.975,49)


res2                      = True              ; set up a second resource list
res2@gsnDraw            = False
res2@gsnFrame           = False
res2@cnFillOn           = True
res2@cnLinesOn          = False
res2@cnLineLabelsOn     = False
res2@cnInfoLabelOn      = False
res2@lbLabelBarOn       = False
res2@cnMonoFillPattern  = False
res2@cnLevelSelectionMode = "ExplicitLevels"
res2@cnLevels                      = (/-tt,tt/) ;      
res2@cnFillPatterns               = (/17,-1,17/)     
res2@cnFillColors       = (/1,0/)
res2@cnFillScaleF       = 1        ; add extra density
res2@gsnAddCyclic         = True
res2@gsnLeftString      = ""
res2@gsnLeftString      = ""
res2@gsnRightString     = ""  
plots_11= gsn_csm_contour(wks,tt,res2)
我改成了这样,然后rcc对应的图还是不变,只是没有打点,图片中间有一行字,是no contour data
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 16:12:22 | 显示全部楼层
lleoiu 发表于 2017-11-5 12:43
tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36

我用probt这个recoef里面自带的例子,画出来的经纬度图是对的,现在变成高度纬度图才有问题的,是不是坐标的原因呢??
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-11-5 16:31:29 | 显示全部楼层
lleoiu 发表于 2017-11-5 12:43
tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36

tval = onedtond(rcc@tval , dimsizes(rcc))  
printVarSummary(rcc)
tval@FillValue=  -9.96921e+36
tval!0   = "level"    ; name dimensions
tval!1   = "lat"
tval&level = SST&level
tval&lat = SST&lat   
df = onedtond(rcc@nptxy, dimsizes(rcc)) - 2  ;自由度
tt = cdft_t(0.975,49)
print(tt)

      stres                      = True              ; set up a second resource list
stres@gsnDraw              = False             ; do not draw the plot
stres@gsnFrame             = False             ; do not advance the frame
stres@cnLineLabelsOn       = False            ; do not use line label
stres@cnFillOn             =False             ; color fill
stres@cnLinesOn            = False            ; do not draw contour lines
stres@cnInfoLabelOn       = False
stres@lbLabelBarOn =     False
plots_11=gsn_csm_contour(wks,tval,stres)
plots_11=ShadeLtGtContour(plots_11,-tt,17,tt,17); fillpattern=17
overlay(plot,plots_11)
我懂你的意思了,应该是这样的,这次是有点,只是打点的位置明显有问题,传不上图片。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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