2013-11-16 3 views
0

Как я могу подогнать линию регрессии следующего участка?Установка линии регрессии в matlab

data = [1 72 134 3.2; 2 81 201 3.5; 3 60 156 7.1; 4 82 148 2.4; 5 75 176 1.2] 
    rate=data(:,2) 
    weight = data(:,3) 
    hour = data(:,4) 
    scatter3(rate,weight,hour,'filled') 

Спасибо заранее.

+0

Это трехмерный график, так что вы не может соответствовать регрессии * линии *. Какие переменные являются независимыми и которые зависят (т. Е. Какую переменную вы хотите предсказать из других?) –

+0

@ChrisTaylor Частота сердечных сокращений является зависимой переменной. – user2983722

ответ

2
data = [1 72 134 3.2; 2 81 201 3.5; 3 60 156 7.1; 4 82 148 2.4; 5 75 176 1.2] ; 
rate=data(:,2) ; 
weight = data(:,3) ; 
hour = data(:,4) ; 
% Regression 
A = [ones(size(weight)), weight , hour]; 
coeff = A \ rate ; % Thanks to Andreas! 
% Plot data points 
figure(1);clf; 
scatter3(weight,hour,rate,'filled') ;hold on 
% Plot plane 
weightLim = [min(weight) max(weight)]; 
hourLim = [min(hour) max(hour)]; 
[x1, x2] = meshgrid(weightLim,hourLim); 
Z = coeff(1) + coeff(2)*x1 + coeff(3)*x2 ; 
surf(x1,x2,Z) 
+0

это 'coeff' вместо' coef' во 2-й строке дна? – user2983722

+0

oops yes :) редактирование кода – Chris

+1

Обратите внимание, что явное вычисление псевдоинверса не рекомендуется в Matlab для целей точности (и, возможно, скорости). Фактически линия «coeff = (A '* A) \ A' * rate;» может быть заменена на «coeff = A \ rate»; оператор обратной косой черты просто сделает все правильно. –

0

Вам нужна линия регрессии?

Вот оценка наименьших квадратов:

y = rate; 
X = [data(:, 3:4) ones(numel(y), 1)]; 
[b,bint,r,rint,stats] = regress(y, X); 

или

b = (X'*X)^(-1)*X'*y 

Надеюсь, у вас есть более чем на пять очков ...

+0

Что такое Y в numel()? – user2983722

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