这是一个用于计算Lepage D统计量的自定义函数,它返回的结果与NSM3::pLepage()
生成的D统计量不同:
LepageD <- function(x, y){
m=length(x); n=length(y); N=m+n
z=sort(c(x,y),index=TRUE)
rz=seq(1,(N-1)/2); rz=c(rz,(N+1)/2,rev(rz))
r=rz[sort(z$ix,index=TRUE)$ix]
C=sum(r[12:21])
rk=rank(c(x,y))
W=sum(rk[12:21])
Wstar=(W-n*(N+1)/2)/sqrt(m*n*(N+1)/12)
Cstar=(C-n*((N+1)^2)/(4*N))/sqrt(m*n*(N+1)*(3+N^2)/(48*(N^2)))
D=Wstar^2+Cstar^2
D
}
> LepageD(1:10, 2:12)
[1] 1.09216
> pLepage(1:10, 2:12)$obs.stat
[1] 1.112263
我的功能无法处理情况x
和y
具有相同的样本量。
> LepageD(1:10, 2:11)
[1] NA
我对自己错误的地方感到困惑。
答案 0 :(得分:0)
据我所知,问题出在这条线上:
r=rz[sort(z$ix,index=TRUE)$ix]
此处出现错误的原因是z(在测试用例中给出输出为NA)有20个元素。
因此,sort(z $ ix,index = TRUE)$ ix将输出生成为:
1 2 4 6 8 10 12 14 16 18 3 5 7 9 11 13 15 17 19 20
此外,向量rz的长度为19(而不是20)。
rz载体的内容:
[1] 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.5 9.0 8.0 7.0 6.0 5.0
[16] 4.0 3.0 2.0 1.0
因此,当我们尝试访问向量rz的第20个元素时,它会产生NA。
由于在进行求和时没有使用na.rm = T参数,因此C和W的值变为NA。
这导致Wstar,Cstar和最终D成为NA。