2016-06-14 26 views
0

Ich bin auf der Suche nach meinem R-Datenrahmen, der im Jahr-Quartal ist, und führen eine rollende Regression über jedes Jahr Quartal. Ich verwende dann die Koeffizienten aus diesem Modell, um Werte zu berücksichtigen, die 1 Viertel voraus sind. Aber würde gerne vierteljährliches Datumsformat in R verwenden?R Jahr Quartal für In-Schleife

hatte ich ähnliches Problem mit [Stata Frage] (Stata year-quarter for loop), aber es in R. Neubetrachtung Hat R die Vorstellung von Jahr Vierteln, die leicht in einer Schleife verwendet werden können? Zum Beispiel ist eine möglicherweise Runde über Art und Weise

months.list <- c("03","06","09","12") 
years.list <- c(1992:2007) 

## Loop over the month and years 
for(yidx in years.list) 
{ 

    for(midx in months.list) 
    { 
    } 
} 

Ich sehe Zoo :: Paket einige Funktionen hat, aber nicht sicher, welche kann ich das meinen Fall spezifisch ist. Manche Dinge entlang der folgenden Zeilen wären ideal:

for (yqidx in 1992Q1:2007Q4){ 
    z <- lm(y ~ x, data = mydata <= yqidx) 
} 

Als ich den Blick nach vorne zu tun, muß ich es zur Hand, so dass der prädizierte Wert am nächsten Quartal ausgeführt wird, ist yqidx + 1, und so 2000Q4 zieht nach 2001Q1.

+0

Sehen Sie sich die Funktion? Viertel an, um ein Datumsobjekt in den Kalender zu konvertieren. Vielleicht interessiert Sie auch? Seq.Date, um eine Sequenz von Daten für Ihre Vorhersagen zu erstellen. Verwenden Sie die Option by = "viertel", um die Sequenz auf 3-Monatsbasis zu erstellen. – Dave2e

Antwort

0

Wenn alles, was Sie helfen auf müssen, ist, wie Quartier zu erzeugen,

require(data.table) 
require(zoo) 
months.list <- c("03","06","09","12") 
years.list <- c(1992:2007) 
#The next line of code generates all the month-year combinations. 
df<-expand.grid(year=years.list,month=months.list) 
#Then, we paste together the year and month with a day so that we get dates like "2007-03-01". Pass that to as.Date, and pass the result to as.yearqtr. 
df$Date=as.yearqtr(as.Date(paste0(df$year,"-",df$month,"-01"))) 
df<-df[order(df$Date),] 

Dann können Sie Loops verwenden, wenn Sie möchten. Ich würde persönlich die Verwendung von data.table wie folgt in Betracht ziehen: require (data.table) require (zoo) DT < -Data.table (expand.grid (Jahr = Jahre.Liste, Monat = Monate.Liste)) DT < -DT [bestellen (Jahr, Monat)] DT [, Datum: = as.yearqtr (as.Date (paste0 (Jahr, "-" Monat "- 01")))]

#Generate fake x values. 

DT[,X:=rnorm(64)] 

#Generate time index. 

DT[,t:=1:64] 

#Fake time index. 

DT[,Y:=X+rnorm(64)+t] 

#Get rid of the year and month columns -unneeded. 

DT[,c("year","month"):=NULL] 

#Create a second data.table to hold all your models. 

Models<-data.table(Date=DT$Date,Index=1:64) 

#Generate your (rolling) models. I am assuming you want to use all past observations in each model. 

Models[,Model:=list(list(lm(data=DT[1:Index],Y~X+t))),by=Index] 

#You can access an individual model thusly: 

Models[5,Model]