我有一个非常简单的 CSV 格式的数据系列,第一列是月份的开始,第二列是值:
2007-01-01,4216
2007-02-01,4119
2007-03-01,3518
依此类推,直到 2021-01-01。从图表上可以清楚地看出,从某个点开始有下降趋势,但它会上下波动。我想看看 a) 那是什么 b) 坡度有多陡。我尝试了线性回归(它是 PHP 但没关系),用行号替换月份,但显然我完全忘记了它是如何工作的(tbf 统计考试是 25 多年前......)因为结果是完全是废话:
<?php
$fp = fopen('x.csv', 'r');
fgetcsv($fp);
$i = 1;
while ($row = fgetcsv($fp)) {
$x[] = $i;
$x2[] = $i * $i;
$y[] = $row[1];
$y2[] = $row[1] * $row[1];
$xy[] = $i * $row[1];
$i++;
}
$n = count($x);
$r = [];
for ($i = 0; $i < $n; $i++) {
$xy_sum = array_sum(array_slice($xy, $i));
$x_sum = array_sum(array_slice($x, $i));
$y_sum = array_sum(array_slice($y, $i));
$x2_sum = array_sum(array_slice($x2, $i));
$y2_sum = array_sum(array_slice($y2, $i));
$slope = ($n * $xy_sum - $x_sum * $y_sum) / ($n * $x2_sum - $x_sum * $x_sum );
$r[strval($slope)] = (($n * $xy_sum - $x_sum * $y_sum) / sqrt(($n*$x2_sum - $x_sum * $x_sum) * ($n * $y2_sum - $y_sum * $y_sum)));
}
print_r($r);
值 r
不断增长,斜率从未变为负值,尽管它确实应该 - 2011-2016 年的数据从未低于 12000,有时高达 18000,此后很少达到 10000,也从未达到高于 11000,所以斜率肯定在某一时刻变成负值。
我做错了什么?