Learn R Programming

sfa (version 1.2.0)

esfm: Stochastic frontier tolerating the wrong skewness

Description

Fits the extended stochastic frontier model of Hafner, Manner and Simar (2018), in which one parameter \(\gamma\) carries both the scale of inefficiency (its size) and the direction of skewness (its sign), so a wrongly skewed sample gives a well-defined non-degenerate fit instead of collapsing.

Usage

esfm(formula, data, dist = c("halfnormal", "exponential"), inefdec = TRUE,
     start = NULL)

symmetry_test(object)

Value

An object of class "esfm" (and "sfareg"), whose out

matrix reports gamma, sigv and the frontier coefficients, with Efficiency holding \(E[\exp(-U) \mid W]\) for each firm.

Arguments

formula, data

Model and data, as for sfm.

dist

Base density for the inefficiency term.

inefdec

TRUE for a production frontier, FALSE for cost.

start

Optional numeric start, c(gamma, sigma_v, beta).

object

An "esfm" fit.

Details

The classical frontier implies a negatively skewed composed error. When the sample skewness comes out positive -- common at small \(n\) or large \(\sigma_v/\sigma_u\), and a small-sample accident rather than evidence against the model -- the MLE collapses: \(\sigma_u\) is exactly zero, every firm is fully efficient, and the fit is uninformative. That is the Type I failure skewness_test reports.

This model keeps the frontier and widens the distribution of \(u\). For \(\gamma > 0\), \(u\) has the classical density with scale \(|\gamma|\); for \(\gamma < 0\) that density is mirrored about zero, shifted right by \(B = a_0|\gamma|\) and truncated to \([0, B]\), giving negative skewness for \(u\) and so positive skewness for the composed error. The truncation constant \(a_0\) is fixed, not estimated: it is chosen so \(E[u] = k_1|\gamma|\) whichever sign \(\gamma\) takes, which keeps the model a one-parameter scale family and avoids the identification difficulties of bounded-inefficiency models. \(a_0 = 1.3892032925\) for the half-normal and \(1.5936242600\) for the exponential.

The classical model is nested at \(\gamma > 0\), and \(\gamma = 0\) is an interior point rather than a boundary. So the likelihood ratio test of \(H_0: \gamma = 0\) -- no inefficiency, symmetric errors -- is an ordinary \(\chi^2(1)\), not the chi-bar-square mixture that inefficiency_test needs for the classical model.

What it does on a wrongly skewed sample. On a 50-observation draw with positive residual skewness, sfm(model_name = "NHN") returns \(\sigma_u = 0.0003\) and mean efficiency 0.99976 -- every firm on the frontier. esfm() returns \(\hat\gamma = -0.57\) with slopes still near their true values.

Size of the LR test, 2000 replications against the paper's 100,000, on its design (\(\sigma_v = 1\), \(\gamma = 0\)):

\(n\)501002005001000
this package, 5%0.1780.0820.0540.0610.058
paper, 5%0.1520.0760.0610.0540.053

The test is badly oversized below \(n = 100\) and usable from \(n = 200\), which is the paper's own conclusion.

Efficiency bias, and a caveat. The paper reports smaller bias in mean efficiency than the classical model even when the population skewness has the correct sign. That reproduces when inefficiency is not small: at \(\gamma = 0.5\), \(\sigma_v = 0.25\) the bias in \(E[\exp(-U)]\) is -0.0001 at \(n = 100\) against the classical model's +0.021. But at \(\gamma = 0.3\), where 22% of samples are wrongly skewed, this model overshoots the other way: bias -0.040 against the classical +0.036, and it is the larger of the two at \(n = 50\) (-0.080 against +0.044). A small true \(\gamma\) lets the extended model fit sizeable inefficiency of either sign to noise. It is the better choice when the wrong skewness is the problem, not a free improvement everywhere.

References

Hafner, C. M., Manner, H. and Simar, L. (2018). The “wrong skewness” problem in stochastic frontier models: A new approach. Econometric Reviews 37(4), 380--400.

Almanidis, P., Qian, J. and Sickles, R. C. (2014). Stochastic frontier models with bounded inefficiency. In Festschrift in Honor of Peter Schmidt.

See Also

skewness_test, inefficiency_test, sfm

Examples

Run this code
set.seed(3)
n <- 200
lx1 <- rnorm(n, 1.5, 0.3); lx2 <- rnorm(n, 1.8, 0.3)
y <- 0.9 + 0.6 * lx1 + 0.5 * lx2 + rnorm(n, 0, 0.25) - abs(rnorm(n, 0, 0.5))
d <- data.frame(y, lx1, lx2)

f <- esfm(y ~ lx1 + lx2, data = d)
f
symmetry_test(f)

Run the code above in your browser using DataLab