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

<script language="JavaScript">
<!--
var epsinv = 1e-8

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

function vname(i)
{
  return "Var"+zfi(2, i+1)
}

function calc(data_string)
{
  var data, nc, nv, nc1, nv1, i, j, k, mean, variance, sd, ss, r, b, isw
  var b0, b1, stde, se, syy, sr, rhoy, seb0, seb, df2, temp2, p, stres, j1, pred, ve
  if ((data = getdata(data_string, 0)) == false) return
  nc = data.length
  nv = data[0].length

  if (nc < 2) {
    printf("ケース数が1以下です\n")
    return
  }
  else if (nc <= nv) {
    printf("データの組数は,独立変数の個数より2以上大きくないといけません\n")
    return
  }
  mean = new Array(nv)
  variance = new Array(nv)
  r = makeMatrix(nv, nv)
  sd = new Array(nv)
  ss = new Array(nv)

// Netscape communicator のバグ?配列ベクトルは初期化されていない
  for (i = 0; i < nv; i++) {
    mean[i] = 0
    for (j = 0; j < nv; j++) {
      r[i][j] = 0
    }
  }

  for (i = 0; i < nc; i++) {
    for (j = 0; j < nv; j++) {
      mean[j] += data[i][j]
    }
  }
  for (j = 0; j < nv; j++) {
    mean[j] /= nc
  }

  for (i = 0; i < nc; i++) {
    for (j = 0; j < nv; j++) {
      for (k = 0; k < nv; k++) {
        r[j][k] += (mean[j]-data[i][j])*(mean[k]-data[i][k])
      }
    }
  }
  isw = 0
  for (j = 0; j < nv; j++) {
    ss[j] = r[nv-1][j]
    variance[j] = r[j][j]/(nc-1)
    sd[j] = Math.sqrt(variance[j])
    if (variance[j] <= 0) isw = 1
  }
  if (isw == 1) {
    printf("分散が0になる変数があります\n")
    return
  }
  for (j = 0; j < nv; j++) {
    for (k = 0; k < nv; k++) {
      r[j][k] /= (nc-1)*sd[j]*sd[k]
    }
  }

  printf("★ 重回帰分析 ★\n\n")
  printf("有効データ組数 = %i\n\n", nc)
  printf("%5s%15s%15s%15s\n", "変数", "平均値", "不偏分散", "標準偏差")
  for (j = 0; j < nv; j++) {
    printf("%5s%15.7g%15.7g%15.7g\n", vname(j), mean[j], variance[j], sd[j])
  }
  printf("\n相関係数行列\n\n     ")
  for (j = 0; j < nv; j++) {
    printf("%8s", vname(j))
  }
  printf("\n")
  for (j = 0; j < nv; j++) {
    printf("%5s", vname(j))
    for (k = 0; k < nv; k++) {
      printf("%8.3f", r[j][k])
    }
    printf("\n")
  }

  b = new Array(nv)
  b1 = new Array(nv)
  stde = new Array(nv)
  nv1 = nv-1
  nc1 = nc-1
  if (inv(r, nv1, epsinv) == 0) {
    b0 = mean[nv1]
    se = syy = ss[nv1]
    for (i = 0; i < nv1; i++) {
      temp2 = 0
      for (j = 0; j < nv1; j++) {
        temp2 += r[i][j]*r[j][nv1]
      }
      b1[i] = temp2
      b[i] = temp2*sd[nv1]/sd[i]
      b0 -= b[i]*mean[i]
      se -= b[i]*ss[i]
    }
    sr = syy-se
    rhoy = se/syy
    seb0 = 0
    df2 = nc-nv1-1
     for (i = 0; i < nv1; i++) {
      seb = r[i][i]*rhoy/df2*(Math.pow(sd[nv1]/sd[i],2))
      seb0 += mean[i]*mean[i]*seb
      stde[i] = Math.sqrt(seb)
    }
    seb = 0
    for (i = 0; i < nv1; i++) {
      temp2 = 2*mean[i]/sd[i]
      for (j = i+1; j < nv1; j++) {
        seb += r[j][i]*temp2*mean[j]/sd[j]
      }
    }
    seb0 = Math.sqrt(seb0+(seb+nc1/nc)*sd[nv1]*sd[nv1]*rhoy/df2)
    printf("\n%6s%15s%15s%12s%12s%18s\n", "変数", "偏回帰係数", "標準誤差", "t値", "P値", "標準化偏回帰係数")
    for (i = 0; i < nv1; i++) {
      if (stde[i] == 0) {
        printf("偏回帰係数の標準誤差がゼロになります(従属変数が完全に予測できます)。このようなことは普通はありません。特殊なデータですね。意図して入力したデータですか?\n")
        return
      }  
      p = fxp(Math.pow(b[i]/stde[i], 2), 1, df2)
      printf("%6s%15.7g%15.7g%12.5f%12.5f%15.7g\n", vname(i), b[i], stde[i], Math.abs(b[i])/stde[i],  p, b1[i])
    }
    printf("%6s%15.7g%15.7g%12.5f%12.5f\n", "定数項", b0, seb0, b0/seb0, fxp(Math.pow(b0/seb0, 2), 1, df2))
    printf("                                          %s = %i\n\n", "t値の自由度", df2)
    ve = se/df2
    temp2 = sr*df2/nv1/se
    p = fxp(temp2, nv1, df2)
    printf("分散分析表\n\n")
    printf("%4s%15s%10s%15s%12s%12s\n", "要因", "平方和", "自由度", "平均平方", "F値", "P値")
    printf("%4s%15.7g%10i%15.7g%12.5f%12.5f\n", "回帰", sr, nv1, sr/nv1, temp2, p)
    printf("%4s%15.7g%10i%15.7g\n", "残差", se, df2, ve)
    printf("%4s%15.7g%10i%15.7g\n\n", "全体", syy, nc1, syy/nc1)
    printf("重相関係数 = %.5f    決定係数 = %.5f\n\n", Math.sqrt(1-rhoy), 1-rhoy)
    printf("予測結果\n\n%5s %12s %12s %12s %12s\n", "番号", "観察値", "予測値", "残差", "標準化残差")
    for (j = 0; j < nv-1; j++) {
      sd[j] *= Math.sqrt((nc-1)/nc)
    }
    for (i = 0; i < nc; i++) {
      pred = b0
      for (j = 0; j < nv-1; j++) {
        pred += b[j]*data[i][j]
        b1[j] = (data[i][j]-mean[j])/sd[j]
      }
      stres = 0
      for (j = 0; j < nv-1; j++) {
        for (j1 = 0; j1 < nv-1; j1++) {
          stres += b1[j]*b1[j1]*r[j1][j]
        }
      }
      stres = (data[i][j]-pred)/Math.sqrt(ve*(1-(stres+1)/nc))
      printf("%5i %12.6f %12.6f %12.6f %12.6f\n", i+1, data[i][j], pred, data[i][j]-pred, stres)
    }
  }
}
//-->
</script>
</head>

<body bgcolor="#ffffff">
<font size="+2"><b>重回帰分析</b></font> <a  href="src/mreg.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 nowrap><img src="../gra/button3.png" width=9 height=9 alt="・"> <a href="exa/mreg.html">使用法</a></td>
</tr></table>

<p>
入力欄<br><textarea name="data" ROWS=20 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/Regression/mreg/index.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>

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

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

Made with Macintosh