Adapted maximum entropy bootstrap routine from meboot https://cran.r-project.org/package=meboot.
Usage
NNS.meboot(
x,
reps = 999,
rho = NULL,
type = "spearman",
drift = TRUE,
target_drift = NULL,
target_drift_scale = NULL,
trim = 0.1,
xmin = NULL,
xmax = NULL,
reachbnd = TRUE,
expand.sd = TRUE,
force.clt = TRUE,
scl.adjustment = FALSE,
sym = FALSE,
elaps = FALSE,
digits = 6,
colsubj,
coldata,
coltimes,
...
)Arguments
- x
vector of data.
- reps
numeric; number of replicates to generate.
- rho
numeric [-1,1] (vectorized); A
rhomust be provided, otherwise a blank list will be returned. The dependence target is applied to each individualreplicate(every replicate is mixed to the requested dependence with the original series); it is not applied to theensemble. SeeNote.- type
options("spearman", "pearson", "NNScor", "NNSdep");
type = "spearman"(default) dependence metric desired.- drift
logical;
drift = TRUE(default) preserves the drift of the original series.- target_drift
numerical;
target_drift = NULL(default) Specifies the desired drift whendrift = TRUE, i.e. a risk-free rate of return.- target_drift_scale
numerical; instead of calculating a
target_drift, provide a scalar to the existing drift whendrift = TRUE.- trim
numeric [0,1]; The mean trimming proportion, defaults to
trim = 0.1.- xmin
numeric; the lower limit for the left tail.
- xmax
numeric; the upper limit for the right tail.
- reachbnd
logical; If
TRUEpotentially reached bounds (xmin = smallest value - trimmed mean and xmax = largest value + trimmed mean) are given when the random draw happens to be equal to 0 and 1, respectively.- expand.sd
logical; If
TRUEthe standard deviation in the ensemble is expanded. Seeexpand.sdinmeboot::meboot.- force.clt
logical; If
TRUEthe ensemble is forced to satisfy the central limit theorem. Seeforce.cltinmeboot::meboot.- scl.adjustment
logical; If
TRUEscale adjustment is performed to ensure that the population variance of the transformed series equals the variance of the data.- sym
logical; If
TRUEan adjustment is performed to ensure that the ME density is symmetric.- elaps
logical; If
TRUEelapsed time during computations is displayed.- digits
integer; 6 (default) number of digits to round output to.
- colsubj
numeric; the column in
xthat contains the individual index. It is ignored if the input dataxis not apdata.frameobject.- coldata
numeric; the column in
xthat contains the data of the variable to create the ensemble. It is ignored if the input dataxis not apdata.frameobject.- coltimes
numeric; an optional argument indicating the column that contains the times at which the observations for each individual are observed. It is ignored if the input data
xis not apdata.frameobject.- ...
possible argument
fivto be passed toexpand.sd.
Value
Returns the following row names in a matrix:
x original data provided as input.
replicates maximum entropy bootstrap replicates.
ensemble average observation over all replicates. Being a per-observation mean it is a central summary, not a single series carrying the target dependence; a rank or linear correlation taken directly on the
ensembletends to read higher thanrho(averaging amplifies the shared order), so assessrhoon thereplicates.xx sorted order stats (xx[1] is minimum value).
z class intervals limits.
dv deviations of consecutive data values.
dvtrim trimmed mean of dv.
xmin data minimum for ensemble=xx[1]-dvtrim.
xmax data x maximum for ensemble=xx[n]+dvtrim.
desintxb desired interval means.
ordxx ordered x values.
kappa scale adjustment to the variance of ME density.
elaps elapsed time.
Note
Vectorized rho and drift parameters will not vectorize both simultaneously. Also, do not specify target_drift = NULL.
The rho dependence alignment is calibrated on each individual replicate: every replicate is mixed so that its dependence on the original series matches rho, in the metric implied by type. Assess a result in that same metric – a "NNSdep" target with NNS.dep$Dependence (unsigned) and a "spearman"/"pearson" target with rank/linear correlation – because a signed correlation taken on an unsigned "NNSdep" target is not comparable to rho (it can even read negative while the dependence target is met). Separately, the ensemble is the per-observation mean of the replicates – a central summary, not a single series carrying the target dependence – so a rank or linear correlation computed directly on the ensemble tends to read higher than the per-replicate rho (averaging amplifies the shared order). Verify rho on the replicates, in the metric implied by type, rather than on the ensemble.
References
Vinod, H.D. and Viole, F. (2020) Arbitrary Spearman's Rank Correlations in Maximum Entropy Bootstrap and Improved Monte Carlo Simulations. doi:10.2139/ssrn.3621614
Vinod, H.D. (2013), Maximum Entropy Bootstrap Algorithm Enhancements. doi:10.2139/ssrn.2285041
Vinod, H.D. (2006), Maximum Entropy Ensembles for Time Series Inference in Economics, Journal of Asian Economics, 17(6), pp. 955-978.
Vinod, H.D. (2004), Ranking mutual funds using unconventional utility theory and stochastic dominance, Journal of Empirical Finance, 11(3), pp. 353-377.
Examples
if (FALSE) { # \dontrun{
# To generate an orthogonal rank correlated time-series to AirPassengers
boots <- NNS.meboot(AirPassengers, reps = 100, rho = 0, xmin = 0)
# Verify correlation of replicates ensemble to original
cor(boots["ensemble",]$ensemble, AirPassengers, method = "spearman")
# Plot all replicates
matplot(boots["replicates",]$replicates , type = 'l')
# Plot ensemble
lines(boots["ensemble",]$ensemble, lwd = 3)
# Plot original
lines(1:length(AirPassengers), AirPassengers, lwd = 3, col = "red")
### Vectorized drift with a single rho
boots <- NNS.meboot(AirPassengers, reps = 10, rho = 0, xmin = 0, target_drift = c(1,7))
matplot(do.call(cbind, boots["replicates", ]), type = "l")
lines(1:length(AirPassengers), AirPassengers, lwd = 3, col = "red")
### Vectorized rho with a single target drift
boots <- NNS.meboot(AirPassengers, reps = 10, rho = c(0, .5, 1), xmin = 0, target_drift = 3)
matplot(do.call(cbind, boots["replicates", ]), type = "l")
lines(1:length(AirPassengers), AirPassengers, lwd = 3, col = "red")
### Vectorized rho with a single target drift scale
boots <- NNS.meboot(AirPassengers, reps = 10, rho = c(0, .5, 1), xmin = 0, target_drift_scale = 0.5)
matplot(do.call(cbind, boots["replicates", ]), type = "l")
lines(1:length(AirPassengers), AirPassengers, lwd = 3, col = "red")
} # }