我想使用拟合函数绘制数据:function f(x) = a+b*x**2
。在绘图后我得到了这个结果:
correlation matrix of the fit parameters:
m n
m 1.000
n -0.935 1.000
我的问题是:如何在gnuplot上找到相关系数?
答案 0 :(得分:10)
您可以在 gnuplot 中使用stats
命令,其语法类似于plot
命令:
stats "file.dat" using 2:(f($2)) name "A"
相关系数将存储在A_correlation
变量中。您可以随后使用它来绘制数据或使用set label
命令在屏幕上打印:
set label 1 sprintf("r = %4.2f",A_correlation) at graph 0.1, graph 0.85
您可以在gnuplot documentation中找到有关stats
命令的更多信息。
答案 1 :(得分:4)
虽然没有直接解决此问题的方法,但可以采用解决方法。我将使用python / numpy来说明它。首先,gnuplot脚本生成fit并用python脚本连接的部分:
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)
答案 2 :(得分:1)
如果您正在寻找一种计算correlation coefficient as defined on this page的方法,那么使用gnuplot就不行了,如Google Groups thread中所述。
还有许多其他工具可用于计算相关系数,例如: numpy
答案 3 :(得分:1)
由于您可能正在使用拟合函数,因此可以首先参考此link以获得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