2012-02-27 4 views
2

Я получаю Предупреждение: X - это ранг, дефицитный с точностью до машины. Вдобавок, коэффициенты, которые я получаю, являются комплексными числами, хотя вход является реальным. Почему это происходит? Любая идея, как выйти из этого?Matlab - регрессия

+0

Можете ли вы показать код? –

+0

Можете ли вы показать нам, какую функцию вы вызываете? – trutheality

+0

[b, bint, r, rint, stats] = регресс (выход, вход); Этого достаточно? вывод и вход загружаются из файла более или менее. размер (выход) = 877835 1 размер (вход) = 877835 8 – Trup

ответ

5

Я полагаю, что ваш входной вектор имеет слишком много линейно зависимых столбцов. Сделайте rank(input) и посмотрите, что говорит результат. Если это меньше 8, вам нужно удалить некоторые из ваших независимых переменных, которые находятся в вашей матрице input. Кроме того, вы можете включить более подробную информацию о том, как вы пришли к вашей input матрицы, как:

input = [ fuel engine_speed fuel.*engine_speed ]; % or even 
input = [ x1 x2 x1.*x2 ]; 

Если у вас низкий ранг матрицы, попытаться найти зависимые столбцы. Вот быстрый способ, который я рекомендовал бы (я уверен, что кто-то знает лучше):

[R,jb] = rref(input); 
full_rank_input = input(:,jb); 
rank(input) 

Если вам матрицу с rank(full_rank_input) == num_columns.

+0

Я получил ранг = 4, поэтому очень маленький. Может быть, у меня слишком много точек данных? Каков наилучший способ решить эту проблему? – Trup

+2

У вас слишком много точек данных, у вас слишком много переменных X. Вам нужно выбрать, какие из них удалить. – prototoast

+0

Это действительно вопрос статистики (а не вопрос программирования) - может быть, это было бы лучше на статистической стеке Exchange? –

Смежные вопросы