Python 计算两个序列之间差异的显著性水平检验

###################################################尝试显著性检验
## 把2月份和3月份
# 从整体上来看,先看边界层高度的情况
# 整理气象数据
# 读数据
import netCDF4 as nc
import pandas as pd
import numpy as np
from scipy import stats

def get_p_value(arrA, arrB):
    a = np.array(arrA)
    b = np.array(arrB)
    t, p = stats.ttest_ind(a,b)

file1 = r'C:\Users\LHW\Desktop\Hubei task120210918\meteology\adaptor.mars.internal-1631981155.7723448-28568-14-37c609d7-a545-4a66-b4e3-3f73bf08819b.nc'
file2 =r'C:\Users\LHW\Desktop\Hubei task120210918\meteology\adaptor.mars.internal-1631983289.050715-24266-17-3c804cfb-3277-455a-a01d-1f362109c96d.nc'
file3 = r'C:\Users\LHW\Desktop\Hubei task120210918\meteology\adaptor.mars.internal-1631983382.3185003-7481-11-e104bfc6-9c58-451c-ab8d-edbf4ae0a58d.nc'
file4 = r'C:\Users\LHW\Desktop\Hubei task120210918\meteology\adaptor.mars.internal-1631983578.5396793-21124-12-b3d63215-5cbc-4b95-8397-e15f3b7df515.nc'

dataset1 = nc.Dataset(file1)
lon1=dataset1.variables['longitude'][:]
lat1=dataset1.variables['latitude'][:]
BLH=dataset1.variables['blh'][:]

BLH20190203=BLH[736:2152,:,:]
BLH20200203=BLH[3616:5056,:,:]

# 新建一个显著性检验的表格
BLH_p=np.zeros(BLH20190203.shape[1:])
row=BLH20190203.shape[1]
col=BLH20190203.shape[2]
for i in range(row):
    for j in range(col):
        BLH_p[i,j]=get_p_value(BLH20190203[:,i,j],BLH20200203[:,i,j])

参考:https://www.php.cn/python-tutorials-455524.html

滑动t检验(Sliding t-test)是一种用于检测时间序列中突变点的方法。它通过在时间序列上滑动一个固定大小的窗口,计算窗口内两个序列的均值和方差,然后使用 t 检验来比较这两个序列是否有显著的差异。如果差异显著,则说明在该窗口内可能存在一个突变点。 下面是一个用 Python 实现滑动 t 检验的示例代码: ```python import numpy as np from scipy.stats import ttest_ind def sliding_ttest(data, window_size, p_threshold): """ :param data: 时间序列 :param window_size: 窗口大小 :param p_threshold: 显著性水平阈值 :return: 突变点的位置列表 """ n = len(data) results = [] for i in range(n - window_size + 1): # 计算窗口内的两个序列 sub1 = data[i:i+window_size//2] sub2 = data[i+window_size//2:i+window_size] # 计算序列的均值和标准差 mean1, mean2 = np.mean(sub1), np.mean(sub2) std1, std2 = np.std(sub1), np.std(sub2) # 计算 t 值和 p 值 t, p = ttest_ind(sub1, sub2, equal_var=False) # 如果 p 值小于显著性水平阈值,则认为存在突变点 if p < p_threshold: results.append(i + window_size//2) return results ``` 使用示例: ```python data = np.random.normal(0, 1, 1000) # 生成一个随机时间序列 window_size = 50 # 窗口大小 p_threshold = 0.05 # 显著性水平阈值 results = sliding_ttest(data, window_size, p_threshold) print(results) # 输出突变点的位置列表 ``` 注意,这个方法并不能保证找到所有突变点,因为突变点可能存在于窗口之间。另外,这个方法也可能会误报一些不存在的突变点,因此需要根据具体情况进行调整和判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值