// formatter function for equation text var eqtext = function(coefs) { if (coefs[0].m < 0) { return( "$\\widehat{Y} = " + d3.round(coefs[0].b,2) + " - " + Math.abs(d3.round(coefs[0].m,2)) + " \\cdot X$" ); } else { return( "$\\widehat{Y} = " + d3.round(coefs[0].b,2) + " + " + d3.round(coefs[0].m,2) + " \\cdot X$" ); } }; var SSR = function(data) { var xValuesE = data.map(function(d){return x.invert(d.x);}); var yValuesE = data.map(function(d){return y.invert(d.y);}); var lsCoefE = [LeastSquares(xValuesE, yValuesE)]; var dataE = [xValuesE, yValuesE]; var yhat = dataE[0].map(function(d) {return lsCoefE[0].b + d * lsCoefE[0].m; } ); var uhat = yhat.map(function(d,i) {return d - dataE[1][i]; }); var SSR = d3.sum( uhat.map(function(d) { return d*d; }) ); return SSR; } var R2 = function(data) { var yValuesE = data.map(function(d){return y.invert(d.y);}); var ssr = SSR(data); var tss = d3.sum(yValuesE.map(function(d) { return (d - d3.mean(yValuesE))*(d - d3.mean(yValuesE)); })); return 1-ssr/tss; } var cor = function(data) { var xValuesE = data.map(function(d){return x.invert(d.x);}); var yValuesE = data.map(function(d){return y.invert(d.y);}); var meanx = d3.mean(xValuesE); var meany = d3.mean(yValuesE); var sdx = d3.deviation(xValuesE); var sdy = d3.deviation(yValuesE); var temp = []; for (var i=0; i r(200)){ return angle(i) + Math.PI*(3/2); } else { return fullangle(i); } }) svg.append("path").datum(d3.range(points)) .attr("class", "line") .attr("d", line) .attr("fill", 'none') .attr("transform", "translate(" + (d.x0) + ", " + (d.y0) + ")") .style("stroke-dasharray", ("1, 1")) .style("stroke", function(e){ if(d.y0-d.y1 > -r(200) && d.y0 - d.y1 < r(200)){ return "green"; } else { return "red"; } }) .attr("class", "halfcirc"); } svg.selectAll('path.resline').remove(); svg.selectAll('path.halfcirc').remove(); var selection = svg.selectAll('.resline').data(resids) selection.enter().append('path').transition() .attr("d", function(d){ if(d.y0-d.y1 < -r(200)) { return lineFunction([{"x": d.x0, "y": d.y0 + r(200)},{"x": d.x1, "y": d.y1}]); } else if (d.y0 - d.y1 > r(200)){ return lineFunction([{"x": d.x0, "y": d.y0 - r(200)},{"x": d.x1, "y": d.y1}]); } }) .attr("stroke-width", 1) .attr("stroke", "red") .attr('class', 'resline') selection.exit().remove() selection.each(function(d){ halfcircles(d); }) return resids; }