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...