Lc {DescTools} | R Documentation |
Lorenz Curve
Description
Lc computes the (empirical) ordinary and generalized Lorenz curve of a vector x. Desc calculates some key figures for a Lorenz curve and produces a quick description.
Usage
Lc(x, ...)
## Default S3 method:
Lc(x, n = rep(1, length(x)), na.rm = FALSE, ...)
## S3 method for class 'formula'
Lc(formula, data, subset, na.action, ...)
## S3 method for class 'Lc'
plot(x, general = FALSE, lwd = 2, type = "l", xlab = "p", ylab = "L(p)",
main = "Lorenz curve", las = 1, pch = NA, ...)
## S3 method for class 'Lclist'
plot(x, col = 1, lwd = 2, lty = 1, main = "Lorenz curve",
xlab = "p", ylab = "L(p)", ...)
## S3 method for class 'Lc'
lines(x, general = FALSE, lwd = 2, conf.level = NA, args.cband = NULL, ...)
## S3 method for class 'Lc'
predict(object, newdata, conf.level=NA, general=FALSE, n=1000, ...)
Arguments
x |
a vector containing non-negative elements, or a Lc-object for plot and lines. |
n |
a vector of frequencies, must be same length as |
na.rm |
logical. Should missing values be removed? Defaults to FALSE. |
general |
logical. If |
col |
color of the curve |
lwd |
the linewidth of the curve |
lty |
the linetype of the curve |
type |
type of the plot, default is line ( |
xlab , ylab |
label of the x-, resp. y-axis. |
pch |
the point character (default is |
main |
main title of the plot. |
las |
las of the axis. |
formula |
a formula of the form |
data |
an optional matrix or data frame (or similar: see |
subset |
an optional vector specifying a subset of observations to be used. |
na.action |
a function which indicates what should happen when the data contain NAs. Defaults to |
conf.level |
confidence level for the bootstrap confidence interval. Set this to |
args.cband |
list of arguments for the confidence band, such as color or border (see |
object |
object of class inheriting from "Lc" |
newdata |
an optional vector of percentages p for which to predict. If omitted, the original values of the object are used. |
... |
further argument to be passed to methods. |
Details
Lc(x)
computes the empirical ordinary Lorenz curve of x
as well as the generalized Lorenz curve (= ordinary Lorenz curve *
mean(x)). The result can be interpreted like this: p
*100 percent
have L(p)
*100 percent of x
.
If n
is changed to anything but the default x
is
interpreted as a vector of class means and n
as a vector of
class frequencies: in this case Lc
will compute the minimal
Lorenz curve (= no inequality within each group).
Value
A list of class "Lc"
with the following components:
p |
vector of percentages |
L |
vector with values of the ordinary Lorenz curve |
L.general |
vector with values of the generalized Lorenz curve |
x |
the original x values (needed for computing confidence intervals) |
n |
the original n values |
Note
These functions were previously published as Lc()
in the ineq package and have been
integrated here without logical changes.
Author(s)
Achim Zeileis <Achim.Zeileis@R-project.org>, extensions Andri Signorell <andri@signorell.net>
References
Arnold, B. C. (1987) Majorization and the Lorenz Order: A Brief Introduction, Springer
Cowell, F. A. (2000) Measurement of Inequality in Atkinson, A. B. / Bourguignon, F. (Eds): Handbook of Income Distribution. Amsterdam.
Cowell, F. A. (1995) Measuring Inequality Harvester Wheatshef: Prentice Hall.
See Also
The original location Lc()
,
inequality measures Gini()
, Atkinson()
Examples
priceCarpenter <- d.pizza$price[d.pizza$driver=="Carpenter"]
priceMiller <- d.pizza$price[d.pizza$driver=="Miller"]
# compute the Lorenz curves
Lc.p <- Lc(priceCarpenter, na.rm=TRUE)
Lc.u <- Lc(priceMiller, na.rm=TRUE)
plot(Lc.p)
lines(Lc.u, col=2)
# the picture becomes even clearer with generalized Lorenz curves
plot(Lc.p, general=TRUE)
lines(Lc.u, general=TRUE, col=2)
# inequality measures emphasize these results, e.g. Atkinson's measure
Atkinson(priceCarpenter, na.rm=TRUE)
Atkinson(priceMiller, na.rm=TRUE)
# income distribution of the USA in 1968 (in 10 classes)
# x vector of class means, n vector of class frequencies
x <- c(541, 1463, 2445, 3438, 4437, 5401, 6392, 8304, 11904, 22261)
n <- c(482, 825, 722, 690, 661, 760, 745, 2140, 1911, 1024)
# compute minimal Lorenz curve (= no inequality in each group)
Lc.min <- Lc(x, n=n)
plot(Lc.min)
# input of frequency tables with midpoints of classes
fl <- c(2.5,7.5,15,35,75,150) # midpoints
n <- c(25,13,10,5,5,2) # frequencies
plot(Lc(fl, n), # Lorenz-Curve
panel.first=grid(10, 10),
main="Lorenzcurve Farmers",
xlab="Percent farmers (cumulative)",
ylab="Percent of area (%)"
)
# add confidence band
lines(Lc(fl, n), conf.level=0.95,
args.cband=list(col=SetAlpha(DescToolsOptions("col")[2], 0.3)))
Gini(fl, n)
# find specific function values using predict
x <- c(1,1,4)
lx <- Lc(x)
plot(lx)
# get interpolated function value at p=0.55
y0 <- predict(lx, newdata=0.55)
abline(v=0.55, h=y0$L, lty="dotted")
# and for the inverse question use approx
y0 <- approx(x=lx$L, y=lx$p, xout=0.6)
abline(h=0.6, v=y0$y, col="red")
text(x=0.1, y=0.65, label=expression(L^{-1}*(0.6) == 0.8), col="red")
text(x=0.65, y=0.2, label=expression(L(0.55) == 0.275))
# input of frequency tables with midpoints of classes
fl <- c(2.5,7.5,15,35,75,150) # midpoints
n <- c(25,13,10,5,5,2) # frequencies
# the formula interface for Lc
lst <- Lc(count ~ cut(price, breaks=5), data=d.pizza)
plot(lst, col=1:length(lst), panel.first=grid(), lwd=2)
legend(x="topleft", legend=names(lst), fill=1:length(lst))
# Describe with Desc-function
lx <- Lc(fl, n)
Desc(lx)