爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10198|回复: 6

[经验总结] 使用ncl中的ttest函数进行t检验遇到的一些问题

[复制链接]

新浪微博达人勋

发表于 2020-5-9 10:25:30 | 显示全部楼层 |阅读模式

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

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

x
这几天对气温和降水的异常场进行了t检验。
1.为什么要进行t检验?
我做的内容是利用分析AMO和PDO不同位相配置下我国气温和降水(1948-2014)的异常。具体做法是:基于AMO和PDO指数判定正负(分季节)位相的年份,进行分组,“-AMO-PDO”、“-AMO+PDO”、“+AMO-PDO”、“+AMO+PDO”。然后利用合成分析给出对应温度和降水的异常场(相对于全时段)。计算距平时,需要减去均值,因此需要对四组不同位相的时间序列的均值与原时间序列的均值是否有差异进行检验。
2.使用ttest函数进行t检验

; t test nAnP
      ;得到“-AMO-PDO”组的平均值和方差
      precip_mam_mean_nAnP = dim_avg_n_Wrap(precip_mam_nAnP,(/0,1/))
      precip_mam_year_nAnP = dim_avg_n_Wrap(precip_mam_nAnP,1)                                    ;precip_mam_nAnP 是“-AMO-PDO”组的(year,month,lat,lon)的四维变量,这里先对月份纬度得到季节平均
      precip_mam_var_nAnP = dim_variance(precip_mam_year_nAnP(lat|:,lon|:,year|:))             ;对变量进行重新的维度排序,因为dim_variance函数默认是对最右边的维度求方差
      ;print(ind(ndtooned(precip_mam_var_nAnP) .le. 0))

      ;得到整个时间段的均值和方差
      precip_mam_year = dim_avg_n_Wrap(precip_mam,1)
      precip_mam_var = dim_variance(precip_mam_year(lat|:,lon|:,year|:))

      ;定义 “-AMO-PDO” 均值(方差的)维度,并把时间序列的长度赋值给他
      precip_mam_nAnP_s = new((/dimsizes(f1->lat),dimsizes(f1->lon)/),integer)
      precip_mam_nAnP_s = dimsizes(tf_nAnP)

      ;定义全时间段的均值(方差)的维度,并把时间序列的长度赋值给它
      precip_mam_s = new((/dimsizes(f1->lat),dimsizes(f1->lon)/),integer)
      precip_mam_s = dimsizes(year)

      ;进行检验
      prob_nAnP = ttest(precip_mam_mean_nAnP,precip_mam_var_nAnP,precip_mam_nAnP_s,precip_mam_mean,precip_mam_var,precip_mam_s,True,False)

      prob_nAnP = where(prob_nAnP .ge.0,prob_nAnP,prob_nAnP@_FillValue)


function tteset(ave1,var1,s1,ave2,var2,s2,iflag,[size=13.3333px]tval_opt)。ave1,var1,s1分别是第一个变量的均值,方差,以及变量的长度;ave2,var2,s2是第二个变量的均值,方差,以及变量的长度。
[size=13.3333px]如果这两个变量都是一维的,这里算起来不会有问题。
[size=13.3333px]但是如果这两个变量是多维的比如air_tem1(time,lat,lon),air_tem2(time,lat,lon),需要对空间上的每个格点进行t 检验,ave,var,s 应该是变量空间上每个格点的均值,方差,一个每个各点的时间序列的长度。
[size=13.3333px]

[size=13.3333px]3.p-value值
[size=13.3333px]如果给定显著性水平siglvl=0.05,p-value大于0.05则表示两个均值没有差异;p-value小于0.05则表示这两个均值有差异
[size=13.3333px]

[size=13.3333px]4.计算过程中遇到的问题
[size=13.3333px]1)dim_variance 和dim_variance_n_Wrap的区别
[size=13.3333px]我一开始使用dim_variance_n_Wrap(precip_mam_nAnP,(/0,1/))计算空间上每个格点的方差,后来又使用了上面的方法计算每个格点上的方差,得到的结果不同,经过检验我使用了上面的计算方法
[size=13.3333px]2)计算过程中有如下的warning
[size=13.3333px]warning:ttest: encountered 12 cases where var1 and/or var2 were less than or equal to 0. Output set to missing values in these cases
[size=13.3333px]这是因为变量中的方差有小于或等于0的地方,因为是使用dim_variance函数,不知道哪里出现了问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-5-21 11:35:52 | 显示全部楼层
同样问题来学习
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-14 20:37:20 | 显示全部楼层
ttest(precip_mam_mean_nAnP,precip_mam_var_nAnP,precip_mam_nAnP_s,precip_mam_mean,precip_mam_var,precip_mam_s,True,False)

倒数第二个参数是否应该设置为False呢? 我曾试过,iflag为True或者False,结果差异很大
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-14 20:44:15 | 显示全部楼层
风叶ele 发表于 2020-7-14 20:37
ttest(precip_mam_mean_nAnP,precip_mam_var_nAnP,precip_mam_nAnP_s,precip_mam_mean,precip_mam_var,prec ...

或者不要用这个内置函数如何?按照魏凤英老师统计书32页的统计量公式自行计算

这个帖子有写:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=87797
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-27 16:42:28 | 显示全部楼层
出现了同样的问题,请问要怎么办呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-12-3 11:39:18 | 显示全部楼层

大佬,您好,我想请问一下ttest中的 iflag 这一项,什么时候设置False,什么时候设置为True,官网上说具有相同的总体方差,设置为False,具有不同的总体方差,设置为True,但我论坛上的例子好像都是设置的False。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-1-11 19:19:03 | 显示全部楼层
请问解决了吗?遇到了同样的问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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