var vals1 = 1*0;
var N = 1*0;
var M = 1*0;
var X = new Array();		
var Y = new Array();
var rbx = new Array();

function tilt(Y){
this.length = Y+1;
for(var i=0; i<= Y+1; i++){this[i]=1*0}
}<!--end.f.tilt-->

function tilt2(X,Y){
this.length = X+1;
for(var i=0; i<= X+1; i++){this[i] = new tilt(Y)}
}<!--end.f.tilt2-->

function inv(A) {
var lgth = A.length - 1;
var xy = new tilt2(lgth, lgth);  // inverse
var d = determine(A);
if (d==0) alert("Maciez jest pojedyncza.\nProsze sprawdzic dane.");
else
{
for (var i=1; i<= lgth; i++)
{
for (var j=1; j<= lgth; j++)
{
subM = new tilt2(lgth-1,lgth-1);
var col = 1*0;
var row = 1*0;
for (var jz = 1; jz<= lgth-1; jz++)
{
if(jz<j){col=jz}else{col=jz+1}
for (var kz = 1; kz<= lgth-1; kz++)
{
if(kz<i){row = kz}else{row=kz+1}
subM[kz][jz] = A[row][col];
}<!--end.for.kz-->
}<!--end.for.jz-->
// inverse entry
var temp = (i+j)/2;
if (temp == Math.round(temp)){mult = 1}else{mult = -1*1}
xy[j][i] =  determine(subM)*mult/d; 
}<!--end.for.j-->
}<!--end.for.i-->
}<!--end.if/else-->
return(xy);
}<!--end.f.inv-->

function determine(A)
{
var lgth = A.length-1;
if(lgth==1*1){return (A[1][1])}
else
{
var sum = 1*0;
var mult = 1*1;
for(var i=1; i<= lgth; i++)
{
if(A[1][i]!=1*0)
{
subM = new tilt2(lgth-1,lgth-1);
var col;
for(var jz=1; jz <= lgth-1; jz++)
{
if(jz<i){col=jz}else{col=jz+1*1}
for(var kz=1; kz<=lgth-1; kz++){subM[kz][jz] = A[kz+1][col]}
}<!--end.for.jz-->
sum = sum+A[1][i]*mult*determine(subM);
}<!--end.if-->
mult = -mult*1;
}<!--end.for.i-->
}<!--end.if/else-->
return(sum);
}<!--end.f.determine()-->


function jug(tip, k)
{
if (k==0){return (tip)}
else
{
var k2 = 1;
var num = k;
if(num<0){num=-num}
for (var i=1; i<= num; i++){k2=k2*10}
}
if(k>0){return(k2*tip)}else{return(tip/k2)}
}<!--end.f.jug-->


function regress()
{
var sum = 1*0;
xy = new tilt(M+1);
xx = new tilt2(M+1, M+1);
invxx = new tilt2(M+1, M+1);
var tic = M+1;

for (i=1; i<=  N; i++){X[0][i]=1}
for (i=1; i<= M+1; i++)
{
sum = 0;
for (k=1; k <=N; k++) sum+= X[i-1][k]*Y[k];
xy[i] = sum*1;
for (j=1; j<= M+1; j++)
{ 
sum = 1*0;
for (k = 1; k <= N; k++){sum+= X[i-1][k]*X[j-1][k]}
xx[i][j] = sum;
}
}<!--end.for.i-->
invxx = inv(xx);	
for (k = 0; k <= M; k++)
{
sum = 0;
for (j = 1; j <= M+1; j++)
{
sum+=invxx[k+1][j]*xy[j];
}<!--end.for.j-->

rbx[k] = sum;
}<!--end.for.k-->
}<!--end.f.regress-->


function calc()
{
var time1 = new Date();
time1 = time1.getTime();
vals1 = document.inp.elements[0].value;
if(vals1.indexOf("\r")>-1){xjz="\r"}else{xjz="\n"}
vals1 = vals1.split(xjz);
N = vals1.length;
if(vals1[N-1]==""){N=N-1}
if(vals1[N-1]==""){N=N-1}
if(vals1[N-1]==""){N=N-1}
for(var i=0; i<N; i++) {vals1[i]=vals1[i].split("\t")}
M = vals1[0].length-1;

<!--X is transpose of vals1 matrix-->
var X1 = new Array();
for(var i=0; i<M+2; i++)
{
X1[i] = "";
for(var j=0; j<N+2; j++){X1[i]+="\t"}
X1[i] = X1[i].split("\t");
}<!--end.for.i-->

X = X1;

var coe = new Array();
for(var i=0; i<M+1; i++){coe[i] = 1*0}
rbx = coe;

for(var i=1; i<M+2; i++){for(var j=0; j<N; j++){X[i][j] = vals1[j][i-1]*1}}

var Xhold = new Array();
for(var i=0; i<M+2; i++)
{
Xhold[i] = "";
for(var j=0; j<N+2; j++){Xhold[i]+="\t"}
Xhold[i] = Xhold[i].split("\t");
}<!--end.for.i-->

for(var i=0; i<M+2; i++){for(var j=0; j<N+2; j++){Xhold[i][j]=1*0}}

for(var i=1; i<M+2; i++){for(var j=0; j<N+1; j++){Xhold[i][j+1] = X[i][j]}}
X = Xhold;
Y = X[M+1];	

regress();

var k = M+1*1;
var n = N*1;
var r = new Array();
var cx = new Array();
var ssx = new Array();
var sdx = new Array();

var sum = new Array();
var sumsq = new Array();
for(var j=0; j<k; j++){sum[j]=1*0;sumsq[j]=1*0}

for(var i=0; i<n; i++) 
{
for(var j=0; j<k; j++) 
{
sum[j]+=vals1[i][j]*1;
sumsq[j]+=vals1[i][j]*vals1[i][j];
}<!--end.for.j(k)-->
}<!--end.for.i(n)-->

var cp = new Array();
for(var j=0; j<k; j++){cp[j]=""}
for(var i=0; i<k; i++) {cp[i]+="\t"}
for(var i=0; i<k; i++) {cp[i]=cp[i].split("\t")}

for(var i=0; i<k; i++){for(var j=0; j<k; j++){cp[i][j] = 1*0}}

var rx = new Array();
for(var j=0; j<k-1; j++){rx[j]=""}
for(var i=0; i<k+k-2; i++) {rx[i]+="\t"}
for(var i=0; i<k-1; i++) {rx[i]=rx[i].split("\t")}

for(var i=0; i<k; i++){for(var j=0; j<k+k-1; j++){rx[i][j] = 1*1}}

for(var i=0; i<k; i++) 
{
for(var j=0; j<k; j++) 
{
for(var z=0; z<n; z++){cp[i][j]+=vals1[z][i]*vals1[z][j]}
}<!--end.j-->
}<!--end.i-->

for(var i=0; i<k; i++) 
{
for(var j=0; j<k; j++) 
{
cp[i][j] = cp[i][j]-((sum[i]*sum[j])/n);
}<!--end.j-->
}<!--end.i-->

for(var i=0; i<k; i++) 
{
ssx[i] = sumsq[i]-((sum[i]*sum[i])/n);
sdx[i]= Math.sqrt(ssx[i]/n);
}<!--end.i-->

var sd_y = sdx[k-1];

for(var j=0; j<k; j++){r[j]=""}
for(var i=0; i<k; i++) {r[i]+="\t"}
for(var i=0; i<k; i++) {r[i]=r[i].split("\t")}

for(var i=0; i<k; i++) 
{
for(var j=0; j<k; j++) 
{
r[i][j] = cp[i][j]/Math.sqrt(ssx[i]*ssx[j]);
if(i<k-1){rx[i][j] = r[i][j]}
}<!--end.j-->
}<!--end.i-->

var time2 = new Date();
time2 = time2.getTime();
time1 = rnd2((time2-time1)/1000);

var tag = new Array(M);
for(var j=0; j<M; j++){tag[j]="X"+(j+1)*1}
tag[M] = "Y";

var BB = new Array(M);
for(var i=0; i<M; i++) {BB[i] = (sdx[i]*coe[i+1])/sd_y}

var BR = new Array(M);
for(var i=0; i<M; i++) {BR[i] = BB[i]*r[i][M]}

var rsq = 1*0;
for(var i=0; i<M; i++) {rsq+=BR[i]*1}

var adjr = (N-1)/(N-M-1);
adjr = (1-rsq)*adjr;
adjr = rnd4(1-adjr);
if(adjr<0){adjr=1*0}

var sem = sd_y*Math.sqrt(N/(N-1))*Math.sqrt(1-rsq);

var dftot = N-1;
var sstot = rnd4(ssx[M]*1);
var ssreg = rnd4(sstot*rsq);
var dfreg = M;
var msreg = rnd4(ssreg/dfreg);
var ssres = rnd4(sstot-ssreg);
var dfres = dftot-dfreg;
var msres = rnd4(ssres/dfres);
var f = rnd2(msreg/msres);
var p = 1*0;

pj = 1*0;
fx = f*1;
df1 = dfreg*1;
df2 = dfres*1;
p1 = Fcall(Fspin(eval(fx),eval(df1),eval(df2)));
p1 = rnd4(p1);
if(p1<=.05||p1>1){pj=1*1}
if(p1<.0001||p1>1){p1="<.0001"}
p = p1;

var nom = "";
if(document.nomen.elements[0].value!="")
{
nom = document.nomen.elements[0].value.split(xjz);
}

document.open();
document.write('<BODY BGCOLOR="#FFFFFF"><font face="verdana, arial"><FONT COLOR="010785"><B>VassarStats: Multiple Regression<BR>&nbsp;&nbsp;Number of variables = '+M+' X and 1 Y<BR>&nbsp;&nbsp;Observations per variable ='+N+'</B><BR><FONT SIZE=-1><FONT COLOR="#000000">Computation time: '+time1+' seconds</FONT><HR><BR><B>Correlation Matrix<FONT COLOR="#FFFFFF"><SUB>2</SUB></FONT></B></FONT></font><BR>');

document.write('<TABLE BORDER=1 CELLSPACING="1" CELLPADDING="2"><TR align=center><TD>');

for(var i=0; i<M+1; i++) 
{
document.write('<TD bgcolor="#EEEEEE"><font face="verdana, arial"><FONT SIZE=-1><B>'+tag[i]+'</B><BR>');
}<!--end.i-->

for(var i=0; i<M+1; i++)
{
document.write('<TR align=center><TD bgcolor="#EEEEEE"><font face="verdana, arial"><FONT SIZE=-1><B>'+tag[i]+'</B><BR>');
for(var j=0; j<M+1; j++) 
{
document.write('<TD><font face="verdana, arial"><FONT SIZE=-1>'+rnd3(r[i][j])+'<BR>');
}<!--end.j-->
}<!--end.i-->
document.write('</TABLE><BR>')

document.write('<FONT COLOR="010785"><FONT SIZE=-1><B>Regression Coefficients:</B></FONT></font><BR><FONT SIZE=-1><IMG SRC="white.gif" WIDTH="1" HEIGHT="15"><NOBR>The multiple regression equation is of the general form<BR><IMG SRC="white.gif" WIDTH="1" HEIGHT="15">&nbsp;&nbsp;Y = a + b<SUB>1</SUB>X<SUB>1</SUB> + b<SUB>2</SUB>X<SUB>2</SUB> + &#183;&#183;&#183; + b<SUB>k</SUB>X<SUB>k</SUB><BR>where <B>a</B> is a starting-point constant analogous to the intercept<FONT COLOR="#FFFFFF"><SUB>2</SUB></FONT><BR>in a simple two-variable regression, and<B> b<SUB>1</SUB></B>, <B>b<SUB>2</SUB></B>, etc., are the<BR>unstandardized regression weights for X<SUB>1</SUB>, X<SUB>2</SUB>, etc., each analogous<BR>to the slope in a simple two-variable regression. In the present<FONT COLOR="#FFFFFF"><SUB>2</SUB></FONT><BR>analysis, <B>a</B> = '+rnd4(coe[0])+' and the values of <B>b</B> are as indicated below.<BR>The<IMG SRC="white.gif" WIDTH="1" HEIGHT="15"> values listed as <B>B</B> are the standardized regression weights.<FONT COLOR="#FFFFFF"><SUB>2</SUB></FONT></NOBR><BR>');

document.write('<TABLE BORDER=1 CELLSPACING="1" CELLPADDING="2"><TR align=center><TD><TD width=50><font face="verdana, arial"><FONT SIZE=-1><B>b</B></FONT><BR><TD width=50><font face="verdana, arial"><FONT SIZE=-1><B>B</B></FONT><BR><TD width=50><font face="verdana, arial"><FONT SIZE=-1><B>B x r<SUB>xy</SUB></B></FONT><BR>');

for(var i=0; i<M; i++) 
{
document.write('<TR align=center><TD bgcolor="#EEEEEE"><font face="verdana, arial"><FONT SIZE=-1><B>'+tag[i]+'</B><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+rnd4(coe[i+1])+'<BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+rnd4(BB[i])+'<BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+rnd4(BR[i])+'<BR></font>');
}<!--end.i-->
document.write('<TR align=right><TD colspan=4><font face="verdana, arial"><FONT SIZE=-1>Multiple <B>R<SUP>2</SUP></B> = '+rnd4(rsq)+'&nbsp;&nbsp;<BR></FONT><TR align=right><TD colspan=4 nowrap><font face="verdana, arial"><FONT SIZE=-1>Adjusted Multiple <B>R<SUP>2</SUP></B> = '+rnd4(adjr)+'&nbsp;&nbsp;<BR></FONT></TABLE>');

document.write('<TABLE BORDER=1 CELLSPACING="1" CELLPADDING="4"><TR><TD nowrap><font face="verdana, arial"><FONT SIZE=-1>Standard Error of<BR>Multiple Estimate<BR></FONT><TD><font face="verdana, arial"><FONT SIZE=-1>'+rnd4(sem)+'</FONT><BR></TABLE><BR>');

document.write('<FONT COLOR="010785"><B>ANOVA Table<FONT COLOR="#FFFFFF"><SUB>2</SUB></FONT></B></FONT><BR><TABLE BORDER=1 CELLSPACING="1" CELLPADDING="2"><TR align=center><TD><font face="verdana, arial"><FONT SIZE=-1><B>Source</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1><B>SS</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1><B>&nbsp;&nbsp;&nbsp;df&nbsp;&nbsp;&nbsp;</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1><B>MS</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1><B>F</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1><B>P</B></FONT><BR><TR align=center><TD align=right><font face="verdana, arial"><FONT SIZE=-1><B>Regression</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+ssreg+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+dfreg+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+msreg+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+f+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+p+'</FONT><BR><TR align=center><TD align=right><font face="verdana, arial"><FONT SIZE=-1><B>Residual</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+ssres+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+dfres+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+msres+'</FONT><BR><TR align=center><TD align=right><font face="verdana, arial"><FONT SIZE=-1><B>Total</B></FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+sstot+'</FONT><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+dftot+'</FONT><BR></TABLE><BR><BR>');


if(nom!="")
{
document.write('<FONT SIZE=-1>Names of Variables:</FONT><BR><TABLE BORDER=0 CELLSPACING="1" CELLPADDING="2">');
for(var i=0; i<M+1; i++) 
{
document.write('<TR valign=top><TD><TD align=right><font face="verdana, arial"><FONT SIZE=-1>'+tag[i]+'.</font><BR><TD><font face="verdana, arial"><FONT SIZE=-1>'+nom[i]+'</font><BR>');
}<!--end.i-->
document.write('</TABLE>');
}<!--end.if-->


document.close();

}<!--end.f.calc-->
