R: regresión lineal de ventana móvil agrupada con rollapply y ddply

Tengo un conjunto de datos con varias variables de agrupación en las que quiero ejecutar una regresión lineal de ventana móvil. El objetivo final es extraer las 10 regresiones lineales con las pendientes más bajas y promediarlas juntas para proporcionar una tasa de cambio mínima media. He encontrado ejemplos que usan rollapply para calcular las regresiones lineales de la ventana móvil, pero tengo la complicación adicional de que me gustaría aplicar estas regresiones lineales a grupos dentro del conjunto de datos.

Aquí hay un conjunto de datos de muestra y mi código actual que está cerca y no funciona del todo.

dat<-data.frame(w=c(rep(1,27), rep(2,27),rep(3,27)), z=c(rep(c(1,2,3),27)), 
x=c(rep(seq(1,27),3)), y=c(rnorm(27,10,3), rnorm(27,3,2.2), rnorm(27, 6,1.3)))

donde w y z son dos variables de agrupación y x e y son los términos de regresión.

De mis búsquedas en Internet aquí hay un código de regresión lineal de ventana móvil básica donde el tamaño de la ventana es 6, las regresiones secuenciales están separadas por 3 puntos de datos y estoy extrayendo solo el coeficiente de pendiente (lm ...) [2]

library(zoo)    
slopeData<-rollapply(zoo(dat), width=6, function(Z) { 
coef(lm(formula=y~x, data = as.data.frame(Z), na.rm=T))[2]
}, by = 3, by.column=FALSE, align="right")

Ahora deseo aplicar esta regresión de ventana móvil a los grupos especificados por las dos variables de agrupación w y z. Así que probé algo como esto usando ddply del paquete plyr. Primero trato de reescribir el código anterior como una función.

rolled<-function(df) {
    rollapply(zoo(df), width=6, function(Z) { 
    coef(lm(formula=y~x, data = as.data.frame(Z), na.rm=T))[2]
    }, by = 3, by.column=FALSE, align="right")
}

Y luego ejecuta aplica esa función usando ddply

groupedSlope <- ddply(dat, .(w,z), function(d) rolled(d))

Sin embargo, esto no funciona, ya que recibo una serie de advertencias y errores. Me imagino que algunos de los errores pueden estar relacionados con la combinación de formatos de zoológico y marcos de datos y esto se vuelve demasiado complicado. Es en lo que he estado trabajando hasta ahora, pero ¿alguien sabe de un medio para obtener regresiones lineales agrupadas y de ventana rodante, potencialmente más simple que este método?

Gracias por cualquier ayuda, Nate

Respuestas a la pregunta(1)

Su respuesta a la pregunta