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