Tengo 2 series de tiempo y estoy usando ccf
para encontrar la correlación cruzada entre ellas. ccf(ts1, ts2)
enumera las correlaciones cruzadas para todos los retardos de tiempo. ¿Cómo puedo encontrar el retraso que da como resultado la máxima correlación sin mirar manualmente los datos?Encontrar lag en el que la correlación cruzada es máxima ccf()
Respuesta
Publicación de la respuesta 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)
}
¿Por qué se usan dos comas en cor = c $ acf [,, 1] y lag? – Anusha
que pensé en hacer de nuevo la función anterior, pero tenerlo encontrar la correlación máximo absoluto que devuelve la correlación originales (positivo o negativo). También llegué al máximo (casi) el número de retrasos.
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)
}
He modificado la solución original, así, con el fin de bucle sobre la función y la salida de los valores correspondientes a un vector de caracteres de índices (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))
}
Quité el data.frame
parte dentro de la función, ya que es innecesariamente lenta. Para un bucle sobre cada columna en un data.frame
y devolver los resultados a un nuevo data.frame
, utilizo este método:
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')
Debido 3 es más de 4, también tenía una puñalada en la modificación de esta función, esta vez mediante la aplicación de una idea de here:
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)
}
Esencialmente se añade un término "error", por lo que si hay varios valores cercanos al máximo, todos ellos consiguen devueltos, por ejemplo:
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
Si no se proporciona ningún valor para e
, se toma como cero y la función se comporta como la publicada nvogen.
- 1. Conceptos básicos de la correlación cruzada normalizada
- 2. R: ¿Ubicación eficiente de segmentos de series de tiempo con correlación cruzada máxima con el segmento de entrada?
- 3. Cómo encontrar la media máxima
- 4. Encontrar la profundidad máxima de un árbol
- 5. ¿Qué es la compilación cruzada?
- 6. La animación de Android reduce el tartamudeo/entrecortado/lag
- 7. Eclipse (Aptana) Typing Lag
- 8. ¿Cómo encontrar las tablas que ocupan la memoria máxima en la base de datos?
- 9. La determinación de XNA Game Lag
- 10. de kadane encontrar subarreglo con la suma máxima
- 11. Encontrar la distancia máxima entre (x, y) coordenadas
- 12. Lidiando con lag en XNA + lidgren
- 13. Encontrando la matriz de correlación
- 14. Convolución 2D y correlación basadas en FFT en Python
- 15. Lag Barra de acciones en el título escondite
- 16. ¿Cuál es la demora máxima para setInterval?
- 17. ¿cuál es la longitud máxima que puede tener el nombre de la aplicación para iPad?
- 18. ¿Cómo encontrar la máxima palabra ocurrida del texto?
- 19. ¿Es posible utilizar la tabla cruzada/consulta dinámica en MySQL?
- 20. ¿Por qué la longitud máxima de la cadena C es literalmente diferente de la máxima char []?
- 21. La forma más rápida de encontrar el rango de suma máxima en int []
- 22. MySQL Math - ¿Es posible calcular una correlación en una consulta?
- 23. Agrupación de correlación en R
- 24. ¿Cuál es la longitud máxima de datos que puedo poner en una columna BLOB en MySQL?
- 25. ¿Cuál es la memoria máxima que puede consumir una aplicación de Google App Engine?
- 26. ¿Cuál es la precisión máxima del temporizador en .NET?
- 27. ¿Cuál es la longitud máxima de una cadena en PHP?
- 28. validación cruzada en I
- 29. ¿Encontrar la fecha mínima y máxima en la matriz usando LINQ?
- 30. Correlación de valores varchar
Ok, encontré la respuesta aquí http://r.789695.n4.nabble.com/ccf-function-td2288257.html – tan
¿Por qué no pones eso como una respuesta y acreditas los carteles de la lista de correo de ayuda R? ? –
sí, lo habría hecho, pero no tengo suficientes puntos de reputación para responder a mi propia pregunta. – tan