HOWTO · R
Usando la función de diff en R
Este tutorial demuestra cómo utilizar la función diff() en R
En esta página
La función diff() de R resta los valores anteriores a los posteriores en un vector numérico o una serie temporal. De forma predeterminada, compara cada valor con el inmediatamente anterior. Puedes cambiar la separación con lag, repetir la operación con differences o combinar ambos argumentos. Los ejemplos usan un mismo vector para que compares cómo cambia el resultado con cada configuración.
Qué calcula diff()
Para un vector x, diff(x) devuelve las diferencias entre pares: x[2] - x[1], x[3] - x[2] y así sucesivamente. La resta va de la posición anterior a la posterior; por tanto, un aumento produce un resultado positivo y una disminución produce un resultado menor que cero. La función acepta vectores numéricos y objetos de series temporales. Devuelve las diferencias sin modificar la entrada.
Uso básico de diff()
Ejecuta este ejemplo. Las etiquetas del código y de la salida permanecen en inglés.
x <- c(20, 22, 21, 23, 25)
cat("basic: ", paste(diff(x), collapse = " "), "\n", sep = "")
cat("lag 2: ", paste(diff(x, lag = 2), collapse = " "), "\n", sep = "")
cat("differences 2: ", paste(diff(x, differences = 2), collapse = " "), "\n", sep = "")
cat("lag 2, differences 2: ", paste(diff(x, lag = 2, differences = 2), collapse = " "), "\n", sep = "")
basic: 2 -1 2 2
lag 2: 1 1 4
differences 2: -3 3 0
lag 2, differences 2: 3
El primer resultado compara valores adyacentes de x: por ejemplo, 22 - 20 da 2 y 21 - 22 da -1. Las etiquetas en inglés de la salida indican la configuración utilizada en cada una de las comparaciones que se muestran.
Comparar valores con lag
El valor predeterminado de lag es 1. Al establecer lag = 2, cada valor se compara con el que está dos posiciones antes; por ejemplo, x[3] - x[1] y luego x[4] - x[2]. En el ejemplo, los resultados son 1, 1 y 4. Esto resulta útil cuando importa la separación entre observaciones, como al comparar valores de dos pasos de tiempo distintos. No se rellenan las posiciones anteriores al primer par posible.
Aplicar diferencias repetidas con differences
El valor predeterminado de differences es 1, que realiza una ronda de restas. Con differences = 2, R vuelve a aplicar diff() al primer resultado. Para x, la primera ronda produce 2, -1, 2, 2; la siguiente compara las entradas adyacentes de ese vector y devuelve -3, 3, 0. Estas son segundas diferencias, no los valores originales ni las primeras diferencias. Los órdenes superiores repiten este proceso: cada ronda opera sobre el resultado de la anterior.
Combinar lag y differences
Es posible establecer ambos argumentos en la misma llamada. Con lag = 2 y differences = 2, R primero compara valores separados por dos posiciones y obtiene 1, 1, 4; después calcula diferencias con separación dos a partir de ese resultado y obtiene 3. Así, lag determina la separación usada en cada ronda, mientras que differences indica cuántas rondas se aplican. El resultado combinado es más corto porque cada ronda necesita suficientes posiciones para la separación solicitada.
Interpretar la longitud del resultado
Cada diferencia requiere un par de valores de entrada; por eso, cuando se puede formar un par, la llamada devuelve menos elementos que los que tenía el vector original. Para un vector de longitud n, un retardo entero positivo L y un orden entero positivo k, la longitud del resultado es max(n - L * k, 0). En el ejemplo, la entrada tiene cinco valores: la llamada predeterminada devuelve cuatro y dos rondas con retardo dos devuelven uno. La falta de un valor no se debe a que el último elemento no se pueda usar, sino a que se forman pares con la separación solicitada a lo largo de varias rondas. Elige un retardo y un orden que permitan suficientes comparaciones para obtener el resultado que necesitas.