gpt4 book ai didi

javascript - 在给定一组 x 和 y 坐标的情况下,获取 javascript 中的曲线方程

转载 作者:行者123 更新时间:2023-12-02 21:13:34 26 4
gpt4 key购买 nike

我创建了this图表简单地显示了自第一次死亡以来的死亡人数与天数。

我认为有趣的是显示每个国家/地区的变化率,但我正在努力如何使用数据来做到这一点。

下面是一个国家/地区的数据示例:

{
"gb": {
"data": [
// last 4 records
{
"x": 26,
"date": "31/03/2020",
"y": 1793,
"country": "GBR",
"delta": 382
},
{
"x": 27,
"date": "01/04/2020",
"y": 2357,
"country": "GBR",
"delta": 564
},
{
"x": 28,
"date": "02/04/2020",
"y": 2926,
"country": "GBR",
"delta": 569
},
{
"x": 29,
"date": "03/04/2020",
"y": 3611,
"country": "GBR",
"delta": 685
}
]
}

增量就是与前一天的差异。

我记得数学上的变化率为 dy/dx

我的第一步是得到给定的曲线方程。

我知道如何做其余的事情,但是如何在给定 JavaScript 中的一组坐标的情况下获得直线方程?

最佳答案

现实世界的数据是困惑的。找到一个完全适合您的数据的函数是很困难的(如果您这样做,新的数据点肯定不会适合您的函数)。您可以使用所谓的回归来近似您的数据。最简单的回归算法尝试找到最适合您的数据的直线(线性回归)。

An example of linear regression from https://en.wikipedia.org/wiki/Linear_regression

来自 https://en.wikipedia.org/wiki/Linear_regression 的线性回归示例。我们正在寻找红线的方程。

我的方法是找到一条适合您的数据的直线(使用线性回归)并使用其变化率作为数据的近似平均变化率。 (另请注意,不是直线的函数不具有恒定的变化率。也就是说,每个点的变化率都不同)。

现在病毒的传播并不完全遵循直线——它是指数级的。幸运的是,在对数刻度上绘制指数函数会产生一条直线。因此第一步是将数据从 (x, y) 转换为 (x, log y)。

exponential growth of coronavirus from worldometers.info logarithmic scale from worldometers.info

这里是来自 worldometers.info 的冠状病毒传播数据,转换为对数刻度后的数据。

现在我们的数据看起来或多或少像一条直线,我们可以使用线性回归来找到最适合数据的直线方程。

可以在这里找到一个简单的 JavaScript 方法:Linear Regression in Javascript

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;
}

该函数接受一个 y 坐标数组(在我们的例子中是原始坐标的 Math.log)和一个 x 坐标数组,并返回对象 lr。 lr['slope'] 包含线的变化率 - 这将是数据的近似平均变化率。

这至少是我的方法。更熟悉统计和机器学习的人当然可以提供更好的东西。希望对您有所帮助。

关于javascript - 在给定一组 x 和 y 坐标的情况下,获取 javascript 中的曲线方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61025253/

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