自编函数求Jonckheere-Terpstra统计量值
时间: 2024-02-03 15:15:31 浏览: 128
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-Terpstra检验的临界值表,供参考:
| 样本量n | α=0.1 | α=0.05 | α=0.01 |
|-------|-------|--------|--------|
| 3 | 1 | 1 | 1 |
| 4 | 2 | 2 | 2 |
| 5 | 3 | 3 | 3 |
| 6 | 4 | 4 | 4 |
| 7 | 5 | 5 | 5 |
| 8 | 6 | 6 | 6 |
| 9 | 7 | 8 | 8 |
| 10 | 8 | 9 | 10 |
| 15 | 14 | 17 | 20 |
| 20 | 24 | 29 | 34 |
| 25 | 36 | 43 | 51 |
| 30 | 51 | 61 | 72 |
| 40 | 91 | 108 | 128 |
| 50 | 140 | 165 | 195 |
| 60 | 204 | 240 | 283 |
| 80 | 364 | 429 | 508 |
| 100 | 559 | 659 | 780 |
其中,n表示样本量,α为显著性水平。表中的数值为临界值,若计算得到的检验统计量大于表中对应的临界值,则拒绝原假设。需要注意的是,这份临界值表仅适用于单侧检验。如果进行双侧检验,则需要将对应的α值除以2。
阅读全文