5

我想使用拟合函数绘制数据: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

4 回答 4

16

您可以在gnuplotstats中使用该命令,其语法类似于该命令:plot

stats "file.dat" using 2:(f($2)) name "A"

相关系数将存储在A_correlation 变量中。(没有名称规范,它将是STATS_correlation。)您可以随后使用它来绘制数据或使用以下set label命令在屏幕上打印:

set label 1 sprintf("r = %4.2f",A_correlation) at graph 0.1, graph 0.85

您可以在gnuplot 文档中找到有关该stats命令的更多信息。

于 2013-08-04T10:29:30.383 回答
4

尽管没有直接解决此问题的方法,但有一种变通方法是可能的。我将使用 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

这将运行相关性.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。1 和 2。当然,这两个设置都可以更改并转换为参数。

拟合线的结果标题是(作为个人示例):

y = 2.15 + 1.58x (r = .592)
于 2013-03-23T18:00:12.987 回答
3

由于您可能正在使用 fit 函数,因此您可以首先参考此链接以得出 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

于 2018-07-19T06:22:28.373 回答
1

如果您正在寻找一种方法来计算此页面上定义的相关系数,那么您使用 gnuplot 会很不走运,如此Google Groups 线程中所述。

还有许多其他用于计算相关系数的工具,例如numpy

于 2012-12-21T19:12:01.800 回答