gnuplot的相关系数

时间:2012-12-19 17:05:02

标签: gnuplot regression correlation

我想使用拟合函数绘制数据:function f(x) = a+b*x**2。在绘图后我得到了这个结果:

correlation matrix of the fit parameters:

               m      n      
m               1.000 
n              -0.935  1.000 

我的问题是:如何在gnuplot上找到相关系数?

4 个答案:

答案 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