★ マン・ホイットニーのU検定の統計量の分布 ★

1380. マン・ホイットニーのU検定の統計量の分布 mitsuo 2003/12/14 (日) 20:06
└1383. Re: マン・ホイットニーのU検定の統計量の分布 青木繁伸 2003/12/14 (日) 21:30
 └1393. Re^2: マン・ホイットニーのU検定の統計量の分布 mitsuo 2003/12/14 (日) 23:54


1380. マン・ホイットニーのU検定の統計量の分布 mitsuo  2003/12/14 (日) 20:06
青木先生の「アルゴリズムのはなし」にあります「マン・ホイットニーのU検定の統計量の分布」の再帰呼び出しの方の awk プログラムを R に翻訳しようと思ったのですが,

function increment と function u と 配列p[] の関係がよく判らず頓挫いたしました。
特に配列p[]が大域変数になっていると思うのですが,これをRで現すところが理解できませんでした。

Rでは翻訳されたところをお示しいただけましたら幸いです。

     [このページのトップへ]


1383. Re: マン・ホイットニーのU検定の統計量の分布 青木繁伸  2003/12/14 (日) 21:30
大域変数の扱いと R の配列の添え字が 1 から始まることに注意が必要です。

以下のようになりました。
u.dist <- function(n1=10, n2=10)
{
    increment <- function(s, n)
    {
       for (i in 0:n) {
           p[s+i+1] <<- p[s+i+1]+1
       }
    }
    
    u <- function(n, m, begin, end)
    {
       if (n == 1 || m == 1) {
           increment(begin, end-begin)
       }
       else {
           u(n-1, m, begin, begin+(n-1)*m)
           u(n, m-1, end-n*(m-1), end)
       }
    }

   if (n1 > 10 && n2 > 10) {
       stop("死ぬほど時間がかかるかも知れません")
   }
   total <- choose(n1+n2, n2)
   p <- rep(0, n1*n2+1)
   u(n1, n2, 0, n1*n2)
   cat("n1 = ", n1, ", n2 = ", n2, "\n")
   
   cat (sprintf("%5s %5s %10s %10s %10s\n", "U", "freq.", "p", "cum p", "cum p2"))
   cum1 <- 0
   cum2 <- 1
   for (i in 0:(n1*n2)) {
       cp <- p[i+1]/total
       cum1 <- cum1+cp
       cat(sprintf("%5i %5i %10.5f %10.5f %10.5f\n", i, as.integer(p[i+1]), cp, cum1, cum2))
       cum2 <- cum2-cp
   }
}


> u.dist(5,3)
n1 =  5 , n2 =  3 
    U freq.          p      cum p     cum p2
    0     1    0.01786    0.01786    1.00000
    1     1    0.01786    0.03571    0.98214
    2     2    0.03571    0.07143    0.96429
    3     3    0.05357    0.12500    0.92857
    4     4    0.07143    0.19643    0.87500
    5     5    0.08929    0.28571    0.80357
    6     6    0.10714    0.39286    0.71429
    7     6    0.10714    0.50000    0.60714
    8     6    0.10714    0.60714    0.50000
    9     6    0.10714    0.71429    0.39286
   10     5    0.08929    0.80357    0.28571
   11     4    0.07143    0.87500    0.19643
   12     3    0.05357    0.92857    0.12500
   13     2    0.03571    0.96429    0.07143
   14     1    0.01786    0.98214    0.03571
   15     1    0.01786    1.00000    0.01786

     [このページのトップへ]


1393. Re^2: マン・ホイットニーのU検定の統計量の分布 mitsuo  2003/12/14 (日) 23:54
すばやいご指導ありがとうございます。

combination に相当する choose() が有ったり,<<- このような assignment が有るなど,知らない初心者でした。

勉強になりました。
ますます精進いたす所存です。
有難うございました。

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 026 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る