This function computes Malmquist productivity indices.
When required, indices and their various components are also returned.
malm(data, id.var, time.var, x.vars, y.vars, tech.reg = TRUE,
rts = c("vrs", "crs", "nirs", "ndrs"), orientation = c("out", "in"),
cores = detectCores() - 1, scaled = TRUE, indices = FALSE, out.levels = NULL,
out.indices = NULL)
A dataframe containing the required information for productivity assessment.
Number or text string which is the identifier variable of the evaluated firms.
Number or text string which represents the time period variable.
Input quantity variables. Can be a vector of text strings or integers.
Output quantity variables. Can be a vector of text strings or integers.
Logical. If TRUE
(default), the model allows for negative technological change (i.e. technological regress).
See also the Details
section.
Character string specifying the returns to scale assumption to be considered.
The default value is "vrs"
(variable returns to scale). Other possible options
are "crs"
(constant returns to scale), "nirs"
(non-increasing returns to scale),
or "ndrs"
(non-decreasing returns to scale).
Character string specifying the orientation to be considered.
The default value is "out"
(output orientation). The other possible option is
"in"
(input orientation).
Integer. Specifies the number of cores to be used for parallel computing. By default,
cores is set to the total number of CPU cores available from the machine, minus one.
It is automatically set to one in cases where the machine is made of one core only.
However, when the sample size is small it is recommended to set cores
to one.
Logical. When set to TRUE
(Default), the input and output quantities are rescaled,
so that they all have unit means. See also the Details
section.
Logical. If TRUE
, malm()
returns, in addition to the
levels, indices that reflect changes in a measure. Default is FALSE
.
See also the Details
section.
malm()
returns a list of class "Malmquist"
.
When indices = TRUE
, this list contains the following dataframes:
It contains the Shephard distance function estimates, useful to compute and decompose
the Malmquist productivity index. These distance functions use input and output quantities
for period 1
and period 0
.
The prefix "c" stands for constant returns to scale ("crs"
) and "v" for all the other types of returns to scale.
The suffix "o" means output-oriented while "i" refers to input-oriented.
The distance function names are displayed with three digits:
(i) the first digit represents the period of the reference technology, (ii) the second
digit represents the period of the inputs, and (iii) the third digit represents the period of the outputs.
For instance c010o
means output-oriented efficiency under constant returns to scale (CRS),
with the reference technology of period 0
, inputs of period 1
and outputs of period 0
.
In addition to the id.var
variable and periods 1
and 0
, the dataframe
therefore contains, depending on the chosen orientation set through orientation
:
c111o
, c100o
, c011o
, c000o
, c110o
, c010o
,
c111i
, c100i
, c011i
, c000i
, c110i
, and c010i
.
When the returns to scale option (rts
) is different from "crs"
, then v111o
,
v000o
, v111i
and v000i
are also provided depending on the orientation.
Only provided if indices = TRUE
. This dataframe contains Malmquist
productivity change indices and their various components depending on the chosen orientation set through orientation
.
In addition to the id.var
variable and periods 1
and 0
,
the dataframe also contains, depending on the orientation:
malmquist |
Malmquist productivity index |
effch |
Efficiency change |
tech |
Technological change |
obtech |
Output-biased technological change |
ibtech |
Input-biased technological change |
matech |
Magnitude component |
pure.out.effch |
Pure output efficiency change |
out.scalech |
Output scale efficiency change |
pure.inp.effch |
Pure input efficiency change |
Note that:
obtech
(Output-biased technological change), ibtech
(Input-biased technological change),
and matech
(Magnitude component) are components of technological change (tech
).
pure.out.effch
(Pure output efficiency change), out.scalech
(Output scale efficiency change)
are components of efficiency change (effch
), when rts != "crs"
and orientation = "out"
.
pure.inp.effch
(Pure input efficiency change), and inp.scalech
(Input scale efficiency change)
are components of efficiency change (effch
), when rts != "crs"
and orientation = "in"
.
The malm()
function does not work with unbalanced
panel data, so the user should make sure to provide a balanced panel.
The function malm()
computes distance function values and Malmquist indices using a parallel
backend (doParallel and foreach packages).
The cores
option can be used to specify the number of cores to use for the
parallel computing. However, when the sample size is small, we recommend to set
cores
to one.
All DEA linear programs are implemented using the package Rglpk.
The tech.reg
option, when set to FALSE
, rules out technological regression.
Therefore, the technological change will increment between consecutive periods.
The scaled
option is useful when working with very large and/or very small values.
By default this option value is TRUE
. When scaled = FALSE
, malm()
may issue a
warning when large (small) values are present in the input and output quantity variables.
It is worth noting that all the distance functions required for the Malmquist index estimation
are radial measures which verify the translation invariance property. Hence, unless very large or
very small values are present, the Malmquist index is insensitive to the rescaling option.
When indices
is set to TRUE
malm()
returns a list of two dataframes:
the first one contains the distance functions useful to estimate the Malmquist indices and
components, while the second one is the Malmquist productivity indices and their decomposition.
By default malm()
returns a list with a single dataframe of intermediate distance
function values. For the indices, each observation in period t
is compared to
itself in period t-1
.
F<U+00E4>re R., and Grosskopf S. (1996), Intertemporal Production Frontiers: With Dynamic DEA. Springer Eds.
# NOT RUN {
# productivity computations
# indices compare each observation in period 1
# to the same observation in period 0
# }
# NOT RUN {
Malmquist <- malm(data = usagri, id.var = "States", time.var = "Years",
x.vars = c("q.capital", "q.land","q.labor","q.materials"),
y.vars = c("q.livestock", "q.crop", "q.other"), rts = "nirs", indices = TRUE)
summary(Malmquist[["Levels"]])
summary(Malmquist[["Indices"]])
# }
Run the code above in your browser using DataLab