フィット関数を使用してデータをプロットしたい : function f(x) = a+b*x**2
. プロット後、次の結果が得られます。
correlation matrix of the fit parameters:
m n
m 1.000
n -0.935 1.000
私の質問は次のとおりです: gnuplot で相関係数を見つけるにはどうすればよいですか?
フィット関数を使用してデータをプロットしたい : function f(x) = a+b*x**2
. プロット後、次の結果が得られます。
correlation matrix of the fit parameters:
m n
m 1.000
n -0.935 1.000
私の質問は次のとおりです: gnuplot で相関係数を見つけるにはどうすればよいですか?
この問題に対する直接的な解決策はありませんが、回避策は可能です。python/numpyを使用して説明します。まず、フィットを生成してPythonスクリプトに接続するgnuplotスクリプトの部分:
file = "my_data.tsv"
f(x)=a+b*(x)
fit f(x) file using 2:3 via a,b
r = system(sprintf("python correlation.py %s",file))
ti = sprintf("y = %.2f + %.2fx (r = %s)", a, b, r)
plot \
file using 2:3 notitle,\
f(x) title ti
これにより、correlation.pyが実行され、相関関係'r'が文字列形式で取得されます。'r'を使用して、フィットラインのタイトルを生成します。次に、correlation.py:
from numpy import genfromtxt
from numpy import corrcoef
import sys
data = genfromtxt(sys.argv[1], delimiter='\t')
r = corrcoef(data[1:,1],data[1:,2])[0,1]
print("%.3f" % r).lstrip('0')
ここでは、最初の行がヘッダー行であると想定されています。さらに、相関を計算する列がnrにハードコードされています。もちろん、両方の設定を変更して引数に変えることもできます。
結果として得られるフィットラインのタイトルは(個人的な例として)次のとおりです。
y = 2.15 + 1.58x (r = .592)
おそらくフィット関数を使用しているため、最初にこのリンクを参照して R2 値に到達できます。このリンクは、FIT_WSSR、FIT_NDF などの特定の既存の変数を使用して R2 値を計算します。R2 のコードは次のように記述されています。
SST = FIT_WSSR/(FIT_NDF+1)
SSE=FIT_WSSR/(FIT_NDF)
SSR=SST-SSE
R2=SSR/SST
次のステップは、グラフに R^2 値を表示することです。次のコードを使用して実現できます。
set label 1 sprintf("r = %f",R2) at graph 0.7, graph 0.7
このページで定義されている相関係数を計算する方法を探している場合、このGoogle グループのスレッドで説明されているように gnuplot を使用することはできません。
numpyなど、相関係数を計算するためのツールは他にもたくさんあります。