Lorenz Curve
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.
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, ...)
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. |
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).
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 |
These functions were previously published as Lc()
in the ineq package and have been
integrated here without logical changes.
Achim Zeileis <Achim.Zeileis@R-project.org>, extensions Andri Signorell <andri@signorell.net>
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.
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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.