2016-04-12 7 views
1

私は、ログログプロットの巨大な配列に最適な線形回帰直線を試しています。私は私のコードが自動的にy切片を設定するだろうと思っただろう私は、このグラフPython - ログプロットでベストフィットラインを翻訳する

enter image description here

を与える

import scipy.stats as stats 

x = subhalos['SubhaloVmax'] 
y = subhalos['SubhaloMass'] * 1e10/0.704 # in units of M_sol h^-1 
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(np.log(x), np.log(y)) 

predict_y = intercept + slope * x 
pred_error = y - predict_y 
degrees_of_freedom = len(x) - 2 
residual_std_error = np.sqrt(np.sum(pred_error**2)/degrees_of_freedom) 

idx = np.argsort(x) 

plt.plot(x,y,'k.') 
plt.plot(x[idx], predict_y[idx], 'b--') 
plt.xscale('log') 
plt.yscale('log') 
plt.xlabel('$V_{max}$ [km s$^{-1}$]') 
plt.ylabel('$M_{sub} $ [$M_\odot h^{-1}$]') 
plt.title(' $V_{max} - M_{sub}$ relation ') 

。しかし、それはそうではないようです。

どのようにすれば正しいインターセプトに回線を変換できますか?

+0

実際、あなたは[対数関数に一次関数を当てはめるべきではありません](http://bactra.org/weblog/491.html)。 – mtzl

+0

それに合わせて、もっと適切なのは何ですか? – DarthLazar

+0

@ MoritzLotzeの発言はあまりにも一般的だと思います。機能的な形を示唆する理論的モデルがあれば、それを使ってください。それが線形である場合、問題はありません。リンクのアドバイスは、理論的なモデルを持たず、モデルがどのような形を取るかを判断するための "探索的なフィッティング"を行っているときに便利です。その場合、フィッティング手順の限界に注意してください。線形フィットがうまくいくように見えても、その傾向は実際に線形であるとは限りません。しかし、それはこのサイトの範囲外です。 [stats.SE]、[physics.SE]、または[scicomp.SE]に関する詳しい情報があります。 –

答えて

0

あなたの予測は実際log(y) - predict_logyまたはy - exp(predict_logy)または何か他のものは、アプリケーションに依存してあなたがして残差を計算するかどうか

predict_logy = intercept + slope * logx 

として計算する必要があるので、あなたは、log(y)log(x)に回帰を計算しています。

+0

@ David Z、私はあなたの助言に従いました、これは残念なことに私のラインの傾きを変更しました。 – DarthLazar

+0

あなたが正しくやっていないことがありますが、もっと具体的な情報がなくても、何が誰にでもできるとは思えません。 –

+0

通常のx-y軸のログに値をプロットするのは簡単ですか? – DarthLazar