//To regress, simply build X matrix //(append column of 1's) using //buildxmatrix and build the Y //matrix using buildymatrix //(simply the transpose) //and run regress. //Regressions jStat.extend({ buildxmatrix: function buildxmatrix(){ //Parameters will be passed in as such //(array1,array2,array3,...) //as (x1,x2,x3,...) //needs to be (1,x1,x2,x3,...) var matrixRows = new Array(arguments.length); for(var i=0;i1){ result = []; for (i = 0; i < A.rows(); i++) { result[i] = []; for (j = 0; j < B.cols(); j++) { sum = 0; for (k = 0; k < A.cols(); k++) { sum += A.toArray()[i][k] * B.toArray()[k][j]; } result[i][j] = sum; } } return jStat(result); } result = []; for (i = 0; i < A.rows(); i++) { result[i] = []; for (j = 0; j < B.cols(); j++) { sum = 0; for (k = 0; k < A.cols(); k++) { sum += A.toArray()[i][k] * B.toArray()[j]; } result[i][j] = sum; } } return jStat(result); } }, //regress and regresst to be fixed regress: function regress(jMatX,jMatY){ //print("regressin!"); //print(jMatX.toArray()); var innerinv = jStat.xtranspxinv(jMatX); //print(innerinv); var xtransp = jMatX.transpose(); var next = jStat.matrixmult(jStat(innerinv),xtransp); return jStat.matrixmult(next,jMatY); }, regresst: function regresst(jMatX,jMatY,sides){ var beta = jStat.regress(jMatX,jMatY); var compile = {}; compile.anova = {}; var jMatYBar = jStat.jMatYBar(jMatX, beta); compile.yBar = jMatYBar; var yAverage = jMatY.mean(); compile.anova.residuals = jStat.residuals(jMatY, jMatYBar); compile.anova.ssr = jStat.ssr(jMatYBar, yAverage); compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1); compile.anova.sse = jStat.sse(jMatY, jMatYBar); compile.anova.mse = compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1); compile.anova.sst = jStat.sst(jMatY, yAverage); compile.anova.mst = compile.anova.sst / (jMatY.length - 1); compile.anova.r2 = 1 - (compile.anova.sse / compile.anova.sst); if (compile.anova.r2 < 0) compile.anova.r2 = 0; compile.anova.fratio = compile.anova.msr / compile.anova.mse; compile.anova.pvalue = jStat.anovaftest(compile.anova.fratio, jMatX[0].length - 1, jMatY.length - (jMatX[0].length - 1) - 1); compile.anova.rmse = Math.sqrt(compile.anova.mse); compile.anova.r2adj = 1 - (compile.anova.mse / compile.anova.mst); if (compile.anova.r2adj < 0) compile.anova.r2adj = 0; compile.stats = new Array(jMatX[0].length); var covar = jStat.xtranspxinv(jMatX); var sds, ts, ps; for(var i=0; i