爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 63416|回复: 45

合成分析的显著性检验(程序分享)

  [复制链接]

新浪微博达人勋

发表于 2018-10-26 20:23:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 happyaliyun 于 2018-10-26 20:41 编辑

最近在做合成分析,对于合成分析的显著性检验查了一些资料,在魏凤英那本书里面有公式,现在程序分享一下,使用ncl写的,
利用指数挑选的年份做合成,里面含有利用指数做线性回归所没有的非线性信号,只是得确保样本数量。
差值将非线性信号放大,噪音相对削弱,可以从中找到统计意义上的相关,再寻找相应的动力机制或者外强迫。
   合成分析一般使用t检验,
1、对于单个总体均值的t检验:也就是高低指数年对应的变量的显著性检验,低指数年一样的方法
  ;------------------------------------------------------------------
  ;显著性检验,单个总体均值的t检验,t==(Xn-X)/(std/sqrt(n)),df=n-1
  ;其中,Xnstd是样本均值和标准差,X是总体的均值,n为样本数量
;------------------------------------------------------------------  
;------------------------------------------------------------------
  ;高指数的显著性检验
n_high       =dimsizes(ts_high_djf(:,0,0))               
df_high      = n_high-1   
  ;ts显著性检验
Xn_ts_high   =dim_avg_n(ts_high_djf(:,:,:),0)
X_ts_high    =dim_avg_n(ts_season(:,:,:),0)
std_ts_high  =dim_stddev_n(ts_high_djf(:,:,:),0)
t_ts_high   =(Xn_ts_high-X_ts_high)/(std_ts_high/sqrt(n_high))     
prob_ts_high    =student_t(t_ts_high, df_high)
copy_VarMeta(ts_high_ann,prob_ts_high)
printVarSummary(prob_ts_high)
2、对于合成分析的差值的显著性检验,为两个总体均值的t检验,
;-----------------------------------------------------------------------------  
;差值的显著性检验  
;两个总体均值的显著性检验,
;t=(Xn-Yn)/(sqrt(((n1-1)*s1^2+(n2-1)*s2^2)/(n1+n2-2))*sqrt(1/n1+1/n2))   
n1       = dimsizes(ts_high_djf(:,0,0))  
n2       = dimsizes(ts_low_djf(:,0,0))                  
df       = n1+n2-2        
;ts合成差值的显著性检验
Xn_ts       =dim_avg_n(ts_high_djf(:,:,:),0);样本均值
Yn_ts       =dim_avg_n(ts_low_djf(:,:,:),0) ;样本均值
s1_ts       =dim_variance_n(ts_high_djf(:,:,:),0) ;样本方差
s2_ts       =dim_variance_n(ts_low_djf(:,:,:),0)  ;样本方差
s1s2_ts    =(n1-1)*s1_ts+(n2-1)*s2_ts   
t_ts       =(Xn_ts-Yn_ts)/(sqrt(s1s2_ts/df)*sqrt(1.0/n1+1.0/n2))                           
;!注意一定是1.0/n1,整数相除会成0
prob_ts_diff    = student_t(t_ts,df)
copy_VarMeta(ts_low_ann,prob_ts_diff)
printVarSummary(prob_ts_diff)
printMinMax(prob_ts_diff,True)



评分

参与人数 3金钱 +8 收起 理由
sly邵寮源 + 5
牛牛爱喝牛奶 + 2 很给力!
金理旭 + 1 很给力!

查看全部评分

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

新浪微博达人勋

发表于 2021-1-22 09:06:30 | 显示全部楼层
我咋觉得ttest不能算高指数年的合成分析,只能算差值分析...
那个函数要求输入两个样本的方差,算高指数年合成分析的检验公式不用呀!!!
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-11-2 03:05:20 | 显示全部楼层
happyaliyun 发表于 2018-11-1 09:51
源代码还有很多其他的处理,还是这一段比较合适

楼主你好,我是想把你发的代码和数据结合起来run一下,这样更好理解,不知道你方便上传一下数据文件(ts_high_djf 和 ts_season)吗?要不很难理解你在对什么数据进行计算,谢谢!
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-3-20 19:39:38 | 显示全部楼层
不会游泳的fish 发表于 2019-3-18 16:18
楼主你好,想请教一下,在算s1s2_ts    =(n1-1)*s1_ts+(n2-1)*s2_ts   ,t_ts       =(Xn_ts-Yn_ts)/(sqrt( ...

一般不可能,你再检查是不是其他地方出错了
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2018-10-27 01:31:11 | 显示全部楼层
请问楼主,可以共享一下代码中的数据文件吗? 多谢了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-11-1 09:14:52 | 显示全部楼层
请问楼主,student_t(t,df)里的t是要先根据公式算出来么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-11-1 09:51:08 | 显示全部楼层
yysunnyboy 发表于 2018-10-27 01:31
请问楼主,可以共享一下代码中的数据文件吗? 多谢了!

源代码还有很多其他的处理,还是这一段比较合适
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-11-2 09:45:54 | 显示全部楼层
yysunnyboy 发表于 2018-11-2 03:05
楼主你好,我是想把你发的代码和数据结合起来run一下,这样更好理解,不知道你方便上传一下数据文件(ts_ ...

样本均值和总体均值,这个根据你自己的需要来计算,我是求得温度的季节平均
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-12-9 17:55:13 | 显示全部楼层
ttest这个函数可以的吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-12-27 15:56:34 | 显示全部楼层
很有帮助!非常感谢!有一点就是楼主给每个变量取的名字都太长了,注释也比较少,看起来有点费劲,不过花点时间还是能看懂哒!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-18 16:18:22 | 显示全部楼层
楼主你好,想请教一下,在算s1s2_ts    =(n1-1)*s1_ts+(n2-1)*s2_ts   ,t_ts       =(Xn_ts-Yn_ts)/(sqrt(s1s2_ts/df)*sqrt(1.0/n1+1.0/n2)) 这两步的时候,如果某个格点方差为0 要怎么办呢,这个时候分母为0 就会报错了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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