2016-04-11 10 views
0

動作しません:私はplot(x, a*x + b);をコメントアウトするときホールドは私が最小二乗回帰をテストするには、以下のMATLABコードを書かれている適切

x = [1 2 3 4 5 6]; 
y = [1 4 9 16 25 36]; 

hold on 
scatter(x, y); 
hold on 
%Linear_regrassion 
    n = length(x); 
    a = (n*sum(x.*y) - sum(x)*sum(y))/n*sum(x.^2) - (sum(x))^2 
    b = mean(y) - a * mean(x) 
%end 
x = 1:8; 
plot(x, a*x + b); 

scatter機能が正常に動作します。それは次のようになります。 enter image description here

しかし、私は私の推定ラインをプロットするplot(x, a*x + b);を追加する場合、出力は次のようになります。 enter image description here

私の推測では、イムはhold on権利を使用していないということです。この問題を解決するにはどうすればよいですか?

+2

あなたの回帰係数を確認してください: 'A'は' 1.0706e + 04'で、 'B'は '-3.7458e + 04'である - これはあなたが表示さ青色の円のマーカーデータのために正しいこと、およびその代わりなければならないことはできませんあなたの回帰コードではなく、プロットに誤りがあります。 – mikkola

+2

あなたのy軸を見てください。それはあなたの問題です。 – MZimmerman6

+0

しかし確かに彼らはそうしています。 'x'と' y'の値を使って回帰係数 'a'と' b'を計算し、それを赤線をプロットするのに使います。 – mikkola

答えて

5

aの計算は間違っています。aの計算の分母にかっこが必要です。ただし、hold onはうまく機能します。

x = [1 2 3 4 5 6]; 
y = [1 4 9 16 25 36]; 

scatter(x, y,'*'); 
hold on 
%Linear_regrassion 
    n = length(x); 
    a = (n*sum(x.*y) - sum(x)*sum(y))/(n*sum(x.^2) - (sum(x))^2) 
    b = mean(y) - a * mean(x) 
%end 
x = 1:8; 
plot(x, a*x + b); 
+0

このコードと元のコードの違いは何ですか? – lino

+0

1つでは、エラーが発生します。その答えには、それがなぜ機能するのかについての詳細も不足しています。 – mikkola

+1

"hold on"は、plotコマンドを発行した後でなければなりません。また、 'scatter()'のようにプロットが埋め込まれたコマンドを使用してください。しかし、実際の「問題」は、2番目のプロットが最初のプロットよりもはるかに広いy値のスパンを持つため、プロットの外観に過ぎません。 – gariepy

関連する問題