Линейная корреляция остаточных значений 1 в MATLAB

У меня есть набор данных X и Y, к которым я хочу подобрать линию, получить значения R и R ^ 2, а также построить график остатков из разницы между значениями линии наилучшего соответствия и фактическими данными. Вот мой код MATLAB, который делает это:

maxx = max(X); minx = min(X);
fitx = minx:maxx / 1000:maxx;
coeff = polyfit(X,Y,1);
fity = polyval(coeff,fitx);

temp = corrcoef(X,Y); 
R = temp(2); R_squared = R^2;

ysub = polyval(coeff,X); 
residuals = Y - ysub;

subplot(1,2,1);
plot(X,Y,'+',fitx,fity,'r')
xlabel(['R = ' num2str(R) '; R^2 = ' num2str(R_squared)]);

subplot(1,2,2);
bar(residuals);

Итак, я протестировал его на том, что должен быть «идеальным» набором данных, который мог бы идеально соответствовать линии, и, конечно же, я получил значение R и R^2, равное 1, и мой первый график выглядит нормально. , но у меня остатки колеблются от 7000 до -3000. Разве мои остатки не должны быть равны 0, если мои значения R равны 1?

Что я здесь неправильно понимаю?

Вот пример набора данных:

X = [100 200 290 390 480 580 670 760 860 950]
Y = 1.0e+07 * [0.2429 0.4929 0.7183 0.9689 1.1946 1.4453 1.6711 1.8968 2.1477 2.3735]

person A Blue Shoe    schedule 11.12.2014    source источник


Ответы (1)


Было бы проще диагностировать с помощью выборочного набора данных.

Полагаю, проблема в том, что ваша первая строка должна быть:

maxx = max(X); minx = min(X);

То, как у вас это было minx=min(Y), искажает ваши значения fitx и fity

Редактировать:

Благодарим вас за отправку образцов данных. То, что вы видите сейчас, это только ошибки округления. Ваш R на самом деле не 1, он просто очень близок. Пытаться:

 R-1

Результат для ваших данных -1.0301e-07, что указывает на то, что корреляция не совсем идеальна. Если бы R было ровно 1, то вы правы, что остатки были бы равны нулю. Ваши остатки довольно малы, учитывая размер ваших данных (‹ 0,3% для первой точки и по крайней мере в 10 раз меньше для остальных) и согласуются с вашим измеренным коэффициентом корреляции.

Я думаю, что все работает правильно.

person Jim Quirk    schedule 11.12.2014
comment
Упс! Это просто ошибка в переводе. Мой фактический код начинается с минимального и максимального значений X. Я отредактировал вопрос, чтобы отразить это. - person A Blue Shoe; 11.12.2014
comment
Я также добавил образец набора данных к вопросу. - person A Blue Shoe; 11.12.2014