R: Gruppierte lineare Regression des rollenden Fensters mit rollapply und ddply

Ich habe einen Datensatz mit mehreren Gruppierungsvariablen, für die ich eine lineare Regression im Rolling Window ausführen möchte. Das ultimative Ziel ist es, die 10 linearen Regressionen mit den niedrigsten Steigungen zu extrahieren und sie zusammen zu mitteln, um eine mittlere minimale Änderungsrate zu erhalten. Ich habe Beispiele für die Verwendung von rollapply gefunden, um lineare Regressionen für Rollfenster zu berechnen, aber ich habe die zusätzliche Komplikation, dass ich diese linearen Regressionen auf Gruppen innerhalb des Datensatzes anwenden möchte.

Hier ist ein Beispieldatensatz und mein aktueller Code, der in der Nähe ist und nicht ganz funktioniert.

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)))

wobei w und z zwei Gruppierungsvariablen sind und x und y die Regressionsterme.

Aus meiner Internetrecherche hier ist ein grundlegender linearer Regressionscode für rollende Fenster, bei dem die Fenstergröße 6 ist, sequentielle Regressionen durch 3 Datenpunkte getrennt sind und ich nur den Steigungskoeffizienten extrahiere (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")

Jetzt möchte ich diese rollierende Fensterregression auf die Gruppen anwenden, die durch die beiden Gruppierungsvariablen w und z angegeben werden. Also habe ich so etwas mit ddply aus dem Paket plyr ausprobiert. Zuerst versuche ich, den obigen Code als Funktion umzuschreiben.

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")
}

Und führen Sie dann diese Funktion mit ddply @ au

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

Das funktioniert jedoch nicht, da ich eine Reihe von Warnungen und Fehlern erhalte. Ich stelle mir vor, dass einige der Fehler mit dem Kombinieren von Zoo-Formaten und Datenrahmen zusammenhängen und dies zu kompliziert wird. Bisher habe ich daran gearbeitet, aber weiß jemand, wie man gruppierte lineare Regressionen mit rollendem Fenster erhält, die möglicherweise einfacher sind als diese Method

Vielen Dank für jede Hilfe, Nate

Antworten auf die Frage(2)

Ihre Antwort auf die Frage