dsmooth: Data-driven Local Polynomial for the Trend's Derivatives in...

View source: R/dsmooth.R

dsmoothR Documentation

Data-driven Local Polynomial for the Trend's Derivatives in Equidistant Time Series

Description

This function runs through an iterative process in order to find the optimal bandwidth for the nonparametric estimation of the first or second derivative of the trend in an equidistant time series (with short-memory errors) and subsequently employs the obtained bandwidth via local polynomial regression.

Usage

dsmooth(
  y,
  d = c(1, 2),
  mu = c(0, 1, 2, 3),
  pp = c(1, 3),
  bStart.p = 0.15,
  bStart = 0.15
)

Arguments

y

a numeric vector that contains the time series ordered from past to present.

d

an integer 1 or 2 that defines the order of derivative; the default is d = 1.

mu

an integer 0, ..., 3 that represents the smoothness parameter of the kernel weighting function and thus defines the kernel function that will be used within the local polynomial regression; is set to 1 by default.

Number Kernel
0 Uniform Kernel
1 Epanechnikov Kernel
2 Bisquare Kernel
3 Triweight Kernel
pp

an integer 1 (local linear regression) or 3 (local cubic regression) that indicates the order of polynomial upon which c_f, i.e. the variance factor, will be calculated by msmooth; the default is pp = 1.

bStart.p

a numeric object that indicates the starting value of the bandwidth for the iterative process for the calculation of c_f; should be > 0; is set to 0.15 by default.

bStart

a numeric object that indicates the starting value of the bandwidth for the iterative process; should be > 0; is set to 0.15 by default.

Details

The trend's derivative is estimated based on the additive nonparametric regression model for an equidistant time series

y_t = m(x_t) + \epsilon_t,

where y_t is the observed time series, x_t is the rescaled time on the interval [0, 1], m(x_t) is a smooth and deterministic trend function and \epsilon_t are stationary errors with E(\epsilon_t) = 0 and short-range dependence (see also Beran and Feng, 2002). With this function, the first or second derivative of m(x_t) can be estimated without a parametric model assumption for the error series.

The iterative-plug-in (IPI) algorithm, which numerically minimizes the Asymptotic Mean Squared Error (AMISE), was proposed by Feng, Gries and Fritz (2020).

Define I[m^{(k)}] = \int_{c_b}^{d_b} [m^{(k)}(x)]^2 dx, \beta_{(\nu, k)} = \int_{-1}^{1} u^k K_{(\nu, k)}(u) du and R(K) = \int_{-1}^{1} K_{(\nu, k)}^{2}(u) du, where p is the order of the polynomial, k = p + 1 is the order of the asymptotically equivalent kernel, \nu is the order of the trend function's derivative, 0 \leq c_{b} < d_{b} \leq 1, c_f is the variance factor and K_{(\nu, k)}(u) the k-th order equivalent kernel obtained for the estimation of m^{(\nu)} in the interior. m^{(\nu)} is the \nu-th order derivative (\nu = 0, 1, 2, ...) of the nonparametric trend.

Furthermore, we define

C_{1} = \frac{I[m^{(k)}] \beta_{(\nu, k)}^2}{(k!)^2}

and

C_{2} = \frac{2 \pi c_{f} (d_b - c_b) R(K)}{nh^{2 \nu + 1}}

with h being the bandwidth and n being the number of observations. The AMISE is then

AMISE(h) = h^{2(k-\nu)}C_{1} + C_{2}.

The variance factor c_f is first obtained from a pilot-estimation of the time series' nonparametric trend (\nu = 0) with polynomial order p_p. The estimate is then plugged into the iterative procedure for estimating the first or second derivative (\nu = 1 or \nu = 2). For further details on the asymptotic theory or the algorithm, we refer the user to Feng, Fritz and Gries (2020) and Feng et al. (2019).

The function itself is applicable in the following way: Based on a data input y, an order of polynomial pp for the variance factor estimation procedure, a starting value for the relative bandwidth bStart.p in the variance factor estimation procedure, a kernel function defined by the smoothness parameter mu and a starting value for the relative bandwidth bStart in the bandwidth estimation procedure, an optimal bandwidth is numerically calculated for the trend's derivative of order d. In fact, aside from the input vector y, every argument has a default setting that can be adjusted for the individual case. However, it is recommended to initially use the default values for the estimation of the first derivative and adjust the argument d to d = 2 for the estimation of the second derivative. Following Feng, Gries and Fritz (2020), the initial bandwidth does not affect the resulting optimal bandwidth in theory. However in practice, local minima of the AMISE can influence the results. Therefore, the default starting bandwidth is set to 0.15, the suggested starting bandwidth by Feng, Gries and Fritz (2020) for the data-driven estimation of the first derivative. The recommended initial bandwidth for the second derivative, however, is 0.2 and not 0.15. Thus, if the algorithm does not give suitable results (especially for d = 2), the adjustment of the initial bandwidth might be a good starting point. Analogously, the default starting bandwidth for the trend estimation for the variance factor is bStart.p = 0.15, although according to Feng, Gries and Fritz (2020), bStart.p = 0.1 is suggested for pp = 1 and bStart.p = 0.2 for pp = 3. The default is therefore a compromise between the two suggested values. For more specific information on the input arguments consult the section Arguments.

After the bandwidth estimation, the nonparametric derivative of the series is calculated with respect to the obtained optimal bandwidth by means of a local polynomial regression. The output object is then a list that contains, among other components, the original time series, the estimates of the derivative and the estimated optimal bandwidth.

The default print method for this function delivers key numbers such as the iteration steps and the generated optimal bandwidth rounded to the fourth decimal. The exact numbers and results such as the estimated nonparametric trend series are saved within the output object and can be addressed via the $ sign.

NOTE:

The estimates are obtained for the rescaled time points on the interval [0, 1]. Therefore, the estimated derivatives might not reflect the derivatives for the actual time points. To rescale them, we refer the user to the rescale function of the smoots package.

With package version 1.1.0, this function implements C++ code by means of the Rcpp and RcppArmadillo packages for better performance.

Value

The function returns a list with different components:

b0

the optimal bandwidth chosen by the IPI-algorithm.

bStart

the starting bandwidth for the local polynomial regression based derivative estimation procedure; input argument.

bStart.p

the starting bandwidth for the nonparametric trend estimation that leads to the variance factor estimate; input argument.

bvc

indicates whether an enlarged bandwidth was used for the variance factor estimation or not; it is always set to "Y" (yes) for this function.

cf0

the estimated variance factor; in contrast to the definitions given in the Details section, this object actually contains an estimated value of 2\pi c_f, i.e. it corresponds to the estimated sum of autocovariances.

InfR

the inflation rate setting.

iterations

the bandwidths of the single iterations steps

Mcf

the estimation method for the variance factor estimation; it is always estimated nonparametrically ("NP") within this function.

mu

the smoothness parameter of the second order kernel; input argument.

n

the number of observations.

niterations

the total number of iterations until convergence.

orig

the original input series; input argument.

p

the order of polynomial for the local polynomial regression used within derivative estimation procedure.

pp

the order of polynomial for the local polynomial regression used in the variance factor estimation; input argument.

v

the considered order of the trend's derivative; input argument d.

ws

the weighting system matrix used within the local polynomial regression; this matrix is a condensed version of a complete weighting system matrix; in each row of ws, the weights for conducting the smoothing procedure at a specific observation time point can be found; the first [nb + 0.5] rows, where n corresponds to the number of observations, b is the bandwidth considered for smoothing and [.] denotes the integer part, contain the weights at the [nb + 0.5] left-hand boundary points; the weights in row [nb + 0.5] + 1 are representative for the estimation at all interior points and the remaining rows contain the weights for the right-hand boundary points; each row has exactly 2[nb + 0.5] + 1 elements, more specifically the weights for observations of the nearest 2[nb + 0.5] + 1 time points; moreover, the weights are normalized, i.e. the weights are obtained under consideration of the time points x_t = t/n, where t = 1, 2, ..., n.

ye

the nonparametric estimates of the derivative for the rescaled time points on the interval [0, 1].

Author(s)

  • Yuanhua Feng (Department of Economics, Paderborn University),
    Author of the Algorithms
    Website: https://wiwi.uni-paderborn.de/en/dep4/feng/

  • Dominik Schulz (Research Assistant) (Department of Economics, Paderborn University),
    Package Creator and Maintainer

References

Feng, Y., Gries, T. and Fritz, M. (2020). Data-driven local polynomial for the trend and its derivatives in economic time series. Journal of Nonparametric Statistics, 32:2, 510-533.

Feng, Y., Gries, T., Letmathe, S. and Schulz, D. (2019). The smoots package in R for semiparametric modeling of trend stationary time series. Discussion Paper. Paderborn University. Unpublished.

Examples

# Logarithm of test data
test_data <- gdpUS
y <- log(test_data$GDP)
t <- seq(from = 1947, to = 2019.25, by = 0.25)

# Applied dsmooth function for the trend's first derivative
result_d <- dsmooth(y, d = 1, mu = 1, pp = 1, bStart.p = 0.1, bStart = 0.15)
estim <- result_d$ye

# Plot of the results
plot(t, estim, xlab = "Year", ylab = "First derivative", type = "l",
 main = paste0("Estimated first derivative of the trend for log-quarterly ",
 "US-GDP, Q1 1947 - Q2 2019"), cex.axis = 0.8, cex.main = 0.8,
 cex.lab = 0.8, bty = "n")

# Print result
result_d

smoots documentation built on Sept. 11, 2023, 9:07 a.m.