Permutation趋势检验python语言
时间: 2023-06-09 20:02:05 浏览: 103
Permutation Test是一种非参数检验方法,其基本思想是通过对样本数据的随机打乱来产生新的数据集,再利用原先设定的检验统计量对这些新样本数据进行计算,以此来得到原假设的抽样分布。下面是在Python语言中进行Permutation趋势检验的代码实现:
```python
import numpy as np
from scipy.stats import norm
def perm_test(x,y,n_perm=1000):
"""
进行Permutation Test检验样本x与y的趋势是否存在显著差异。
:param x: 样本x,numpy数组形式。
:param y: 样本y,numpy数组形式。
:param n_perm: 进行随机重置的次数,默认为1000。
:return: 返回p值和检验统计量的值。
"""
n = len(x)
xy = np.concatenate([x,y])
trend_obs = np.sign(np.diff(xy)).sum() # 计算检验统计量,这里采用符号秩和统计量。
larger = 0
for i in range(n_perm):
np.random.shuffle(xy)
trend_i = np.sign(np.diff(xy)).sum()
larger += int(trend_i >= trend_obs)
p_value = (larger + 1) / (n_perm + 1) # 计算p值
return p_value, trend_obs
```
在这段代码中,我们首先将样本x和y进行拼接,然后计算原始样本的符号秩和统计量trend_obs。接着我们进行n_perm次Permutation,每次都随机打乱样本,然后计算打乱后的样本又得到的符号秩和统计量trend_i。最后我们统计trend_i >= trend_obs的数量,即计算出在随机打乱情况下出现大于等于原始观测值的统计量的数量。最终的p值就是(larger+1)/(n_perm+1),检验统计量的值则返回trend_obs。
阅读全文