Brunner-Munzel 検定 ッテ,もはや,参照する価値もない記事です。パチもん検定です。
lawstat や brunnermunzel パッケージの t 統計量を対象にするのはまずい
P(x<y)+0.5*P(x=y) を対象にすべし(そうすれば,実行時間も短くなるし)
なにより,正しい答えが出るアルゴリズムを決定してから,コンパイラ言語を使って速くする方策を探るべし
> x = c(1,2,1,1,1,1,1,1,1,1,2,4,1,1)
> y = c(3,3,4,3,1,2,3,1,1,5,4)
> n1 = length(x)
> n2 = length(y)
> xandy = c(x, y)
> library(lawstat)
> system.time({
+ bm = brunner.munzel.test(x, y)$statistic
+ foo = function(X) {
+ brunner.munzel.test(xandy[X], xandy[-X])$statistic
+ }
+ z = combn(n1 + n2, n1, foo)
+ print(mean(abs(z) >= abs(bm)))
+ })
[1] 0.008037645 この答えは正しくない
ユーザ システム 経過
1173.610 2.509 1177.962
> system.time({
+ f = function(X) {
+ return((mean(rank(c(xandy[X], xandy[-X]))[1:n1]) - w)/n2)
+ }
+ w = (n1 + 1)/2
+ s0 = f(1:n1)
+ s = combn(n1 + n2, n1, f)
+ print(mean(abs(s-0.5) >= abs(s0-0.5)))
+ })
[1] 0.006690223 正しいし,速い
ユーザ システム 経過
167.216 0.542 167.834
※コメント投稿者のブログIDはブログ作成者のみに通知されます