登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 蝶恋花 于 2021-11-8 09:23 编辑
--------------------------------------------------11/06/2021-------------------------------------------------------------- 修改了一些typo,加入了最近用xMCA发表的论文, 希望各位大侠可以点个star,谢谢! -------------------------------------------------10/29/2019--------------------------------------------------------------- 今天抽空把student-t 检验加入了xMCA,至此xMCA基本上算是完整了。 后续可能会添加蒙特卡罗检验或bootstrap, 但是这两者检验都需要非常大的计算量(假设全球有一万个格点,每个格点重复一万次,总的计算量就要1亿次了!)。如果添加,应该会把并行用上。
最后如果大家觉得对你平常的研究有帮助,还请大家多多star!谢谢!
代码都托管在github:https://github.com/Yefee/xMCA API 指南: http://xmca.readthedocs.io/
下面给出一个太平洋海温与美国大陆地表气温的一个SVD例子。该例子来自于UW的大气科学专业的统计课程AS552。例子也在repo中,https://github.com/Yefee/xMCA/tree/master/xMCA/examples
下面是统计检验的栗子。傻瓜式地设置statistical_test为True就可以了。程序会返回lphet, rphet, 分别为左右场的p值。 - le, re, lphet, rphet = sst_ts.heterogeneousPatterns(n=1, statistical_test=True)
- fig, (ax1, ax2) = plt.subplots(2, 2, figsize=(12, 5))
- le[0].plot(ax=ax1[0])
- re[0].plot(ax=ax1[1])
- # Only plot where p<0.01
- lphet[0].where(lphet[0]<0.01).plot(ax=ax2[0])
- rphet[0].where(rphet[0]<0.01).plot(ax=ax2[1])
复制代码------------------------------------------------------------------------------------------------------------------------------ 各位同学大家好,
最近有用到SVD分解,因此在xarray的基础上写了一个package。现在共享出来供大家使用。SVD也叫MCA,即最大协方差分析。(或者应该反过来说,MCA也叫SVD,个人感觉MCA在数学或者统计上意义更加直观准确)。下一次更新会加入蒙特卡洛检验。 如果大家觉得有帮助希望能够给个star,谢谢大家。
代码都托管在github:https://github.com/Yefee/xMCA API 指南: http://xmca.readthedocs.io/
下面给出一个太平洋海温与美国大陆地表气温的一个SVD例子。该例子来自于UW的大气科学专业的统计课程AS552。例子也在repo中,https://github.com/Yefee/xMCA/tree/master/xMCA/examples
1. 导入需要用到的包: - from xMCA import xMCA
- import xarray as xr
- import matplotlib.pyplot as plt
- %matplotlib inline
复制代码
2. 读取美国大陆地表气温以及太平洋海温: - usta = xr.open_dataarray('xMCA/examples/data/USTA.nc').transpose(*['time', 'lat', 'lon'])
- usta.name = 'USTA'
- print(usta)
- sstpc = xr.open_dataarray('xMCA/examples/data/SSTPac.nc').transpose(*['time', 'lat', 'lon'])
- sstpc.name = 'SSTPC'
- print(sstpc)
复制代码
3. SVD分解,并获取第一与第二模态,其时间扩张系数以及协方差解释的百分比: - '''
- decomposition, time should be in the first axis
- lp is for SSTPC
- rp is for USTA
- '''
- sst_ts = xMCA(sstpc, usta)
- sst_ts.solver()
- lp, rp = sst_ts.patterns(n=2) #第一与第二模态, 左场为太平洋海温,右场为气温
- le, re = sst_ts.expansionCoefs(n=2) #时间扩张系数
- frac = sst_ts.covFracs(n=2) # 协方差解释百分比
- print(frac)
复制代码
4. 绘制第一模态及其时间扩张系数: - fig, (ax1, ax2) = plt.subplots(2, 2, figsize=(12, 5))
- lp[0].plot(ax=ax1[0])
- le[0].plot(ax=ax1[1])
- rp[0].plot(ax=ax2[0])
- re[0].plot(ax=ax2[1])
复制代码
5. 第一模态的同场相关与异场相关: - # 同场相关的图可见左场第一模态的时间扩展系数为ENSO模态,右场第一模态为北冷南暖的偶极模态
- lh, rh = sst_ts.homogeneousPatterns(n=1)
- # 异场相关可见美国气温在interannual与ENSO有很高的相关性,反之亦然。
- le, re = sst_ts.heterogeneousPatterns(n=1)
- fig, (ax1, ax2) = plt.subplots(2, 2, figsize=(12, 5))
- lh[0].plot(ax=ax1[0])
- rh[0].plot(ax=ax1[1])
- le[0].plot(ax=ax2[0])
- re[0].plot(ax=ax2[1])
复制代码
下面给出一个太平洋海温EOF的例子。其实很简单,把USTA变成SSTPC就是EOF了。- '''
- decomposition, time should be in the first axis
- lp is for SSTPC
- rp is for USTA
- '''
- sst_ts = xMCA(sstpc, sstpc.rename('SSTPC_copy')) # EOF!
- sst_ts.solver()
- lp, _ = sst_ts.patterns(n=2)
- le, _ = sst_ts.expansionCoefs(n=2)
- frac = sst_ts.covFracs(n=2)
- print(frac)
复制代码 第一模态与PC
- fig, ax1 = plt.subplots(1, 2, figsize=(12, 5))
- lp[0].plot(ax=ax1[0])
- le[0].plot(ax=ax1[1])
复制代码
将第一个PC与原场做回归
- lh, _ = sst_ts.homogeneousPatterns(n=1)
- fig, ax1= plt.subplots()
- lh[0].plot(ax=ax1)
复制代码
|