メイン kappa0.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="pxg.js">document.write("pxg.js ファイルが見つかりません??<br>")</script>
<script src="io.js">document.write("io.js ファイルが見つかりません??<br>")</script>

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

function zfi(w, i)
{
  var ww = (""+i).length
  ww = ww > w ? 0 : w-ww
  return "0000000000000".substring(0, ww)+i
}

function fname(str, i)
{
  return str+zfi(2, i+1)
}

function outmat1(r, n, str)
{
  var j, k
  printf("\n%s\n\n    ", str)
  for (j = 0; j < n; j++) {
    printf("%6s", fname("B", j))
  }
  printf("  合計\n")
  for (j = 0; j <= n; j++) {
    printf("%5s", j == n ? "合計" : fname("A", j))
    for (k = 0; k <= n; k++) {
      printf("%5i ", r[j][k])
    }
    printf("\n")
  }
}

function outmat2(r, n, str)
{
  var j, k
  printf("\n%s\n\n    ", str)
  for (j = 0; j < n; j++) {
    printf("%6s", fname("B", j))
  }
  printf("\n")
  for (j = 0; j < n; j++) {
    printf("%5s", fname("A", j))
    for (k = 0; k < n; k++) {
      printf("%5.1f ", r[j][k])
    }
    printf("\n")
  }
}

function cl(alpha, kappa, sigma_kappa)
{
  var z
  z = pxg(alpha/2)
  printf("カッパ統計量の %i%% 信頼区間 [%g, %g]\n(信頼区間の計算に使われた標準誤差 = %g)\n", 100*(1-alpha), kappa-z*sigma_kappa, kappa+z*sigma_kappa, sigma_kappa)
  
}

function outresults(kappa, sigma_kappa0, sigma_kappa)
{
  var p, z
  z = kappa/sigma_kappa0
  p = gxp(Math.abs(z))*2
  printf("\カッパ統計量 κ = %g 標準誤差 = %g\nκ= 0 の検定 z = %g P 値 = %g\n\n", kappa, sigma_kappa0, z, p)
  cl(0.05, kappa, sigma_kappa)
  cl(0.01, kappa, sigma_kappa)
}

function calc(data_string)
{
  var data, nr, nc, n, i, j, zf, e, po, pe, kappa, sigma_kappa, sigma_kappa0, qow, qoww, qew, qeww
  var r, w, wt

  if ((data = getdata(data_string, 0)) != false) {
    nr = data.length
    nc = data[0].length
    if (nr == nc) {
      wt = false
    }
    else if (nr == 2*nc) {
      wt = true
    }
    else {
      printf("正方行列でない場合には,別のプログラムを使ってください")
      return
    }
    r = makeMatrix(nc+1, nc+1)
    e = makeMatrix(nc, nc)
    for (i = 0; i <= nc; i++) {
      for (j = 0; j <= nc; j++) {
        r[i][j] = 0
      }
    }

    for (i = 0; i < nc; i++) {
      for (j = 0; j < nc; j++) {
        r[i][j] = data[i][j]
      }
    }
    for (i = 0; i < nc; i++) {
      for (j = 0; j < nc; j++) {
        r[i][nc] += r[i][j]
      }
      for (j = 0; j <= nc; j++) {
        r[nc][j] += r[i][j]
      }
    }
    outmat1(r, nc, "★ 入力された分割表 ★")

    if (wt == true) {
      zf = false
      w = makeMatrix(nc, nc)
      for (i = 0; i < nc; i++) {
        for (j = 0; j < nc; j++) {
          w[i][j] = data[nc+i][j]
        }
        if (w[i][i] != 0) {
          zf = true
          w[i][i] = 0
        }
      }
      outmat2(w, nc, "★ 入力された重み ★")
      if (zf == true) {
        printf("\n\n重みの対角成分に 0 以外の値が指定されていましたが,それは 0 に書き換えました。\n\n")
      }
    }

    e = makeMatrix(nc, nc)
    po = pe = 0
    n = r[nc][nc]
    for (i = 0; i < nc; i++) {
      for (j = 0; j < nc; j++) {
        e[i][j] = r[nc][j]*r[i][nc]/n
      }
      po += r[i][i]
      pe += e[i][i]
    }

    po /= n 
    pe /= n
    kappa = (po-pe)/(1-pe)
    sigma_kappa = Math.sqrt(po*(1-po)/n/Math.pow(1-pe, 2))
    sigma_kappa0 = Math.sqrt(pe/n/(1-pe))

    if (wt == true) {
      printf("\n★ 重み付けしない場合 ★\n\n")
    }
    outresults(kappa, sigma_kappa0, sigma_kappa)

    if (wt == true) {
      qow = qoww = qew = qeww = 0
      for (i = 0; i < nc; i++) {
        for (j = 0; j < nc; j++) {
          qow += w[i][j]*r[i][j]
          qoww += w[i][j]*w[i][j]*r[i][j]
          qew += w[i][j]*e[i][j]
          qeww += w[i][j]*w[i][j]*e[i][j]
        }
      }
      qow /= n
      qoww /= n
      qew /= n
      qeww /= n
      kappa = 1-qow/qew
      sigma_kappa = Math.sqrt((qoww-qow*qow)/(n*qew*qew))
      sigma_kappa0 = Math.sqrt((qeww-qew*qew)/(n*qew*qew))
      printf("\n★ 重み付けした場合 ★\n\n")
      outresults(kappa, sigma_kappa0, sigma_kappa)
    }
  }
  sep(40)
}
//-->
</script>
</head>

<body bgcolor="#ffffff">
<font size="+2"><b>κ統計量(正方行列の場合)</b></font> <a  href="src/kappa0.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>
<input type="button" name="calcurate" value="計算開始" onClick="calc(this.form.data.value)">  
<input type="button" name="clear" value="入力欄クリア" onClick="this.form.data.value=''">  
<input type="button" name="clear" value="出力欄クリア" onClick="this.form.result.value=''">  
<img src="../gra/button3.png" width=9 height=9 alt="・"> <A HREF="exa/kappa0.html">使用法</a><p>
入力欄(分割表(および,重み)を<a href="exa/kugirimoji.html">区切り文字</a>で区切って,行単位に入力)<br><textarea name="data" ROWS=10 COLS=80></textarea><p>
出力欄<br><textarea name="result" ROWS=30 COLS=80></textarea>
</form>

<p><hr noshade>
<img src="../gra/button3.png" width=9 height=9 alt="・"> <A HREF="../lecture/Kappa/kappa.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
サブ pxg.js   Last modified: Mar 25, 2004
サブ io.js   Last modified: Mar 25, 2004

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

Made with Macintosh