gpt4 book ai didi

javascript - D3.js 线性回归

转载 作者:数据小太阳 更新时间:2023-10-29 05:05:56 39 4
gpt4 key购买 nike

我搜索了有关构建线性回归的一些帮助,并在此处找到了一些示例:
nonlinear regression function
还有一些应该涵盖这个的 js 库,但不幸的是我无法让它们正常工作:
simple-statistics.js还有这个:regression.js
使用 regression.js 我能够得到该行的 mb 值,所以我可以使用 y = m* x + b 绘制我的图形线性回归后的线,但无法将这些值应用于线生成器,我尝试的代码如下:

d3.csv("typeStatsTom.csv", function (error, dataset) {
//Here I plot other stuff, setup the x & y scale correctly etc.
//Then to plot the line:

var data = [x.domain(), y.domain()];
var result = regression('linear', data);
console.log(result)
console.log(result.equation[0]);
var linereg = d3.svg.line()
.x(function (d) { return x(d.Ascendenti); })
.y(function (d) { return y((result.equation[0] * d.Ascendenti) + result.equation[1]); });
var reglinepath = svg.append("path")
.attr("class", "line")
.attr("d", linereg(dataset))
.attr("fill", "none")
.attr("stroke", "#386cb0")
.attr("stroke-width", 1 + "px");

结果在控制台中的值如下:

    Object
equation: Array[2]
0: 1.8909425770308126
1: 0.042557422969139225
length: 2
__proto__: Array[0]
points: Array[2]
string: "y = 1.89x + 0.04"
__proto__: Object

据我在控制台中得知,我应该正确设置 xy 值,但当然结果 svg 中的路径没有显示(但是画了),所以我不知道该怎么办了。
非常感谢任何帮助,即使是涉及 simple.statistics.js 库的解决方案也会有所帮助!
谢谢!

最佳答案

我使用找到的以下代码使其工作 here :

   function linearRegression(y,x){

var lr = {};
var n = y.length;
var sum_x = 0;
var sum_y = 0;
var sum_xy = 0;
var sum_xx = 0;
var sum_yy = 0;

for (var i = 0; i < y.length; i++) {

sum_x += x[i];
sum_y += y[i];
sum_xy += (x[i]*y[i]);
sum_xx += (x[i]*x[i]);
sum_yy += (y[i]*y[i]);
}

lr['slope'] = (n * sum_xy - sum_x * sum_y) / (n*sum_xx - sum_x * sum_x);
lr['intercept'] = (sum_y - lr.slope * sum_x)/n;
lr['r2'] = Math.pow((n*sum_xy - sum_x*sum_y)/Math.sqrt((n*sum_xx-sum_x*sum_x)*(n*sum_yy-sum_y*sum_y)),2);

return lr;

};

var yval = dataset.map(function (d) { return parseFloat(d.xHeight); });
var xval = dataset.map(function (d) { return parseFloat(d.Ascendenti); });


var lr = linearRegression(yval,xval);
// now you have:
// lr.slope
// lr.intercept
// lr.r2
console.log(lr);

然后绘制一条线:

var max = d3.max(dataset, function (d) { return d.OvershootingSuperiore; });
var myLine = svg.append("svg:line")
.attr("x1", x(0))
.attr("y1", y(lr.intercept))
.attr("x2", x(max))
.attr("y2", y( (max * lr.slope) + lr.intercept ))
.style("stroke", "black");

使用我找到的代码 here

关于javascript - D3.js 线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507536/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com