From bda24e5ab7cd40fc75ae78d1cb09034edf27d215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Koles=C3=A1r?= Date: Sun, 28 Jan 2024 15:41:23 -0500 Subject: [PATCH] Less insane naming scheme, fix linting --- .lintr | 8 +- NAMESPACE | 2 +- R/Cbound.R | 31 ++-- R/NPR_lp.R | 159 ------------------- R/NPRfunctions.R | 52 +++--- R/RDHonest.R | 200 +++++++++++++++++++++--- R/RD_bme.R | 49 +++--- R/RD_opt.R | 20 +-- R/documentation.R | 3 +- R/kernels.R | 4 +- R/plots.R | 24 ++- R/prelim_var.R | 53 +++---- R/utils.R | 10 +- data-raw/data-prep.R | 7 +- data-raw/kernel-moments.R | 2 +- doc/RDHonest.R | 47 +++--- doc/RDHonest.Rmd | 62 ++++---- doc/RDHonest.pdf | Bin 246283 -> 246284 bytes doc/manual.pdf | Bin 177999 -> 177812 bytes man/{plot_RDscatter.Rd => RDScatter.Rd} | 8 +- man/RDSmoothnessBound.Rd | 5 +- tests/spelling.R | 6 +- tests/testthat/test_clustering.R | 20 +-- tests/testthat/test_frd.R | 82 +++++----- tests/testthat/test_lpp.R | 33 ++-- tests/testthat/test_npr.R | 23 ++- tests/testthat/test_rd.R | 94 ++++++----- tests/testthat/test_weights.R | 16 +- vignettes/RDHonest.Rmd | 67 ++++---- 29 files changed, 539 insertions(+), 548 deletions(-) delete mode 100644 R/NPR_lp.R rename man/{plot_RDscatter.Rd => RDScatter.Rd} (94%) diff --git a/.lintr b/.lintr index c82dc6d..7c45b54 100644 --- a/.lintr +++ b/.lintr @@ -1 +1,7 @@ -linters: linters_with_defaults(line_length_linter(80), commented_code_linter=NULL, infix_spaces_linter=NULL, object_name_linter = NULL, spaces_left_parentheses_linter=NULL) +linters: linters_with_defaults( + line_length_linter(80), + infix_spaces_linter=NULL, + commented_code_linter=NULL, + object_name_linter(c("CamelCase", "camelCase", "dotted.case", "snake_case")), + indentation_linter(indent=4L) + ) diff --git a/NAMESPACE b/NAMESPACE index 386f1d9..a9ab6a2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,6 @@ S3method(print,RDResults) export(CVb) export(RDHonest) export(RDHonestBME) +export(RDScatter) export(RDSmoothnessBound) export(RDTEfficiencyBound) -export(plot_RDscatter) diff --git a/R/Cbound.R b/R/Cbound.R index 5683954..c0caa23 100644 --- a/R/Cbound.R +++ b/R/Cbound.R @@ -33,8 +33,9 @@ #' @references{ #' #' \cite{Michal Kolesár and Christoph Rothe. Inference in regression -#' discontinuity designs with a discrete running variable. American Economic -#' Review, 108(8):2277—-2304, August 2018. \doi{10.1257/aer.20160945}} +#' discontinuity designs with a discrete running variable. +#' American Economic Review, 108(8):2277—-2304, +#' August 2018. \doi{10.1257/aer.20160945}} #' #' } #' @examples @@ -43,7 +44,7 @@ #' @export RDSmoothnessBound <- function(object, s, separate=FALSE, multiple=TRUE, alpha=0.05, sclass="H") { - d <- NPRPrelimVar.fit(object$data, se.initial="EHW") + d <- PrelimVar(object$data, se.initial="EHW") ## Curvature estimate based on jth set of three points closest to zero Dk <- function(Y, X, xu, s2, j) { @@ -52,16 +53,16 @@ RDSmoothnessBound <- function(object, s, separate=FALSE, multiple=TRUE, I3 <- X >= xu[3*j*s- s+1] & X <= xu[3*j*s] lam <- (mean(X[I3])-mean(X[I2])) / (mean(X[I3])-mean(X[I1])) - den <- if (sclass=="T") { - (1-lam)*mean(X[I3]^2) + lam*mean(X[I1]^2) + mean(X[I2]^2) - } else { - (1-lam)*mean(X[I3]^2) + lam*mean(X[I1]^2) - mean(X[I2]^2) - } + if (sclass=="T") { + den <- (1-lam)*mean(X[I3]^2) + lam*mean(X[I1]^2) + mean(X[I2]^2) + } else { + den <- (1-lam)*mean(X[I3]^2) + lam*mean(X[I1]^2) - mean(X[I2]^2) + } ## Delta is lower bound on M by lemma S2 in Kolesar and Rothe - Del <- 2*(lam*mean(Y[I1])+(1-lam)*mean(Y[I3])-mean(Y[I2])) / den + Del <- 2 * (lam*mean(Y[I1]) + (1-lam) * mean(Y[I3])-mean(Y[I2])) / den ## Variance of Delta - VD <- 4*(lam^2*mean(s2[I1])/sum(I1) + - (1-lam)^2*mean(s2[I3])/sum(I3) + mean(s2[I2])/sum(I2)) / den^2 + VD <- 4 * (lam^2*mean(s2[I1])/sum(I1) + (1-lam)^2*mean(s2[I3]) / + sum(I3) + mean(s2[I2])/sum(I2)) / den^2 c(Del, sqrt(VD), mean(Y[I1]), mean(Y[I2]), mean(Y[I3]), range(X[I1]), range(X[I2]), range(X[I3])) } @@ -72,8 +73,8 @@ RDSmoothnessBound <- function(object, s, separate=FALSE, multiple=TRUE, Dpj <- function(j) Dk(d$Y[d$p], d$X[d$p], xp, d$sigma2[d$p], j) Dmj <- function(j) Dk(d$Y[d$m], abs(d$X[d$m]), xm, d$sigma2[d$m], j) - Sp <- floor(length(xp)/(3*s)) - Sm <- floor(length(xm)/(3*s)) + Sp <- floor(length(xp) / (3*s)) + Sm <- floor(length(xm) / (3*s)) if (min(Sp, Sm) == 0) stop("Value of s is too big") @@ -111,8 +112,8 @@ RDSmoothnessBound <- function(object, s, separate=FALSE, multiple=TRUE, } list(estimate=hatM, conf.low=lower, diagnostics=c(Delta=maxt[1], sdDelta=maxt[2], - y1=maxt[3], y2=maxt[4], y3=maxt[5], - I1=maxt[6:7], I2=maxt[8:9], I3=maxt[10:11])) + y1=maxt[3], y2=maxt[4], y3=maxt[5], + I1=maxt[6:7], I2=maxt[8:9], I3=maxt[10:11])) } if (separate) { diff --git a/R/NPR_lp.R b/R/NPR_lp.R deleted file mode 100644 index ddb176f..0000000 --- a/R/NPR_lp.R +++ /dev/null @@ -1,159 +0,0 @@ -## @param d object of class \code{"RDData"}, \code{"FRDData"}, or -## \code{"LPPData"} -## @param T0 Initial estimate of the treatment effect for calculating the -## optimal bandwidth. Only relevant for Fuzzy RD. -## @param T0bias When evaluating the maximum bias of the estimate, use the -## estimate itself (if \code{T0bias==FALSE}), or use the preliminary -## estimate \code{T0} (if \code{T0bias==TRUE}). Only relevant for Fuzzy RD. -NPRHonest.fit <- function(d, M, kern="triangular", h, opt.criterion, alpha=0.05, - beta=0.8, se.method="nn", J=3, sclass="H", T0=0, - T0bias=FALSE) { - if (missing(h)) - h <- NPROptBW.fit(d, M, kern, opt.criterion, alpha, beta, sclass, T0) - r1 <- NPRreg.fit(d, h, kern, order=1, se.method, J) - - wt <- r1$w[r1$w!=0] - xx <- d$X[r1$w!=0] - if (d$class=="IP") { - nobs <- length(wt) - ## Are we at a boundary? - bd <- length(unique(d$X>=0))==1 - } else { - nobs <- min(sum(xx>=0), sum(xx<0)) - bd <- TRUE - } - - if (T0bias && d$class=="FRD") { - ## multiply bias and sd by r1$fs to make if free of first stage - r1$se <- r1$se*abs(r1$fs) - M <- unname(c((M[1]+M[2]*abs(T0)), M)) - } else if (!T0bias && d$class=="FRD") { - M <- unname(c((M[1]+M[2]*abs(r1$estimate)) / abs(r1$fs), M)) - } - - ## Determine bias - if (nobs==0) { - ## If bandwidths too small, big bias / sd - bias <- r1$se <- sqrt(.Machine$double.xmax/10) - } else if (sclass=="T") { - bias <- M[1]/2 * (sum(abs(wt*xx^2))) - } else if (sclass=="H" && bd) { - ## At boundary we know form of least favorable function - bias <- M[1]/2 * - abs(sum(wt[xx<0]*xx[xx<0]^2)-sum(wt[xx>=0]*xx[xx>=0]^2)) - } else { - ## Else need to find numerically (same formula if order=2) - w2p <- function(s) abs(sum((wt*(xx-s))[xx>=s])) - w2m <- function(s) abs(sum((wt*(s-xx))[xx<=s])) - bp <- stats::integrate(function(s) vapply(s, w2p, numeric(1)), 0, h) - bm <- stats::integrate(function(s) vapply(s, w2m, numeric(1)), -h, 0) - bias <- M[1]*(bp$value+bm$value) - } - lower <- r1$estimate - bias - stats::qnorm(1-alpha)*r1$se - upper <- r1$estimate + bias + stats::qnorm(1-alpha)*r1$se - B <- bias/r1$se - cv <- CVb(B, alpha) - term <- switch(d$class, IP="Value of conditional mean", - SRD="Sharp RD Parameter", "Fuzzy RD Parameter") - method <- switch(sclass, H="Holder", "Tayor") - if (d$class!="FRD") M[2:3] <- c(NA, NA) - d$est_w <- r1$w - d$sigma2 <- r1$sigma2 - kernel <- if (!is.function(kern)) kern else "user-supplied" - coef <- data.frame(term=term, estimate=r1$estimate, std.error=r1$se, - maximum.bias=bias, conf.low=r1$estimate-cv*r1$se, - conf.high=r1$estimate+cv*r1$se, conf.low.onesided=lower, - conf.high.onesided=upper, bandwidth=h, - eff.obs=r1$eff.obs, leverage=max(r1$w^2)/sum(r1$w^2), - cv=cv, alpha=alpha, method=method, M=M[1], M.rf=M[2], - M.fs=M[3], first.stage=r1$fs, kernel=kernel, - p.value=stats::pnorm(B-abs(r1$estimate/r1$se))+ - stats::pnorm(-B-abs(r1$estimate/r1$se))) - structure(list(coefficients=coef, data=d), class="RDResults") -} - - -## Optimal bandwidth selection in nonparametric regression -NPROptBW.fit <- function(d, M, kern="triangular", opt.criterion, alpha=0.05, - beta=0.8, sclass="H", T0=0) { - - ## First check if sigma2 is supplied - if (is.null(d$sigma2)) - d <- NPRPrelimVar.fit(d, se.initial="EHW") - - ## Objective function for optimizing bandwidth - obj <- function(h) { - r <- NPRHonest.fit(d, M, kern, h, alpha=alpha, se.method="supplied.var", - sclass=sclass, T0=T0, T0bias=TRUE)$coefficients - switch(opt.criterion, - OCI=2*r$maximum.bias+ - r$std.error*(stats::qnorm(1-alpha)+stats::qnorm(beta)), - MSE=r$maximum.bias^2+r$std.error^2, - FLCI=r$conf.high-r$conf.low) - } - hmin <- if (d$class=="IP") { - sort(unique(abs(d$X)))[2] - } else { - max(unique(d$X[d$p])[2], sort(unique(abs(d$X[d$m])))[2]) - } - - ## Optimize piecewise constant function using modification of golden - ## search. In fact, the criterion may not be unimodal, so proceed with - ## caution. (For triangular kernel, it appears unimodal) - if (kern=="uniform") { - supp <- sort(unique(abs(d$X))) - h <- gss(obj, supp[supp>=hmin]) - } else { - h <- abs(stats::optimize(obj, interval=c(hmin, max(abs(d$X))), - tol=.Machine$double.eps^0.75)$minimum) - } - - h -} - - - -#' @export -print.RDResults <- function(x, digits = getOption("digits"), ...) { - if (!is.null(x$call)) - cat("Call:\n", deparse(x$call), "\n\n", sep = "", fill=TRUE) - fmt <- function(x) format(x, digits=digits, width=digits+1) - y <- x$coefficients - cat("Estimates (using ", y$method, " class):\n", sep="") - nm <- c("Parameter", "Estimate", "Std. Error", "Maximum Bias") - names(y)[1:4] <- nm - y$"Confidence Interval" <- paste0("(", fmt(y$conf.low), ", ", - fmt(y$conf.high), ")") - y$OCI <- paste0("(-Inf, ", fmt(y$conf.high.onesided), "), (", - fmt(y$conf.low.onesided), ", Inf)") - print.data.frame(y[, c(nm, "Confidence Interval"), ], - digits=digits, row.names=FALSE) - cat("\nOnesided CIs: ", y$OCI) - if(!is.null(y$bandwidth)) - cat("\nBandwidth: ", fmt(y$bandwidth), ", Kernel: ", y$kernel, sep="") - else - cat("\nSmoothing parameters below and above cutoff: ", - fmt(y$bandwidth.m), ", ", - fmt(y$bandwidth.m), sep="") - - cat("\nNumber of effective observations:", fmt(y$eff.obs)) - par <- paste0(tolower(substr(y$Parameter, 1, 1)), substring(y$Parameter, 2)) - cat("\nMaximal leverage for ", par, ": ", fmt(y$leverage), - sep="") - if(!is.null(y$first.stage) && !is.na(y$first.stage)) - cat("\nFirst stage estimate:", fmt(y$first.stage), - "\nFirst stage smoothness constant M:", fmt(y$M.fs), - "\nReduced form smoothness constant M:", fmt(y$M.rf), - "\n") - else - cat("\nSmoothness constant M:", fmt(y$M), - "\n") - cat("P-value:", fmt(y$p.value), "\n") - - if (inherits(x$na.action, "omit")) - cat(length(x$na.action), "observations with missing values dropped\n") - - - - invisible(x) -} diff --git a/R/NPRfunctions.R b/R/NPRfunctions.R index ce73535..ff1ddd2 100644 --- a/R/NPRfunctions.R +++ b/R/NPRfunctions.R @@ -25,8 +25,8 @@ LPReg <- function(X, Y, h, K, order=1, se.method=NULL, sigma2, J=3, ## Squared residuals, allowing for multivariate Y sig <- function(r) { - r[, rep(seq_len(ncol(r)), each=ncol(r))] * - r[, rep(seq_len(ncol(r)), ncol(r))] + r[, rep(seq_len(ncol(r)), each=ncol(r))] * r[, rep(seq_len(ncol(r)), + ncol(r))] } ## For RD, compute variance separately on either side of cutoff signn <- function(X) { @@ -45,15 +45,15 @@ LPReg <- function(X, Y, h, K, order=1, se.method=NULL, sigma2, J=3, wgt_unif <- ((weights)*R %*% solve(crossprod(R, weights*R)))[, 1] eff.obs <- length(X)*sum(wgt_unif^2)/sum(wgt^2) ## Variance - V <- if (is.null(clusterid)) { - colSums(as.matrix(wgt^2 * hsigma2)) - } else if (se.method == "supplied.var") { - colSums(as.matrix(wgt^2 * hsigma2))+ - rho*(sum(tapply(wgt, clusterid, sum)^2)-sum(wgt^2)) - } else { - us <- apply(wgt*res, 2, function(x) tapply(x, clusterid, sum)) - as.vector(crossprod(us)) - } + if (is.null(clusterid)) { + V <- colSums(as.matrix(wgt^2 * hsigma2)) + } else if (se.method == "supplied.var") { + V <- colSums(as.matrix(wgt^2 * hsigma2))+ + rho * (sum(tapply(wgt, clusterid, sum)^2)-sum(wgt^2)) + } else { + us <- apply(wgt*res, 2, function(x) tapply(x, clusterid, sum)) + V <- as.vector(crossprod(us)) + } list(theta=beta[1, ], sigma2=hsigma2, res=res, var=V, w=wgt, eff.obs=eff.obs) @@ -67,14 +67,14 @@ LPReg <- function(X, Y, h, K, order=1, se.method=NULL, sigma2, J=3, ## Calculate fuzzy or sharp RD estimate, or estimate of a conditional mean at a ## point (depending on the class of \code{d}), and its variance using local ## polynomial regression of order \code{order}. -NPRreg.fit <- function(d, h, kern="triangular", order=1, se.method="nn", J=3) { +NPReg <- function(d, h, kern="triangular", order=1, se.method="nn", J=3) { if (!is.function(kern)) kern <- EqKern(kern, boundary=FALSE, order=0) ## Keep only positive kernel weights W <- if (h<=0) 0*d$X else kern(d$X/h) # kernel weights - if(!is.null(d$sigma2)) d$sigma2 <- as.matrix(d$sigma2) + if (!is.null(d$sigma2)) d$sigma2 <- as.matrix(d$sigma2) r <- LPReg(d$X[W>0], as.matrix(d$Y)[W>0, ], h, kern, order, se.method, - d$sigma2[W>0, ], J, weights=d$w[W>0], RD=(d$class!="IP"), + d$sigma2[W>0, ], J, weights=d$w[W>0], RD = (d$class!="IP"), d$rho, d$clusterid[W>0]) sigma2 <- matrix(NA, nrow=length(W), ncol=NCOL(d$Y)^2) sigma2[W>0, ] <- r$sigma2 @@ -88,8 +88,8 @@ NPRreg.fit <- function(d, h, kern="triangular", order=1, se.method="nn", J=3) { if (d$class=="FRD") { ret$fs <- r$theta[2] ret$estimate <- r$theta[1]/r$theta[2] - ret$se <- sqrt(sum(c(1, -ret$estimate, -ret$estimate, ret$estimate^2) * - r$var) / ret$fs^2) + ret$se <- sqrt(sum(c(1, -ret$estimate, -ret$estimate, + ret$estimate^2) * r$var) / ret$fs^2) } ret } @@ -100,26 +100,22 @@ NPRreg.fit <- function(d, h, kern="triangular", order=1, se.method="nn", J=3) { ## Use global quartic regression to estimate a bound on the second derivative ## for inference under under second order Hölder class. For RD, use a separate ## regression on either side of the cutoff -NPR_MROT.fit <- function(d) { +MROT <- function(d) { if (d$class=="SRD") { - max(NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$p], X=d$X[d$p]), 0, "IP")), - NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$m], X=d$X[d$m]), 0, "IP"))) + max(MROT(NPRData(data.frame(Y=d$Y[d$p], X=d$X[d$p]), 0, "IP")), + MROT(NPRData(data.frame(Y=d$Y[d$m], X=d$X[d$m]), 0, "IP"))) } else if (d$class=="FRD") { - c(M1=max(NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$p, 1], X=d$X[d$p]), 0, - "IP")), - NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$m, 1], X=d$X[d$m]), 0, - "IP"))), - M2=max(NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$p, 2], X=d$X[d$p]), 0, - "IP")), - NPR_MROT.fit(NPRData(data.frame(Y=d$Y[d$m, 2], X=d$X[d$m]), 0, - "IP")))) + c(M1=max(MROT(NPRData(data.frame(Y=d$Y[d$p, 1], X=d$X[d$p]), 0, "IP")), + MROT(NPRData(data.frame(Y=d$Y[d$m, 1], X=d$X[d$m]), 0, "IP"))), + M2=max(MROT(NPRData(data.frame(Y=d$Y[d$p, 2], X=d$X[d$p]), 0, "IP")), + MROT(NPRData(data.frame(Y=d$Y[d$m, 2], X=d$X[d$m]), 0, "IP")))) } else if (d$class=="IP") { ## STEP 1: Estimate global polynomial regression r1 <- unname(stats::lm(d$Y ~ 0 + outer(d$X, 0:4, "^"))$coefficients) f2 <- function(x) abs(2*r1[3]+6*x*r1[4]+12*x^2*r1[5]) ## maximum occurs either at endpoints, or else at the extremum, ## -r1[4]/(4*r1[5]), if the extremum is in the support - f2e <- if(abs(r1[5])<=1e-10) Inf else -r1[4]/(4*r1[5]) + f2e <- if (abs(r1[5])<=1e-10) Inf else -r1[4] / (4*r1[5]) M <- max(f2(min(d$X)), f2(max(d$X))) if (min(d$X) < f2e && max(d$X) > f2e) M <- max(f2(f2e), M) diff --git a/R/RDHonest.R b/R/RDHonest.R index 2b7580d..1140bed 100644 --- a/R/RDHonest.R +++ b/R/RDHonest.R @@ -157,37 +157,199 @@ RDHonest <- function(formula, data, subset, weights, cutoff=0, M, mf[[1L]] <- quote(stats::model.frame) mf <- eval(mf, parent.frame()) - d <- if (point.inference) { - NPRData(mf, cutoff, "IP") - } else if (length(formula)[2]==2) { - NPRData(mf, cutoff, "FRD") - } else { - NPRData(mf, cutoff, "SRD") - } + if (point.inference) { + d <- NPRData(mf, cutoff, "IP") + } else if (length(formula)[2]==2) { + d <- NPRData(mf, cutoff, "FRD") + } else { + d <- NPRData(mf, cutoff, "SRD") + } if (missing(M)) { - M <- NPR_MROT.fit(d) + M <- MROT(d) message("Using Armstong & Kolesar (2020) ROT for smoothness constant M") } if (kern=="optimal") { - ret <- RDTOpt.fit(d, M, opt.criterion, alpha, beta, se.method, J) + ret <- RDTOpt(d, M, opt.criterion, alpha, beta, se.method, J) } else if (!missing(h)) { - ret <- NPRHonest.fit(d, M, kern, h, alpha=alpha, se.method=se.method, - J=J, sclass=sclass, T0=T0) + ret <- NPRHonest(d, M, kern, h, alpha=alpha, se.method=se.method, J=J, + sclass=sclass, T0=T0) } else { - ret <- NPRHonest.fit(d, M, kern, opt.criterion=opt.criterion, - alpha=alpha, beta=beta, se.method=se.method, J=J, - sclass=sclass, T0=T0) + ret <- NPRHonest(d, M, kern, opt.criterion=opt.criterion, alpha=alpha, + beta=beta, se.method=se.method, J=J, sclass=sclass, + T0=T0) } ret$call <- cl ret$na.action <- attr(mf, "na.action") - if (is.nan(ret$coefficients$leverage) || - ret$coefficients$leverage>0.1) + if (is.nan(ret$coefficients$leverage) || ret$coefficients$leverage>0.1) message(paste0("Maximal leverage is large: ", - round(ret$coefficients$leverage, 2), - ".\nInference may be inaccurate. ", - "Consider using bigger bandwidth.")) + round(ret$coefficients$leverage, 2), + ".\nInference may be inaccurate. ", + "Consider using bigger bandwidth.")) ret } + + +## @param d object of class \code{"RDData"}, \code{"FRDData"}, or +## \code{"LPPData"} +## @param T0 Initial estimate of the treatment effect for calculating the +## optimal bandwidth. Only relevant for Fuzzy RD. +## @param T0bias When evaluating the maximum bias of the estimate, use the +## estimate itself (if \code{T0bias==FALSE}), or use the preliminary +## estimate \code{T0} (if \code{T0bias==TRUE}). Only relevant for Fuzzy RD. +NPRHonest <- function(d, M, kern="triangular", h, opt.criterion, alpha=0.05, + beta=0.8, se.method="nn", J=3, sclass="H", T0=0, + T0bias=FALSE) { + if (missing(h)) + h <- OptBW(d, M, kern, opt.criterion, alpha, beta, sclass, T0) + r1 <- NPReg(d, h, kern, order=1, se.method, J) + + wt <- r1$w[r1$w!=0] + xx <- d$X[r1$w!=0] + if (d$class=="IP") { + nobs <- length(wt) + ## Are we at a boundary? + bd <- length(unique(d$X>=0))==1 + } else { + nobs <- min(sum(xx>=0), sum(xx<0)) + bd <- TRUE + } + + if (T0bias && d$class=="FRD") { + ## multiply bias and sd by r1$fs to make if free of first stage + r1$se <- r1$se*abs(r1$fs) + M <- unname(c((M[1]+M[2]*abs(T0)), M)) + } else if (!T0bias && d$class=="FRD") { + M <- unname(c((M[1]+M[2]*abs(r1$estimate)) / abs(r1$fs), M)) + } else { + M[2:3] <- c(NA, NA) + } + + ## Determine bias + if (nobs==0) { + ## If bandwidths too small, big bias / sd + bias <- r1$se <- sqrt(.Machine$double.xmax/10) + } else if (sclass=="T") { + bias <- M[1]/2 * (sum(abs(wt*xx^2))) + } else if (sclass=="H" && bd) { + ## At boundary we know form of least favorable function + bias <- M[1]/2 * + abs(sum(wt[xx<0]*xx[xx<0]^2)-sum(wt[xx>=0]*xx[xx>=0]^2)) + } else { + ## Else need to find numerically (same formula if order=2) + w2p <- function(s) abs(sum((wt * (xx-s))[xx>=s])) + w2m <- function(s) abs(sum((wt * (s-xx))[xx<=s])) + bp <- stats::integrate(function(s) vapply(s, w2p, numeric(1)), 0, h) + bm <- stats::integrate(function(s) vapply(s, w2m, numeric(1)), -h, 0) + bias <- M[1] * (bp$value+bm$value) + } + lower <- r1$estimate - bias - stats::qnorm(1-alpha)*r1$se + upper <- r1$estimate + bias + stats::qnorm(1-alpha)*r1$se + B <- bias/r1$se + cv <- CVb(B, alpha) + term <- switch(d$class, IP="Value of conditional mean", + SRD="Sharp RD Parameter", "Fuzzy RD Parameter") + method <- switch(sclass, H="Holder", "Tayor") + + d$est_w <- r1$w + d$sigma2 <- r1$sigma2 + kernel <- if (!is.function(kern)) kern else "user-supplied" + coef <- data.frame(term=term, estimate=r1$estimate, std.error=r1$se, + maximum.bias=bias, conf.low=r1$estimate-cv*r1$se, + conf.high=r1$estimate+cv*r1$se, conf.low.onesided=lower, + conf.high.onesided=upper, bandwidth=h, + eff.obs=r1$eff.obs, leverage=max(r1$w^2)/sum(r1$w^2), + cv=cv, alpha=alpha, method=method, M=M[1], M.rf=M[2], + M.fs=M[3], first.stage=r1$fs, kernel=kernel, + p.value=stats::pnorm(B-abs(r1$estimate/r1$se))+ + stats::pnorm(-B-abs(r1$estimate/r1$se))) + structure(list(coefficients=coef, data=d), class="RDResults") +} + + +## Optimal bandwidth selection in nonparametric regression +OptBW <- function(d, M, kern="triangular", opt.criterion, alpha=0.05, beta=0.8, + sclass="H", T0=0) { + + ## First check if sigma2 is supplied + if (is.null(d$sigma2)) + d <- PrelimVar(d, se.initial="EHW") + + ## Objective function for optimizing bandwidth + obj <- function(h) { + r <- NPRHonest(d, M, kern, h, alpha=alpha, se.method="supplied.var", + sclass=sclass, T0=T0, T0bias=TRUE)$coefficients + switch(opt.criterion, + OCI=2*r$maximum.bias+ + r$std.error * (stats::qnorm(1-alpha)+stats::qnorm(beta)), + MSE=r$maximum.bias^2+r$std.error^2, + FLCI=r$conf.high-r$conf.low) + } + if (d$class=="IP") { + hmin <- sort(unique(abs(d$X)))[2] + } else { + hmin <- max(unique(d$X[d$p])[2], sort(unique(abs(d$X[d$m])))[2]) + } + + ## Optimize piecewise constant function using modification of golden + ## search. In fact, the criterion may not be unimodal, so proceed with + ## caution. (For triangular kernel, it appears unimodal) + if (kern=="uniform") { + supp <- sort(unique(abs(d$X))) + h <- gss(obj, supp[supp>=hmin]) + } else { + h <- abs(stats::optimize(obj, interval=c(hmin, max(abs(d$X))), + tol=.Machine$double.eps^0.75)$minimum) + } + + h +} + + + +#' @export +print.RDResults <- function(x, digits = getOption("digits"), ...) { + if (!is.null(x$call)) + cat("Call:\n", deparse(x$call), "\n\n", sep = "", fill=TRUE) + fmt <- function(x) format(x, digits=digits, width=digits+1) + y <- x$coefficients + cat("Estimates (using ", y$method, " class):\n", sep="") + nm <- c("Parameter", "Estimate", "Std. Error", "Maximum Bias") + names(y)[1:4] <- nm + y$"Confidence Interval" <- paste0("(", fmt(y$conf.low), ", ", + fmt(y$conf.high), ")") + y$OCI <- paste0("(-Inf, ", fmt(y$conf.high.onesided), "), (", + fmt(y$conf.low.onesided), ", Inf)") + print.data.frame(y[, c(nm, "Confidence Interval"), ], + digits=digits, row.names=FALSE) + cat("\nOnesided CIs: ", y$OCI) + if (!is.null(y$bandwidth)) + cat("\nBandwidth: ", fmt(y$bandwidth), ", Kernel: ", y$kernel, sep="") + else + cat("\nSmoothing parameters below and above cutoff: ", + fmt(y$bandwidth.m), ", ", + fmt(y$bandwidth.m), sep="") + + cat("\nNumber of effective observations:", fmt(y$eff.obs)) + par <- paste0(tolower(substr(y$Parameter, 1, 1)), substring(y$Parameter, 2)) + cat("\nMaximal leverage for ", par, ": ", fmt(y$leverage), + sep="") + if (!is.null(y$first.stage) && !is.na(y$first.stage)) + cat("\nFirst stage estimate:", fmt(y$first.stage), + "\nFirst stage smoothness constant M:", fmt(y$M.fs), + "\nReduced form smoothness constant M:", fmt(y$M.rf), + "\n") + else + cat("\nSmoothness constant M:", fmt(y$M), + "\n") + cat("P-value:", fmt(y$p.value), "\n") + + if (inherits(x$na.action, "omit")) + cat(length(x$na.action), "observations with missing values dropped\n") + + + + invisible(x) +} diff --git a/R/RD_bme.R b/R/RD_bme.R index ccb78ed..bf0a511 100644 --- a/R/RD_bme.R +++ b/R/RD_bme.R @@ -1,13 +1,13 @@ ## Formula for local polynomial regression RDlpformula <- function(order) { - f1 <- if (order>0) { - f <- vapply(seq_len(order), - function(p) paste0("I(x^", p, ")"), - character(1)) - paste0("(", paste(f, collapse="+"), ") * I(x>=0)") - } else { - paste0("I(x>=0)") - } + if (order>0) { + f <- vapply(seq_len(order), + function(p) paste0("I(x^", p, ")"), + character(1)) + f1 <- paste0("(", paste(f, collapse="+"), ") * I(x>=0)") + } else { + f1 <- paste0("I(x>=0)") + } paste0("y ~ ", f1) } @@ -73,7 +73,7 @@ RDHonestBME <- function(formula, data, subset, cutoff=0, na.action, mf[[1L]] <- quote(stats::model.frame) mf <- eval(mf, parent.frame()) - if(missing(regformula)) + if (missing(regformula)) regformula <- RDlpformula(order) regformula <- stats::as.formula(regformula) @@ -86,7 +86,7 @@ RDHonestBME <- function(formula, data, subset, cutoff=0, na.action, ## Count effective support points support <- sort(unique(x)) G <- length(support) - G.m <- length(support[support<0]) + Gm <- length(support[support<0]) ## Estimate actual and dummied out model, and calculate delta m1 <- stats::lm(regformula) @@ -97,20 +97,19 @@ RDHonestBME <- function(formula, data, subset, cutoff=0, na.action, ## Compute Q^{-1} manually so that sandwich package is not needed Q1inv <- chol2inv(qr(m1)$qr[1L:m1$rank, 1L:m1$rank, drop = FALSE]) Q2inv <- chol2inv(qr(m2)$qr[1L:m2$rank, 1L:m2$rank, drop = FALSE]) - v.m1m2 <- length(y) * stats::var(cbind( - (stats::model.matrix(m1)*stats::resid(m1)) %*% Q1inv, - (stats::model.matrix(m2)*stats::resid(m2)) %*% Q2inv)) + v.m1m2 <- length(y) * + stats::var(cbind((stats::model.matrix(m1)*stats::resid(m1)) %*% Q1inv, + (stats::model.matrix(m2)*stats::resid(m2)) %*% Q2inv)) df <- data.frame(x=support, y=rep(0, length(support))) e2 <- rep(0, G+length(stats::coef(m1))) e2[order + 2] <- 1 # inference on (p+2)th element aa <- rbind(cbind(-stats::model.matrix(regformula, data=df), diag(nrow=G)), e2) - vdt <- aa %*% v.m1m2 %*% t(aa) # V(W) in paper, except order of m1 and - # m2 swapped + vdt <- aa %*% v.m1m2 %*% t(aa) # V(W) in paper, but swap order of m1 and m2 ## All possible combinations of g_-, g_+, s_-, s_+ - gr <- as.matrix(expand.grid(1:G.m, (G.m+1):G, c(-1, 1), c(-1, 1))) + gr <- as.matrix(expand.grid(1:Gm, (Gm+1):G, c(-1, 1), c(-1, 1))) selvec <- matrix(0, nrow=nrow(gr), ncol=ncol(vdt)) selvec[cbind(seq_len(nrow(selvec)), gr[, 1])] <- gr[, 3] selvec[cbind(seq_len(nrow(selvec)), gr[, 2])] <- gr[, 4] @@ -120,21 +119,21 @@ RDHonestBME <- function(formula, data, subset, cutoff=0, na.action, dev <- drop(selvec[, -ncol(selvec)] %*% delta) ## Upper and lower CIs - CI.l <- stats::coef(m1)[order+2]+dev-stats::qnorm(1-alpha/2)*se - CI.u <- stats::coef(m1)[order+2]+dev+stats::qnorm(1-alpha/2)*se + ci_l <- stats::coef(m1)[order+2]+dev-stats::qnorm(1-alpha/2)*se + ci_u <- stats::coef(m1)[order+2]+dev+stats::qnorm(1-alpha/2)*se ## Onesided - OCI.l <- stats::coef(m1)[order+2]+dev-stats::qnorm(1-alpha)*se - OCI.u <- stats::coef(m1)[order+2]+dev+stats::qnorm(1-alpha)*se + oci_l <- stats::coef(m1)[order+2]+dev-stats::qnorm(1-alpha)*se # + oci_u <- stats::coef(m1)[order+2]+dev+stats::qnorm(1-alpha)*se - l <- which.min(CI.l) - u <- which.max(CI.u) + l <- which.min(ci_l) + u <- which.max(ci_u) coef <- data.frame(term="Sharp RD parameter", estimate=unname(m1$coefficients[order +2]), std.error=sqrt(vdt["e2", "e2"]), maximum.bias=max(abs(c(dev[u], dev[l]))), - conf.low=CI.l[l], conf.high=CI.u[u], - conf.low.onesided=min(OCI.l), - conf.high.onesided=max(OCI.u), bandwidth=h, + conf.low=ci_l[l], conf.high=ci_u[u], + conf.low.onesided=min(oci_l), + conf.high.onesided=max(oci_u), bandwidth=h, eff.obs=length(x), cv=NA, alpha=alpha, method="BME", kernel="uniform") ret <- list(coefficients=coef, call=cl, na.action=attr(mf, "na.action")) diff --git a/R/RD_opt.R b/R/RD_opt.R index e43fca4..e64c051 100644 --- a/R/RD_opt.R +++ b/R/RD_opt.R @@ -39,7 +39,7 @@ RDgbC <- function(d, b, C) { dp <- dstar(d$X[d$p], bp, C, d$sigma2[d$p]) dm <- dstar(d$X[d$m], bm, C, d$sigma2[d$m]) - function(x) SY(x, bp, dp, C)*(x>=0)-SY(x, bm, dm, C)*(x<0) + function(x) SY(x, bp, dp, C) * (x>=0)-SY(x, bm, dm, C) * (x<0) } @@ -78,7 +78,7 @@ RDTEstimator <- function(d, f, alpha, se.method, J) { upper <- Lhat + maxbias + stats::qnorm(1-alpha)*sd hl <- CVb(maxbias/sd, alpha) * sd # Half-length - r.u <- NPRreg.fit(d, max(abs(d$X[W!=0])), kern="uniform") + r.u <- NPReg(d, max(abs(d$X[W!=0])), kern="uniform") eff.obs <- r.u$eff.obs*sum(r.u$w^2)/sum(W^2) d$est_w <- W @@ -94,10 +94,10 @@ RDTEstimator <- function(d, f, alpha, se.method, J) { } ## Optimal inference in RD under Taylor class -RDTOpt.fit <- function(d, M, opt.criterion, alpha, beta, se.method, J) { +RDTOpt <- function(d, M, opt.criterion, alpha, beta, se.method, J) { ## First check if sigma2 is supplied if (is.null(d$sigma2)) - d <- NPRPrelimVar.fit(d, se.initial="EHW") + d <- PrelimVar(d, se.initial="EHW") if (!is.null(d$clusterid)) warning(paste0("Optimal kernel can only be used with independent data.", "Ignoring clusterid")) @@ -124,7 +124,7 @@ RDTOpt.fit <- function(d, M, opt.criterion, alpha, beta, se.method, J) { CVb(maxbias/hse, alpha) * hse # Half-length } ## eq is convex, start around MSE optimal b - bs <- RDTOpt.fit(d, M, "MSE", alpha, beta, se.method, J)$omega/2 + bs <- RDTOpt(d, M, "MSE", alpha, beta, se.method, J)$omega/2 lff <- RDgbC(d, stats::optimize(eq, c(bs/2, 3*bs/2))$minimum, C) } @@ -166,7 +166,7 @@ RDTEfficiencyBound <- function(object, opt.criterion="FLCI", beta=0.5) { d <- object$data alpha <- object$coefficients$alpha C <- object$coefficients$M/2 - d <- NPRPrelimVar.fit(d, se.initial="EHW") + d <- PrelimVar(d, se.initial="EHW") if (opt.criterion=="OCI") { delta <- stats::qnorm(1-alpha)+stats::qnorm(beta) @@ -174,7 +174,7 @@ RDTEfficiencyBound <- function(object, opt.criterion="FLCI", beta=0.5) { se.method="supplied.var") r2 <- RDTEstimator(d, RDLFFunction(d, C, 2*delta), alpha, se.method="supplied.var") - return(r2$omega/(r1$delta*r1$coefficients$std.error+r1$omega)) + return(r2$omega / (r1$delta*r1$coefficients$std.error+r1$omega)) } else { ## From proof of Pratt result, it follows that the expected length is ## int pnorm(z_{1-alpha}-delta_t) dt, where delta_t is value of inverse @@ -187,9 +187,9 @@ RDTEfficiencyBound <- function(object, opt.criterion="FLCI", beta=0.5) { ## By symmetry, half-length is given by value of integral over R_+. The ## integrand equals 1-alpha at zero, need upper cutoff upper <- 10 - while(integrand(upper)>1e-10) upper <- 2*upper - den <- RDTOpt.fit(d, 2*C, opt.criterion="FLCI", alpha, beta, - se.method="supplied.var")$coefficients + while (integrand(upper)>1e-10) upper <- 2*upper + den <- RDTOpt(d, 2*C, opt.criterion="FLCI", alpha, beta, + se.method="supplied.var")$coefficients den <- (den$conf.high-den$conf.low)/2 return(stats::integrate(integrand, 1e-6, upper)$value / den) } diff --git a/R/documentation.R b/R/documentation.R index cb8a941..22213dc 100644 --- a/R/documentation.R +++ b/R/documentation.R @@ -1,3 +1,4 @@ +# nolint start #' Head Start data from Ludwig and Miller (2007) #' #' Subset of Ludwig-Miller (2007) data. Counties with missing poverty rate, or @@ -45,7 +46,7 @@ #' #' } "headst" - +# nolint end #' Austrian unemployment duration data from Lalive (2008) #' diff --git a/R/kernels.R b/R/kernels.R index e8a7545..780416e 100644 --- a/R/kernels.R +++ b/R/kernels.R @@ -16,7 +16,7 @@ EqKern <- function(kernel = "uniform", boundary = TRUE, order = 0) { ## support su <- function(u) (u <= 1) * (u >= -1 + boundary) ## Boundary and order type - if(is.function(kernel)) { + if (is.function(kernel)) { EqKernN(kernel, boundary = boundary, order = order) } else if (order > 2) { K <- EqKern(kernel = kernel, boundary=boundary, order = 0) @@ -33,7 +33,7 @@ EqKern <- function(kernel = "uniform", boundary = TRUE, order = 0) { "1FALSEtriangular" = function(u) (1 - abs(u)) * su(u), "1FALSEepanechnikov" = function(u) 3/4 * (1 - u^2) * su(u), "1TRUEuniform" = function(u) (4 - 6*u) * su(u), - "1TRUEtriangular" = function(u) 6*(1 - 2*u) * (1 - u) * su(u), + "1TRUEtriangular" = function(u) 6 * (1 - 2*u) * (1 - u) * su(u), "1TRUEepanechnikov" = function(u) 6/19 * (16-30*u) * (1-u^2) * su(u), "2FALSEuniform" = function(u) (9 - 15 * u^2) / 8 * su(u), diff --git a/R/plots.R b/R/plots.R index 17093a3..cb468c8 100644 --- a/R/plots.R +++ b/R/plots.R @@ -16,11 +16,11 @@ #' @return An object of class \code{"ggplot"}, a scatterplot the binned raw #' observations. #' @examples -#' plot_RDscatter(log(earnings)~yearat14, data=cghs, cutoff=1947, +#' RDScatter(log(earnings)~yearat14, data=cghs, cutoff=1947, #' avg=Inf, propdotsize=TRUE) #' @export -plot_RDscatter <- function(formula, data, subset, cutoff=0, na.action, avg=10, - xlab=NULL, ylab=NULL, vert=TRUE, propdotsize=FALSE) { +RDScatter <- function(formula, data, subset, cutoff=0, na.action, avg=10, + xlab=NULL, ylab=NULL, vert=TRUE, propdotsize=FALSE) { if (!requireNamespace("ggplot2", quietly = TRUE)) stop("This function requires the ggplot2 package", call. = FALSE) ## construct model frame @@ -42,11 +42,10 @@ plot_RDscatter <- function(formula, data, subset, cutoff=0, na.action, avg=10, ## don't recycle maxp <- (np %/% avg) * avg maxm <- (nm %/% avg) * avg - bd <- data.frame( - x=c(colMeans(matrix(d$X[d$m][1:maxm], nrow=avg)), - colMeans(matrix(d$X[d$p][1:maxp], nrow=avg))), - y=c(colMeans(matrix(d$Y[d$m][1:maxm], nrow=avg)), - colMeans(matrix(d$Y[d$p][1:maxp], nrow=avg)))) + bd <- data.frame(x=c(colMeans(matrix(d$X[d$m][1:maxm], nrow=avg)), + colMeans(matrix(d$X[d$p][1:maxp], nrow=avg))), + y=c(colMeans(matrix(d$Y[d$m][1:maxm], nrow=avg)), + colMeans(matrix(d$Y[d$p][1:maxp], nrow=avg)))) ## if there is a remainder, add it if (maxm+1<=nm) bd <- rbind(bd, data.frame(x=mean(d$X[d$m][(maxm+1):nm]), @@ -65,10 +64,9 @@ plot_RDscatter <- function(formula, data, subset, cutoff=0, na.action, avg=10, } p <- p + ggplot2::theme(legend.position = "none") - if(!is.null(xlab)) p <- p + ggplot2::xlab(xlab) - if(!is.null(ylab)) p <- p + ggplot2::ylab(ylab) - if(vert) p <- p + ggplot2::geom_vline(xintercept=d$orig.cutoff, - linetype="dotted") - + if (!is.null(xlab)) p <- p + ggplot2::xlab(xlab) + if (!is.null(ylab)) p <- p + ggplot2::ylab(ylab) + if (vert) p <- p + ggplot2::geom_vline(xintercept=d$orig.cutoff, + linetype="dotted") p } diff --git a/R/prelim_var.R b/R/prelim_var.R index 130f659..9281a4f 100644 --- a/R/prelim_var.R +++ b/R/prelim_var.R @@ -13,7 +13,7 @@ sigmaNN <- function(X, Y, J=3, weights=rep(1L, length(X))) { ind <- (abs(X-X[k])<=d) ind[k] <- FALSE # exclude oneself Jk <- sum(weights[ind]) - sigma2[k, ] <- Jk/(Jk+weights[k])* + sigma2[k, ] <- Jk / (Jk+weights[k])* if (NCOL(Y)>1) as.vector(outer(Y[k, ]-colSums(weights[ind]*Y[ind, ])/Jk, Y[k, ]-colSums(weights[ind]*Y[ind, ])/Jk)) @@ -28,7 +28,7 @@ sigmaNN <- function(X, Y, J=3, weights=rep(1L, length(X))) { ## ## Compute estimate of variance, which can then be used in optimal bandwidth ## calculations. These estimates are unweighted. -NPRPrelimVar.fit <- function(d, se.initial="EHW") { +PrelimVar <- function(d, se.initial="EHW") { ## Pilot bandwidth: either IK/ROT, or else Silverman (for actually computing ## IK) for uniform kernel making sure this results in enough distinct values ## on either side of threshold so we don't have perfect fit @@ -47,21 +47,21 @@ NPRPrelimVar.fit <- function(d, se.initial="EHW") { } if (se.initial == "EHW") { - h1 <- if (d$class=="IP") ROTBW.fit(drf) else IKBW.fit(drf) - if(is.nan(h1)) { + h1 <- if (d$class=="IP") ROTBW(drf) else IKBW(drf) + if (is.nan(h1)) { warning("Preliminary bandwidth is NaN, setting it to Inf") h1 <- Inf } - r1 <- NPRreg.fit(d, max(h1, hmin), se.method="EHW") + r1 <- NPReg(d, max(h1, hmin), se.method="EHW") } else if (d$class == "SRD" && se.initial == "Silverman") { ## Silverman only for RD/IK h1 <- max(1.84*stats::sd(d$X)/sum(length(d$X))^(1/5), hmin) - r1 <- NPRreg.fit(d, h1, "uniform", order=0, se.method="EHW") + r1 <- NPReg(d, h1, "uniform", order=0, se.method="EHW") ## Variance adjustment for backward compatibility lp <- length(r1$sigma2[d$p & r1$w != 0]) lm <- length(r1$sigma2[d$m & r1$w != 0]) - r1$sigma2[d$p] <- r1$sigma2[d$p]*lp/(lp-1) - r1$sigma2[d$m] <- r1$sigma2[d$m]*lm/(lm-1) + r1$sigma2[d$p] <- r1$sigma2[d$p]*lp / (lp-1) + r1$sigma2[d$m] <- r1$sigma2[d$m]*lm / (lm-1) } else { stop("This method for preliminary variance estimation not supported") } @@ -77,9 +77,9 @@ NPRPrelimVar.fit <- function(d, se.initial="EHW") { } else { d$sigma2 <- matrix(NA, nrow=length(d$X), ncol=4) d$sigma2[d$p, ] <- matrix(rep(colMeans(r1$sigma2[d$p & r1$w != 0, ]), - each=sum(d$p)), nrow=sum(d$p)) + each=sum(d$p)), nrow=sum(d$p)) d$sigma2[d$m, ] <- matrix(rep(colMeans(r1$sigma2[d$m & r1$w != 0, ]), - each=sum(d$m)), nrow=sum(d$m)) + each=sum(d$m)), nrow=sum(d$m)) } d } @@ -103,11 +103,11 @@ Moulton <- function(u, d) { ## Rule of thumb bandwidth for inference at a point. Only used by -## NPRPrelimVar.fit +## PrelimVar ## ## Calculate bandwidth for inference at a point with local linear regression ## using method in Fan and Gijbels (1996, Chapter 4.2). -ROTBW.fit <- function(d, kern="triangular") { +ROTBW <- function(d, kern="triangular") { X <- d$X boundary <- if ((min(X)>=0) || (max(X)<=0)) TRUE else FALSE N <- length(d$X) @@ -115,7 +115,7 @@ ROTBW.fit <- function(d, kern="triangular") { ## STEP 0: Estimate f_X(0) using Silverman h1 <- 1.843 * min(stats::sd(X), (stats::quantile(X, 0.75) - - stats::quantile(X, 0.25)) / 1.349) / N^(1/5) + stats::quantile(X, 0.25)) / 1.349) / N^(1/5) f0 <- sum(abs(X) <= h1) / (2*N*h1) ## STEP 1: Estimate (p+1)th derivative and sigma^2 using global polynomial @@ -126,9 +126,8 @@ ROTBW.fit <- function(d, kern="triangular") { sigma2 <- stats::sigma(r1)^2 ## STEP 2: Kernel constants - s <- kernC[kernC$kernel==kern & - kernC$order==order & - kernC$boundary==boundary, ] + s <- kernC[kernC$kernel==kern & kernC$order==order & + kernC$boundary==boundary, ] nu0 <- s$nu0 mup <- s[[paste0("mu", order+1)]] @@ -136,26 +135,24 @@ ROTBW.fit <- function(d, kern="triangular") { B <- deriv * mup V <- sigma2 * nu0 /f0 - (V/(B^2 * 2 * (order+1) * N))^(1/(2*order+3)) + (V / (B^2 * 2 * (order+1) * N))^(1 / (2*order+3)) } -## Imbens and Kalyanaraman bandwidth. Only used by NPRPrelimVar.fit +## Imbens and Kalyanaraman bandwidth. Only used by PrelimVar ## ## Reproduce bandwidth from Section 6.2 in Imbens and Kalyanaraman (2012) -IKBW.fit <- function(d, kern="triangular", verbose=FALSE) { +IKBW <- function(d, kern="triangular", verbose=FALSE) { Nm <- sum(d$m) Np <- sum(d$p) N <- Nm+Np ## STEP 0: Kernel constant - s <- kernC[kernC$order==1 & - kernC$boundary==TRUE & - kernC$kernel==kern, ] + s <- kernC[kernC$order==1 & kernC$boundary==TRUE & kernC$kernel==kern, ] const <- (s$nu0/s$mu2^2)^(1/5) ## STEP 1: Estimate f(0), sigma^2_(0) and sigma^2_+(0), using Silverman ## pilot bandwidth for uniform kernel - d <- NPRPrelimVar.fit(d, se.initial="Silverman") + d <- PrelimVar(d, se.initial="Silverman") h1 <- 1.84*stats::sd(d$X)/N^(1/5) f0 <- sum(abs(d$X) <= h1) / (2*N*h1) varm <- d$sigma2[d$m][1] @@ -169,21 +166,21 @@ IKBW.fit <- function(d, kern="triangular", verbose=FALSE) { ## Left and right bandwidths, Equation (15) and page 956. ## Optimal constant based on one-sided uniform Kernel, 7200^(1/7), - h2m <- 7200^(1/7) * (varm/(f0*m3^2))^(1/7) * Nm^(-1/7) - h2p <- 7200^(1/7) * (varp/(f0*m3^2))^(1/7) * Np^(-1/7) + h2m <- 7200^(1/7) * (varm / (f0*m3^2))^(1/7) * Nm^(-1/7) + h2p <- 7200^(1/7) * (varp / (f0*m3^2))^(1/7) * Np^(-1/7) ## estimate second derivatives by local quadratic m2m <- 2*stats::coef(stats::lm(d$Y ~ d$X + I(d$X^2), - subset=(d$X >= -h2m & d$X<0)))[3] + subset = (d$X >= -h2m & d$X<0)))[3] m2p <- 2*stats::coef(stats::lm(d$Y ~ d$X + I(d$X^2), - subset=(d$X <= h2p & d$X>=0)))[3] + subset = (d$X <= h2p & d$X>=0)))[3] ## STEP 3: Calculate regularization terms, Equation (16) rm <- 2160*varm / (sum(d$X >= -h2m & d$X<0) * h2m^4) rp <- 2160*varp / (sum(d$X <= h2p & d$X>=0) * h2p^4) - if(verbose) + if (verbose) cat("\n h1: ", h1, "\n N_{-}, N_{+}: ", Nm, Np, "\n f(0): ", f0, "\n sigma^2_{+}(0): ", sqrt(varp), "^2\n sigma^2_{+}(0):", sqrt(varm), "^2", "\n m3: ", m3, "\n h_{2, +}:", h2p, "h_{2, -}:", diff --git a/R/utils.R b/R/utils.R index 2f3ba7d..1cd4f1f 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1,6 +1,6 @@ ## Get rid of AsIs class attribute for making sort work unAsIs <- function(X) { - if(inherits(X, "AsIs")) { + if (inherits(X, "AsIs")) { class(X) <- class(X)[-match("AsIs", class(X))] } X @@ -10,7 +10,7 @@ unAsIs <- function(X) { NPRData <- function(d, cutoff, class) { Xindex <- if (class=="FRD") 3 else 2 ## Unclass in case generated by I() - if(is.unsorted(d[[Xindex]])) + if (is.unsorted(d[[Xindex]])) d <- d[sort(unAsIs(d[[Xindex]]), index.return=TRUE)$ix, ] Y <- if (class=="FRD") cbind(d[[1]], d[[2]]) else d[[1]] @@ -20,7 +20,7 @@ NPRData <- function(d, cutoff, class) { df$m <- df$X<0 df$sigma2 <- d$"(sigma2)" df$clusterid <- d$"(clusterid)" - df$w <- if(is.null(d$"(weights)")) rep(1L, length(df$X)) else d$"(weights)" + df$w <- if (is.null(d$"(weights)")) rep(1L, length(df$X)) else d$"(weights)" df } @@ -35,8 +35,8 @@ NPRData <- function(d, cutoff, class) { FindZero <- function(f, ival=1.1, negative=TRUE) { minval <- function(ival) if (negative==TRUE) -ival else min(1/ival, 1e-3) - while(sign(f(ival))==sign(f(minval(ival)))) - ival <- 2*ival + while (sign(f(ival))==sign(f(minval(ival)))) + ival <- 2*ival stats::uniroot(f, c(minval(ival), ival), tol=.Machine$double.eps^0.75)$root } diff --git a/data-raw/data-prep.R b/data-raw/data-prep.R index 8fdd904..f48b48f 100644 --- a/data-raw/data-prep.R +++ b/data-raw/data-prep.R @@ -98,10 +98,9 @@ fips <- rbind(fips, statefp=c(2, 30, 51, 12, 2, 2), countyfp=c(280, 113, 780, 25, 231, 201), county=c("Wrangell-Petersburg", - "Yellowstone National Park", - "South Boston", "Date County", - "Skagway-Yakutat-Angoon", - "Prince of Wales-Outer Ketchikan"), + "Yellowstone National Park", "South Boston", + "Date County", "Skagway-Yakutat-Angoon", + "Prince of Wales-Outer Ketchikan"), cfips=c(2280, 30113, 51780, 12025, 2231, 2201))) fips <- fips[fips$statefp<57, ] diff --git a/data-raw/kernel-moments.R b/data-raw/kernel-moments.R index abf4f4f..9fda709 100644 --- a/data-raw/kernel-moments.R +++ b/data-raw/kernel-moments.R @@ -33,7 +33,7 @@ kernC$pi1 <- c(1/2, 1/3, 3/8, 16/27, 3/8, 702464/1603125, 1/2, 1/3, 3/8, 1/2, 1/3, 3/8, 0.4875, 0.3115591197, 0.3603316352) kernC$pi2 <- c(1/3, 1/6, 1/5, 59/162, 3/16, 16520549/72140625, - 558*sqrt(6)/5^5, 12*sqrt(5)/5^3, 0.26617935, + 558*sqrt(6) / 5^5, 12*sqrt(5) / 5^3, 0.26617935, 1/3, 1/6, 1/5, 1/3, 1/6, 1/5, 0.2788548019, 0.1398694518, 0.1717750173) kernC$pi3 <- c(1/4, 1/10, 1/8, 113/405, 1/8, 235792912/1514953125, diff --git a/doc/RDHonest.R b/doc/RDHonest.R index 3f668bf..7d7c75c 100644 --- a/doc/RDHonest.R +++ b/doc/RDHonest.R @@ -10,16 +10,15 @@ library("RDHonest") ## ----fig.width=4.5, fig.height=3.5, fig.cap="Lee (2008) data"----------------- ## plot 25-bin averages in for observations 50 at most points ## away from the cutoff. See Figure 1. -plot_RDscatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, - avg=50, propdotsize=FALSE, - xlab="Margin of victory", - ylab="Vote share in next election") +RDScatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, + avg=50, propdotsize=FALSE, xlab="Margin of victory", + ylab="Vote share in next election") ## ----fig.width=4.5, fig.height=3.5, fig.cap="Oreopoulos (2006) data"---------- ## see Figure 2 -f2 <- plot_RDscatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, - avg=Inf, xlab="Year aged 14", ylab="Log earnings", - propdotsize=TRUE) +f2 <- RDScatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, + avg=Inf, xlab="Year aged 14", ylab="Log earnings", + propdotsize=TRUE) ## Adjust size of dots if they are too big f2 + ggplot2::scale_size_area(max_size = 4) @@ -36,24 +35,24 @@ RDHonest(voteshare~margin, data=lee08, kern="uniform", M=0.1, h=10, sclass="H") ## ----------------------------------------------------------------------------- RDHonest(voteshare ~ margin, data=lee08, kern="triangular", - M=0.1, opt.criterion="MSE", sclass="H") + M=0.1, opt.criterion="MSE", sclass="H") ## Choose bws optimal for length of CI RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", sclass="H") + opt.criterion="FLCI", sclass="H") ## ----------------------------------------------------------------------------- ## Replicate Table 2, column (10) RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") ## Triangular kernel generally gives tigher CIs RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") ## ----------------------------------------------------------------------------- ## Replicate Table 2, column (6), run local linear regression (order=1) ## with a uniform kernel (other kernels are not yet implemented) RDHonestBME(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, h=3, order=1) + data=cghs, h=3, order=1) ## ----------------------------------------------------------------------------- ## Data-driven choice of M @@ -62,18 +61,18 @@ RDHonest(voteshare ~ margin, data=lee08, kern="uniform", sclass="H", ## ----------------------------------------------------------------------------- r1 <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", M=0.1, - opt.criterion="FLCI", - se.method="nn")$coefficients + opt.criterion="FLCI", + se.method="nn")$coefficients r2 <- RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", se.method="nn", - sclass="T")$coefficients + opt.criterion="FLCI", se.method="nn", + sclass="T")$coefficients r1$conf.high-r1$conf.low r2$conf.high-r2$conf.low ## ----------------------------------------------------------------------------- ## Add variance estimate to the Lee (2008) data so that the RDSmoothnessBound ## function doesn't have to compute them each time -## dl <- NPRPrelimVar.fit(dl, se.initial="nn") +## dl <- PrelimVar(dl, se.initial="nn") ### Only use three point-average for averages of a 100 points closest to cutoff, ### and report results separately for points above and below cutoff @@ -92,9 +91,9 @@ d$cell <- d$mod/100+d$yearat14 ## Data with cell averages dd <- data.frame() for (j in unique(d$cell)){ - dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), - x=mean(d$yearat14[d$cell==j]), - weights=length(d$yearat14[d$cell==j]))) + dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), + x=mean(d$yearat14[d$cell==j]), + weights=length(d$yearat14[d$cell==j]))) } ## ----------------------------------------------------------------------------- @@ -112,16 +111,16 @@ RDHonest(y~x, cutoff=1947, weights=weights, h=5, data=dd, M=0.1, ## ----------------------------------------------------------------------------- ## Initial estimate of treatment effect for optimal bandwidth calculations r <- RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) ## Use it to compute optimal bandwidth RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", - T0=r$coefficients$estimate) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", + T0=r$coefficients$estimate) ## ----------------------------------------------------------------------------- ## Data-driven choice of M RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) + opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) ## ----------------------------------------------------------------------------- ## Transform data, specify we're interested in inference at x0=20, diff --git a/doc/RDHonest.Rmd b/doc/RDHonest.Rmd index ccbb617..6e55f0f 100644 --- a/doc/RDHonest.Rmd +++ b/doc/RDHonest.Rmd @@ -72,17 +72,16 @@ library("RDHonest") ## Plots -The package provides a function `plot_RDscatter` to plot the raw data. To remove +The package provides a function `RDScatter` to plot the raw data. To remove some noise, the function plots averages over `avg` number of observations. The function takes an `RDData` object as an argument ```{r, fig.width=4.5, fig.height=3.5, fig.cap="Lee (2008) data"} ## plot 25-bin averages in for observations 50 at most points ## away from the cutoff. See Figure 1. -plot_RDscatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, - avg=50, propdotsize=FALSE, - xlab="Margin of victory", - ylab="Vote share in next election") +RDScatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, + avg=50, propdotsize=FALSE, xlab="Margin of victory", + ylab="Vote share in next election") ``` The running variable in the Oreopoulos dataset is discrete. It is therefore @@ -93,9 +92,9 @@ averages over. ```{r, fig.width=4.5, fig.height=3.5, fig.cap="Oreopoulos (2006) data"} ## see Figure 2 -f2 <- plot_RDscatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, - avg=Inf, xlab="Year aged 14", ylab="Log earnings", - propdotsize=TRUE) +f2 <- RDScatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, + avg=Inf, xlab="Year aged 14", ylab="Log earnings", + propdotsize=TRUE) ## Adjust size of dots if they are too big f2 + ggplot2::scale_size_area(max_size = 4) ``` @@ -211,10 +210,10 @@ optimality criterion: ```{r} RDHonest(voteshare ~ margin, data=lee08, kern="triangular", - M=0.1, opt.criterion="MSE", sclass="H") + M=0.1, opt.criterion="MSE", sclass="H") ## Choose bws optimal for length of CI RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", sclass="H") + opt.criterion="FLCI", sclass="H") ``` ### Inference when running variable is discrete @@ -232,10 +231,10 @@ As an example, consider the @oreopoulos06 data, in which the running variable is ```{r} ## Replicate Table 2, column (10) RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") ## Triangular kernel generally gives tigher CIs RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") ``` In addition, the package provides function `RDHonestBME` that calculates honest @@ -246,11 +245,12 @@ no worse at the cutoff than away from the cutoff as in Section 5.2 in @KoRo16. ## Replicate Table 2, column (6), run local linear regression (order=1) ## with a uniform kernel (other kernels are not yet implemented) RDHonestBME(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, h=3, order=1) + data=cghs, h=3, order=1) ``` -Let us describe the implementation of the variance estimator $\hat{V}(W)$ used to construct the CI as described in in Section 5.2 in @KoRo16. Suppose the point +Let us describe the implementation of the variance estimator $\hat{V}(W)$ used +to construct the CI as described in in Section 5.2 in @KoRo16. Suppose the point estimate is given by the first element of the regression of the outcome $y_i$ on $m(x_i)$. For instance, local linear regression with uniform kernel and bandwidth $h$ corresponds to $m(x)=I(|x|\leq h)\cdot(I(x>c_0),1,x, x\cdot @@ -347,9 +347,10 @@ $M$ a priori, rather than attempting to use a data-driven method. Therefore, one should, whenever possible, use problem-specific knowledge to decide what choice of $M$ is reasonable a priori. -For cases in which this is difficult, the function `NPR_MROT.fit` implements the method -considered in Section 3.4.1 in @ArKo16honest based on a global polynomial -approximation: +For cases in which this is difficult, the internal function `RDHonest` +implements the method considered in Section 3.4.1 in @ArKo16honest based on a +global polynomial approximation: + ```{r} ## Data-driven choice of M RDHonest(voteshare ~ margin, data=lee08, kern="uniform", sclass="H", @@ -369,11 +370,11 @@ estimate used to compute optimal bandwidths: ```{r} r1 <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", M=0.1, - opt.criterion="FLCI", - se.method="nn")$coefficients + opt.criterion="FLCI", + se.method="nn")$coefficients r2 <- RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", se.method="nn", - sclass="T")$coefficients + opt.criterion="FLCI", se.method="nn", + sclass="T")$coefficients r1$conf.high-r1$conf.low r2$conf.high-r2$conf.low ``` @@ -383,10 +384,13 @@ r2$conf.high-r2$conf.low The package also implements lower-bound estimates for the smoothness constant $M$ for the Taylor and Hölder smoothness class, as described in the supplements to @KoRo16 and @ArKo16optimal +TODO: `PrelimVar` is internal + + ```{r} ## Add variance estimate to the Lee (2008) data so that the RDSmoothnessBound ## function doesn't have to compute them each time -## dl <- NPRPrelimVar.fit(dl, se.initial="nn") +## dl <- PrelimVar(dl, se.initial="nn") ### Only use three point-average for averages of a 100 points closest to cutoff, ### and report results separately for points above and below cutoff @@ -412,9 +416,9 @@ d$cell <- d$mod/100+d$yearat14 ## Data with cell averages dd <- data.frame() for (j in unique(d$cell)){ - dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), - x=mean(d$yearat14[d$cell==j]), - weights=length(d$yearat14[d$cell==j]))) + dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), + x=mean(d$yearat14[d$cell==j]), + weights=length(d$yearat14[d$cell==j]))) } ``` @@ -491,11 +495,11 @@ estimator of the treatment effect ```{r} ## Initial estimate of treatment effect for optimal bandwidth calculations r <- RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) ## Use it to compute optimal bandwidth RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", - T0=r$coefficients$estimate) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", + T0=r$coefficients$estimate) ``` ## Data-driven choice of smoothness constant @@ -513,7 +517,7 @@ approximation: ```{r} ## Data-driven choice of M RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) + opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) ``` See @ArKo16honest for a discussion of the restrictions on the parameter space under which this method yields honest inference. diff --git a/doc/RDHonest.pdf b/doc/RDHonest.pdf index 172c779ad19f69ed06b2c61bf794321e78063b54..ea04181b031a2e7952d2e80ff9ff1d56e4222ddb 100644 GIT binary patch delta 13611 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 RV&h>)fT5z2RF*>ce*lGtJ(U0e delta 13646 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 z zCbct*;ZH2LyOc8?mW=iL$%RJwnW!~4Hl`Mu$p)ERg}-)5mdX6thil}HKJ9~=@tMVe zlZF5M4y?iOcgDm*%J;42$F?+ot<-N(Eq-(nDiM^2h(Kq|IEsAy8)9Ht`<4BWZdfdH zPar!Fj9uGt#BJ$)j%T8mN(z?8lYzWj;9W&^M~RoP?&5#gDMbN80XPne;s2h_?)82X zmlF*suxTx@0bP(JVCCZazg#363G@G5Nm#g9SpE&OAgF+xwdf%idDt3Om?Q0-)T)O zFXU$?`v$?4LDq5Fxhq!Js8^jQ<|;F?Izc|i*Y-xoBnTA{bAmitOv9&3`9T!a&;v6n zSOUW!`+&)*DMTrxe`4mz2_j368@zl`gT2Dq`s`EfZ#-<@=z$PBAdnMy+yWBai(FH> z?D5E1+AZ9@P*4D!#wrD2%WtL;R#%bH(-lDzrl`nAN?>p1aA$9VqHf300gnT9 z5jIoPqf)a8%*-L{d)2y~&&ZiSua+3-Ey=fGR$g4)^sslwJ*&K7N&-f;^V~ z;1s4R>zx6~NAKI5n_Yf!ME-dRBCKa-i=7OhJ=1YDzG;a*{_p@8>^{#wgK5@yc=&Mn zz%Fw@fg;){nRh-VOL(ypz?2X4>ldhp1;C*2C)VJT=FF(0mlIzn@4)PEFM?>nM50DSkC zlErGqhP$baLmUG(pyq{lw2=;-? zL|;_3UpCd&uh(v0$j0;2;lKu|o$Y5j9wk&M03W1?ChVz(PLbbO57{?4`|1eHd{St& zaiu@=oJ&^ML38@A<0Ej(P!%mcHV5fZTw0Y#e7jGrnX%Qfg^!cKPtS=|ibs$i@s? zYNVI^%NF##`c-K9E6Z0+%~Q>+ZHa=bjDrv4h-e{%Qtw?}gYo1w7J zW{>WGvpv2|4XA7PZwONh{CSr|F_w?S(5&ncMgAGfDcu#NT9D6z#f!j4Sa~)^&d;WZ zpjaRCNZgaGIl~ormkktN0(rcM&g5}gpOR~3h=rW0AIvLCi=V|cVV^srM3;$vaSM0{ z%pJ;EBD3c))6+Cbin&BI&?A!J5k6nSkHouk$HVO~(5{+7K0Q12t8!(tNYIwiSDu7xeJg-m&@=5+x!C+( z`#7d!_9=#Dbgj@aRb*x*- zUO1*F$oe^mLaW{WuysR9C1K1;g;k$&zuxl_!AC7y!|E-|STqXlnh%IM?hr zUbmCs95!yK6xT}4*?`AULoq8K1|p%AjdrT(kl0`8G~?>7)wu4HGNGAU$CgUA5__Eb zPwx0^e1!`JY;a`_-FLLtQSn15{; zX}BMipAJyj6A)ih7}CPHm0S07iLx2=_jvVJX7n9%GYMvXzo7W z>JDw%a48AzyE$B)4S%mUKLDpsjg4Q(?Ef#Th#k2BwPoR3H_8uKTww9|j*> z=T_yY9_*5ivQ-(DMApn7xs~L(Bh$XB;?|F$346fPW3ecw>NMhq;e zZo`8iWt6%sey>=N{)_V7S-EDOaL6T(f`NUz!Ou&x5kZYq_1}fllVkmQUX63N-|q3A z&M5)!+$B+FNZGiRlfmfzt{&&(1?qHIBu*@oC?&3#kWREAUcDK`35T4Nt4^Cy*o=ZL zM`m0`#{IzFkr}ZqGOY?v?qs9F$1JcEq!uhUnR8PROIURB7InID7O?|&XV!=p2 zrPn-t&SOa2Trcb`niWnPBHZ)qX0#wrsS+85Cy%N2=cp$={4Nu6_ONo)CM{0xF}HIU zV>hg5^2Cf^4q_}LGr?Qzo@F9%X7Uc$x@cr{m>^rJqYU@USEGe#=C|IDk_k@ zCv!X(rM!i<<^0iKhfcIV&PXqtKBYVEMRD;>+PzD2{w+K2+wKbCR5~gu?=1=CG1^&_ zFu)#k;FwrOalzO|a9a1SFlRpYgCH%n%!vD1#t!%u+WBXse1YCvB+`ry`eF3`&(l8wRYbvoo^?n@ zoW3bb4Ub=6C$rz0@_^U0XaqpB&=3Bw`5cDb6qG`pHYVyKGc;-s@o zIF$D5hnQ6KA;QGr42C@6eyf9heuKM*c-9+vx!cOZ-qgDydh-g|yYOyEJuM4Wo6VVz zC%Hv+Kn0od7GwE|X}Z3fTx4d3G-wAk_gUp+=WbN*QxSD?I!E#fL)yRoc@At#%bDi7 zmhSXt8C=q1rN^q6#{y*v>#EFv9nQ!HOuD+K7mE|YFq>cw#@Pry`wrY%yCO3V=(?zA7145X>QXTq87mSw&-SpCaVEBRhqoEC|tX_ZHi=!wYdJpuAQPX|+@^S5Ow zF=@kX69foY7#M@_d!23O$!!El5a^G_Qm)ArQFSJ@+-6Ru-=~OL3j%9g+lCQHS`~}Q zSA40+6dK`r+{OS))?9Jkd&P@1ks7B-9?##?U9Ea*DXT9{y576OIQkit0LwVFUXX}ii+6u&@RNc~SGov@>XG!bnafyNY20^2@hjX$ zG48YI<@hQTh9gJ&I-S{L{eH=xkhX%m#G<%;;6vy(5^Q^<1Y4*;AiZOOQ{Ot}ia(XE zF-G)y>SmUG=Ql-V|8#uQQ`+S5es$j_g}%*@68({O+})`g>SbO)S^WUfzG6T1-HBg? z9iQ<$r3nJKJr<6*vea1m^I(alA~MQ(wtT8U>r$U5+e0~KxWv)Qe`wg^Bls!S5!PTH z$!LGD+CFG6k+?E#tLJ#pJ zd@?07=u1fK&Eum#%1bH>@~!hBdi&SxO$`!?a1{lxvsfxfQg`kaOj=mr@pn1D= zX$n53?9$k-{wuo6Py#Up6Bf^y&|Oo%>65|+J_&2H!~83Y`{o;j#Jhq%8LRxqJoGBP zrICGU2AuWLUSb*FRcq z^Nx-`?G?V!vX(V@;pY`a#&*PuP!q`{C%&uVZ6Kc|W@*PO$zPCw{tP27qkDg#RD8(Z z5ymm)P8|3ZZU$z^3-HU zVAH#hh&y1hB>vn%cLeWto?1*;pT#^(%IdL(r$Jk3ol52im$O!|3O*4EHSm?nsgL|} z?xlt6Y8X=+BlW&Xi}V`!$e4G9mqYjFfR{A+QedFOtkOkWAN z;~Jf%3-kj?;_5r6QMxaBX0002HqZqCzuUP{R<0-0mg2X>o>zr#3G~;Lm_OV zHdp}fS1M7#@{ni_14e3Dd*_i*d-tS3>7cX}?z*2aslK<)Ha~Q=T7h`}lN1}OP(+e- z$!gzM4O2%f`6J?_Oom-0WA?HyD}JqfqU7dHQpqfjukk5*z|*W@38?OFgH_SRpNtC6B zftBzSWl9Dd8HEqAXJIwoxx!({8Qr$8#KuM{^WH)5teJpocut%z4Y!+yvk5uZM0o3I z|AuWCbxrF?meiP?mPeR4BN9cxzvo-uoB>9{d}fm&;t8_1L~~lyPcx=$5^%)@uaR>wG!;NefLG+0ZqT4t zCQNr4dN4A<>?h$oIKFwQWRR|A2mq~B1IT8LJaV&w0d}T^m3`mj#JAS-O*HE3AJS5RjV6;Mgr6*R(M85f#Td=m(DBP*Lazs>gR-^^k59hnCrfoP z9>|Ki=$LQZ=j>w^K_Qw%n~>Iy`)D@mUBPeaNGDz6g2ljW6+zFj-O3{M{uOFuEmP1w z5q%Iyk^X|&GIe4tYZbAl*Pcws>M!j+Se?Z1(O~V{5pFmai4`bdpEAw*tZ$w$<|$1b z0=}gsbIzrrJc_p_(lMSi>t87^6Q}DYVSKh67P`?AuG1X**}Lsg-`sq=*nFYkKDyXs z-|ni#VkrUdj(CXa!})p`{O~`|?C++$FG8_g%kq%x9upVXa7ocO@0197Bwj~Qlu`MM z(jk*AhrQ;=hI$Q{KgG*BV9!$GLd)>lj4=hhHMtb2WDaZeczMo22htB%i~612#Kq&6 zS;nK=ba$=ipH4sKSt-5!EV0#gFu?gRe9bC!tHq$8no(nM**c_ol;-bRa*}dU-7CNz z?)&bzgO{Ag`lCq5t2uhC^|pzSmb)>WeALRrmzHzjZIcgR+1T(H$-NsGVXRq|YzudM zxw`(|z!Z{P!H|V|^c%)6zQTYJ1>asMTGmxG%A9~1!pQG|(7T8Q5K-jB%v*G=uhSNO zF)j3Z&Ghw8(1L+)%by$IqJ1q#e}22;G7aA4s!xvumvf0d7*y-29u`|vP#)$$b9zhS z>*LynR}coe$;C7@inJbd2s#_oBz}^TKrpha&Su7&IMIpj2`MUQ4x0eAnR|{JC8hbc z+J>Ii=dNS6!N0{!DebJUa>d8W(~~^6(%R0B=a$jJePZV$$SY|e-6_$*h6)NW2Tq=w zal#)i!<)rai%b>JCyLp)gb&8gIdbr)NLlpVU*CZehu0H&a$XEfNY%Y&Qhq=8n4f~D z(!;`I&9@JZ^SRj2798fp{%}m#B8|7#Jwj=(64!$buIO(j5F2kme|xUc;jfFvhbikj zXGy6Fh9E_Jybm4}&$+xM_u!4wjN%J4E)2P2f*c&q-k|SwbnW(nThql4Rd3t7`W!{G z@RGog2NT9};Gium!yyyzt!x}e=I#O3TXKM=4YNKkr}z|}#WUQhgmg!=OaXA;a(*fh zet$Io1r`wD7TM@pNTpQ%J}VZQ|! zX?CR^%xqV3i!QjvoK|SgFp_~u9X$0Yz5&mjX!zx={Zv`b2$BP4fRsi*Oo9xNopC%y zvgWNP$sbR4!Aw8V^XZBWF{bDw9aj8fz0)Xen2R2~$EWy*vg15(0pZE!%H8O=kc-4f z#G))tUG4{mxMyN51O3hiGKP;q>e9MKH;)zdW!mL@8Y^aueK99oE?vDxi4TuCXkc_& z>7Yrs_hUoIqB~-MSj|qZE$_rq2X5`kv{svoXzTY@v~uVl=;#2*kiC3rrEPF|9TiUD ziz2rRSthPpVjdB0sbP)6?9oaB$wthg$41d{5^Q_7R`LK3nun)-QLIH`MRMxl;S=?BIf4hf5xyk%itI@GIz%a8XdJ{b) zeuP@yZIc9cjfg&kJ&W+`74t0-djUOrdgwplG?~($Hl~&WlrQNUlp?q9Ja^NALaF*K z^G~FPG*$0i)}LrwnN~~J{~md7@>doKq50%-D8N1&u4Im62fzhmUb1U?o&))&V`*^V zQaKdpO%1Q3d4B{H9>{astb$5Nh93@*BO*yH@0y|B*(mLrt>X=|Bav6n?0@TTsSXd9P4PW3v$kYWb2mR;jtS-Mj6aUr}SQ2F<#zQBF|-Cw!waOtX&f|TJ@ z7?tl4>0b2&r@c$b;TD@np8_C=l47WH&IS3+ZCp#U+*@S^yr)O?7NjKAm&{WjHG324 z>YAz*F1Ou_UK2RcfMu^fP@rlS#MygD^AHh4k@5}+E;IY>-KWud9kL=_ZpL~p_Y8YK zIcG~}^?qeAH71Qv&ajk@@GRNUJtq6z$H z4xRO9h)q|S<*O-n!Kr4#DNX*}|mvpU&XQ zLh8`Ole4d%7Neificd+Tc{Ntw;Rn>0kf5}f2ICPJQm(fZwvFQ|*EeKy7Qasf57|_> z#fG;P^5q#gHzkzI_op?Q#RS{WHHvPCW&~DW=d6ELyKn6%BLVXFHP$4c#!zZ$Ae8^9 z)9THb`%)U2GNGU>Rs^rCMTw+bxh*xLgyZ%b@dJ0b>Azw$NZw|}iWaG2wxF(y zX)?5{A@7{dqgc~p*8oiiW(PQes=LTZX0v@=6W>)n**lnTIx8o? zswJQ%&!T0Jzc@V(CFxItd@MM>#t(8L1m!XDThnQ+!|*9c8RZHb2k5eo&hjb0tiQ3t zZ96(U_G*(6)R{m^nF&C0`jwM}pu*6%mpiy*QEggS0%9-niH_gE=!JZc=C-92!N=?l z3&T#jfCEM$+Y~j;)AMVR!fE8pd~PD{^!RbRQ=>G0m@7mLzw9GpQgS-Hwtiu$_R8U* z>ACCDBxr1-UG2a*?v7vnfl#sNKgD-{$v64@8V17qy4MiBpa|BQiU~N$?4XrofBV}* z{&1|P0F2m0ZFHH!RCuY~syY6E>?~T36-Q~o3V1&5BUx~$vTeK$P7>kkv=t*y7&!Cv z9IQ4PrUvFSJ5?Gt3M6FhYTa`^=qFbERT5Sk%0aRpEs0nmX|J{l&l`j?{=^bcCDcT~ zt$BRaHA0mV?IVSgWhyKA%HM6EL6GX*iu_YZrtsijOhs#}wA2t5fJ z{=1-TLqq*1U+*-JwZu}ED6L(L`^1&ll32B~BFITunD7~Q!xGSQ%J%Yd#xiWMERaR& z0j$d5zk4&FxG%m2^4ffz2NqYZhzqz2aN)yQx7-Saho%ayjSR0{#Cjs)?dD8R#t^ZgZl~VPoa;NgS zPa;4DOB%Jgmmc2rrvn7xc0QERSlcq|3Sbwd(nu}IGpp59vcdLlm)aqqXS+l32lHQ7 zztrPCWR`Fy0XAC;Ag|ik?9Ks86B%j#`a2JCOU&*Fg{q{<%VESgFfP;X>lgRA^<;&$ zm1_qsOy*CC9k|XB7AbvU@mB3*^|RGMoNmahMt!6*JPesMJ(QbcWc>g_^dG+Sf9u{H@wEk10(=snK;5%)7q_FW?a=Qz+#JRil2RrhIQYM< zTEOB++bI$>iFQAVm*8o3VB&~E|ER!mp^0Q+=aWO3DPdnA_`XJ8n?nS~11MrJH6O!~ z=@c5=XyiDNYn`508Vb3di=v?5hD^SpfscMn#oW@h4``I)&z63lH6JP$*>NpKdCHqm z=nr|}xIome@w_PrHd@K& z(8O58uL4>0hGzvxiW z0zZ{mNPh1!@5N<*lUNfQcKF>)_Q{1SwMEkeON2Q=%wVH5Y;`F5@6Iby3@kps62wwWT&SZ+flLcF}0YUt_JwpY_!Mer0AMMw$Uxi62> zuNB$QKAdBCtw7MqFB;TqMzqIh-0tCzZ3?K|r<#>Njvh$zHMbPm;rwK#((jmwGrrulsE`;t}(kh%V^8-BPilSJ1xe3i@l)V z#Q21!DgaR6bVqdXHkQE?!WTc3U&JZPuf^R_QN(!@joup+ZfLk?N<6yenb6j^H6BR+FiGjJUT&4B1w^J09I4cMNA;BFqn9TqsF>>#A>OVj~IBVDEekkvZWDg83|~; z1c+Xz@BOt%Mm~;M|0UfpVi8Y(Tel$YS8Q2hmkGg1e7dGDa zC*Y8O?18lWVVi(Vt`l z*Ct8OlmSU6nOIap{q*Z53q@n#m0HT2tbnlDK-{z*G$h18gH9>V)#K8_RBkx_Z35h{ zg`yf=rkgz)7}x||Sfvk`Mw6$%%`7WTPxjZ;$dv+#o>W$G9OFR!%7Y_&qhsO2^>f!d zuC>s;-43$5SMaEY6GD2>%O>>vQMf$(3xud7V2Sgn@CEBSnzgUm*JT zjq+PVz={M6jy1$`?ninms-Di$l32SUxL4GWZ8cXexu4EJreUK9?Qx&}uMLE#eX*rE zVcXp3Njz+>XcQ*7KPBm6lY(ZBKT70t-};d6DRT)a>&ZFhlky8)^g`6|UW!WbgFYj6 z=UIY63gLcAK+LmSAiUddwn|nTS^%t-cgjGgn1{812^Xv_ zg4g5DPDz(G?!Lt2Hog(Wsd4{hU~97Chgm$9Oxt3w_(O4X2o`fq4L2$WIZ>_cCXM%2 zZo|V$xS)xtYIl)9+MNU_3BlQEUv;b*1%7~F?=38VNDYw5Bt`6aYF;OVF@jmBfuR4rx*V26G zOX$Zahl614UP{Y>#p)&Ie2k_Jg$&c5nYqoSjo{?W)K{Z^s|c8=5BH-y-VlJ5^kenP z>Y-rS{=RNLM0>f4QTeT?1xQGwt8XjGPQ*a_5u!NwZIU-GUg5*}kCGA7m$-yrHd`NY9r+xFvQ_3BOG7G5>P}odGd5rp84CLgda?YekQ6w$)Uc0X z6xg1$Lp}qsse)14bB|rY(Zg9ION$I2JS;a6zk3-DdWD<>J8X@#1ciw0Jy2Gjt-9-2 zK{>|Qr|drSBvjOVFlLqVXy7H{Qu|RwCv@|!eXqf(nrmkn0-*OFu$lLThmasM$A`o} z?=o5`Ed5^0^LeqRGLBK3oZ-A5L&fSK7*xzsoX)9CfLhp0?dA91=;kKHh?K)jrS(@g zNkp6(+YoA?WZE^`30&^q^Acd|C;1e6E+JmKT4L9ay%T)JDcZFpQwsaD&2?Z9i(*Xl z&)4!XOB(@Q2{=4=1sApASgara4*+ODm%rY<7FP`}*mfktHQw`}MTU~-G&m#dBa zH)iMyPlh*i6X$5joNJ47In1vzuN=F`BrIms)nlEtqWZ3NktAjX7hv_!}U<&PkuPYSCl8sYnJv(0-| z00=OS82*nxabSUehIbZuk6(vofAa1L88COVu^v~%bcE+*XrEO})zvj%GS}F|Fpu4Y zosDK2d0!fi+?U}rR*kKU0=RsE#D1>ISQQfZiCYd-8+d_^B_|&h#m;siqAi6Un}ZV&$X>nVEC8e)=OYcC z{$`shaCi=U%&NiNzBG3M4ojSo?qk;OUQl<$$atlHikg6yb={MU6&G7g@We-~G~>}V zfq2kPb6Vz62?y)`WZc$zmb(rTN9KF6D2R`wx!Ju;R8!^$fK^N`vl>pO(1fv;pGQ~o zLfm*9sC%9fWn<5fBM;%|7EJJgG;4_%YSsotyXdS*GW?nf`8vjVrKRbZL28ogOz;HL zxZJpZ0HS*s&PUyA`;_Kk3m_0sOHpzFM1owf7+5w58YAl$(BP%%9zIya|3oSJToq&W7*js#G@OIYmzaPm#rmWeg|pIIz=P5LYKnRu3Iro zFjdS1y{WHcl~L=AgZT;71@>GnC@P4fGHZ)GG*vlIDf=s1^-3}__@lpS#*N6>V!ey0fV zxgsts=IfmdaTOME9eaeZiDvAUMt57cpSj}!p|Xlp;dCzGpJ~T}X<@XwlECe8M8*Bo!ILsk`qUxKm ztjjEUYNtDz>VIDqbmd{b(kC=efu#XgGn*r`^{oW#Zg?2f4D+PDB!ruAa=ZA)fAE;S z>nY||*m*4>#5=r)A`y=8Y%2OEd#Sx#j`_u`TvS1&y5{Yfj4xsE286mZEpv;2v4Rdp zHJIhEiUIERRO5KRu40IhU=GxOaeq=KQLQeu^R4h0*0^_wp=Aiq(#q4~EJ-?jOBSPi z_ZuVf8aMKoG=wyVA8D6iHH9yo8(18%!0j29u2J^ix7XZ)A8Pc-lCd(X80(xN>Z9b* z;mKB6Iygs}_M)M%Bijdl(z{|06F-R|s4jN&wdG#5@4d_ncWtj0bM?c2F<7K-QM{?m ze;mNaERph;WC{V4HizWA=>#eU<`cGtTze>^+I433L`R&32d}Wh=o1swC1xdWJ5ezF zN7HU%K_N|v_!cHo=5f~Pd;|=FDvWa>5TmfrMvXJRZWY_0xsvZSjQRo$$aw?knWIZu z1t!mUV-#X}Iwy;x$t+=ipqI?3n8k=6j#iFCg~!Jws)i%5R}KWjgf<|(Q*OsoGWf-C z*Xg_pf;^bhgCfb2Lki$@ew|=KV>EQ!=YYNJ<_-BwpS6dztrC3oQB$*7hF+}Ygr_@t zzuls%0Pcixza6>p6~;kh;UEWUKg)8E3`*vhs+kfYn}`64xc?=fr(ibwwrreCUM z$4>yoiiCFeu=OFXVue)pG6r(eu zFDsa*GMP2t<6lA1!*_HYaN6*VQ$g#nc`1WL~ zBTarXb^m2~;OBv;{*ZpyejU93IaYigU8KB|oCsfg1b1dd zz6e;qpW>TYZ>eaw)HWsC!C=@&#eDF@@lZ`#VE7G)-fKs@5Xy8lnonxZpKscJ3|ckBTVUL6O8= z2Qrmz?+LS>v2WBz58Sq$)uxvA^Nug=DO6k4EDmQN&c(Tr)J}Iyl_!l+%ociEx*3Q3i>tJ<-VQY5Vz$h7N=v4 zAwbdJIP(;ct(5S2A$^C0=tN3OX%&hdeH%|F>}7s#5Mp#1Fu;8hxCqLw1qG3#PJbsq zmDuo{hJ^LPD6X)gbnGDfecr_+G1|9`Aiwh)hWmj}zHnqNr64G=mPQy=nr*;qc11#2 zktA1t=BdHA6GyI&P#mn+pkYHsYsK`l)Z59^4$;3EW+1-u%Pi@$Lf>e6k2voO21h7w zQ7uq`2el~MHfR>T#B73PNLkdt{J1)GhwzkvSxYa9{CL5gT-b8({QJjsxTw#2Y4l50 zGkWY!HsU8gFK>?On+)KCmKsLJxD1T4XDJ_lt=dmF&y7g_N&k)&dU{=*_R}O{Py3y4 zb_CN+g}Jhr$`AetT{q_JUWF{0;T5G36T6)CQ)~3bS!`t>HosONvoCbM+V@y2i5ywE zsV4>;+)L?HE@FErbF}t!(n6w+`^LOQ3J(@%6vcd5O{CyG^OmSn#lyZxz)lv-G0t{> zZrYJ(u0+m{bJd5Wj*pjYx=d(?eiK80<}_n!kf9H!DG((fQp;Z-A)mkb2phsIG7!ZECw*i` z{i>Plb(JQt73?vYocaET7}6dWeZXgb)8!u_5~2Y*@m*X~y*k7{a5R_O3@gK6CFe6V zap7F`#|}td4TM3#qRWEnHT~6C^`Zg8F58q4A>?U*`BA-HTU+L+Q`>-fqrCl_B6``H_dQ!3_r z&B+5#2`OQ%GLfA>5xG;P&#qd3k%O*Avnrj2xBn;v34K``NCzwRb-3m;jWCv`9^SdZ zy`>q7Ica0VizGl3gaYU6rttL*5Aj$6L-3|1sKR~6m&evon;+MpwT)wMHNOS!QOY^7 z4K%zkjlF{@pGH?4^r~~4$IOYjJ<8TZZ%bV-h4U7-2LZJRS4CxIaO1OoWmN$RJzse} zMCAJeb{)TKS`kkNNx0`;3Pgg>PoUlM(GpSp!~ zMX?9IO$`Ns05#`imry;;>wq}w*8`VDT$zNpaQf<_AhjNJ8{c#6umC@;?Rq?QCzhov?XS%QtLThM{Jh3Vmbl}{x*MSf&7p=Z4in?2~8 zywH=ssdSpQz7<{G6QDZaDPg4Oav1Iy_Df&^#a$aT`mA z{Lw8-q{PALZ%+R)6Ca&uRs$)M0~EPTeLu|={|yGVw{C@=y}q9k?k<#QSuT$Jkmd@? z6(AxF8Ea7MYi9jm;>)jn7#+l($rl1gfe-Fbm^=h?WVd-lKz7Ve?!Jth%p7AD%reTG zhjq^_fj|_0iOhjt&+DsW?oU+uEnv9U+B{6i+sC1I40{9F9nn*MCpzf0c5Hm}TAC4c zPnC{WHOsXwK+mn-TE^EcA(b2rVd{+?zF_1|*lz9Gi2`#PsQwa6!^0_4j~*I@3WXl8 zBptc9-MKwiQxcVEfvS?Gj!|SxnTv2vno;4Q2~$#koQqROj`MVh`;-IPNH%GK%#wyv zGW5h5)#0KPmKBjjnUZ9u!v=wu1e<3k$w{2W4+6H4+Y zhKrbgV6Jhr9_j;GlI-dun)aTG3q0S<(z0mr!+~NYle08)rLL-~;hv?{rUNmN4W$EQ~l3CFQCEQKj^(~J~S>$V_;JSsXYKwZF?@|TjA3w<7Ok8z; zwRg(kKQwGpPdd(~!)f=t^_364F|?1xQ6k0RA_;G#ps6lA|9Lc0d;h`eY!uzYOR(l# zj??a038Q+uTEDgQfnQtvQ?iDtb;u3kc|;jfztV1hj!+k;P54j*)Y^vToKvh~9}I8I z!z#7_+pQK$0ChtuzS&Omig|+;dYk8eO{p_PvB&m2osz-{TpD-vYuV;pJC6yi zmU^#Lco!w6pXt+)iD_Vw@&4n_!V5&ImqN3X%t^fDwQLSQshC;EoWgJ2qj(Wc>mW@Q z9Mi!l@0Nb6M!4n^MEGZhfNbVFViHG)u<1!UxDFLj3T`1lgybTv+5>s_NKj-l%5kG& z(ibs5MuUNGz={GTpX0qAT$_x4*C&~BnB=}lZnv?edrWy0@B8*Q2Fv@9+|-^3mGlQm6~91??! z`3ye6u6c>E9sT$0D2J>7QSOd?XFE`efu84S;?Hp}ka-Z1D|;DI_F$oZ?_e@y@QB4! zyjm9apQb-1(3>^{N>5-|gm4ZIFu7eA-#Kltu~*PmJ*xK8uz|6u#m5I`30@jhVno@l z4zqI<&($!k6a_8|jt(eEhEsQqo`xBxA>}*bGQ8({3KThn{OD^pXRND;;pDjUhp!oB zAWK9hSIlU|QTY3{4)G;_Ro(ds(5yAcqb!1K4yw_}+YJYG>2TT4q}kTI*WUzwSIizTY82TLDcyP={7(i06Mr^*2yrItUbFeGRL|_#;?27SeHV|8z7127rBj^J2vt6%8kLcb#V%2d3 zHbfF_I5BQ3 zCf3+Ic$z}HdUJ^$9Nb1MLrR1$%`>3EhJeFUh)GLm1`mW_+L2V*pa`C5kc5R@L~9NT z3vZ>QuNGw5C(ue3aLoSPm8KhFzggMRls3B6%&X!foXk)QJM+?xw|*XYQuhU21ZqXV5hEM67ueE zn2vOsl0w)qXi>p-EhRl&Z*wu>akKASitA3=PwZ*x3$i1 zs(Qyhr_OQp9JQTFXDeU9^CaI<6HNBr&Wn0`g=RWrGlKz%6J^0cEeML6FG z5O6&3L-IF&%da#V8|Yd$P-Dx=hSxKoKtiQOGc09!$yhO!aa$h+C*?C6jZ4na={!+X zP+`)*k*jEb3La!{w#OX}N@W-e&K=}St5SNf6uAf!EHQ`4ND9lnPc0?}6@b``{+QYV z6<@D^ejGhWA4z9BtB%K!c^j>VP?b6y1c|9j0p~~l#aNaUDTTi#{_Uz5`esIe^(Fd= zj#F<7b-6%6ATzhmbW*9-s&@mFhaPHr*wg;5Z|&Gm1~P&y`6R*`|FQH$MHYGo9JQ6gc_BY{{bF zplw&hUPy$_+i#lbE{o6=({X{DBxV))WpW}1W|uNsrHi*oE~+2w;7wD4CEs1^F5L-# zdkKy#C*wl1_687rbUt&k0;iN|7ct`gO>l`kC@+<=T0Z)F>E${J< ztJccDpF812cy}H%1i5CkEC~%sADv5J%91PegcMr3AZR~ZKVddCU^3+tJorL8Fv^l}sO{KLd`M5ID<|SE)vL@#mIScZ|9t5xSwZ#9l6^K zW|VcgylwxpO?)=c!6*zn={s&>(Cn>DK+Po;0;*Njc9nWML~^-cO$3sd9iec6a;`c& zC}cG-SurT!W^DG>oSe^&novggUA~X*K|WYmhDGTb8aQ;uz_dVN;G+b}`aRFGmz*rv zX{{SP8zk(EtMRBOWIZzIrHqe?TEP-DZ#Ri z@~PQMbi;@O)8jr^XJ>~Qb|^1G4oOgfxEXp&MD0hs1H!s0W zJ%dGgIxdkb{n?i%`FBUJpCR+A?1f8%{Q|o7|{b>StdPo@a ztswdolI>7Vqv~%{Lj{F%=C(zQk>#bOz(1gsICtYYFm8aux%qY(d`glgy{36(a6GgD znOdeR;UhdY$i?eydXk!d9cz^c%CA|^HaT@A-4BcGn&Rt^r*I!Q+C0h(0rxlD z=Z85F79&!Y&~pW=N_pWriE6&*!lVuWKqt#MxqNAV+)+7=y9+}0AYaSz(cJI)tNsR_ zHy_(?k?UoqOK{M}&Muoz&k3S7d2Qc^x+Z(ho(CNHgj;^TZ)Fz~x&~>TX0fEl9Jm;@ z+tt5*c}hDwd|$GsRWeod)u1&+XK!c#T*Ti=f!qp3v#be+y3!ujKQn}{<0pK?7wb}Z zF;^phm343=K2`{$wKOuot>NDg-tQoWco=nc%$JNQC1|5XNqpnoXK$|l$l}=D(6iQd zc%CRN;CG`s?*wq*i`HTS)isoqQ3g{!OQ@BtaPGZz;KM&Tj#-3V;)>&9wz~JNRa4UU zz6V43u@V%;1Z3c>o(^%c=EB*v-)WTY}PoQ1|g-V0Jz6=gJ*OsCPxl3#3 z7sfj93=DEV7Pl^*=HxW5} zmzJ^_I-uB#L3Lo#LTAK4UGoq~Br;`xD@Rq%l5To+HHhT$o7snL-@JeTMt28z&JiD~ z@tSC&fffdvM0Ya09y2>Of%YqbpKX2!dhIACVSQbv69UrLWvQ|ViwP0YEPdblIaG7a zVnd@Dz0ibY0T*}M6B9A#qi1HjBTyq1dFZNW3dRM)nPmw}eu!e-LuYnZ&lx*^;yVON z*;7F_shxhGh>PCOE|D$1;weN{T5jq6JG0H9~n&`QLGYN^apCMI=W9XaJ57>Z_|`v)%w zam6!&cMwr9SilUZhoBGYHWuMUJ$}m-aQD3T!zdD7G?B&E>QmEn0DY<*3$mfmanfuM zT*%4q;u;Slw4J?4wG!SQ`#mEOhkDk=`^`sv&N$@{aRCj#<2fUV0`aYXIemu^;qWyL zu8*Rye5b<##WUXyTHHsw{`j=4nE z)NlqG9aszTp@rkk5R-s^e1;K@!I~)iLi5??VO6WHu{zaQnTpR=A1DgQjxR_8(-A&w z{jSrNYF`X`i}ehH(v^aL?nM<-4J1?Tby4t_w7jYNR!;k(#gvWh^2OpJm2;gx3S?$+ zlT};q41E?N0PEdWSJ%8S7T+7u=+tMkooWZb=kn%XJjfG z8Gq9-YouX@e>%BN)^y1M|Bp&irWJku7>_N6Gt3kc(!jDdzpFF{d_yHyxH8Bb= zOl59obZ9dmFbXeBWo~D5Xdp2+G%_@kQ3NM{thZx$BwV*99NTs(wr$(CZB^8{{CNynLf-uIhx<~sAupPBQkYOi~*d*NPtT~!n$%4!TE=1!&-l1`351{OwU zUVx&FgQ>fls*{7F6OTNDs)dz1;IEwnj)FqW)xrd5VJK&_#wMMFnN|DTqBt^iEE|0nX-)6K@p5kUF(i-(21le2?` zBk(W9|Fxrfv9|z-DJkp7C`tjSr4%&)QWlODt|s;XWp`718#92sjhTg` zn*|NP(#aKI|L+69%*oN*=AY8s82@sAiMRnw0B+6}W;TD_EWFGtod1F70nQe#4mNIX zf4>84+yGXtCXT?rJpeiZY#hz(-Oc|=;IG}%>0b#syE^^7;qVvxOQ!7P26QuXwQ&Xl z{zg?6m;860Kx-4=Ke63x{=xt!%fC0xoy^?-Dd}I>Uz)!t(8R{k4FI(80{#%SUA{m;zM{7u5d+{w}28(?mKVF|~i=mh*5527bYXyWj90RFvW0DqT^i6h|eo&m@M{#i8kCa(XRkBNhgz4!mg z>%ZRCviNtp{|7P|pvm91h&WpPm4<~#~A0asY4Ouvv|JN%1O7^cBn6zc2v_-Y( z{`V!zpl1Jf*o;^>x&G~<{C6yX>fX*4fd4O^mV%S{e;ocH6cu&y0{AenaB>3}Sh-pL zzQ(_)@vyS{{r?327ZJ;Uf1VXgfUY)P06k_#W@eVZr2l*}{}cN^3;=`wLL=d5=4AfQ zAgKXO9L@jE-hUYWfz8}qUH?k{uXXUZ{{MOY*DJ8F@Uk$2TU&NA;|sOT%*g^aVCRoa ziR%savw)9;IhQx9mlOroIrRl(M(*-d8^70wF}BR`es*{-ojHGh9LmxjjrC*MQ}v}= zTon@dk9!janT(GGZ~g6W}R!r`dlx{??C8sGHV{~O{u6Fmc2s}&UCT4!d(BM z2_*9<3dA6Paz^qu%V_%w;L2D>JJEu%J`SV2eb9{7UxbGHn;1HiKF9DW<&ji~) z?TjQ9=xyx!&}{a93Hj>5ynMg>PrOlfLVCi zG(pbuDk2;{p0y-dke+x#Y*t;?u(5kt=6scN{h~>bH`6X>l_%Z?{? zRg+p+`sZSfZg`Tpv?en*N|uU_W{kir7keX~5QT&wQjBnaL*RH->Yi|EoM9Kxj|fJf z7o=7_bExtAxiZ6ufDJf99Luq1^n(jOv#_v^Z8+_D>=X2>Y9)KT&^|vNSo&5AmT1+q zZO#118YHw(W@~&8YQ3l2)d2kC)KE=K7eVSo=pI%RIrUXYY;)0Oz z?C-%Axw1Wf81Lp09qHankP10i!Fa_2fA%!p^ADs&)B53-7J9vy6aC$4{M=5_^qjtE z&izzA!W_WUH9OWmrH7D4VfqAOxL33t(n9=j1DfnO=%W#n6|?=RY@If26M(NvHwH(~ zvgx@nTEYP=!E|*mK>mGt6I$#IOfvv1wc2yDpu;(ThLXbh0M^&TBWEeGAioxq?4XBe z=_Ay=zttxV6kF$4slIb_mhKFI``)lsQ?o_Hcl7Q>pxS@mdZC6o;Vj3ZpQuMmJ5ACl9X> zXAG8q$0B7m5fEiS8_$C_ia7GU$YqJvb1f-4WHg%%sJSYRQE1-2iZB$Id4b}(Kg5sv z%co=|hJxA`@xv>2M>aPjM=u*J_PtmU@4JKzE5QL>Jg1d#8k7dV-;E8EWn=TquSq@|9Be$wmVkZ^7jHF& zZLWcXj>A4B(|^r`3ouJ}&}cqVQp^eeK#-4mU1-@j3$-*p$_H@(32vQ|Dy%q1oC=Zcl9Fr&UUO*bsB`afLs4S zC5q3pqi+TD-bl{;{w61Fns7HaRynz+We4$kYh5EzC{8vqBb>5-TY)|Nqkij;4-ld5 z*Lo6xKftGFJN>kl+i^(Ic=B|(t~pI5k|k&KngAKl$K-)2sVwEND*8#?i&pGaN?%vDyHu6pS8_WCd2)1 zkweVM3kk{CzWOO5=DD2?v-t0S&xP()nXNBq3@n~<0%Ug zgI|XPTFkYM`I}q;o5lN*(2Sy;>F(zvWs_UACiS5L<)cA;2iwo0S z`rgKZuZ}RxI6Sy>T6{I>ehr#od;8#c{>AN;E{DG$Vo4HBoV*2^(NU^@;1VP-kPcrj zRU&cc)Y%Pg#oY+!+31i13`2j~KKal#;S|hgPA8r(rtRxP3m{^hEdYNu%6O8bL?#0Dt3SCnQmc#a1=e4U(f?F*2?Eh z;k8UpqR|*Sr^2(Sns6Z3@x&?a_<7^kw$fC3$IN3b<0<&(99SvIG`i^OJ^_nwUoW|9=n-}5_Y;ju7FKi0E+l6eU7B=4nRGDmPf|O~873uF$sD<}&&Kd!d2;5LAxL&P^G| zj!M=|(%Q=79@9Y5rwJ6YF-PDFicg^d0m<@&>15)HxrGmZHuS2BfyD!+3MeDu>-0I0 zIXY3VOdD}a`)Rm%1l_RLDao~;i!TiQfK;YZj2=XBz6>lX?R(cJiuD@PrWnk6N@h*1 z{U_|GtNNU6t`OkCw@iNUPvZj(yn_5(EMzWaBs_GL+p9_<}geKBfUmV?>ED^>9fR zW<;T+RtZIRDt{wV(!-#GDQ9@e)9;J4R}T!*m4{V= zw*&}0zZ-L35%ImNVTsW%p%1dME#F1H0mWbaW!)N7U zwi=A+#3opH)TVI@oU&8TVC_XcrXo&G&&t++CQd+PQYxO*6>S-tnI9qP$y$y}W-bO^EduAb`iP`3O*HaF%7J$PyA_ z*<-7ag^Vk8wF$e1^NM|Brj1rt8p9krg;7n;)V$*RA>0sE+FXG_LP#PNqPhKoBe7e5 zGXa_7jX>mZuuS8G1baPt&Ml&$3CUKyo&PBRq2hE;qh)S@V0FaR-(%8gSAuy8L6Swe z5$OGAY7=*I&&I7=BLAGE`%5=bW7P5CvTFWM`_7eXzsrS^=ql;=JDAThwWbxkuVJ8e z+yxO%2+#g)m-Hq}H95|W&84zDf5KURm=^1n-2;X`X~% zvr(rwx6Vx3Ry&-WKOYAv-it_o()`8o={?4BAz;9c!+9;l39$~=XpDf>&D1FQQE~p$ zKP?d`%!l9tm=|2Wk%3Np9=6uh7W($(%SkRLJDKjVTfUAcc&2Q*lxzkV{&8KWp^Am! zz2Z@qcc2LP;gFQ5V~L(GI{-3Puwk2@tLLhK39T2f|d{pS!I7&5t_7mB65&e>w z^x5wBoeB3E7n)!qaY93pQTgPiSElSa*^fRv1l(E}_VM;DPUJmk6dnO%q~v5r+Lv*Hrgl|V~cjE zW5}dR=C~?$S;gf*MKg+>xL8nf-T-gApeJo&{~0gx1BDTyS69p|_fWzH+PE|)SBigZzbrGVr9PBh^3K41TE z3Qg{uD8!MQIXkadyrw;8lQ+N8FTzL|ovQw&cZu^t?}l|&>XoB?!px4K`FK{LWtoE0 z@JjXf7d$iq*79z&6YG6_=(VJ(ds1JAxTq>Qi9wwz$_h*o|ZuVVN5APrI|_;Yt10rgg{pRvENQwa>t*Tkk&pw%?6fY#tV9! zI5FE;HSg2AgDF9x2vs&w56tMvMzPrhJ`&S-G5$RwTU$BZbiKs~^p8>|T6d?#WMZ!% zZ4?F5vO6AstER)qaY*yPhGm7~grTjwi$#kPB4V;g>PZ(BQdODKsqMJ&lgyB^5Q2b{ z?K$3`{x@J3OJed*e?h9(D z#1s99p0A8!7+7Ztxx9LV>ru5D?W+Me+WA#P(wt&{rdo~G6`3gXSHp07m$@G+FHyx1 zen(BBg;kSIVx)_CJV?dRNKk`Jv5Y60&ULI7PbjE;3(C^f`-N{W8xiBi zuM5{@OIPdLxY3V~`I!)m+}@Xr#Y}|TPw`uSH)@FA;&AyFZ7JGzlhsJSZ3p75XJ#x5 zI%=pjEung#$KBg9Ra@dWoKIhf?uiw;-_PHPD?Zp1P0Ok((0#=P7!netOB?s!TcTVK zLB63|xE>ERA&Phv@Cu;P3;-0<=5BM5vPE~Itka{oRQx{Cc@9Tr5YJ72t=DSL3T7>T zF5^;4$=go&Z;M$5OaU(u`A&-1;!+auZvtj`n*t9wT5+hj>B*Er1xk({CH2$aPMFtT8j*)we7XiNO(4>y8rnMsU2H z?k-13@m?{nSzZ2^EknZgCGltG>+-zVLa|1`O>9K?C53mIhMU=_UCQX9&P!Q;cq11? zm+(o7@Yc}Z(I-#Tvoa0wdxoO;bx0}pkW$m{`O&!qv=(Vhn?4;_6#uJ>Mfg9Y0q>Sv z<^jgmb2B#-&kMvk&4bPio3*}5*j4JLb5YInHRSyqmIiAOWU%(ohE2Nt25_`exKN9} z6utwj9cU-}ThTN@L=GKUTNw&}7GXkN@&tk9X;7rb2C;d;o9keBRVdApe6PdXa=N|Y9Op_Q_BS2)Es_kYP!tU)o@jIS%&-2>=i6!{JS>V%3)4pN(=ED2V`<*|1I(VoTd~}Gv zRh%j_Vox{_J?m&~-uj!;@yGR1A1mRo4Jo$H!!4SyGX}Bz94x;b5=tw9KZDgb2;?77TbK64BT7SQyZZ{Cd2CzMJNMbNe7gXGo0Xik%c;xNIM{Ig9SQ&i9IDIdiB5v|6}J2u_=AYLwI4ru!p^aG>ae3o!V zAniE-Z*~y&46CWEbgoV3SI4iRQQc_7OsFT^^>&nd-{9a@ccaGNcNr^!|y{Puv6 z@O^WV_L+h|)C9JSTr}5Dy0s7=dTupWsl9>AIWbtAfVdEncwSr0DDJ^v+<-O2kp1QU zq3)VaZhEAD=j~A|visoz4quKMI7-euB(pnWzRo1RSsWxgMSLTAm9e|Aa-C^lJ-brt zDFf|a74fTWchvT}EzP1_&cEnl4mVbU;L|F!oZ+(0I@?T{h!7_9F{z`|qg3xt20Cn8 zv|)lV`ho>X(YR1}d~K5kzMrK})e4Tr&P`VZ@X@1xOXPDLPlmzri&HqIhC5;cy=+I7 zHju9$;#SvOW>!@CL1I3D?~sID)bPoXL=|0#iLy)_$fq`ou&B)@X|WvpWf?&&KzHvN zh!r|N#35qg{O*%r+F>h@?<;^an?K{Os&4o5VN|FHeAA*HRB{KnOCH@1%2t3SM{jaH zx)(}+q`H$hbhD(Kj0f{$i6DlG06bLgrVr_vx6_Hr;hw_Ik2Z>{1k77boX4s`;TkGT z24q|4JL;)}J16H#^?N)2ASv~c;Sy=~=OKF~%D7ENQrQeLe&JRMnc`ej=V1QSY|QIj z5V`ZL)>%3=FKD{_&evp_IIoe%l61==@p(OeEfK!obB~@Bhcpp=RGr4x`Dp#f;11diH`k*l(~>WFUK@;!-t_%wD@laf2<$HFt!B0B-o>SM&4p(JYq+g zFto{K@o@kdnkG-IYsBG9si=3eOPvn_Q+~mYB2#@xk)H^w+xd4&;>Zc?- z{oya3xtm|DCG@GtpA-WzFKZb`8d2;tuX5T)RoPUl*eK|s%LKz6rF zfAH5r-FLpDG;w@W0L9II=Z|dIuQuAns1Wm%Kna6gOlJs*EU%(k$n4D%`$$-SWA+C2 zEV&c^+P!{4oqv2Q$1ncFzgcV1d+zPBwZXV3XitZ|m)yG8`6xt(MNx4?O-<#5eQ(7n zQyX(Vkaq7%(1Uq|Uj`{wT^Bx9m|)Pw(HSj$H#FI++hwGEM@cyEIG^;FW58>RzNolBH6Mrv0$g&W6>z=j-KJCcsdteig zohCT1l_ zE`xz^Q2oY7aQxzq!A!?1wz)EW*Q3o=_SkXwp{lxs*9SSDGUC=&fZEiPW zt2=Xfc5MeTR573a>6VGz=SYChu|sU3v;v>&UAdqy+V|Td-V|%Wwf~MBNyusg`R;bm zvh9q7Q&pRF!nSN9W^7x3DPWk-HnrK(_ZoR|S{9YgK@qk3^)3m#`T=+T86r}`fAekI zkN#`*3~vnt!8?BpRV0kU2lmIBaQo0F^KrmM0lU!O)`?Rn4e-h-naH zEZ3`%l651T2_y?)O~KnAXU-E-ex(#n{vnjCwZYATfCk_oxMjP4%*|zl{C;{3KijWH z_}Ng)DU%z6+YKPjww{gnXlR{UeE7aYd$VmUJe zi$A`oW;{LnQbFP`-PF+8zy|9|UO}4zJ}M)lT~L zl*Z`=LS|3ed@>jM_@D+qU=*`qvu$hsJ&oBZ1rvhlT<3>A>IYD5mCGT+)=o}sRs^p3 zzUYN5SA}>|gCupje`djblS%t?ShY>ARSCT|DUr~X84^$q|L7G^*+~dopU^FuKBL87RwZyllepCi zU-u|`--b!Tf8^GOX4$xRl-#q6YzG-uN%sopCUQ0)*b&;%F;}xg#s@+fn?I_7t$V{g zM+WZR5R9N&3}Bm&bkZoqj7U-4$}5&N9XKoYD;*w#?M4>jgvQu%`Y z+&r4PY~#{zo00y)yVGdC^Z2*mgJ=R|I0^0Dc0awTf6pI2m2e&|HT$Yr)8A3i1e@K> zrVFJI&e1PLjvmzAX9N47;&D+K(t|Wtk?j3nRdL%*PxyJA&7vImv|>npPtXJE@m z?^d&WuN%1Vt+Ra3?_B?_q@L7|I<_bu&enpuvfF0JT5(loya;bMg6J@(k&@v-g71}V zFeYDD9`a1*6Spf{Ra1BNNydnFp=C zbT7;ER#@{4tpSe1Epgbn{Ga+%5N`+N{8Q#eI;VW%;Vap*1JT+v%5$NK7X4typRA zf49E8w&Dg%lu!RWE;{Y^FNNaV-#v`^cHlXdf;&j- z4%EN>{kCaOaQ(M`y6&(M~s}a39z_xv2 zRA^SpRn_B15J40?5u9is9wm(i5qRM4yXFMOcIjxuVtTzd85Hl8O)=0}0K{P&?jNxrg z%e-7btnvcA0y6NSgPL7GVt81&y4b>3xwLVQB$771v#0xE1UQ+;xE`%se^Pf(@GLcR z=lzbfeY+$X#n@t1%C#6m{GIYp7JtLj>-CLwM#TGW<1#F8RV5*Oi8C^z3q1BFU=Yje zy?0lGub!(3b=ts{A~Hc%AtK=Z8V;MZ5*N717wbZR^g@*W6Y2Iohg~XhWhdfiSmpH_ zDL=i^L`r1D(f&-LqkKygnNO~gbN!m+-NP@jyf^nOe6buYQmzC&x9TlsMOAsfc}={Rz9_klak*t zrk1$l=H1wsffV0ZG(Wto6r(+%O4@#1M@5IEr9>@sa|qWB&r`a$ts!CKqi_`(jdNX& zBac3=^~<%ke`##gu}SkpSRa`dn%3!mA#9a+@YdhikWjX~Zt_d3ifmZ8%@wAF0B83J zP#1?zxzew9INp~C?H@OZ=m;(ia%`%bf!3a$ID~bPs|vj4TAbNhHysxTzTVq^*qK5` z7V0L6sjVAp)nH&)K;V6X_nX8$5xemyL++%10rndZf6mk|*b%7UZ-};WVL${Z{&1~A z?@#LV1Xb6l%;96sl^KyGxqPXvb>w|H(hgat^^>RG{`&nvkN_SN)%Vt#c9r(rs{|Q4 z%TbhKmBnb}@kVG^(YQCbT%Any)kJrLyw~G$4H{^53`-aM?t);D`QY~B|rPgvXWuN#eqh;ixgn=$SzB+Ki1 ze+b*CI!SEEvP-c)?xifw5u|oZJASFI=O#=fkL37hxrw9k)j4RU5v6e^O%E^(EE08K`ZUVZvX$S7(o^#&aeA81s2y zwBQSOUNnOUtD}ywBaS%Vhc~;Y%yhb>sL|c7jO+CH2PE<)> z@Fe+OKX-_Ab%M9+z50gz(MYt@hy-lY=Ca0(emM!l_YLbO-w;mHJ5rzJVfU}Hew^V$p^D5z9M_H&uJ-gsD^G znFpS{M#u{%UXw(zP}>Ckh$5Co> zZ{a&uBu=ZXqOlnT;_Z4yMaYJ+p4Z2|InM>0+Oe&d3U0ZK+Qs8(qXyrwrKR~L0=5A6 z?3lEiR-WV`{w^-ro9>~~^RcEgrAk=ih9m@&UkQwJM^+&F=HnxM)HB+|kyF-aAL%^Q z{kn3_SyypVd8GCFt=o{2f4(wZjVDE?+1A%NPMpm+GFg=hhRdMb-XHPu$C*6C

H( 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 z%0D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 B@q_WQ|Y}(!Kh$FI$-sZ)v4Q1MI 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 diff --git a/man/plot_RDscatter.Rd b/man/RDScatter.Rd similarity index 94% rename from man/plot_RDscatter.Rd rename to man/RDScatter.Rd index 40fdb36..de06be6 100644 --- a/man/plot_RDscatter.Rd +++ b/man/RDScatter.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/plots.R -\name{plot_RDscatter} -\alias{plot_RDscatter} +\name{RDScatter} +\alias{RDScatter} \title{Scatterplot of binned raw observations} \usage{ -plot_RDscatter( +RDScatter( formula, data, subset, @@ -64,6 +64,6 @@ that is first in \code{data} and then in the environment of \code{formula}. } \examples{ -plot_RDscatter(log(earnings)~yearat14, data=cghs, cutoff=1947, +RDScatter(log(earnings)~yearat14, data=cghs, cutoff=1947, avg=Inf, propdotsize=TRUE) } diff --git a/man/RDSmoothnessBound.Rd b/man/RDSmoothnessBound.Rd index 9337a68..f196189 100644 --- a/man/RDSmoothnessBound.Rd +++ b/man/RDSmoothnessBound.Rd @@ -60,8 +60,9 @@ RDSmoothnessBound(r, s=2) { \cite{Michal Kolesár and Christoph Rothe. Inference in regression -discontinuity designs with a discrete running variable. American Economic -Review, 108(8):2277—-2304, August 2018. \doi{10.1257/aer.20160945}} + discontinuity designs with a discrete running variable. + American Economic Review, 108(8):2277—-2304, + August 2018. \doi{10.1257/aer.20160945}} } } diff --git a/tests/spelling.R b/tests/spelling.R index c61948b..33569a8 100644 --- a/tests/spelling.R +++ b/tests/spelling.R @@ -1,3 +1,3 @@ -if(requireNamespace("spelling", quietly = TRUE)) - spelling::spell_check_test(vignettes = TRUE, error = FALSE, - skip_on_cran = TRUE) +if (requireNamespace("spelling", quietly = TRUE)) + spelling::spell_check_test(vignettes = TRUE, error = FALSE, + skip_on_cran = TRUE) diff --git a/tests/testthat/test_clustering.R b/tests/testthat/test_clustering.R index 370f283..c201002 100644 --- a/tests/testthat/test_clustering.R +++ b/tests/testthat/test_clustering.R @@ -57,10 +57,10 @@ test_that("Test clustering formulas", { expect_equal(p1h$coefficients$std.error, 792.2299439) p2c <- RDHonest(c~elig_year, data=rr, clusterid=clusterid, - point.inference=TRUE) - h <- p2c$coefficients$bandwidth #8.27778 + point.inference=TRUE, h=8.27778063886) + h <- p2c$coefficients$bandwidth m3 <- lm(c~elig_year, data=rr, subset=abs(elig_year)<=h, - weights =(1 - abs(elig_year/h))) + weights = (1 - abs(elig_year/h))) ## sqrt(sandwich::vcovCL(m3, type="HC0", ## cluster=clusterid[abs(rr$elig_year)<=h], ## cadjust=FALSE)[1, 1]) @@ -88,18 +88,6 @@ test_that("Test clustering formulas", { dd <- data.frame(y=log(rr$c), x=rr$elig_year, "(clusterid)"=clusterid) names(dd)[3]<- "(clusterid)" d <- NPRData(dd, cutoff=0, class="SRD") - r0 <- NPRPrelimVar.fit(d) + r0 <- PrelimVar(d) expect_equal(r0$rho, -0.0008690793197) - - ## Alternative - ## h <- IKBW.fit(d) - ## m4 <- lm(d$Y~d$X*I(d$X>0), subset=abs(d$X)<=h, weights=(1-abs(d$X/h))) - ## r <- dfadjust::dfadjustSE(m4, IK=TRUE, - ## clustervar=as.factor(d$clusterid[abs(d$X)<=h])) - ## print(r$rho, digits=10) - - - - - }) diff --git a/tests/testthat/test_frd.R b/tests/testthat/test_frd.R index 9307b20..4f4961d 100644 --- a/tests/testthat/test_frd.R +++ b/tests/testthat/test_frd.R @@ -5,11 +5,11 @@ test_that("Selected bw is infinite", { cutoff=0, "FRD") ## Expect using all data - r0 <- NPRHonest.fit(d, M=c(0, 0), kern="triangular", opt.criterion="OCI", - T0=0)$coefficients - r1 <- NPRHonest.fit(d, M=c(0, 0), kern="uniform", opt.criterion="FLCI", - T0=0)$coefficients - r2 <- NPRreg.fit(d, Inf, "uniform") + r0 <- NPRHonest(d, M=c(0, 0), kern="triangular", opt.criterion="OCI", + T0=0)$coefficients + r1 <- NPRHonest(d, M=c(0, 0), kern="uniform", opt.criterion="FLCI", + T0=0)$coefficients + r2 <- NPReg(d, Inf, "uniform") expect_equal(c(r1$std.error, r1$estimate), c(r2$se, r2$estimate)) expect_identical(r1$maximum.bias, 0) @@ -18,9 +18,8 @@ test_that("Selected bw is infinite", { expect_equal(r1$bandwidth, max(abs(d$X))) d <- NPRData(lee08, cutoff=0, "SRD") - r1 <- NPRHonest.fit(d, M=0, kern="uniform", - opt.criterion="MSE")$coefficients - r2 <- NPRreg.fit(d, Inf, "uniform") + r1 <- NPRHonest(d, M=0, kern="uniform", opt.criterion="MSE")$coefficients + r2 <- NPReg(d, Inf, "uniform") expect_equal(c(r1$std.error, r1$estimate), c(r2$se, r2$estimate)) expect_identical(r1$maximum.bias, 0) @@ -30,13 +29,13 @@ context("Test FRD") test_that("FRD data example check", { d <- NPRData(cbind(logcn=log(rcp[, 6]), rcp[, c(3, 2)]), cutoff=0, "FRD") - M <- NPR_MROT.fit(d) - r1 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="MSE", - T0=0)$coefficients - r2 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="MSE", - T0=r1$estimate)$coefficients - r1a <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="MSE", - T0=0, alpha=r1$p.value)$coefficients + M <- MROT(d) + r1 <- NPRHonest(d, M, kern="triangular", opt.criterion="MSE", + T0=0)$coefficients + r2 <- NPRHonest(d, M, kern="triangular", opt.criterion="MSE", + T0=r1$estimate)$coefficients + r1a <- NPRHonest(d, M, kern="triangular", opt.criterion="MSE", T0=0, + alpha=r1$p.value)$coefficients expect_equal(r1a$conf.high, 0) expect_equal(max(abs(expect_equal(r1a$conf.high, 0))), 0) ## With positive T0, expect greater effective M, and thus smaller bandwidth @@ -48,12 +47,12 @@ test_that("FRD data example check", { test_that("FRD with almost perfect first stage", { d <- NPRData(data.frame(y=lee08$voteshare, d=lee08$margin>0, x=lee08$margin), cutoff=0, "FRD") - M <- NPR_MROT.fit(d) - r0 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="FLCI") - r1 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="FLCI", - T0=r0$coefficients$estimate)$coefficients - r2 <- NPRHonest.fit(NPRData(lee08, cutoff=0, "SRD"), unname(M[1]), - kern="triangular", opt.criterion="FLCI")$coefficients + M <- MROT(d) + r0 <- NPRHonest(d, M, kern="triangular", opt.criterion="FLCI") + r1 <- NPRHonest(d, M, kern="triangular", opt.criterion="FLCI", + T0=r0$coefficients$estimate)$coefficients + r2 <- NPRHonest(NPRData(lee08, cutoff=0, "SRD"), unname(M[1]), + kern="triangular", opt.criterion="FLCI")$coefficients expect_lt(max(abs(r2[2:6]-r2[2:6])), 3e-7) set.seed(42) @@ -61,12 +60,12 @@ test_that("FRD with almost perfect first stage", { d=lee08$margin+rnorm(n=length(lee08$margin), sd=0.1)>0, x=lee08$margin) d <- NPRData(df, cutoff=0, "FRD") - M <- NPR_MROT.fit(d) - r0 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="MSE") - r1 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="MSE", - T0=r0$coefficients$estimate)$coefficients - r2 <- NPRHonest.fit(NPRData(lee08, cutoff=0, "SRD"), unname(M[1]), - kern="triangular", opt.criterion="MSE")$coefficients + M <- MROT(d) + r0 <- NPRHonest(d, M, kern="triangular", opt.criterion="MSE") + r1 <- NPRHonest(d, M, kern="triangular", opt.criterion="MSE", + T0=r0$coefficients$estimate)$coefficients + r2 <- NPRHonest(NPRData(lee08, cutoff=0, "SRD"), unname(M[1]), + kern="triangular", opt.criterion="MSE")$coefficients expect_lt(abs(r1$estimate*r1$first.stage-r2$estimate), 1e-2) expect_lt(abs(r1$bandwidth-r2$bandwidth), 0.1) expect_lt(abs(r0$coefficients$conf.low-r1$conf.low), 0.01) @@ -75,11 +74,11 @@ test_that("FRD with almost perfect first stage", { test_that("FRD interface", { d <- NPRData(cbind(logf=log(rcp[1:10000, 6]), rcp[1:10000, c(3, 2)]), cutoff=0, "FRD") - M <- NPR_MROT.fit(d) + M <- MROT(d) rcp1 <- rcp[1:10000, ] - r1 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="OCI", T0=0) + r1 <- NPRHonest(d, M, kern="triangular", opt.criterion="OCI", T0=0) p1 <- RDHonest(log(cn)~retired | elig_year, data=rcp1, cutoff=0, M=M, - kern="triangular", opt.criterion="OCI", T0=0) + kern="triangular", opt.criterion="OCI", T0=0) expect_equal(r1$coefficients$estimate, p1$coefficients$estimate) p1.1 <- RDHonest(log(cn)~retired | elig_year, data=rcp1, cutoff=0, kern="triangular", T0=0, h=6) @@ -91,11 +90,11 @@ test_that("FRD interface", { expect_lt(abs(p1.2$coefficients$conf.high- 0.17195578263), 1e-6) expect_lt(abs(p1.2$coefficients$estimate+0.172378084757), 1e-6) - r2 <- NPRHonest.fit(d, M, kern="triangular", opt.criterion="OCI", - T0=r1$coefficients$estimate) + r2 <- NPRHonest(d, M, kern="triangular", opt.criterion="OCI", + T0=r1$coefficients$estimate) p2 <- RDHonest(log(cn)~retired | elig_year, data=rcp1, cutoff=0, M=M, - kern="triangular", opt.criterion="OCI", - T0=p1$coefficients$estimate) + kern="triangular", opt.criterion="OCI", + T0=p1$coefficients$estimate) expect_equal(r2$coefficients$estimate, p2$coefficients$estimate) ## codecov.io check expect_equal(capture.output(print(r2))[1:7], @@ -105,17 +104,16 @@ test_that("FRD interface", { expect_equal(capture.output(print(p2, digits=4))[14], "Maximal leverage for fuzzy RD Parameter: 0.00361") - r3 <- NPRHonest.fit(d, M, kern="triangular", h=7, - T0=r1$coefficients$estimate) + r3 <- NPRHonest(d, M, kern="triangular", h=7, T0=r1$coefficients$estimate) p3 <- RDHonest(log(cn)~retired | elig_year, data=rcp1, cutoff=0, M=M, - kern="triangular", opt.criterion="OCI", - T0=p1$coefficients$estimate, h=7) + kern="triangular", opt.criterion="OCI", + T0=p1$coefficients$estimate, h=7) expect_equal(r3$coefficients$estimate, p3$coefficients$estimate) - r4 <- NPROptBW.fit(d, M, kern="triangular", opt.criterion="OCI", - T0=r1$coefficients$estimate) + r4 <- OptBW(d, M, kern="triangular", opt.criterion="OCI", + T0=r1$coefficients$estimate) p4 <- RDHonest(log(cn)~retired | elig_year, data=rcp1, cutoff=0, M=M, - kern="triangular", opt.criterion="OCI", - T0=p1$coefficients$estimate) + kern="triangular", opt.criterion="OCI", + T0=p1$coefficients$estimate) expect_identical(r4, p4$coefficients$bandwidth) }) diff --git a/tests/testthat/test_lpp.R b/tests/testthat/test_lpp.R index 913e9bf..a4c730f 100644 --- a/tests/testthat/test_lpp.R +++ b/tests/testthat/test_lpp.R @@ -2,12 +2,12 @@ context("Test Inference at a point") test_that("Inference at point agrees with RD", { d <- NPRData(lee08, cutoff=0, "SRD") - rde <- NPRHonest.fit(d, h=5, M=2)$coefficients + rde <- NPRHonest(d, h=5, M=2)$coefficients dp <- NPRData(lee08[lee08$margin>=0, ], cutoff=0, "IP") dm <- NPRData(lee08[lee08$margin<0, ], cutoff=0, "IP") - p0 <- NPRHonest.fit(dp, h=5, M=2) + p0 <- NPRHonest(dp, h=5, M=2) pp <- p0$coefficients - mm <- NPRHonest.fit(dm, h=5, M=2)$coefficients + mm <- NPRHonest(dm, h=5, M=2)$coefficients expect_equal(pp$estimate-mm$estimate, rde$estimate) expect_equal(pp$std.error^2+mm$std.error^2, rde$std.error^2) expect_equal(pp$maximum.bias+mm$maximum.bias, rde$maximum.bias) @@ -20,9 +20,9 @@ test_that("Inference at point agrees with RD", { expect_equal(capture.output(print(p0))[1:7], capture.output(print(p2))[6:12]) - r <- NPRHonest.fit(d, h=7, M=2)$coefficients - rm <- NPRHonest.fit(dp, h=7, M=2)$coefficients - rp <- NPRHonest.fit(dm, h=7, M=2)$coefficients + r <- NPRHonest(d, h=7, M=2)$coefficients + rm <- NPRHonest(dp, h=7, M=2)$coefficients + rp <- NPRHonest(dm, h=7, M=2)$coefficients expect_equal(r$maximum.bias, rm$maximum.bias+rp$maximum.bias) expect_equal(sqrt(rp$std.error^2+rm$std.error^2), r$std.error) @@ -33,9 +33,9 @@ test_that("MROT matches paper", { Mh <- RDHonest(mortHS~povrate, data=headst, cutoff=0, h=0)$coefficients$M expect_equal(Mh, 0.29939992) - Mp <- RDHonest(mortHS~povrate, data=headst, subset=(povrate>=0), + Mp <- RDHonest(mortHS~povrate, data=headst, subset = (povrate>=0), cutoff=0, h=0, point.inference=TRUE) - Mm <- RDHonest(mortHS~povrate, data=headst, subset=(povrate<0), + Mm <- RDHonest(mortHS~povrate, data=headst, subset = (povrate<0), h=0, point.inference=TRUE) expect_equal(Mp$coefficients$M, Mh) expect_lt(Mm$coefficients$M, Mh) @@ -44,29 +44,29 @@ test_that("MROT matches paper", { test_that("ROT bandwidth check", { ## Interior d <- NPRData(lee08, cutoff=0, "IP") - b1 <- ROTBW.fit(d, kern="uniform") + b1 <- ROTBW(d, kern="uniform") ## f0 using Silverman: f0 <- 0.0089934638 C <- 9/8 # nu0/(4*mu_2^2) ll <- lm(d$Y~d$X+I(d$X^2)+I(d$X^3)+I(d$X^4)) - h <- (C*sigma(ll)^2/(length(d$X)*f0*ll$coefficients[3]^2))^(1/5) + h <- (C*sigma(ll)^2 / (length(d$X)*f0*ll$coefficients[3]^2))^(1/5) expect_equal(b1, unname(h)) dp <- NPRData(lee08[lee08$margin>0, ], cutoff=0, "IP") - bp1 <- ROTBW.fit(dp, kern="uniform") + bp1 <- ROTBW(dp, kern="uniform") ## f0 using Silverman: f0 <- 0.0079735105 C <- 36 # nu0/(4*mu_2^2) ll <- lm(dp$Y~dp$X+I(dp$X^2)+I(dp$X^3)+I(dp$X^4)) der <- unname(ll$coefficients[3]) - h <- (C*sigma(ll)^2/(length(dp$X)*f0*der^2))^(1/5) + h <- (C*sigma(ll)^2 / (length(dp$X)*f0*der^2))^(1/5) expect_equal(bp1, h) }) test_that("Optimal bandwidth calculations", { - rr <- RDHonest(voteshare ~ margin, data=lee08, subset=(margin>0), + rr <- RDHonest(voteshare ~ margin, data=lee08, subset = (margin>0), kern="uniform", opt.criterion="FLCI", point.inference=TRUE) expect_equal(rr$coefficients$conf.high.onesided, 55.24963853) @@ -76,7 +76,7 @@ test_that("Optimal bandwidth calculations", { dp <- NPRData(lee08[lee08$margin>0, ], cutoff=0, "IP") Mh <- rr$coefficients$M - re <- RDHonest(voteshare ~ margin, data=lee08, subset=(margin>0), + re <- RDHonest(voteshare ~ margin, data=lee08, subset = (margin>0), kern="uniform", opt.criterion="FLCI", point.inference=TRUE, se.method="EHW") ## Should match regression @@ -92,12 +92,13 @@ test_that("Optimal bandwidth calculations", { opt.criterion="MSE", point.inference=TRUE) r <- capture.output(print(r1, digits=4)) expect_equal(r[11], "Bandwidth: 13.41, Kernel: triangular") - r2 <- NPROptBW.fit(dp, M=2*Mh, opt.criterion="MSE") + r2 <- OptBW(dp, M=2*Mh, opt.criterion="MSE") expect_identical(r2, r1$coefficients$bandwidth) expect_lt(abs(r2- 13.4109133), 1e-6) ## Make sure we're getting positive worst-case bias - r <- RDHonest(voteshare ~ margin, data=lee08, subset=(margin>0), cutoff=20, + r <- RDHonest(voteshare ~ margin, data=lee08, subset = (margin>0), + cutoff=20, kern="uniform", opt.criterion="MSE", point.inference=TRUE) expect_equal(r$coefficients$maximum.bias, 0.2482525) }) diff --git a/tests/testthat/test_npr.R b/tests/testthat/test_npr.R index 0c9a3e5..12d7985 100644 --- a/tests/testthat/test_npr.R +++ b/tests/testthat/test_npr.R @@ -33,7 +33,7 @@ test_that("Test LPreg", { expect_identical(r0e$eff.obs, r1e$eff.obs) }) -test_that("Test NPRreg", { +test_that("Test NPReg", { ## Replicate Ludwig-Miller lumi <- headst[!is.na(headst$mortHS), c("mortHS", "povrate")] mort <- NPRData(lumi, cutoff=0, "SRD") @@ -43,14 +43,14 @@ test_that("Test NPRreg", { t2 <- data.frame() bws <- c(9, 18, 36) for (bw in bws) { - rfe <- NPRreg.fit(mort, bw, "uniform", order=1, se.method="EHW") - rfn <- NPRreg.fit(mort, bw, "uniform", order=1, se.method="nn") + rfe <- NPReg(mort, bw, "uniform", order=1, se.method="EHW") + rfn <- NPReg(mort, bw, "uniform", order=1, se.method="nn") t1 <- rbind(t1, data.frame(bw=bw, estimate=rfe$estimate, EHW=rfe$se, nn=rfn$se)) - rme <- NPRreg.fit(mortm, bw, "uniform", order=1, se.method="EHW") - rmn <- NPRreg.fit(mortm, bw, "uniform", order=1, se.method="nn") - rpe <- NPRreg.fit(mortp, bw, "uniform", order=1, se.method="EHW") - rpn <- NPRreg.fit(mortp, bw, "uniform", order=1, se.method="nn") + rme <- NPReg(mortm, bw, "uniform", order=1, se.method="EHW") + rmn <- NPReg(mortm, bw, "uniform", order=1, se.method="nn") + rpe <- NPReg(mortp, bw, "uniform", order=1, se.method="EHW") + rpn <- NPReg(mortp, bw, "uniform", order=1, se.method="nn") t2 <- rbind(t2, data.frame(bw=bw, estimate=rpe$estimate-rme$estimate, EHW=sqrt(rpe$se^2+rme$se^2), nn=sqrt(rpn$se^2+rmn$se^2))) @@ -66,13 +66,13 @@ test_that("Test NPRreg", { dr <- NPRData(cbind(logcn=log(rcp[, 6]), rcp[, 2, drop=FALSE]), cutoff=0, "SRD") d <- NPRData(cbind(logcn=log(rcp[, 6]), rcp[, c(3, 2)]), cutoff=0, "FRD") - rf <- NPRreg.fit(df, 10, "uniform", order=1, se.method="EHW") - rr <- NPRreg.fit(dr, 10, "uniform", order=1, se.method="EHW") + rf <- NPReg(df, 10, "uniform", order=1, se.method="EHW") + rr <- NPReg(dr, 10, "uniform", order=1, se.method="EHW") expect_equal(unname(c(rf$estimate, round(rf$se, 4))), c(0.43148435, 0.0181)) expect_equal(unname(c(rr$estimate, round(rr$se, 4))), c(-0.0355060, 0.0211)) - r1 <- NPRreg.fit(d, 10, "uniform", order=1, se.method="EHW") + r1 <- NPReg(d, 10, "uniform", order=1, se.method="EHW") expect_equal(c(r1$estimate, r1$se), c(-0.08228802, 0.0483039)) ## Numbers from @@ -83,8 +83,7 @@ test_that("Test NPRreg", { ## summary(r4, vcov = sandwich::sandwich, ## diagnostics=TRUE)$coefficients[2, 1:2] expect_lt(abs(r1$estimate- rr$estimate/rf$estimate), 1e-10) - r2 <- NPRreg.fit(d, 5, function(x) abs(x)<=1, order=0, - se.method="EHW") + r2 <- NPReg(d, 5, function(x) abs(x)<=1, order=0, se.method="EHW") ## r3 <- AER::ivreg(logcn~retired | Z, subset=(abs(elig_year)<=5), data=dt) ## summary(r3, vcov = sandwich::sandwich, ## diagnostics = TRUE)$coefficients[2, 1:2] diff --git a/tests/testthat/test_rd.R b/tests/testthat/test_rd.R index 050ea99..8a65ee7 100644 --- a/tests/testthat/test_rd.R +++ b/tests/testthat/test_rd.R @@ -22,9 +22,9 @@ test_that("Test class constructor sorting", { -RDHonest(voteshare ~ I(-margin), data=lee08, M=0, h=2)$coefficients$estimate) expect_equal(RDHonest(cn~retired | elig_year, data=rcp, cutoff=0, - M=c(1, 0.1), h=3)$coefficients$estimate, + M=c(1, 0.1), h=3)$coefficients$estimate, RDHonest(cn~retired | I(2*elig_year), data=rcp, cutoff=0, - M=c(1, 0.1), h=6)$coefficients$estimate) + M=c(1, 0.1), h=6)$coefficients$estimate) }) test_that("IK bandwidth calculations", { @@ -33,7 +33,7 @@ test_that("IK bandwidth calculations", { dig <- getOption("digits") options(digits=8) - r1 <- capture.output(IKBW.fit(d, verbose=TRUE)) + r1 <- capture.output(IKBW(d, verbose=TRUE)) expect_equal(r1[c(2, 4, 5, 6, 8)], c(" h1: 14.44507 ", " f(0): 0.0089622411 ", " sigma^2_{+}(0): 12.024424 ^2", @@ -41,35 +41,35 @@ test_that("IK bandwidth calculations", { " h_{2, +}: 60.513312 h_{2, -}: 60.993358 ")) options(digits=dig) - expect_equal(IKBW.fit(d), 29.3872649956) + expect_equal(IKBW(d), 29.3872649956) - r <- NPRreg.fit(d, IKBW.fit(d, kern="uniform"), "uniform") + r <- NPReg(d, IKBW(d, kern="uniform"), "uniform") expect_equal(r$estimate, 8.0770003749) - d <- NPRPrelimVar.fit(NPRData(lee08, cutoff=0, "SRD"), se.initial="EHW") + d <- PrelimVar(NPRData(lee08, cutoff=0, "SRD"), se.initial="EHW") expect_equal(sqrt(mean(d$sigma2[d$p])), 12.58183131) expect_equal(sqrt(mean(d$sigma2[d$m])), 10.79067278) }) test_that("Plots", { if (requireNamespace("ggplot2", quietly = TRUE)) { - expect_silent(invisible(plot_RDscatter( - earnings~yearat14, data=cghs, - cutoff=1947, avg=Inf, propdotsize=TRUE))) - expect_silent(invisible(plot_RDscatter( - voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, - avg=50, propdotsize=FALSE, - xlab="margin", ylab="effect"))) - } + expect_silent(invisible(RDScatter(earnings~yearat14, data=cghs, + cutoff=1947, avg=Inf, + propdotsize=TRUE))) + expect_silent(invisible(RDScatter(voteshare~margin, data=lee08, + subset=abs(lee08$margin)<=50, avg=50, + propdotsize=FALSE, xlab="margin", + ylab="effect"))) + } }) test_that("Honest inference in Lee and LM data", { ## Replicate 1606.01200v2, except we no longer provide SilvermanNN - r1 <- RDHonest(mortHS ~ povrate, data=headst, - kern="uniform", h=18, M=0.1, se.method="EHW") - r2 <- RDHonest(mortHS ~ povrate, data=headst, - kern="uniform", h=18, M=0.1, se.method="nn") + r1 <- RDHonest(mortHS ~ povrate, data=headst, kern="uniform", h=18, M=0.1, + se.method="EHW") + r2 <- RDHonest(mortHS ~ povrate, data=headst, kern="uniform", h=18, M=0.1, + se.method="nn") ## Should match regression rl <- lm(mortHS ~ povrate*I(povrate>=0), data=headst, subset=abs(povrate)<=18) @@ -94,15 +94,15 @@ test_that("Honest inference in Lee and LM data", { expect_equal(r1o[16], "24 observations with missing values dropped") d <- NPRData(headst[!is.na(headst$mortHS), c("mortHS", "povrate")], - cutoff=0, "SRD") - d <- NPRPrelimVar.fit(d, se.initial="Silverman") + cutoff=0, "SRD") + d <- PrelimVar(d, se.initial="Silverman") es <- function(kern, se.method) { - NPRHonest.fit(d, M=0.0076085544, kern=kern, sclass="H", - se.method=se.method, J=3, alpha=0.05, opt.criterion="MSE") + NPRHonest(d, M=0.0076085544, kern=kern, sclass="H", se.method=se.method, + J=3, alpha=0.05, opt.criterion="MSE") } ff <- function(h, kern, se.method) { - NPRHonest.fit(d, M=0.0076085544, kern=kern, sclass="H", - se.method=se.method, J=3, alpha=0.05, h=h) + NPRHonest(d, M=0.0076085544, kern=kern, sclass="H", se.method=se.method, + J=3, alpha=0.05, h=h) } ## In this case the objective is not unimodal, but the modification still @@ -135,9 +135,8 @@ test_that("Honest inference in Lee and LM data", { M=0.2, opt.criterion="MSE", se.method="supplied.var") ## expect_equal(unname(r$lower), 2.2838100315) expect_equal(unname(r$coefficients$conf.low.onesided), 2.983141711) - r <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", - M=0.04, opt.criterion="OCI", se.method="supplied.var", - beta=0.8) + r <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", M=0.04, + opt.criterion="OCI", se.method="supplied.var", beta=0.8) expect_equal(r$coefficients$conf.low.onesided, 2.761343298) r <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", M=0.04, opt.criterion="FLCI", se.method="supplied.var") @@ -184,14 +183,13 @@ test_that("Honest inference in Lee and LM data", { ## expect_equal(r3$h, 5.0590753991) ## Decrease M, these results are not true minima... - d <- NPRPrelimVar.fit(NPRData(lee08, cutoff=0, "SRD"), - se.initial="Silverman") - r1 <- NPRHonest.fit(d, M=0.01, kern="uniform", opt.criterion="MSE", - beta=0.8, sclass="T")$coefficients - r2 <- NPRHonest.fit(d, M=0.01, kern="uniform", opt.criterion="MSE", - beta=0.8, sclass="H")$coefficients - r3 <- NPROptBW.fit(d, kern = "uniform", M = 0.1, - opt.criterion = "MSE", sclass = "T") + d <- PrelimVar(NPRData(lee08, cutoff=0, "SRD"), se.initial="Silverman") + r1 <- NPRHonest(d, M=0.01, kern="uniform", opt.criterion="MSE", beta=0.8, + sclass="T")$coefficients + r2 <- NPRHonest(d, M=0.01, kern="uniform", opt.criterion="MSE", beta=0.8, + sclass="H")$coefficients + r3 <- OptBW(d, kern = "uniform", M = 0.1, opt.criterion = "MSE", + sclass = "T") expect_equal(unname(r1$bandwidth), 12.85186708) expect_equal(unname(r2$conf.low.onesided), 6.056860266) expect_equal(unname(r3), 5.086645484) @@ -215,21 +213,19 @@ test_that("Honest inference in Lee and LM data", { }) test_that("BME CIs match paper", { - r1 <- RDHonestBME(log(earnings)~yearat14, data=cghs, - cutoff=1947, h=6, order=1) - expect_equal(as.numeric(r1$coefficients[ - c("estimate", "std.error", "conf.low", - "conf.high", "eff.obs")]), + r1 <- RDHonestBME(log(earnings)~yearat14, data=cghs, cutoff=1947, h=6, + order=1)$coefficients + expect_equal(as.numeric(r1[c("estimate", "std.error", "conf.low", + "conf.high", "eff.obs")]), c(0.0212923111, 0.03272404599, -0.13218978736, 0.17499392431, 20883)) - r2 <- RDHonestBME(log(earnings)~yearat14, cghs, cutoff=1947, - regformula="y~I(x>=0)+x+I(x^2)+I(x^3)+I(x^4)") - ## expect_equal(r1$CI, c(-0.23749230603, 0.34429708773)) + r2 <- RDHonestBME(log(earnings)~yearat14, cghs, + regformula="y~I(x>=0)+x+I(x^2)+I(x^3)+I(x^4)", + cutoff=1947)$coefficients ## Slightly different numbers with bug fixed - expect_equal(as.numeric(r2$coefficients[ - c("estimate", "std.error", "conf.low", - "conf.high", "eff.obs")]), + expect_equal(as.numeric(r2[c("estimate", "std.error", "conf.low", + "conf.high", "eff.obs")]), c(0.05481510635, 0.02975117527, -0.2473386327, 0.3548003576, 73954)) r3 <- RDHonestBME(log(cghs$earnings)~yearat14, data=cghs, h=3, @@ -237,9 +233,9 @@ test_that("BME CIs match paper", { r4 <- RDHonestBME(log(cghs$earnings)~yearat14, data=cghs, h=3, order=0, cutoff=1947) expect_equal(r3$coefficients, r4$coefficients) - r5 <- RDHonestBME(duration~age, data=rebp, subset=(period==1 & female==0), + r5 <- RDHonestBME(duration~age, data=rebp, subset = (period==1 & female==0), order=1, h=Inf, cutoff=50) - r6 <- RDHonestBME(duration~age, data=rebp, subset=(period==1 & female==0), + r6 <- RDHonestBME(duration~age, data=rebp, subset = (period==1 & female==0), order=3, h=1, cutoff=50, alpha=0.1) r5 <- capture.output(print(r5, digits=5)) est <- paste0(" Sharp RD parameter 14.798 ", @@ -271,7 +267,7 @@ test_that("Optimizing bw", { x <- sample(xsupp, 100, prob=xprobs, replace=TRUE) d <- data.frame(y=rnorm(100, sd=1), x=x) r1 <- RDHonest(y~x, data=d, cutoff=0, M=40, kern="triangular", - opt.criterion="FLCI") + opt.criterion="FLCI") r2 <- RDHonest(y~x, data=d, cutoff=0, M=40, kern="triangular", h=0.51) expect_equal(r1$coefficients$conf.low, r2$coefficients$conf.low) }) diff --git a/tests/testthat/test_weights.R b/tests/testthat/test_weights.R index c630a9d..07c8d0d 100644 --- a/tests/testthat/test_weights.R +++ b/tests/testthat/test_weights.R @@ -5,7 +5,7 @@ test_that("Test weighting using cghs", { d <- s0$data ## Make 10 groups - d$mod <- floor(10*(d$Y - floor(d$Y))) + d$mod <- floor(10 * (d$Y - floor(d$Y))) ## Make cells by group and year d$cell <- d$mod/10+d$X dd <- data.frame() @@ -22,8 +22,8 @@ test_that("Test weighting using cghs", { d2 <- NPRData(data.frame(y=log(cghs$earnings), x=cghs$yearat14), cutoff= 1947, "SRD") ## Initial estimates - r2 <- NPRreg.fit(d2, 5, "triangular") - r1 <- NPRreg.fit(d1, 5, "triangular") + r2 <- NPReg(d2, 5, "triangular") + r1 <- NPReg(d1, 5, "triangular") ## Checks weights match wp1 <- vapply(unique(d1$X[d1$p]), function(j) sum(r1$w[d1$X==j]), @@ -47,12 +47,12 @@ test_that("Test weighting using cghs", { d1$sigma2[d1$m] <- mean(r2$sigma2[r2$w!=0 & d2$m])/d1$w[d1$m] v1 <- sqrt(sum(wp1^2/np)*mean(r2$sigma2[r2$w!=0 & d2$p])+ - sum(wm1^2/nm)*mean(r2$sigma2[r2$w!=0 & d2$m])) + sum(wm1^2/nm)*mean(r2$sigma2[r2$w!=0 & d2$m])) - m2 <- NPRHonest.fit(d2, M=1, kern="triangular", h=5, - se.method="supplied.var")$coefficients - m1 <- NPRHonest.fit(d1, M=1, kern="triangular", h=5, - se.method="supplied.var")$coefficients + m2 <- NPRHonest(d2, M=1, kern="triangular", h=5, + se.method="supplied.var")$coefficients + m1 <- NPRHonest(d1, M=1, kern="triangular", h=5, + se.method="supplied.var")$coefficients expect_equal(v1, m1$std.error) expect_equal(m1[2:6], m2[2:6]) diff --git a/vignettes/RDHonest.Rmd b/vignettes/RDHonest.Rmd index ccbb617..0fc8a29 100644 --- a/vignettes/RDHonest.Rmd +++ b/vignettes/RDHonest.Rmd @@ -72,17 +72,16 @@ library("RDHonest") ## Plots -The package provides a function `plot_RDscatter` to plot the raw data. To remove +The package provides a function `RDScatter` to plot the raw data. To remove some noise, the function plots averages over `avg` number of observations. The function takes an `RDData` object as an argument ```{r, fig.width=4.5, fig.height=3.5, fig.cap="Lee (2008) data"} ## plot 25-bin averages in for observations 50 at most points ## away from the cutoff. See Figure 1. -plot_RDscatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, - avg=50, propdotsize=FALSE, - xlab="Margin of victory", - ylab="Vote share in next election") +RDScatter(voteshare~margin, data=lee08, subset=abs(lee08$margin)<=50, + avg=50, propdotsize=FALSE, xlab="Margin of victory", + ylab="Vote share in next election") ``` The running variable in the Oreopoulos dataset is discrete. It is therefore @@ -93,9 +92,9 @@ averages over. ```{r, fig.width=4.5, fig.height=3.5, fig.cap="Oreopoulos (2006) data"} ## see Figure 2 -f2 <- plot_RDscatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, - avg=Inf, xlab="Year aged 14", ylab="Log earnings", - propdotsize=TRUE) +f2 <- RDScatter(I(log(earnings))~yearat14, data=cghs, cutoff=1947, + avg=Inf, xlab="Year aged 14", ylab="Log earnings", + propdotsize=TRUE) ## Adjust size of dots if they are too big f2 + ggplot2::scale_size_area(max_size = 4) ``` @@ -211,10 +210,10 @@ optimality criterion: ```{r} RDHonest(voteshare ~ margin, data=lee08, kern="triangular", - M=0.1, opt.criterion="MSE", sclass="H") + M=0.1, opt.criterion="MSE", sclass="H") ## Choose bws optimal for length of CI RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", sclass="H") + opt.criterion="FLCI", sclass="H") ``` ### Inference when running variable is discrete @@ -232,10 +231,10 @@ As an example, consider the @oreopoulos06 data, in which the running variable is ```{r} ## Replicate Table 2, column (10) RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="uniform", M=0.04, opt.criterion="FLCI", sclass="H") ## Triangular kernel generally gives tigher CIs RDHonest(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") + data=cghs, kern="triangular", M=0.04, opt.criterion="FLCI", sclass="H") ``` In addition, the package provides function `RDHonestBME` that calculates honest @@ -246,11 +245,12 @@ no worse at the cutoff than away from the cutoff as in Section 5.2 in @KoRo16. ## Replicate Table 2, column (6), run local linear regression (order=1) ## with a uniform kernel (other kernels are not yet implemented) RDHonestBME(log(earnings) ~ yearat14, cutoff=1947, - data=cghs, h=3, order=1) + data=cghs, h=3, order=1) ``` -Let us describe the implementation of the variance estimator $\hat{V}(W)$ used to construct the CI as described in in Section 5.2 in @KoRo16. Suppose the point +Let us describe the implementation of the variance estimator $\hat{V}(W)$ used +to construct the CI as described in in Section 5.2 in @KoRo16. Suppose the point estimate is given by the first element of the regression of the outcome $y_i$ on $m(x_i)$. For instance, local linear regression with uniform kernel and bandwidth $h$ corresponds to $m(x)=I(|x|\leq h)\cdot(I(x>c_0),1,x, x\cdot @@ -347,9 +347,10 @@ $M$ a priori, rather than attempting to use a data-driven method. Therefore, one should, whenever possible, use problem-specific knowledge to decide what choice of $M$ is reasonable a priori. -For cases in which this is difficult, the function `NPR_MROT.fit` implements the method -considered in Section 3.4.1 in @ArKo16honest based on a global polynomial -approximation: +For cases in which this is difficult, the internal function `RDHonest` +implements the method considered in Section 3.4.1 in @ArKo16honest based on a +global polynomial approximation: + ```{r} ## Data-driven choice of M RDHonest(voteshare ~ margin, data=lee08, kern="uniform", sclass="H", @@ -369,11 +370,11 @@ estimate used to compute optimal bandwidths: ```{r} r1 <- RDHonest(voteshare ~ margin, data=lee08, kern="optimal", M=0.1, - opt.criterion="FLCI", - se.method="nn")$coefficients + opt.criterion="FLCI", + se.method="nn")$coefficients r2 <- RDHonest(voteshare ~ margin, data=lee08, kern="triangular", M=0.1, - opt.criterion="FLCI", se.method="nn", - sclass="T")$coefficients + opt.criterion="FLCI", se.method="nn", + sclass="T")$coefficients r1$conf.high-r1$conf.low r2$conf.high-r2$conf.low ``` @@ -383,10 +384,13 @@ r2$conf.high-r2$conf.low The package also implements lower-bound estimates for the smoothness constant $M$ for the Taylor and Hölder smoothness class, as described in the supplements to @KoRo16 and @ArKo16optimal +TODO: `PrelimVar` is internal + + ```{r} ## Add variance estimate to the Lee (2008) data so that the RDSmoothnessBound ## function doesn't have to compute them each time -## dl <- NPRPrelimVar.fit(dl, se.initial="nn") +## dl <- PrelimVar(dl, se.initial="nn") ### Only use three point-average for averages of a 100 points closest to cutoff, ### and report results separately for points above and below cutoff @@ -412,9 +416,9 @@ d$cell <- d$mod/100+d$yearat14 ## Data with cell averages dd <- data.frame() for (j in unique(d$cell)){ - dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), - x=mean(d$yearat14[d$cell==j]), - weights=length(d$yearat14[d$cell==j]))) + dd <- rbind(dd, data.frame(y=mean(log(d$earnings)[d$cell==j]), + x=mean(d$yearat14[d$cell==j]), + weights=length(d$yearat14[d$cell==j]))) } ``` @@ -491,11 +495,11 @@ estimator of the treatment effect ```{r} ## Initial estimate of treatment effect for optimal bandwidth calculations r <- RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", T0=0) ## Use it to compute optimal bandwidth RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", - T0=r$coefficients$estimate) + M=c(0.001, 0.002), opt.criterion="MSE", sclass="H", + T0=r$coefficients$estimate) ``` ## Data-driven choice of smoothness constant @@ -507,13 +511,14 @@ attempting to use a data-driven method. Therefore, one should, whenever possible, use problem-specific knowledge to decide what choices of $M_1$ and $M_2$ are reasonable a priori. -For cases in which this is difficult, the function `NPR_MROT.fit` implements the method -considered in Section 3.4.1 in @ArKo16honest based on a global polynomial +For cases in which this is difficult, the function `RDHonest` implements the +method considered in Section 3.4.1 in @ArKo16honest based on a global polynomial approximation: + ```{r} ## Data-driven choice of M RDHonest(log(cn) ~ retired | elig_year, data=rcp, kern="triangular", - opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) + opt.criterion="MSE", sclass="H", T0=r$coefficients$estimate) ``` See @ArKo16honest for a discussion of the restrictions on the parameter space under which this method yields honest inference.