¿Cuál es la forma más eficiente de crear una media móvil o suma móvil en R? ¿Cómo se hace la función de rodadura junto con un "grupo por"?Sumas acumuladas, promedios móviles y equivalentes SQL "grupo por" en R
Respuesta
Mientras zoológico es grande, a veces hay formas más simples. Si sus datos se comportan bien, y están espaciados uniformemente, la función embed() efectivamente le permite crear múltiples versiones rezagadas de una serie temporal. Si miras dentro del paquete VARS para la regresión automática de vectores, verás que el autor del paquete elige esta ruta.
Por ejemplo, para calcular el promedio móvil de 3 período de x, donde x = (1 -> 20)^2:
> x <- (1:20)^2
> embed (x, 3)
[,1] [,2] [,3]
[1,] 9 4 1
[2,] 16 9 4
[3,] 25 16 9
[4,] 36 25 16
[5,] 49 36 25
[6,] 64 49 36
[7,] 81 64 49
[8,] 100 81 64
[9,] 121 100 81
[10,] 144 121 100
[11,] 169 144 121
[12,] 196 169 144
[13,] 225 196 169
[14,] 256 225 196
[15,] 289 256 225
[16,] 324 289 256
[17,] 361 324 289
[18,] 400 361 324
> apply (embed (x, 3), 1, mean)
[1] 4.666667 9.666667 16.666667 25.666667 36.666667 49.666667
[7] 64.666667 81.666667 100.666667 121.666667 144.666667 169.666667
[13] 196.666667 225.666667 256.666667 289.666667 324.666667 361.666667
Me rasqué una buena respuesta de Achim Zeileis en la lista r. Aquí está lo que dijo:
library(zoo)
## create data
x <- rnorm(365)
## transform to regular zoo series with "Date" index
x <- zooreg(x, start = as.Date("2004-01-01")) plot(x)
## add rolling/running/moving average with window size 7
lines(rollmean(x, 7), col = 2, lwd = 2)
## if you don't want the rolling mean but rather a weekly ## time series of means you can do
nextfri <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1) xw <- aggregate(x, nextfri, mean)
## nextfri is a function which computes for a certain "Date" ## the next friday. xw is then the weekly series.
lines(xw, col = 4)
Achim pasó a decir:
Tenga en cuenta, que la diferencia entre es decir a la rodadura y la serie agregada se debe a diferentes alineaciones. Este se puede cambiar cambiando el argumento 'alinear' en
rollmean()
o la funciónnextfri()
en la llamada total .
Todo esto vino de Achim, no me la http://tolstoy.newcastle.edu.au/R/help/05/06/6785.html
- 1. Calcular sumas acumuladas de ciertos valores
- 2. informes de resultados Analizar y sumas de puntos de extracto y los promedios
- 3. SQL ¿Seleccionar varias sumas?
- 4. grupo de SQL por
- 5. correlación de Spearman por grupo en R
- 6. Consulta SQL con avg y grupo por
- 7. Entity Framework. Grupo SQL por al grupo EF Por
- 8. TS SQL - grupo por minuto
- 9. Grupo SQL por "Me gusta"
- 10. SQL Resultados grupo por mes
- 11. ¿Grupo condicional por servidor sql?
- 12. NHibernate LINQ grupo por grupo no correctamente en SQL Server
- 13. Grupo SQL con orden por
- 14. Equivalentes a SQL Server TOP
- 15. SQL - alias en el grupo por
- 16. grupo por un campo calculado en SQL
- 17. Regresión lineal y agrupar por en R
- 18. aplicando la media móvil por grupo en R
- 19. Grupo de SQL por rango de edad
- 20. SQL Grupo A con una Orden Por
- 21. SQL para LINQ dificultad - grupo por, tener
- 22. SQL: Busque el registro máximo por grupo
- 23. actualizaciones de grupo de SQL Server por
- 24. Grupo de SQL Server Por Mes
- 25. LINQ A GRUPO SQL por tener generada sólo como subconsulta
- 26. SQL para Entity Framework Count Grupo-Por
- 27. SQL COUNT * GRUPO POR grande que,
- 28. División de series de tiempo irregulares en promedios mensuales regulares - R
- 29. Oportunidades totales o acumuladas de Oracle por mes
- 30. Seleccionar una columna en SQL no en el grupo Por