Оценка прямолинейности линии - PullRequest
3 голосов
/ 13 июля 2010

У меня есть набор данных, который определяет набор точек на двумерной декартовой плоскости. Теоретически, эти точки должны образовывать линию, но эта линия может быть совершенно горизонтальной, совершенно вертикальной и что-либо между ними.

Я хотел бы разработать алгоритм, который оценивает «прямолинейность» этой линии.

Например, следующие наборы данных будут совершенно прямыми:

 Y = 2/3x + 4
 X  |  Y
---------
-3  |  2
 0  |  4
 3  |  6

 Y = 4
 X  |  Y
---------
 1  |  4
 2  |  4
 3  |  4

 X = -1
 X  |  Y
---------
-1  |  7
-1  |  8
-1  |  9

Хотя этот не будет:

 X  |  Y
---------
-3  |  2
 0  |  5
 3  |  6

Я думаю, это будет работать, чтобы минимизировать сумму квадратов расстояний каждой точки от линии (обычно называемой линией регрессии), а затем определить среднее расстояние каждой точки до линии. Таким образом, идеально прямая линия будет иметь среднее расстояние 0.

Поскольку данные могут представлять собой вертикальную линию, насколько я понимаю, обычная линия регрессии наименьших квадратов не будет работать для этого набора данных. Перпендикулярная линия регрессии наименьших квадратов может сработать, но мне не повезло найти ее реализацию.

Я работаю в Excel 2010 VBA, но у меня должна быть возможность перевести любой разумный алгоритм.

Спасибо, PaulH


Причина, по которой такие вещи, как RSQ и LinEst, не будут работать для этого, заключается в том, что мне нужно универсальное измерение, которое включает вертикальные линии. Когда наклон линии приближается к бесконечности (вертикали), их RSQ приближается к 0, даже если линия совершенно прямая или почти такая.

-PaulH

Ответы [ 5 ]

3 голосов
/ 13 июля 2010

Звучит так, как будто вы ищете R 2 , коэффициент детерминизма .

По сути, вы берете остаточную сумму квадратов , разделить на сумму квадратов и вычесть из 1.

2 голосов
/ 13 июля 2010

Используйте Линейная регрессия . «Прямолинейность» линии - это значение R ^ 2.

Значение 0 для значения R ^ 2 подразумевает, что оно совершенно прямое. Увеличение значений подразумевает увеличение ошибки в регрессии, и, следовательно, линия становится все менее и менее "прямой"

1 голос
/ 13 июля 2010

Не могли бы вы попытаться поймать случай вертикальной линии, прежде чем перемещать регрессию наименьших квадратов? Если все значения x одинаковы, то линия совершенно прямая, нет необходимости вычислять значение r ^ 2.

0 голосов
/ 13 июля 2010

Грубая идея: 1. Перевести все координаты в абсолютные значения 2. Рассчитать tan текущей x / y 3. Рассчитать tan разницы в x / y между текущей x / y и следующей x / y 4. Разница в tan может датьотклонение хода

0 голосов
/ 13 июля 2010

Да, используйте обычный метод наименьших квадратов. Просто используйте функции Slope и Intercept на рабочем листе. Я ожидаю, что есть простой способ вызвать их из кода VBA.

Вот информация о VBA. для R-Squared: http://www.pcreview.co.uk/forums/thread-1009945.php

...