メイン mpsr.html   Last modified: Sep 01, 2009
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;CHARSET=EUC-JP">
<link rel="shortcut icon" href="../favicon.ico">
<title>JavaScript</title>
<script src="gxp.js">document.write("gxp.js ファイルが見つかりません??<br>")</script>
<script src="io.js">document.write("io.js ファイルが見つかりません??<br>")</script>

<script language="JavaScript">
<!--

var EXACT_LIMIT = 30
var CRITICAL_LIMIT = 64 

function  calc_stat(x1, pair, result)
{
  var statm, statp, order, absd, absd2, same, small, i, j, nbig

  statm = statp = nbig = 0
  for (i = 0; i < pair; i++) {
    absd = Math.abs(x1[i])
    same = small = 0
    for (j = 0; j < pair; j++) {
      absd2 = absd-Math.abs(x1[j])
      if (Math.abs(absd2) <= 1e-13) {
        same++
      }
      else if (absd2 > 0.0) {
        small++
      }
    }
    order = small+(same+1)*0.5
    if (x1[i] > 0) {
      statp += order
      nbig++
    }
    else {
      statm += order
    }
  }
  result[0] = Math.min(statp, statm)
  result[1] = nbig
}

function get_p(pair, stats)
{
  var i, n, sum, total, table

  table = new Array((pair+1)*pair/2+1)
  for (i = 1; i < (pair+1)*pair/2+1; i++) {
    table[i] = 0
  }
  table[0] = 1
  sum = 0
  for (n = 1; n <= pair; n++) {
    for (i = Math.min(sum, stats-n); i >= 0; i--) {
      table[i+n] += table[i]
    }
    sum += n
  }

  total = 0.0
  for (i = 0; i <= stats; i++) {
    total += table[i]
  }
  for (i = 1; i < pair; i++) {
    total *= 0.5
  }
  return (total < 1.0 ) ? total : 1.0
}

function conservative(stats)
{
  if (stats != Math.floor(stats)) {
    printf("注:この検定結果は保守的です\n")
  }
}

function mpsr(data, nc, pair)
{
  var nbig, p9, stats, x9, xnn, exactp, result, t1, t5, note

  // EXACT_LIMIT+1〜50対までは、簡約統計数値表84ページの表に基づく
  // 51〜CRITICAL_LIMIT対までは事前に計算された数値を追加した */
  var nt5, nt1
  nt5 = new Array(-1,-1,-1,-1,-1, 0, 2, 3, 5, 8,10,13,17,21,25,29,34,40,46,52,58,65,73,81,89,98,107,116,126,137,147,159,170,182,195,208,221,235,249,264,279,294,310,327,343,361,378,396,415,434,453,473,494,514,536,557,579,602,625,648,672,697,721,747)

  nt1 = new Array(-1,-1,-1,-1,-1,-1,-1, 0, 1, 3, 5, 7, 9,12,15,19,23,27,32,37,42,48,54,61,68,75,83,91,100,109,118,128,138,148,159,171,182,194,207,220,233,247,261,276,291,307,322,339,355,373,390,408,427,445,465,484,504,525,546,567,589,611,634,657)

  result = new Array(2)
  calc_stat(data, pair, result)
  stats = result[0]
  nbig = result[1]

  if (pair <= EXACT_LIMIT) {
    exactp = get_p(pair, Math.ceil(stats))
  }
  else if (pair <= CRITICAL_LIMIT) {
    t5 = nt5[pair-1]
    t1 = nt1[pair-1]
    if (stats <= t1) { 
      note = "危険率1%のもとで帰無仮説を棄却"
    }
    else if (stats <= t5) {
      note = "危険率5%のもとで帰無仮説を棄却"
    }
    else {
      note = "有意な差は認められない(帰無仮説を採択)"
    }
  }

  xnn = pair
  x9 = Math.abs(stats-xnn*(xnn+1.0)/4.0)/Math.sqrt(xnn*(xnn+1.0)*(2.0*xnn+1.0)/24.0)
  p9 = gxp(x9)*2.0

  printf("★ 符号順位検定\n\nデータ対の個数 …………… %i 対\n差が0でない対の個数 …… %i 対\n検定統計量 ………………… %g\n", nc, pair, stats)

  if (pair <= EXACT_LIMIT) {
    printf("\n正確な検定(両側検定)\n  P値 … %.5f\n", exactp)
    conservative(stats)
  }
  else if (pair <= CRITICAL_LIMIT) {
    printf("\n● 臨界値に基づく正確な検定(両側検定)\n1% … %.5f,  5% … %.5f\n検定結果: %s\n", t1, t5, note)
    conservative(stats)
  }

  if (pair > EXACT_LIMIT) { 
    printf("\n● 正規近似による検定(両側検定)\nZ値 … %.5f\nP値 … %.5f \n", x9, p9)
  }

}

function calc(data_string)
{
  var i, nc, data, pair
  var data1 = new Array()
  if ((data = getdata(data_string, 2)) != false) {
    nc = data.length
    pair = 0
    if (nc < 2) {
      printf("有効データ組数が1以下です\n")
    }
    else {
      for (i = 0; i < nc; i++) {
        if (Math.abs(data[i][0]-data[i][1]) > 1e-13) {
          data1[pair++] = data[i][0]-data[i][1]
        }
      }
    }
  }
  mpsr(data1, nc, pair)
  sep(50)
  printf("\n")
}
//-->
</script>
</head>

<body bgcolor="#ffffff">
<font size="+2"><b>対応のある場合の代表値の差の検定</b></font> <a  href="src/mpsr.html"><img src="png/src.png" width=35 height=11 alt="src" align=top></a>     Last modified: Jun 01, 2006<hr noshade><p>
<font color="#ff0000" size="+2">以下のプログラムのサポートは終了しました。自己責任でお使い下さい。</font>

<form name=Result>
<script language="JavaScript">
<!--
//-->JavaScript がサポートされていないブラウザですか?
</script>
<table><tr>
<td><input type="button" name="calcurate" value="計算開始" onClick="calc(this.form.data.value)">  </td>
<td><input type="button" name="clear" value="入力欄クリア" onClick="this.form.data.value=''">  </td>
<td><input type="button" name="clear" value="出力欄クリア" onClick="this.form.result.value=''">  </td>
<td><img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="exa/mpsr.html">使用法</a></td>
</tr></table>

<p>
<table><tr>
<td>入力欄<br><textarea name="data" ROWS=25 COLS=15></textarea></td>
<td>出力欄<br><textarea name="result" ROWS=25 COLS=80></textarea></td>
</tr>
<tr><td colspan=2>入力欄には,一行に一対の値を<a href="exa/kugirimoji.html">区切り文字</a>で区切って入力</td>
</tr></table>
</form>

<p><hr noshade>
<img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="../lecture/Average/mpsr-test.html">手法の解説</a><br>
<img src="../gra/button3.png" width=9 height=9 alt="・"> <A HREF="javascript:history.go(-1)">直前のページへ戻る</A>  <img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="../mail.html">E-mail to Shigenobu AOKI</a>
<p><center><IMG SRC="../gra/ume5.png" width=121 height=37 ALT="Made with Macintosh"></center>
</body>
</html>

サブ gxp.js   Last modified: Mar 25, 2004
サブ io.js   Last modified: Mar 25, 2004

・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh