Chart with Weighted Linear Regression

Nohting more to say...

by Trever Shick

HTML

<script src="//fb.me/react-with-addons-0.12.0.js"></script>
<script src="//fb.me/JSXTransformer-0.12.0.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>
<div id="form"></div>
<div id="j"></div>
<script src="//fb.me/react-js-fiddle-integration.js"></script>
<script src="//rawgit.com/trevershick/6d9364085a1e566b2e18/raw/console.js"></script>
<script>
    // need to add this to my console.js script.
    console.warn =function() {};
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" charset="utf-8"></script>

JavaScript 1.7

function extendArray(arr,to) {
    return arr.concat(_.fill(new Array(to-arr.length), _.last(arr)));
}

function randomColor(){
    return "hsl(" + Math.random() * 360 + ",100%,50%)";
}


var FeatureGrid = React.createClass({
    getInitialState: function() {
        return {
            days: "10",
            plannedEstimates : "80,80,80,40,40,45,45",
            acceptedPoints : "4,8,12,16,20,24,28,32,36",
            weights: "0,0,0,0,1,1,1,5,5"
        };
      },
      componentDidMount: function() {
          this.calc();
      },
      handleChange: function(event) {
          var s = this.state;
          s[event.target.name] = event.target.value;
        this.setState(s);
      },
    calc: function() {
        calculate(this.state);
        return false;
    },
    render: function() {
        return (
            <form>
            Days = <input name="days" type="text" onChange={this.handleChange} value={this.state.days}/><br/>
            Planned Estimates = <input name="plannedEstimates" type="text" onChange={this.handleChange} value={this.state.plannedEstimates}/><br/>
            Accepted Points = <input name="acceptedPoints" type="text" onChange={this.handleChange} value={this.state.acceptedPoints}/><br/>
            Weights = <input name="weights" type="text" onChange={this.handleChange} value={this.state.weights}/>
            <button onClick={this.calc}/>
            </form>
        );
    }
});

function rerender() {
    React.render(<FeatureGrid  />, document.getElementById("form"));         
}



/* thanks https://gist.github.com/Tom-Alexander/7166606 */
function weightedLinearRegression(data, weights){
 	var sums = {xw: 0, x: 0, yw: 0, y: 0, a: 0, b: 0};
 	// compute the weighted averages
	for(var i = 0; i < data.length; i++){
		sums.xw += data[i][0] * weights[i];
		sums.yw += data[i][1] * weights[i];
		sums.x += data[i][0];
		sums.y += data[i][1];
	}
 
	weightedX = sums.xw / sums.x;
	weightedY = sums.yw / sums.y;
 
	// compute the...