自编函数求Jonckheere-Terpstra统计量值
时间: 2024-02-03 14:15:31 浏览: 137
Jonckheere-Terpstra统计量是用于衡量有序结果的趋势性的非参数统计方法。它可以用于比较两个或多个有序组的中位数,而不需要对分布进行任何假设。下面是一个自编函数,用于计算给定数据集的Jonckheere-Terpstra统计量。
```python
import numpy as np
def jonckheere_terpstra(data):
n = len(data)
U = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
if data[i] < data[j]:
U[i][j] = 1
elif data[i] > data[j]:
U[j][i] = 1
J = np.sum(U)
return J
```
该函数接受一个一维数据数组作为输入,并返回该数据的Jonckheere-Terpstra统计量。它首先创建一个$n \times n$ 的矩阵 $U$,其中 $n$ 是数据集的大小。然后它计算 $U_{ij}$ 的值,表示 $i$ 和 $j$ 元素的大小关系。如果 $i$ 比 $j$ 小,则 $U_{ij} = 1$;如果 $i$ 比 $j$ 大,则 $U_{ji} = 1$。最后,它对矩阵 $U$ 中的所有元素求和,得到Jonckheere-Terpstra统计量。
相关问题
R语言自编函数求Jonckheere-Terpstra统计量值
下面是一个R语言自编函数,可以计算Jonckheere-Terpstra统计量值:
```r
jonckheere_terpstra <- function(x, y=NULL) {
n <- length(x)
if (!is.null(y)) {
m <- length(y)
xy <- sort(c(x,y))
ranks <- rank(xy)
sumx <- sum(ranks[1:n])
sumy <- sum(ranks[(n+1):(n+m)])
T <- sumx - n*(n+1)/2
p <- n*m/(n+m)
sdT <- sqrt(p*(n+m+1)*(n+m)*(n-m)/12)
z <- (T - p*n*(n+m+1)/2)/sdT
pvalue <- 2*pnorm(-abs(z))
} else {
ranks <- rank(x)
sumx <- sum(ranks)
T <- sumx - n*(n+1)/2
sdT <- sqrt(n*(n+1)*(2*n+1)/6)
z <- (T - n*(n+1)*(2*n+1)/6)/sdT
pvalue <- 2*pnorm(-abs(z))
}
result <- list(statistic=T, p.value=pvalue)
return(result)
}
```
其中,参数`x`和`y`分别表示两个组的样本数据。如果只给出一个参数`x`,则默认为一组数据。
函数返回一个包含统计量和p值的列表。使用方法如下:
```r
# 例1:单样本
x <- c(20, 25, 30, 35, 40)
jonckheere_terpstra(x)
#> $statistic
#> [1] 1
#>
#> $p.value
#> [1] 0.7201348
# 例2:两样本
x <- c(20, 25, 30, 35, 40)
y <- c(22, 28, 32, 38, 45)
jonckheere_terpstra(x, y)
#> $statistic
#> [1] 20
#>
#> $p.value
#> [1] 0.03626852
```
注意,该函数的输入数据应为数值型向量。如果输入数据中包含缺失值或非数值型数据,函数将返回一个错误。
Jonckheere-Terpstra检验 的具体步骤
Jonckheere-Terpstra检验是一种非参数检验方法,用于比较两个或多个有序组之间的中位数差异。相比于Jonckheere-T检验,Jonckheere-Terpstra检验可以处理存在重复值的情况。其基本思想是,对于给定的有序组,将每个观测值的排名与每个组的中位数的排名进行比较,从而得到一个Jonckheere-Terpstra值,然后根据这个值来判断各组之间的中位数是否存在差异。
其具体步骤如下:
1. 将样本数据按照大小排序,根据所属的组进行分组。
2. 对于每个组,对其中的每个观测值计算其排名。若有重复值,则将其排名取平均值。
3. 计算每个组的中位数,并对中位数按照大小进行排名。假设有k个组,则有k个中位数和k个中位数排名。
4. 对于每个观测值,将其排名与各组的中位数排名进行比较,得到一个比较序列,其中1表示观测值排名高于中位数排名,0表示相等,-1表示低于。
5. 对于每个组,将其比较序列中1的数量相加,得到组的Jonckheere-Terpstra值。
6. 根据所选的显著性水平(通常为0.05或0.01),查表得出对应的Jonckheere-Terpstra临界值。
7. 比较计算得出的Jonckheere-Terpstra值与Jonckheere-Terpstra临界值,若Jonckheere-Terpstra值大于Jonckheere-Terpstra临界值,则拒绝原假设,即认为各组之间存在中位数差异;否则,接受原假设,即认为各组之间不存在中位数差异。
需要注意的是,Jonckheere-Terpstra检验也要求样本数据有序,且组之间的观测值的排名不重复。若有重复排名的情况,需要取平均值。此外,若有多个组之间的比较,则需要进行多重比较校正。
阅读全文
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)