Matlab - стандартное отклонение декартовых точек

У меня есть массив декартовых точек (столбец 1 - значения x, а столбец 2 - значения y), например:

308 522
307 523
307 523
307 523
307 523
307 523
306 523

Как мне получить стандартное отклонение баллов? Это было бы по сравнению со средним, который был бы прямой линией. Точки не являются такой прямой линией, поэтому стандартное отклонение описывает, насколько волнистым или "неосновным" от прямой является отрезок линии.

Я очень ценю помощь.

2 ответа

Решение

Если вы уверены, что xy Данные описывают прямую линию, вы бы сделали следующее.

Нахождение наилучшей подходящей прямой равнозначно решению переопределенной линейной системы Ax = b в смысле наименьших квадратов, где

xy = [
308 522
307 523
307 523
307 523
307 523
307 523
306 523];

x_vals = xy(:,1);
y_vals = xy(:,2);

A = [x_vals ones(size(x_vals))];
b = y_vals;

Это можно сделать в Matlab следующим образом:

sol = A\b;

m = sol(1);
c = sol(2);

То, что мы сделали сейчас, это найти значения для m а также c так что линия описывается уравнением y = mx+c наилучшим образом соответствует данным, которые вы дали. Эта линия наилучшего соответствия не является идеальной, поэтому она содержит ошибки в отношении данных y:

errs = (m*x_vals + c) - y_vals;

Стандартное отклонение этих ошибок может быть вычислено так:

>> std(errs)
ans = 
    0.2440

Если вы хотите использовать перпендикулярное расстояние до линии (евклидово расстояние), вам нужно будет включить геометрический фактор:

errs = (m*x_vals + c) - y;
errs_perpendicular = errs * cos(atan(m));

Используя триггерные тождества, это может быть переработано в

errs_perpendicular = errs * 1/sqrt(1+m*m);

и, конечно же,

>> std(errs_perpendicular)
ans = 
    0.2182

Если вы не уверены, что прямая линия соответствует данным и / или вашему xy По сути, данные описывают облако точек вокруг некоторого общего центра, вы бы сделали следующее.

Найти центр масс (COM):

COM = mean(xy);

расстояния всех точек до COM:

dists = sqrt(sum(bsxfun(@minus, COM, xy).^2,2));

и его стандартное отклонение:

>> std(dists)
ans =  
    0.5059

Среднее значение набора двумерных значений - это другое двумерное значение, т. Е. Это точка, а не линия. Эта точка также известна как центр масс, я считаю.

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

Другие вопросы по тегам