Quickstarts

Small runnable scripts for the most common np, npRmpi, and crs entry points.
Keywords

quickstart, np, npRmpi, crs, examples, starter scripts

This page is the shortest route from “I need an example” to a small runnable script. The scripts below are the modern quickstarts in the gallery, and each block is pulled directly from the underlying source file.

Choose a starting point

If you want to… Start here
fit a first kernel regression np_regression_quickstart.R
use nomad = TRUE for a first local-polynomial fit np_regression_nomad_quickstart.R
estimate a density with np np_density_quickstart.R
estimate a distribution with np np_distribution_quickstart.R
estimate a conditional density with np np_conditional_density_quickstart.R
estimate a conditional distribution with np np_conditional_distribution_quickstart.R
fit nonparametric conditional quantiles with np np_quantile_quickstart.R
estimate a nonparametric copula np_copula_quickstart.R
run a nonparametric classification / mode example np_classification_quickstart.R
save a fitted curve with asymptotic intervals np_plotting_quickstart.R
run an entropy/testing function with np np_entropy_quickstart.R
fit a semiparametric model with np np_semiparametric_quickstart.R
fit a nonparametric instrumental regression np_instrumental_regression_quickstart.R
run a nonparametric significance test np_significance_quickstart.R
run a model-specification test np_specification_quickstart.R
use npRmpi interactively on macOS/Linux nprmpi_session_quickstart.R
use the LP NOMAD shortcut after MPI initialization nprmpi_session_nomad_quickstart.R
use npRmpi under mpiexec nprmpi_attach_quickstart.R
use npRmpi with explicit broadcast control nprmpi_profile_quickstart.R
fit a first spline model with crs crs_quickstart.R
fit a spline instrumental-regression model crs_iv_quickstart.R

np quickstarts

Source file: np_regression_quickstart.R

## Minimal np regression example.
##
## The intended workflow is:
## 1. compute a bandwidth object,
## 2. fit the regression estimator,
## 3. inspect the result and a simple fitted curve.

library(np)
options(np.messages = FALSE)

data(cps71, package = "np")
dat <- cps71[, c("logwage", "age")]

## Select the bandwidth object, then fit the regression.
bw <- npregbw(logwage ~ age, data = dat, regtype = "ll", bwmethod = "cv.aic")
fit <- npreg(bws = bw, data = dat)

## Review the bandwidth choice and the fitted regression.
summary(bw)
summary(fit)

## Let the plot method handle the basic fitted-curve display.
plot(fit)

Source file: np_regression_nomad_quickstart.R

library(np)
data(cps71, package = "np")

## Use the shortest modern LP route: fit directly with nomad = TRUE.
fit_lp <- npreg(logwage ~ age, data = cps71, nomad = TRUE)

## Plot first, then inspect the fitted object in text form.
plot(fit_lp)
summary(fit_lp)

Source file: np_density_quickstart.R

## Minimal np density-estimation example.
##
## The intended workflow is:
## 1. compute a bandwidth object,
## 2. fit the density estimator,
## 3. inspect the result.

library(np)
options(np.messages = FALSE)

## Start with one variable so the density workflow is easy to read.
data(faithful, package = "datasets")
dat <- data.frame(waiting = faithful$waiting)

## Select the smoothing parameter, then fit the density.
bw <- npudensbw(~ waiting, data = dat, bwmethod = "cv.ml")
fhat <- npudens(bws = bw, data = dat)

## Review the bandwidth choice and the fitted density object.
summary(bw)
summary(fhat)

Source file: np_distribution_quickstart.R

## Minimal np distribution example.
##
## This mirrors the usual density workflow but targets the
## unconditional distribution function instead.

library(np)
options(np.messages = FALSE)

## Mirror the basic density setup, but target the distribution instead.
data(faithful, package = "datasets")
dat <- data.frame(waiting = faithful$waiting)

## Select the bandwidth, then fit the unconditional distribution.
bw <- npudistbw(~ waiting, data = dat, nmulti = 1)
Fhat <- npudist(bws = bw, data = dat)

## Review the smoothing choice and the fitted distribution object.
summary(bw)
summary(Fhat)

Source file: np_conditional_density_quickstart.R

## Minimal np conditional-density example.
##
## This keeps the first run small enough to be practical while still
## showing the standard two-step workflow:
## 1. compute a bandwidth object,
## 2. fit the conditional-density estimator.

library(np)
options(np.messages = FALSE)

## Keep the first run small enough that the two-step workflow stays quick.
data(faithful, package = "datasets")
dat <- faithful[seq_len(120), c("eruptions", "waiting")]

## Select the bandwidth first, then fit the conditional density.
bw <- npcdensbw(eruptions ~ waiting, data = dat, nmulti = 1)
fhat <- npcdens(bws = bw, data = dat)

## Review both the smoothing choice and the fitted object.
summary(bw)
summary(fhat)

Source file: np_conditional_distribution_quickstart.R

## Minimal np conditional-distribution example.
##
## This uses a small first run so the standard two-step workflow stays
## copyable and practical.

library(np)
options(np.messages = FALSE)

## Work on a smaller slice so the first run stays easy to inspect.
data(faithful, package = "datasets")
dat <- faithful[seq_len(120), c("eruptions", "waiting")]

## Select the bandwidth, then fit the conditional distribution.
bw <- npcdistbw(eruptions ~ waiting, data = dat, nmulti = 1)
Fhat <- npcdist(bws = bw, data = dat)

## Review the bandwidth object and the fitted distribution.
summary(bw)
summary(Fhat)

Source file: np_quantile_quickstart.R

## Minimal np quantile-regression example.
##
## The key idea is to compute/select the conditional distribution once
## and then extract one or more quantiles from it.

library(np)
options(np.messages = FALSE)

## Keep the first quantile run compact and reproducible.
data(faithful, package = "datasets")
dat <- faithful[seq_len(120), c("eruptions", "waiting")]

## Build one conditional-distribution fit and request several quantiles.
qfit <- npqreg(eruptions ~ waiting,
               data = dat,
               tau = c(0.25, 0.50, 0.75),
               nmulti = 1)

## Review the bandwidth choice and one representative fitted quantile.
summary(qfit$bws)
summary(qfit)

## Plot the overlaid fitted quantile curves.
plot(qfit)

Source file: np_copula_quickstart.R

## Minimal np copula example.
##
## This uses the direct formula interface and lets npcopula() build
## the corresponding marginal distribution bandwidth object internally.

library(np)
library(MASS)

set.seed(42)
n <- 1000
rho <- 0.95
Sigma <- matrix(c(1, rho, rho, 1), 2, 2)

## Simulate a simple bivariate sample with strong dependence.
dat <- as.data.frame(mvrnorm(n = n, mu = c(0, 0), Sigma = Sigma))
names(dat) <- c("x", "y")

## Let npcopula() create a small default probability grid.
copula_fit <- npcopula(~ x + y, data = dat, neval = 20)

## Inspect the fitted copula object and the retained bandwidth object.
summary(copula_fit)
summary(attr(copula_fit, "bws"))

Source file: np_classification_quickstart.R

## Minimal np classification / conditional-mode example.
##
## This keeps the first run compact while still showing the basic
## nonparametric classification route.

library(np)
data(birthwt, package = "MASS")

## Class the discrete fields the way the estimator expects them.
birthwt$low <- factor(birthwt$low)
birthwt$smoke <- factor(birthwt$smoke)
birthwt$race <- factor(birthwt$race)

## Fit the conditional-mode classifier on a small practical formula.
fit <- npconmode(low ~ smoke + race + age + lwt, data = birthwt, nmulti = 1)

## Inspect the fitted object, then the implied confusion matrix.
summary(fit)
fit$confusion.matrix

Source file: np_plotting_quickstart.R

## Minimal np plotting and interval example.
##
## This fits a simple local-linear model and then shows the
## modern bootstrap plotting route with all interval/band types.

library(np)
options(np.messages = FALSE)

data(cps71, package = "np")

## Fit a simple local-linear regression object.
model.ll <- npreg(logwage ~ age, regtype = "ll", data = cps71)

## Save one example plot so the script works in non-interactive sessions too.
plot_path <- file.path(tempdir(), "np_plotting_quickstart.png")
png(plot_path, width = 700, height = 500)
plot(model.ll,
  errors = "bootstrap",
  bootstrap = "inid",
  band = "all")
dev.off()

## Report where the rendered image landed.
cat("Saved plot to:", plot_path, "\n")

Source file: np_entropy_quickstart.R

## Minimal np entropy/testing example.
##
## This uses the univariate density-equality test because it is a
## compact, fast first run.

library(np)
options(np.messages = FALSE)

## Generate two simple samples so the test output is easy to interpret.
set.seed(1234)
n <- 300
x <- rnorm(n)
y <- rnorm(n)

## Run a compact first test without bootstrap overhead.
test_out <- npunitest(x, y, bootstrap = FALSE)

## Inspect the test summary.
summary(test_out)

Source file: np_semiparametric_quickstart.R

## Minimal np semiparametric example.
##
## This uses a partially linear model because it is the clearest
## lightweight entry point into the semiparametric family.

library(np)
options(np.messages = FALSE)

## Build a small partially linear data-generating setup.
set.seed(42)
n <- 200
x1 <- rnorm(n)
z <- runif(n)
y <- 1 + 2 * x1 + sin(2 * pi * z) + rnorm(n, sd = 0.2)
dat <- data.frame(y, x1, z)

## Fit the partially linear model.
fit <- npplreg(y ~ x1 | z, data = dat)

## Inspect the fitted semiparametric object.
summary(fit)

Source file: np_instrumental_regression_quickstart.R

## Minimal np instrumental-regression example.
##
## This mirrors the basic one-endogenous-regressor setup used in the
## package demos while keeping the first run compact.

library(np)

## Build a small one-endogenous-regressor example with one instrument.
set.seed(42)
n <- 80
v <- rnorm(n, sd = 0.27)
eps <- rnorm(n, sd = 0.05)
u <- -0.5 * v + eps
w <- rnorm(n)
z <- 0.2 * w + v
y <- z^2 + u

## Fit the nonparametric IV regression.
fit_iv <- npregiv(y = y, z = z, w = w, method = "Tikhonov", nmulti = 1)

## Inspect the fitted IV object.
summary(fit_iv)

Source file: np_significance_quickstart.R

## Minimal np significance-testing example.
##
## The idea is to fit a model with one irrelevant regressor and then
## ask whether the nonparametric significance test detects that.

library(np)
options(np.messages = FALSE)

## Generate one relevant and one irrelevant regressor on purpose.
set.seed(42)
n <- 200
z <- factor(rbinom(n, 1, 0.5))
x1 <- rnorm(n)
x2 <- runif(n, -2, 2)
y <- x1 + x2 + rnorm(n)
dat <- data.frame(z, x1, x2, y)

## Fit the model before asking the significance question.
fit <- npreg(y ~ z + x1 + x2,
  regtype = "ll",
  bwmethod = "cv.aic",
  data = dat)

## Test the fitted object and inspect both summaries.
test_out <- npsigtest(fit)

summary(fit)
summary(test_out)

Source file: np_specification_quickstart.R

## Minimal np model-specification test example.
##
## The idea is to fit a simple linear model to nonlinear data and then
## ask whether the parametric specification looks too restrictive.

library(np)
options(np.messages = FALSE)

## Simulate nonlinear data, then fit an intentionally simple linear model.
set.seed(42)
n <- 120
x <- runif(n, -2, 2)
y <- x + x^2 + rnorm(n, sd = 0.25)

model_ols <- lm(y ~ x, x = TRUE, y = TRUE)
X <- data.frame(x = x)

## Compare the parametric model to the nonparametric alternative.
test_out <- npcmstest(model = model_ols,
  xdat = X,
  ydat = y,
  nmulti = 1)

## Inspect both the linear fit and the specification test.
summary(model_ols)
summary(test_out)

npRmpi quickstarts

Source file: nprmpi_session_quickstart.R

## Minimal modern npRmpi example.
##
## The intended workflow is:
## 1. initialize MPI once in session/spawn mode,
## 2. write ordinary np-style code,
## 3. quit cleanly at the end.

library(npRmpi)

## Initialize once, then work as if this were an ordinary np script.
npRmpi.init(nslaves = 1)

set.seed(1)
x <- runif(200)
y <- sin(2 * pi * x) + rnorm(200, sd = 0.2)
dat <- data.frame(y, x)

## Fit the bandwidth and regression objects.
bw <- npregbw(y ~ x, regtype = "ll", bwmethod = "cv.ls", data = dat)
fit <- npreg(bws = bw, data = dat)

## Review the objects, plot the fit, then exit cleanly.
summary(bw)
summary(fit)

plot(fit)

npRmpi.quit()

Source file: nprmpi_session_nomad_quickstart.R

## Minimal modern npRmpi NOMAD example.
##
## The intended workflow is:
## 1. initialize MPI once,
## 2. use the same nomad = TRUE shortcut available in np,
## 3. inspect the normalized shortcut metadata,
## 4. quit cleanly at the end.

if (!requireNamespace("crs", quietly = TRUE)) {
  stop("This quickstart uses nomad = TRUE, which requires the 'crs' package ",
    "for NOMAD degree search. Install it with install.packages('crs').")
}

library(npRmpi)

## Initialize once, then write ordinary np-style code.
npRmpi.init(nslaves = 1)

set.seed(7)
n <- 120
x <- runif(n, -1, 1)
y <- x + 0.4 * x^2 + rnorm(n, sd = 0.18)
dat <- data.frame(y, x)

## Fit the LP shortcut and inspect the normalized metadata.
fit <- npreg(y ~ x, data = dat, nomad = TRUE, degree.max = 2L, nmulti = 1L)

fit$bws$nomad.shortcut
summary(fit)

## Plot the fitted object before quitting cleanly.
plot(fit)

npRmpi.quit()

Source file: nprmpi_attach_quickstart.R

## Minimal attach-mode npRmpi example.
##
## Launch with a pre-created MPI world, for example:
##   mpiexec -env R_PROFILE_USER "" -env R_PROFILE "" -n 2 \
##     Rscript --no-save nprmpi_attach_quickstart.R

library(npRmpi)

## Initialize under an already-created MPI world.
npRmpi.init(mode = "attach")

if (mpi.comm.rank(0L) == 0L) {
  ## Build the data and fit on the coordinator rank.
  set.seed(1)
  x <- runif(200)
  y <- sin(2 * pi * x) + rnorm(200, sd = 0.2)
  dat <- data.frame(y, x)

  bw <- npregbw(y ~ x, regtype = "ll", bwmethod = "cv.ls", data = dat)
  fit <- npreg(bws = bw, data = dat)

  ## Inspect the fitted objects, then shut down cleanly.
  summary(bw)
  summary(fit)

  npRmpi.quit(mode = "attach")
}

Source file: nprmpi_profile_quickstart.R

## Minimal profile/manual-broadcast npRmpi example.
##
## Launch with an explicit profile source, for example:
##   RPROFILE=$(Rscript --no-save -e 'cat(system.file("Rprofile", package="npRmpi"))')
##   mpiexec -env R_PROFILE_USER "$RPROFILE" -env R_PROFILE "" -n 2 \
##     Rscript --no-save nprmpi_profile_quickstart.R

## Initialize the workers through the profile route.
invisible(mpi.bcast.cmd(np.mpi.initialize(), caller.execute = TRUE))

## Build the data once on the caller and broadcast it.
set.seed(1)
x <- runif(200)
y <- sin(2 * pi * x) + rnorm(200, sd = 0.2)
dat <- data.frame(y, x)

invisible(mpi.bcast.Robj2slave(dat))

## Fit the bandwidth and regression objects on the workers.
invisible(mpi.bcast.cmd(bw <- npregbw(y ~ x, regtype = "ll", bwmethod = "cv.ls", data = dat),
  caller.execute = TRUE))

invisible(mpi.bcast.cmd(fit <- npreg(bws = bw, data = dat),
  caller.execute = TRUE))

## Inspect the results, then stop the MPI workers.
summary(bw)
summary(fit)

invisible(mpi.bcast.cmd(mpi.quit(), caller.execute = TRUE))

crs quickstart

Source file: crs_quickstart.R

## Minimal crs spline-regression example.
##
## This is the smallest useful workflow:
## 1. fit a spline model,
## 2. inspect the summary,
## 3. optionally move on to plotting or tighter search control.

library(crs)
options(crs.messages = FALSE)

## Generate a simple nonlinear surface with two predictors.
set.seed(42)
n <- 250
x1 <- runif(n)
x2 <- runif(n)
y <- sin(2 * pi * x1) + x2 + rnorm(n, sd = 0.2)
dat <- data.frame(y, x1, x2)

## Fit the spline model and inspect the summary.
fit <- crs(y ~ x1 + x2, data = dat)

summary(fit)

Source file: crs_iv_quickstart.R

## Minimal crs instrumental-regression example.
##
## This is a compact first run for spline-based IV estimation.

library(crs)

## Build a small IV example with one endogenous regressor and one instrument.
set.seed(42)
n <- 100
v <- rnorm(n, sd = 0.27)
eps <- rnorm(n, sd = 0.05)
u <- -0.5 * v + eps
w <- rnorm(n)
z <- 0.2 * w + v
y <- z^2 + u

## Fit the spline IV model.
fit_iv <- crsiv(y = y,
  z = z,
  w = w,
  method = "Landweber-Fridman",
  cv = "exhaustive",
  nmulti = 1,
  cv.threshold = 0)

## Inspect the fitted IV object.
summary(fit_iv)

Where to go next

Back to top