fpa_corner_test: Test for a corner solution of the optimal reserve under...

View source: R/fpa_revenue.R

fpa_corner_testR Documentation

Test for a corner solution of the optimal reserve under affiliation

Description

Decides whether any binding reserve price is optimal. The point rule classifies the sample as a corner (no binding reserve optimal) when

T = \min_{u \in [p_{lo},\, p_{hi}]} \hat\omega(u) - v_s \ge 0,

with \hat\omega the estimated affiliated virtual value of [fpa_virtual_value()]. The window starts at 'p_lo = 0.10' rather than at the boundary: with v_s equal to the lower end of the support, \omega(u) \to v_s as u \to 0 for every copula, so the region near zero carries no information about the corner, while the quantile density of the pseudo-values is least accurately estimated there.

The decision is the point rule on the full sample ('decision = "point"', the default and the rule used in Doosti 2026c): a corner is reported when T \ge 0. The null tested is "no reserve above the 'p_lo' quantile beats no reserve". In applications the copula family should be chosen with [copula_spec_test()].

With 'B > 0', auctions are resampled with replacement, with the bandwidths of both stages selected once on the full sample and held fixed in every replication, and the frequency with which the point rule reports a corner is returned. Two alternative uses of the bootstrap are available but are not the default: 'decision = "bootstrap"' reports a corner when that frequency is at least 'level'; and 'corner_not_rejected' records whether the upper 1 - \alpha bootstrap percentile of T is non-negative (a conservative rule, since T, a minimum of a noisy curve, is biased downward).

Usage

fpa_corner_test(
  bids,
  v_s = 0,
  family,
  method = "poisson",
  bandwidth = "rlcv",
  qdf_method = "poisson",
  p_lo = 0.1,
  p_hi = 0.98,
  B = 0,
  decision = c("point", "bootstrap"),
  level = 0.5,
  alpha = 0.1,
  ...
)

## S3 method for class 'fpa_corner_test'
print(x, ...)

Arguments

bids

an 'L' by 'n' matrix of bids, one row per auction.

v_s

seller's valuation.

family

copula family used to recover the values (see [fpa_values()]); required, because the corner result depends on it.

method, bandwidth

first-stage quantile density estimator and bandwidth rule for [fpa_values()]; 'bandwidth' is also used for the quantile density of the pseudo-values.

qdf_method

quantile density estimator for the pseudo-values.

p_lo, p_hi

window of quantiles over which the minimum is taken.

B

number of bootstrap replications (0: point rule only).

decision

'"point"' (default): the point rule on the full sample; '"bootstrap"': a corner when the bootstrap frequency is at least 'level' (requires 'B > 0').

level

bootstrap corner frequency above which a corner is reported when 'decision = "bootstrap"'.

alpha

level for the upper bootstrap percentile of the statistic.

...

further arguments to [fpa_values()].

x

an '"fpa_corner_test"' object.

Value

An object of class '"fpa_corner_test"': a list with the 'statistic' T, the decision 'corner', the estimated virtual value 'omega' on the grid 'U', 'v_s', 'p_range', the 'bandwidth's used in the two stages and the 'decision' rule; with 'B > 0' also 'boot_stat', 'boot_corner_freq', 'boot_upper' and 'corner_not_rejected'. The 'print()' method is called for its side effect of printing the decision and returns 'x' invisibly.

Reproducibility

Call 'set.seed()' beforehand to make the bootstrap reproducible.

References

Doosti, H. (2026c). Optimal reserve prices in affiliated private value auctions: a copula–quantile density approach. SSRN preprint. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.2139/ssrn.7273869")}

Examples


set.seed(1)
Q <- function(u) (1 - 8 * u / 9)^(-1/2)
sim <- fpa_simulate(60, 3, Q, family = "clayton",
                    theta = copula_tau_to_theta(0.5, "clayton"))
fpa_corner_test(sim$bids, v_s = 1, family = "clayton")


qdfauction documentation built on Nov. 10, 2026, 5:07 p.m.