Вопрос по correlation, gnuplot, regression – Коэффициент корреляции на гнуплоте

3

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

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 документация.

1

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

Прежде всего, R2 обычно используется в качестве качественного, а не количественного инструмента. R2 0,88 практически аналогичен 0,82 для многих применений. Но я хотел бы узнать больше об этой логике FIT_NDF + 2, так как лучше быть точным. Также, пожалуйста, объясните это специальное соответствие по сравнению с терминологией общего соответствия. Далее, просто чтобы прояснить, это значение R * 2 для правого соответствия. Потому что эта группа Google (groups.google.com/forum/?fromgroups=#!topic/...) утверждает, что мы не можем рассчитать R * 2, используя gnuplot. Sai Avinash Sattiraju
Я думаю ты'Мы слишком много сократили запись в блоге. Расчет SST должен произойти после специальной подгонки (fit m 'your data file' using 1:2 via m, чтобы получить среднее значение), а не после обычной подгонки, как другие назначения. (Кроме того, я думаю, что расчет SSE нужно разделить наFIT_NDF + 2 вместоFIT_NDF, но эта ошибка также присутствует в сообщении в блоге.) Lucas Werkmeister
4

возможен обходной путь. Я'Я проиллюстрирую это, используя 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)
1

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

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

Похожие вопросы