Хобрук: Ваш путь к мастерству в программировании

Нахождение лага, при котором взаимная корреляция максимальна ccf ()

У меня есть 2 временных ряда, и я использую ccf, чтобы найти взаимную корреляцию между ними. ccf(ts1, ts2) перечисляет взаимные корреляции для всех временных лагов. Как я могу найти отставание, которое приводит к максимальной корреляции, не просматривая данные вручную?


  • Хорошо, нашел здесь ответ r.789695.n4.nabble.com/ccf -function-td2288257.html 29.04.2012
  • Почему бы вам не изложить это как ответ и не упомянуть плакаты из списка рассылки R help? 29.04.2012
  • да, я бы так и поступил, но у меня недостаточно очков репутации, чтобы ответить на свой вопрос. 29.04.2012
  • Вернитесь к вопросу, когда будете. :) 30.04.2012
  • @tan Вы также можете отметить свой ответ как правильный. И, помимо ссылки, я лично считаю, что было бы неплохо резюмировать ответ, чтобы сэкономить Stackoverflowers лишним щелчком. (Я отредактировал ваш ответ, чтобы показать, что я имею в виду; не обижайтесь, если вы хотите отредактировать его обратно :-) 08.08.2012

Ответы:


1

Размещение ответа http://r.789695.n4.nabble.com/ccf-function-td2288257.html

Find_Max_CCF<- function(a,b)
{
 d <- ccf(a, b, plot = FALSE)
 cor = d$acf[,,1]
 lag = d$lag[,,1]
 res = data.frame(cor,lag)
 res_max = res[which.max(res$cor),]
 return(res_max)
} 
30.04.2012
  • Почему две запятые используются в cor = c $ acf [,, 1] и lag? 30.09.2014

  • 2

    Я подумал, что повторю указанную выше функцию, но пусть она найдет абсолютную максимальную корреляцию, которая возвращает исходную корреляцию (положительную или отрицательную). Я также увеличил (почти) до максимума количество лагов.

    Find_Abs_Max_CCF<- function(a,b)
    {
     d <- ccf(a, b, plot = FALSE, lag.max = length(a)-5)
     cor = d$acf[,,1]
     abscor = abs(d$acf[,,1])
     lag = d$lag[,,1]
     res = data.frame(cor,lag)
     absres = data.frame(abscor,lag)
     absres_max = res[which.max(absres$abscor),]
     return(absres_max)
    }
    
    21.11.2013
  • Вы можете сказать, почему при извлечении acf d $ acf [,, 1] используются две запятые? Спасибо. 01.10.2014
  • Как объясняет? Кор, это трехмерный массив. 03.10.2014

  • 3

    Поскольку 3 больше, чем 4, я также попытался изменить эту функцию, на этот раз реализовав идею из здесь:

    ccfmax <- function(a, b, e=0)
    {
     d <- ccf(a, b, plot = FALSE, lag.max = length(a)/2)
     cor = d$acf[,,1]
     abscor = abs(d$acf[,,1])
     lag = d$lag[,,1]
     res = data.frame(cor, lag)
     absres = data.frame(abscor, lag)
     maxcor = max(absres$abscor)
     absres_max = res[which(absres$abscor >= maxcor-maxcor*e &
                            absres$abscor <= maxcor+maxcor*e),]
     return(absres_max)
    }
    

    По сути, добавляется термин «ошибка», так что если имеется несколько значений, близких к максимальному, возвращаются все они, например:

    ayy <- jitter(cos((1:360)/5), 100)
    bee <- jitter(sin((1:360)/5), 100)
    
    ccfmax(ayy, bee, 0.02)
               cor lag
    348  0.9778319  -8
    349  0.9670333  -7
    363 -0.9650827   7
    364 -0.9763180   8
    

    Если значение для e не задано, оно принимается равным нулю, и функция ведет себя так же, как опубликованная nvogen.

    04.11.2015

    4

    Я также изменил исходное решение, чтобы перебрать функцию и вывести значения, соответствующие вектору символов индексов (x):

    abs.max.ccf <- function(x,a,b) {
      d <- ccf(a, b, plot=FALSE, lag.max=length(a)-5)
      cor <- d$acf[,,1]
      abscor <- abs(d$acf[,,1])
      lag <- d$lag[,,1]
      abs.cor.max <- abscor[which.max(abscor)]
      abs.cor.max.lag <- lag[which.max(abscor)]
      return(c(x, abs.cor.max, abs.cor.max.lag))
    }
    

    Я удалил часть data.frame в функции, так как она излишне медленная. Чтобы перебрать каждый столбец в data.frame и вернуть результаты в новый data.frame, я использую этот метод:

    max.ccf <- lapply(colnames(df), function(x) unlist(abs.max.ccf(x, df$y, df[x])))
    max.ccf <- data.frame(do.call(rbind, max.ccf))
    colnames(max.ccf) <- c('Index','Cor','Lag')
    
    06.10.2015
    Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..