メイン 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