Коэффициент корреляции на гнуплоте

Я хочу построить данные, используя функцию подгонки: 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 ответа

Решение

Если вы ищете способ расчета коэффициента корреляции, как определено на этой странице, вам не повезло с использованием gnuplot, как описано в этой ветке групп Google.

Существует множество других инструментов для расчета коэффициентов корреляции, например, numpy.

Ты можешь использовать stats команда в gnuplot, синтаксис которой похож на 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

Вы можете найти больше о stats команда в документации по gnuplot.

Хотя прямого решения этой проблемы не существует, возможен обходной путь. Я проиллюстрирую это, используя python / numpy. Во-первых, часть скрипта gnuplot, которая генерирует подгонку и соединяется со скриптом 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. 1 и 2. Конечно, обе настройки можно изменить и превратить в аргументы.

Результирующий заголовок строки соответствия (для личного примера):

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

Другие вопросы по тегам