Fast Growth Rates for Time Series and Panel Data
fgrowth
is a S3 generic to compute (sequences of) suitably lagged / leaded and iterated growth rates, obtained with via the exact method of computation of through log differencing. By default growth rates are provided in percentage terms, but any scale factor can be applied. The growth operator G
is a parsimonious wrapper around fgrowth
, and also provides more flexibility when applied to data frames.
fgrowth(x, n = 1, diff = 1, ...) G(x, n = 1, diff = 1, ...) ## Default S3 method: fgrowth(x, n = 1, diff = 1, g = NULL, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, ...) ## Default S3 method: G(x, n = 1, diff = 1, g = NULL, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, ...) ## S3 method for class 'matrix' fgrowth(x, n = 1, diff = 1, g = NULL, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = length(n) + length(diff) > 2L, ...) ## S3 method for class 'matrix' G(x, n = 1, diff = 1, g = NULL, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, ...) ## S3 method for class 'data.frame' fgrowth(x, n = 1, diff = 1, g = NULL, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = length(n) + length(diff) > 2L, ...) ## S3 method for class 'data.frame' G(x, n = 1, diff = 1, by = NULL, t = NULL, cols = is.numeric, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, keep.ids = TRUE, ...) # Methods for compatibility with plm: ## S3 method for class 'pseries' fgrowth(x, n = 1, diff = 1, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, ...) ## S3 method for class 'pseries' G(x, n = 1, diff = 1, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, ...) ## S3 method for class 'pdata.frame' fgrowth(x, n = 1, diff = 1, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = length(n) + length(diff) > 2L, ...) ## S3 method for class 'pdata.frame' G(x, n = 1, diff = 1, cols = is.numeric, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, keep.ids = TRUE, ...) # Methods for grouped data frame / compatibility with dplyr: ## S3 method for class 'grouped_df' fgrowth(x, n = 1, diff = 1, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = length(n) + length(diff) > 2L, keep.ids = TRUE, ...) ## S3 method for class 'grouped_df' G(x, n = 1, diff = 1, t = NULL, fill = NA, logdiff = FALSE, scale = 100, power = 1, stubs = TRUE, keep.ids = TRUE, ...)
x |
a numeric vector, matrix, data frame, panel series ( |
n |
integer. A vector indicating the number of lags or leads. |
diff |
integer. A vector of integers > 1 indicating the order of taking growth rates, e.g. |
g |
a factor, |
by |
data.frame method: Same as |
t |
same input as |
cols |
data.frame method: Select columns to compute growth rates using a function, column names, indices or a logical vector. Default: All numeric variables. Note: |
fill |
value to insert when vectors are shifted. Default is |
logdiff |
logical. Compute log-difference growth rates instead of exact growth rates. See Details. |
scale |
logical. Scale factor post-applied to growth rates, default is 100 which gives growth rates in percentage terms. See Details. |
power |
numeric. Apply a power to annualize or compound growth rates e.g. |
stubs |
logical. |
keep.ids |
data.frame / pdata.frame / grouped_df methods: Logical. Drop all panel-identifiers from the output (which includes all variables passed to |
... |
arguments to be passed to or from other methods. |
fgrowth/G
by default computes exact growth rates using repeat(diff) ((x[i]/x[i-n])^power - 1)*scale
, and, if logdiff = TRUE
approximate growth rates using repeat(diff) log(x[i]/x[i-n])*scale
. So for diff > 1
it computes growth rate of growth rates etc.. For further details see the help pages for fdiff
and flag
.
x
where the growth rate was taken diff
times using lags n
of itself, scaled by scale
. Computations can be grouped by g/by
and/or ordered by t
. See Details and Examples.
## Simple Time Series: AirPassengers G(AirPassengers) # Growth rate, same as fgrowth(AirPassengers) G(AirPassengers, logdiff = TRUE) # Log-difference G(AirPassengers, 1, 2) # Growth rate of growth rate G(AirPassengers, 12) # Seasonal growth rate (data is monthly) head(G(AirPassengers, -2:2, 1:3)) # Sequence of leaded/lagged and iterated growth rates # let's do some visual analysis plot(G(AirPassengers, c(0, 1, 12))) plot(stl(window(G(AirPassengers, 12), # Taking seasonal growth rate removes most seasonal variation 1950), "periodic")) ## Time Series Matrix of 4 EU Stock Market Indicators, recorded 260 days per year plot(G(EuStockMarkets,c(0,260))) # Plot series and annual growth rates summary(lm(L260G1.DAX ~., G(EuStockMarkets,260))) # Annual growth rate of DAX regressed on the # growth rates of the other indicators ## World Development Panel Data head(fgrowth(num_vars(wlddev), 1, 1, # Computes growth rates of numeric variables wlddev$country, wlddev$year)) # fgrowth requires external inputs.. head(G(wlddev, 1, 1, ~country, ~year)) # Growth of numeric variables, id's attached head(G(wlddev, 1, 1, ~country)) # Without t: Works because data is ordered head(G(wlddev, 1, 1, PCGDP + LIFEEX ~ country, ~year)) # Growth of GDP per Capita & Life Expectancy head(G(wlddev, 0:1, 1, ~ country, ~year, cols = 9:10)) # Same, also retaining original series head(G(wlddev, 0:1, 1, ~ country, ~year, 9:10, # Dropping id columns keep.ids = FALSE)) # Dynamic Panel Data Models: summary(lm(G(PCGDP,1,1,iso3c,year) ~ # GDP growth regressed on it's lagged level L(PCGDP,1,iso3c,year) + # and the growth rate of Life Expanctancy G(LIFEEX,1,1,iso3c,year), data = wlddev)) g = qF(wlddev$country) # Omitting t and precomputing g allows for a summary(lm(G(PCGDP,1,1,g) ~ L(PCGDP,1,g) + # bit more parsimonious specification G(LIFEEX,1,1,g), wlddev)) summary(lm(G1.PCGDP ~., # Now adding level and lagged level of L(G(wlddev,0:1,1, ~ country, ~year,9:10),0:1, # LIFEEX and lagged growth rates ~ country, ~year, keep.ids = FALSE)[-1])) ## Using plm can make things easier, but avoid attaching or 'with' calls: pwlddev <- plm::pdata.frame(wlddev, index = c("country","year")) head(G(pwlddev, 0:1, 1, 9:10)) # Again growth rates of LIFEEX and PCGDP PCGDP <- pwlddev$PCGDP # A panel-Series of GDP per Capita head(G(PCGDP)) # Growth rate of the panel series summary(lm(G1.PCGDP ~., # Running the dynamic model again -> data = L(G(pwlddev,0:1,1,9:10),0:1, # code becomes a bit simpler keep.ids = FALSE)[-1])) # One could be tempted to also do something like this, but THIS DOES NOT WORK!!: # -> a pseries is only created when subsetting the pdata.frame using $ or [[ summary(lm(G(PCGDP) ~ L(G(PCGDP,0:1)) + L(G(LIFEEX,0:1),0:1), pwlddev)) # To make it work, one needs to create pseries LIFEEX <- pwlddev$LIFEEX summary(lm(G(PCGDP) ~ L(G(PCGDP,0:1)) + L(G(LIFEEX,0:1),0:1))) # THIS WORKS ! ## Using dplyr: library(dplyr) wlddev %>% group_by(country) %>% select(PCGDP,LIFEEX) %>% fgrowth(0:1) # Adding growth rates wlddev %>% group_by(country) %>% select(year,PCGDP,LIFEEX) %>% fgrowth(0:1, t = year) # Also using t (safer)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.