#matlab #analysis #correlation #data-analysis
#matlab #анализ #корреляция #анализ данных
Вопрос:
Я пишу программу на C , но использую данные из matlab, включающие взаимную корреляцию. Я понимаю, что когда я делаю корреляцию для 2 наборов данных, это дает мне одно число коэффициента корреляции, указывающее, связаны ли они. Но я хочу использовать взаимную корреляцию для рядов данных. Когда я запускаю взаимную корреляцию в Matlab, это дает мне много данных, и при построении графика график выглядит как треугольник… Я понимаю, что корреляция должна быть где-то между / — 1, но данные к вершине треугольника не увеличиваются одновременно и т.д. У меня путаница с тем, что дает мне перекрестная корреляция, или данные, которые дает мне перекрестная корреляция, на самом деле являются коэффициентами корреляции для каждой точки s (t), p (t), например? Приветствуется любая помощь в разъяснении.
Правка 1 (после ответа Phonon)
Мой главный вопрос заключается в следующем: являются ли данные, которые я получаю при перекрестной корреляции 2 рядов данных, коэффициентом корреляции для каждой точки. Например, (0,10) и (0,8); Являются ли данные, которые я получаю, коэффициентом корреляции этих двух графиков при x = 0?
Комментарии:
1. Как вы вычисляете корреляцию?
2. xcorr но мой главный вопрос заключается в том, какие данные я получаю, когда я сопоставляю 2 ряда данных с коэффициентом корреляции для каждой точки. Например, (0,10) и (0,8); Являются ли данные, которые я получаю, коэффициентом корреляции этих двух графиков при x = 0?
Ответ №1:
В Matlab xcorr(x,x)
выдает автоматическую корреляцию сигнала x. Он не масштабируется, это просто вектор внутренних произведений сигнала со сдвинутыми версиями самого себя. Чтобы масштабировать его, используйте xcorr(x,x,'coeff')
. Эта команда масштабирует вашу автокорреляцию по энергии сигнала (другими словами, она разделит каждый коэффициент на значение коэффициента с нулевым запаздыванием). Обратите внимание, что когда вы выполняете взаимную корреляцию, xcorr(x,y'coeff')
вы не получите значение 1 и нулевую задержку, потому что масштабирование выполняется по-другому. Это будет только 1, если вы соотносите сигнал с самим собой (я бы хотел, чтобы ТАК поддерживались математические формулы, чтобы я мог записать это для вас).
Комментарии:
1. Это имеет смысл, но мне нужна взаимная корреляция для 2 наборов данных, а не автокорреляция, которая является перекрестной корреляцией для одного набора данных и самой себя или чего-то еще
2. Используйте
'coeff'
, это позволит масштабировать данные. Все, что я пытался сказать, это то, что вы получите ровно 1 при нулевой задержке, только если вы сопоставите сигнал с самим собой.3. Phonon Вы поняли мой пересмотренный вопрос выше и ваш ответ все еще применим?
4. Я не думаю, что я это хорошо понимаю. Это практически не поддается расшифровке.
5. Коэффициенты корреляции не вычисляются для каждой точки. Они рассчитываются для каждого сдвига единицы измерения.
Ответ №2:
Вы, вероятно, хотите corrcoef
, не xcorr
.
Комментарии:
1. @Tyler31: Непонятно, что вы имеете в виду. В общем случае коэффициент корреляции — это единственное значение для двух наборов данных, описывающее, существует ли линейная взаимосвязь между ними. Неясно, что означало бы «выполнение corrcoeff для каждой точки».
Ответ №3:
Чтобы прояснить несколько концепций.
-
Взаимная корреляция и взаимная ковариация. Основное отличие заключается в том, что перекрестная ковариация нормализует данные путем вычитания среднего значения.
-
перекрестная ковариация против нормализованной перекрестной ковариации. Более поздний разделен на стандартное отклонение входных данных.
-
нормализованная взаимная ковариация и коэффициент корреляции. Более поздний вариант является частным случаем первого при delay = 0.