Learn R Programming

productivity (version 0.2.0)

malm: Malmquist productivity indices and components

Description

This function computes Malmquist productivity indices.

When required, indices and their various components are also returned.

Usage

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)

Arguments

data

A dataframe containing the required information for productivity assessment.

id.var

Number or text string which is the identifier variable of the evaluated firms.

time.var

Number or text string which represents the time period variable.

x.vars

Input quantity variables. Can be a vector of text strings or integers.

y.vars

Output quantity variables. Can be a vector of text strings or integers.

tech.reg

Logical. If TRUE (default), the model allows for negative technological change (i.e. technological regress). See also the Details section.

rts

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).

orientation

Character string specifying the orientation to be considered. The default value is "out" (output orientation). The other possible option is "in" (input orientation).

cores

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.

scaled

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.

indices

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.

out.levels

A connection, or a character string naming the output file to write distance function values required for the Malmquist productivity index to, in a CSV format (See write.csv). If it does not contain an absolute path, the file name is relative to the current working directory, getwd().

out.indices

A connection, or a character string naming the output file to write productivity indices to, in a CSV format (See write.csv). If it does not contain an absolute path, the file name is relative to the current working directory, getwd().

Value

malm() returns a list of class "Malmquist". When indices = TRUE, this list contains the following dataframes:

Levels

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.

Indices

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:

  1. obtech (Output-biased technological change), ibtech (Input-biased technological change), and matech (Magnitude component) are components of technological change (tech).

  2. 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".

  3. 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".

Warning

The malm() function does not work with unbalanced panel data, so the user should make sure to provide a balanced panel.

Details

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.

References

F<U+00E4>re R., and Grosskopf S. (1996), Intertemporal Production Frontiers: With Dynamic DEA. Springer Eds.

Examples

Run this code
# 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